/*++

Copyright (C) Microsoft Corporation, 1996 - 1999
All rights reserved.

Module Name:

    prtprops.hxx

Abstract:

    Printer Property sheet header.

Author:

    Steve Kiraly (SteveKi)  02-Feb-1996

Revision History:

--*/
#ifndef _PRTPROPS_HXX
#define _PRTPROPS_HXX

//
// HACK: private export from winspool.drv.
//
extern "C" {
LONG_PTR
DevicePropertySheets(
    PPROPSHEETUI_INFO   pPSUIInfo,
    LPARAM              lParam
    );
}

//
// HACK: private export from shell32.dll
//
extern "C" {
VOID
Printer_AddPrinterPropPages(
    LPCTSTR,
    LPPROPSHEETHEADER
    );
}

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

    Shell extenstion pages.

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

class TShellExtPages {

    SIGNATURE( 'shex' )
    SAFE_NEW
    ALWAYS_VALID

public:

    TShellExtPages::
    TShellExtPages(
        VOID
        );

    TShellExtPages::
    ~TShellExtPages(
        VOID
        );

    BOOL
    TShellExtPages::
    bCreate(
        IN PPROPSHEETUI_INFO pCPSUIInfo,
        IN const TString &strPrinterName
        );

    VOID
    TShellExtPages::
    vDestroy(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    HANDLE
    TShellExtPages::
    hPropSheet(
        VOID
        ) const;

    BOOL
    TShellExtPages::
    bCreatePropSheetHeader(
        IN LPPROPSHEETHEADER *pPropSheetHeader
        );

    VOID
    TShellExtPages::
    vDestroyPropSheetHeader(
        IN LPPROPSHEETHEADER pPropSheetHeader
        );

private:

    BOOL
    TShellExtPages::
    bCreatePages(
        IN PPROPSHEETUI_INFO pCPSUIInfo,
        IN LPPROPSHEETHEADER pPropSheetHeader
        );

    VOID
    TShellExtPages::
    vDestroyPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    //
    // Prevent copying.
    //
    TShellExtPages::
    TShellExtPages(
        const TShellExtPages &
        );
    //
    // Prevent assignment.
    //
    TShellExtPages &
    TShellExtPages::
    operator =(
        const TShellExtPages &
        );

private:

    LONG_PTR    _hGroupHandle;  // Handle to group of shell extension property pages

};

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

    Printer Property Sheet Manager

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

class TPrinterPropertySheetManager : public TPropertySheetManager {

    SIGNATURE( 'psmg' )
    SAFE_NEW

public:

    TPrinterPropertySheetManager::
    TPrinterPropertySheetManager(
        IN TPrinterData* pPrinterData
        );

    TPrinterPropertySheetManager::
    ~TPrinterPropertySheetManager(
        );

    BOOL
    TPrinterPropertySheetManager::
    bValid(
        VOID
        );

    BOOL
    TPrinterPropertySheetManager::
    bRefreshDriverPages(
        VOID
        );

    BOOL
    TPrinterPropertySheetManager::
    bCreateTitle(
        VOID
        );

    VOID
    TPrinterPropertySheetManager::
    vRefreshTitle(
        VOID
        );

    BOOL
    TPrinterPropertySheetManager::
    bDisplayPages(
        VOID
        );

    BOOL
    TPrinterPropertySheetManager::
    bGetDriverPageHandle(
        IN HPROPSHEETPAGE *phPage
        );

    BOOL
    TPrinterPropertySheetManager::
    bGetDriverPageHandles(
        IN  PPROPSHEETUI_INFO   pCPSUIInfo,
            OUT DWORD          *pcPages,
            OUT HPROPSHEETPAGE **pphPage
        );

    VOID
    TPrinterPropertySheetManager::
    vSetParentHandle(
        IN HWND hwndParent
        );

    HWND
    TPrinterPropertySheetManager::
    hGetParentHandle(
        VOID
        ) const;
private:

    enum 
    { 
        kMaxGroups = 3,
    };

    virtual
    BOOL
    TPrinterPropertySheetManager::
    bBuildPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    virtual
    BOOL
    TPrinterPropertySheetManager::
    bDestroyPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    virtual
    BOOL
    TPrinterPropertySheetManager::
    bSetHeader(
        IN PPROPSHEETUI_INFO pCPSUIInfo,
        IN PPROPSHEETUI_INFO_HEADER pPSUInfoHeader
        );

    BOOL
    TPrinterPropertySheetManager::
    bBuildDriverPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    BOOL
    TPrinterPropertySheetManager::
    bCheckToBuildDriverPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    VOID
    TPrinterPropertySheetManager::
    vReleaseDriverPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    BOOL
    TPrinterPropertySheetManager::
    bBuildSpoolerPages(
        IN PPROPSHEETUI_INFO pCPSUIInfo
        );

    BOOL
    TPrinterPropertySheetManager::
    bInstallDriverPage(
        VOID
        );

    BOOL
    TPrinterPropertySheetManager::
    bDisplaySecurityTab(
        IN HWND hwnd
        );

    //
    // Prevent copying.
    //
    TPrinterPropertySheetManager::
    TPrinterPropertySheetManager(
        const TPrinterPropertySheetManager &
        );
    //
    // Prevent assignment.
    //
    TPrinterPropertySheetManager &
    TPrinterPropertySheetManager::
    operator =(
        const TPrinterPropertySheetManager &
        );

private:

    BOOL                    _bValid;
    LONG_PTR                _hDrvPropSheet;
    DEVICEPROPERTYHEADER    _dph;
    TPrinterData           *_pPrinterData;

    TPrinterGeneral         _General;
    TPrinterPorts           _Ports;
    TPrinterJobScheduling   _JobScheduling;
    TPrinterSharing         _Sharing;
    TShellExtPages          _ShellExtPages;
    TString                 _strTitle;
    HWND                    _hwndParent;
};

#endif // _PRTPROPS_HXX