/*******************************************************************************
*
*  (C) COPYRIGHT MICROSOFT CORP., 1996
*
*  TITLE:       POWERCFG.H
*
*  VERSION:     2.0
*
*  AUTHOR:      ReedB
*
*  DATE:        17 Oct, 1996
*
*******************************************************************************/

#include "powrprofp.h"
#include "batmeter.h"

// String constants and macros:
#define MAX_UI_STR_LEN          256
#define MAX_FRIENDLY_NAME_LEN   32      // Resource layout depends on this.
#define FREE_STR                TRUE
#define NO_FREE_STR             FALSE

#define PWRMANHLP TEXT("PWRMN.HLP")

// Policy settings

#define POWER_POLICY_KEY        TEXT("Software\\Policies\\Microsoft\\Windows\\System\\Power")
#define LOCK_ON_RESUME          TEXT("PromptPasswordOnResume")

// Hard limits, many are overridden by machine capabilities
// or registry settings:
#define MAX_VIDEO_TIMEOUT      300
#define MAX_SPINDOWN_TIMEOUT   300

#define ARRAYSIZE(a)    (sizeof(a)/sizeof((a)[0]))


/*******************************************************************************
*
*  Structures and constants to manage property pages in the applet.
*
*******************************************************************************/

#define MAX_PAGES      16+2         // Max number pages + caption & sentinal.
#define START_OF_PAGES 1            // Index to the property sheet pages.
#define CAPTION_INDEX  0            // Index to the overall caption.

typedef struct _POWER_PAGES
{
    LPCTSTR         pDlgTemplate;
    DLGPROC         pfnDlgProc;
    HPROPSHEETPAGE  hPropSheetPage;
} POWER_PAGES, *PPOWER_PAGES;

/*******************************************************************************
*
*  Structures and constants which manage dialog control information.
*
*******************************************************************************/

// Constants for MapXXXIndex functions:
#define VALUE_TO_INDEX TRUE
#define INDEX_TO_VALUE FALSE

// Constants used by SetControls in GETSET.C:
#define CONTROL_DISABLE     0
#define CONTROL_HIDE        1
#define CONTROL_ENABLE      2

// Proto for MapXXXIndex functions
typedef BOOL (*MAPFUNC)(LPVOID, PUINT, BOOL);

// Structure to manage the spin control data:
typedef struct _SPIN_DATA
{
    UINT    uiSpinId;
    PUINT   puiRange;
} SPIN_DATA, *PSPIN_DATA;

// Structure to manage the dialog controls specification:
typedef struct _POWER_CONTROLS
{
    UINT    uiID;
    UINT    uiType;
    LPVOID  lpvData;
    DWORD   dwSize;
    LPDWORD lpdwParam;
    LPDWORD lpdwState;

} POWER_CONTROLS, *PPOWER_CONTROLS;

// Dialog control constants:
#define CHECK_BOX               0
#define CHECK_BOX_ENABLE        1
#define SLIDER                  2
#define EDIT_UINT               3
#define EDIT_TEXT               6
#define EDIT_TEXT_RO            7
#define COMBO_BOX               8
#define PUSHBUTTON              9
#define STATIC_TEXT             10
#define GROUPBOX_TEXT           11

/*******************************************************************************
*
*                 P u b l i c   P r o t o t y p e s
*
*******************************************************************************/

// Public functions implemented in ALARM.C
INT_PTR CALLBACK AlarmDlgProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK AlarmActionsDlgProc(HWND, UINT, WPARAM, LPARAM);

// Public functions implemented in BATMTRCF.C
INT_PTR CALLBACK BatMeterCfgDlgProc(HWND, UINT, WPARAM, LPARAM);

// Public functions implemented in APM.C
INT_PTR CALLBACK APMDlgProc(HWND, UINT, WPARAM, LPARAM);
BOOLEAN IsNtApmPresent(PSYSTEM_POWER_CAPABILITIES);

// Public functions implemented in ups.lib
INT_PTR CALLBACK UPSMainPageProc(HWND, UINT, WPARAM, LPARAM);
BOOLEAN IsUpsPresent(PSYSTEM_POWER_CAPABILITIES);

// Public functions implemented in GETSET.C
DWORD SelToFromPowerAction(HWND, UINT, LPVOID, LPARAM, BOOL);
DWORD PowerActionToStatus(HWND, UINT, LPVOID, LPARAM, BOOL);
VOID  DisableControls(HWND, UINT, PPOWER_CONTROLS);
VOID  HideControls(HWND, UINT, PPOWER_CONTROLS);
BOOL  SetControls(HWND, UINT, PPOWER_CONTROLS);
BOOL  GetControls(HWND, UINT, PPOWER_CONTROLS);
VOID  RangeLimitIDarray(PUINT, UINT, UINT);

// Public functions implemented in HIBERNAT.C:
void DoHibernateApply(void);
INT_PTR CALLBACK HibernateDlgProc(HWND, UINT, WPARAM, LPARAM);
BOOL MapPwrAct(PPOWER_ACTION, BOOL);

// Public functions implemented in POWERCFG.C:
LPTSTR CDECL   LoadDynamicString(UINT StringID, ... );
LPTSTR         DisplayFreeStr(HWND, UINT, LPTSTR, BOOL);
BOOLEAN        ValidateUISchemeFields(PPOWER_POLICY);
BOOLEAN        GetGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
BOOLEAN        WritePwrSchemeReport(HWND, PUINT, LPTSTR, LPTSTR, PPOWER_POLICY);
BOOLEAN        WriteGlobalPwrPolicyReport(HWND, PGLOBAL_POWER_POLICY, BOOL);
BOOLEAN        SetActivePwrSchemeReport(HWND, UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
int            ErrorMsgBox(HWND, DWORD, UINT);
BOOL           InitCapabilities(PSYSTEM_POWER_CAPABILITIES);

// Public functions implemented in PRSHTHLP.C:
BOOL AppendPropSheetPage(PPOWER_PAGES, UINT, DLGPROC);
UINT GetNumPropSheetPages(PPOWER_PAGES);
BOOL CALLBACK _AddPowerPropSheetPage(HPROPSHEETPAGE hpage, LPARAM lParam);
BOOL PASCAL DoPropSheetPages(HWND, PPOWER_PAGES, LPTSTR);
VOID MarkSheetDirty(HWND, PBOOL);

// Public functions implemented in PWRSCHEM.C
VOID InitSchemesList(VOID);
INT_PTR CALLBACK PowerSchemeDlgProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK AdvPowerSchemeDlgProc(HWND, UINT, WPARAM, LPARAM);

// Public functions implemented in PWRSWTCH.C
INT_PTR CALLBACK AdvancedDlgProc(HWND, UINT, WPARAM, LPARAM);


