/*+

Copyright (c) 1996  Microsoft Corporation
All rights reserved.

Module Name:

    portslv.hxx

Abstract:

    Ports List View header

Author:

    Albert Ting (AlbertT)  17-Aug-1995
    Steve Kiraly (SteveKi) 29-Mar-1996

Revision History:

--*/

#ifndef _PORTLV_HXX
#define _PORTLV_HXX

/********************************************************************

    Ports list view control.

********************************************************************/

class TPortsLV {

    SIGNATURE( 'ptlv' )
    SAFE_NEW
    ALWAYS_VALID

public:

    enum _CONSTANTS {

        //
        // Listview and column header fromat
        //
        kListViewSBWidth        = 16,
        kPortHeaderTitleMax     = 80,
        kPortHeaderMax          = 3,
        kPortHeaderWidthDefault = 125,
        kEnumPortsHint          = 256 * 10,

        //
        // Listview item states.  Bit 12-15 hold the image state.
        //
        kStateUnchecked =  1 << 12,
        kStateChecked   =  2 << 12,
        kStateMask      = kStateChecked | kStateUnchecked | LVIS_STATEIMAGEMASK,

        //
        // Max port string,
        //
        kPortNameMax = MAX_PATH,

        //
        // Max ports list.
        //
        kPortListMax = kPortNameMax * 16
    };

    TPortsLV::
    TPortsLV(
        VOID
        );

    TPortsLV::
    ~TPortsLV(
        VOID
        );

    BOOL
    bSetUI(
        HWND hwndLV
        );

    BOOL
    bReadUI(
        TString *pstrPortString
        );

    BOOL
    bReloadPorts(
        IN LPCTSTR pszServerName,
        IN BOOL bSelect = FALSE
        );

    VOID
    vCheckPorts(
        LPTSTR strPortString
        );

    COUNT
    cSelectedPorts(
        VOID
        );

    BOOL
    bGetSelectedPort(
        LPTSTR pszPort,
        COUNT cchPort
        );

    BOOL
    bHandleNotifyMessage(
        LPARAM lParam
        );

    VOID
    vSelectItem(
        INT iItem
        );

    VOID
    vDeletePort(
        HWND hDlg,
        LPCTSTR pszServerName
        );

    BOOL
    bSetSelection(
        BOOL bSelectionState
        );

    VOID
    vSetFocus(
        VOID
        );

    VOID
    vGetPortList(
            OUT LPTSTR pszPortList,
        IN      COUNT cchSpaceLeft
        );

    VOID
    vSetSingleSelection(
        IN BOOL bSingleSelection
        );

    BOOL
    bGetSingleSelection(
        VOID
        );

    VOID
    vRemoveAllChecks(
        VOID
        );

private:

    COUNT _cLVPorts;
    HWND _hwndLV;
    BOOL _bSelectionState;
    BOOL _bSingleSelection;

    VOID
    vAddPortToListView(
        IN LPCTSTR pszName,
        IN LPCTSTR pszDescription,
        IN LPCTSTR pszPrinters
        );

    VOID
    vDeletePortFromListView(
        LPCTSTR pszName
        );

    INT
    iFindPort(
        IN LPCTSTR pszPort
        );

    INT
    iCheckPort(
        LPCTSTR pszPort
        );

    INT
    iSelectPort(
        IN LPCTSTR pszPort
        );

    BOOL
    bLocateAddedPort(
        IN OUT TString &strPort,
        IN PPORT_INFO_2 pPorts, 
        IN DWORD        cPorts, 
        IN DWORD        dwLevel 
        );

    VOID
    vItemClicked(
        INT iItem
        );

    INT
    iGetPorts(
        VOID
        );

    VOID
    vPrintersUsingPort( 
        IN OUT  TString         &strPrinters,
        IN      PRINTER_INFO_2  *pPrinterInfo, 
        IN      DWORD           cPrinterInfo, 
        IN      LPCTSTR         pszPortName 
        );


};


#endif