/*++

Copyright (C) Microsoft Corporation, 1995 - 1998
All rights reserved.

Module Name:

    forms.hxx

Abstract:

    Printer Forms       
         
Author:

    Steve Kiraly (SteveKi)  11/20/95
    Lazar Ivanov (LazarI)   Jun-2000 (major changes)

Revision History:

--*/
#ifndef _FORMS_HXX
#define _FORMS_HXX

#define HANDLE_FIXED_NEW_HANDLE_RETURNED                0
#define HANDLE_NEEDS_FIXING_NO_PRINTERS_FOUND           1
#define HANDLE_FIX_NOT_NEEDED                           2
#define HANDLE_FIXED_NEW_HANDLE_RETURNED_ACCESS_CHANGED 3

#define FORMS_NAME_MAX       (CCHFORMNAME-1)
#define FORMS_PARAM_MAX      32
#define MAX_INPUT_CONTROLS   6
#define CCH_MAX_UNITS        16

#define SETUNITS( hwnd, fMetric )                                               \
        CheckRadioButton( hwnd, IDD_FM_RB_METRIC, IDD_FM_RB_ENGLISH,                \
                      ( (fMetric) ? IDD_FM_RB_METRIC : IDD_FM_RB_ENGLISH ) )

#define GETUNITS( hwnd ) \
        IsDlgButtonChecked( hwnd, IDD_FM_RB_METRIC )


typedef struct _FORMS_DLG_DATA 
{
    DWORD        AccessGranted;
    LPTSTR       pServerName;
    HANDLE       hPrinter;
    PFORM_INFO_1 pFormInfo;
    DWORD        cForms;
    BOOL         Units;                     // TRUE == metric 
    BOOL         bNeedClose;
    LPCTSTR      pszComputerName;
    UINT         uMetricMeasurement;
    TCHAR        szDecimalPoint[2];

    // use this when in prop sheet to know when to 
    // convert "Cancel" to "Close" and when to hold 
    // closing the property sheet in case of an error.
    BOOL         bFormChanged;
    DWORD        dwLastError;

} FORMS_DLG_DATA, *PFORMS_DLG_DATA;


BOOL 
FormsInitDialog(
    HWND hwnd, 
    PFORMS_DLG_DATA pFormsDlgData
    );

BOOL 
FormsCommandOK(
    HWND hwnd
    );

BOOL 
FormsCommandCancel(
    HWND hwnd
    );

BOOL 
FormsCommandAddForm(
    HWND hwnd
    );

BOOL 
FormsCommandDelForm(
    HWND hwnd
    );

BOOL 
FormsCommandFormsSelChange(
    HWND hwnd
    );

BOOL 
FormsCommandUnits(
    HWND hwnd
    );

VOID 
InitializeFormsData( 
    HWND hwnd, 
    PFORMS_DLG_DATA 
    pFormsDlgData, 
    BOOL ResetList 
    );

LPFORM_INFO_1 
GetFormsList( 
    HANDLE hPrinter, 
    PDWORD pNumberOfForms 
    );

INT _cdecl 
CompareFormNames( 
    const VOID *p1, 
    const VOID *p2 );

VOID 
SetFormsComputerName( 
    HWND hwnd, 
    PFORMS_DLG_DATA pFormsDlgData 
    );

VOID 
SetFormDescription( 
    HWND hwnd, 
    LPFORM_INFO_1 pFormInfo, 
    BOOL Metric 
    );

BOOL 
GetFormDescription( 
    IN  HWND            hwnd, 
    OUT LPFORM_INFO_1   pFormInfo,
    IN  BOOL            bDefaultMetric,
    OUT PUINT           puIDFailed
    );

INT 
GetFormIndex( 
    LPTSTR pFormName, 
    LPFORM_INFO_1 pFormInfo, 
    DWORD cForms );

LPTSTR 
GetFormName( 
    HWND hwnd 
    );

BOOL 
SetValue( 
    HWND hwnd, 
    DWORD uID, 
    LONG lValueInPoint001mm, 
    BOOL bMetric 
    );

BOOL 
GetValue(
    HWND hwnd, 
    DWORD uID, 
    LONG lCurrentValueInPoint001mm, 
    BOOL bDefaultMetric, 
    PLONG plValueInPoint001mm
    );

VOID 
SetDlgItemTextFromResID(
    HWND hwnd, 
    INT idCtl, 
    INT idRes
    );

VOID 
EnableDialogFields( 
    HWND hwnd, 
    PFORMS_DLG_DATA pFormsDlgData 
    );

LPTSTR 
AllocStr(
    LPCTSTR  pszStr
    );

VOID 
FreeStr(
    LPTSTR pszStr 
    );

LONG FrameCommandForms( 
    IN HWND hWnd,
    IN LPCTSTR pszServerName
    );

BOOL APIENTRY
FormsDlg(
   HWND   hwnd,
   UINT   msg,
   WPARAM wparam,
   LPARAM lparam
   );


PVOID
FormsInit(
    IN LPCTSTR  pszServerName,
    IN HANDLE   hPrintserver,
    IN BOOL     bAdministrator,
    IN LPCTSTR  pszComputerName
    );

VOID
FormsFini( 
    IN PVOID p
    );

BOOL
bEnumForms( 
    IN HANDLE   hPrinter,
    IN DWORD    dwLevel,
    IN PBYTE   *ppBuff,
    IN PDWORD   pcReturned
    );

BOOL 
FormsNewForms(
    IN HWND hWnd
    );

VOID
vFormsEnableEditFields(
    IN HWND hWnd,
    IN BOOL bState
    );

BOOL
FormsCommandNameChange(
    IN HWND     hWnd,
    IN WPARAM   wParam,
    IN LPARAM   lParam
    );

UINT
sFormsFixServerHandle( 
    IN HANDLE   hPrintServer,
    IN LPCTSTR  pszServerName,
    IN BOOL     bAdministrator,
    IN HANDLE   *phPrinter
    );

BOOL 
String2Value(
    IN  PFORMS_DLG_DATA     pFormsDlgData,
    IN  LPCTSTR             pszValue,
    IN  BOOL                bDefaultMetric,
    IN  LONG                lCurrentValueInPoint001mm,
    OUT PLONG               plValueInPoint001mm
    );

BOOL 
Value2String(
    IN  PFORMS_DLG_DATA     pFormsDlgData,
    IN  LONG                lValueInPoint001mm,
    IN  BOOL                bMetric,
    IN  BOOL                bAppendMetric,
    IN  UINT                cchMaxChars,
    OUT LPTSTR              szOutBuffer
    );

VOID 
FormChanged(
    IN OUT  PFORMS_DLG_DATA pFormsDlgData
    );

BOOL
Forms_IsThereCommitedChanges(
    IN PVOID pFormsData
    );

DWORD
Forms_GetLastError(
    IN PVOID pFormsData
    );

#endif