/* FROST.H

   Include file for Frosting project.

   Frosting: Master Theme Selector for Windows '95
   Copyright (c) 1994-1999 Microsoft Corporation.  All rights reserved.
*/

#ifdef DBG
 #define _DEBUG
 #define DEBUG
#endif

//-----------------------
//  D I A L O G   I D S
//-----------------------

// dialog box IDs
#define DLG_MAIN                 10
#define DLG_SAVE                 12
//#define DLG_ETC                  14
#define DLG_BPPCHOICE            20
#define DLGPROP_PTRS             30
#define DLGPROP_SNDS             32
#define DLGPROP_PICS             34


// Common control IDs
#define IDC_STATIC               -1

//
// PREVIEW DIALOG CONTROL IDS

// Theme groupbox        
#define DDL_THEME                100
#define PB_SAVE                  110
#define PB_DELETE                120
#define RECT_PREVIEW             130
#define RECT_FAKEWIN             140
#define RECT_ICONS               150
#define TEXT_VIEW                160

// Previews groupbox
#define PB_SCRSVR                200
#define PB_POINTERS              210

// Settings groupbox
#define CB_SCRSVR                300
#define CB_SOUND                 310
#define CB_PTRS                  320
#define CB_WALL                  330
#define CB_ICONS                 340
//#define CB_ICONSIZE              345
#define CB_COLORS                350
#define CB_FONTS                 360
#define CB_BORDERS               370
#define CB_SCHEDULE              380

// Control buttons    
#define PB_APPLY                 400

// FOR PREVIEW SAMPLE

// appearance preview menu
#define IDR_MENU	1
#define IDM_NORMAL	10
#define IDM_DISABLED	11
#define IDM_SELECTED	12


//
// SAVEAS DIALOG CONTROL IDS

#define EC_THEME                 500

//
// POINTERS/ETC DIALOG CONTROL IDS
#define PB_TEST                  600
#define PB_PLAY                  602
#define LB_PTRS                  610
#define LB_SNDS                  612
#define LB_PICS                  614
#define TXT_FILENAME             620

//
// Theme BPP choice dlg
#define RB_ALL                   700
#define RB_SOME                  701
#define RB_NONE                  702
#define CB_CUT_IT_OUT            730

//
// NT Task Scheduler Username/Password dialog
#define STR_PW_NOMATCH                  27
#define STR_PWTITLE                     28
#define DLG_PASSWORD                    101
#define EDIT_USER                       1000
#define EDIT_PW                         1001
#define EDIT_PWCONFIRM                  1002
#define STATIC_PW                       1003
#define STATIC_PWCONFIRM                1004
#define STATIC_USER                     1005
#define STATIC_PWDESC                   1006


//-----------------------
// S T R I N G   I D S
//-----------------------

// important constants for strings
#define MAX_STRLEN   80          // TRANSLATORS: English strs max 40
#define MAX_PATHLEN  MAX_PATH    // fullpathname/filename max
                                 // note windef.h has 260; 255 for file
                                 // note2 -- dschott changed from 255 to
                                 // MAX_PATH
#define MAX_MSGLEN   512         // TRANSLATORS: English strs max 256
                                 // MAX_MSGLEN must be at least 2xMAX_STRLEN
                                 // MAX_MSGLEN must be at least 2xMAX_PATHLEN

//
// Try to keep the general strings and low mem strings
// ids within the range of 0-15, one resource block at boot.

// WARNING -- STR_APPNAME is also defined in HTMLPREV.CPP
// general strings
#define STR_APPNAME              0
#define STR_CURSET               1
#define STR_PREVSET              2
#define STR_THMEXT               3
#define STR_FILETYPE             4
#define STR_THEMESUBDIR          5
#define STR_PREVIEWTITLE         6
#define STR_HELPFILE             7
#define STR_PREVIEWDLG           8
#define STR_OTHERTHM             9
#define STR_HELPFILE98           700
#define STR_JOB_NAME             701
#define STR_JOB_COMMENT          702

// low mem strings
#define STR_NOT_ENUF             10    // THIS LOWMEM STRING MUST COME FIRST
                                       // OTHER LOWMEM STRS MUST BE SQUENTIAL
#define STR_TO_RUN               11
#define STR_TO_SAVE              12
#define STR_TO_LIST              13
#define STR_TO_PREVIEW           14   
#define STR_TO_APPLY             15
#define NUM_NOMEM_STRS           6     // KEEP THIS UPDATED IF ADDING LOWMEM STRS
                                       // counts not enuf str + all the to strs

// error strings
#define STR_ERRBADTHEME          16    // theme file in list didn't pass verification
#define STR_ERRBADOPEN           17    // theme file in open didn't pass verification
#define STR_ERRCANTDEL           18    // problem deleting
#define STR_ERRAPPLY             19    // couldn't apply everything
#define STR_ERRCANTSAVE          20    // couldn't write theme to file
#define STR_ERRNEEDSPACE         21    // Not enough space on drive to apply theme
#define STR_ERRTSNOTRUN          22    // Task Scheduler is not running -- want to start?
#define STR_ERRTSNOTFOUND        23    // MSTASK.EXE could not be found
#define STR_ERRTSNOSTART         24    // Error starting Task Scheduler
#define STR_ERRTS                25    // Error accessing Task Scheduler
// WARNING STR_ERRHTML is also defined in HTMLPREV.CPP
#define STR_ERRHTML              26    // Error getting HTML wallpaper preview
#define STR_ERRNOUNICODE         29    // Error trying to run UNICODE binary on Win9x or NT ver not Win2000
#define STR_ERRTSNOTADMIN        30    // Error, can't turn on TS because not admin
#define STR_ERRBAD9XVER          31    // Error, trying to run on Win9x platform that is not Win98 or later

// misc strings
#define STR_CONFIRM_DEL          32
#define STR_SUGGEST              33
#define STR_SAVETITLE            34
#define STR_OPENTITLE            35
#define STR_PREVSETFILE          36
#define STR_FILEEXISTS           37    // file already exists text

#define STR_WHATSTHIS            43
                                       // icon preview label texts
#define STR_MYCOMPUTER           44    // ORDER AND CONTIGUITY MATTERS
#define STR_NETNHBD              45    // change with order of fsRoot in keys.h
#define STR_TRASH                46
#define STR_MYDOCS               47


// property sheet titles
#define STR_TITLE_ETC            48    // prop sheet title
#define STR_TITLE_PTRS           49    // tab titles
#define STR_TITLE_SNDS           50
#define STR_TITLE_PICS           51

// appearance strings for preview sample window
#define IDS_ACTIVE               52
#define IDS_INACTIVE             53
#define IDS_MINIMIZED	         54
#define IDS_ICONTITLE	         55
#define IDS_NORMAL               56
#define IDS_DISABLED             57
#define IDS_SELECTED             58
#define IDS_MSGBOX               59
#define IDS_BUTTONTEXT	         60
#define IDS_SMCAPTION	         61
#define IDS_WINDOWTEXT	         62
#define IDS_MSGBOXTEXT	         63

// strings for cursor dialog listbox
#define STR_CUR_ARROW            64
#define STR_CUR_HELP             65
#define STR_CUR_APPSTART         66
#define STR_CUR_WAIT             67
#define STR_CUR_NWPEN            68
#define STR_CUR_NO               69
#define STR_CUR_SIZENS           70
#define STR_CUR_SIZEWE           71
#define STR_CUR_CROSSHAIR        72
#define STR_CUR_IBEAM            73
#define STR_CUR_SIZENWSE         74
#define STR_CUR_SIZENESW         75
#define STR_CUR_SIZEALL          76
#define STR_CUR_UPARROW          77

// strings for sounds dialog listbox
#define STR_SND_DEF              80
#define STR_SND_GPF              81
#define STR_SND_MAX              82
#define STR_SND_MENUCMD          83
#define STR_SND_MENUPOP          84
#define STR_SND_MIN              85
#define STR_SND_OPEN             86
#define STR_SND_CLOSE            87
#define STR_SND_RESTDOWN         88
#define STR_SND_RESTUP           89
#define STR_SND_RINGIN           90
#define STR_SND_RINGOUT          91
#define STR_SND_SYSASTER         92
#define STR_SND_SYSDEF           93
#define STR_SND_SYSEXCL          94
#define STR_SND_SYSEXIT          95
#define STR_SND_SYSHAND          96
#define STR_SND_SYSQUEST         97
#define STR_SND_SYSSTART         98
#define STR_SND_TOSSTRASH        99
#define STR_SND_MAILBEEP        100

// strings for visuals dialog listbox
#define STR_PIC_WALL             106
#define STR_PIC_MYCOMP           107
#define STR_PIC_NETHOOD          108
#define STR_PIC_RECBINFULL       109
#define STR_PIC_RECBINEMPTY      110
#define STR_PIC_MYDOCS           111
#define STR_PIC_SCRSAV           112

//---------------------
// O T H E R   I D S 
//---------------------

#define FROST_ICON   40

#define PLAY_BITMAP  1
#define BMP_QUESTION 2

//------------------------------------------------
// Flags for IActiveDesktop::GetWallpaperOptions()
//           IActiveDesktop::SetWallpaperOptions()
//
// stolen from SHLOBJ.H
//------------------------------------------------
#define WPSTYLE_CENTER      0
#define WPSTYLE_TILE        1
#define WPSTYLE_STRETCH     2
#define WPSTYLE_MAX         3


//---------------------
// C O N S T A N T S
//---------------------
#define ICON_WIDTH   32    // change if you change icon to dif size!
#define ICON_HEIGHT  32

#define APPLY_ALL    1     // for low color apply filter flag
#define APPLY_SOME   2
#define APPLY_NONE   3

//SYNCHRONIZATION ALERT -- dependent on values in ADDON.H
#define HELP_PLUS98  2028  // Help topics with this ID or greater are
                           // found in PLUS!98.HLP.


//------------------------------------
// O T H E R  U S E F U L  S T U F F
//------------------------------------
#define ARRAYSIZE(x)       (sizeof(x)/sizeof(x[0]))
#define SZSIZEINBYTES(x)   (lstrlen(x)*sizeof(TCHAR)+1)

// *** NUMBER AND ORDER ALERT
//
// WARNING: keep these up to date when change ETCDLG.C and/or KEYS.H
//
// *** NUMBER AND ORDER ALERT

#define NUM_CURSORS  14
#define FIRST_SOUND  2              // 0-based
#define NUM_SOUNDS   21

// SYNCHRONIZATION WARNING!! -- Keep in SYNC with pRegColors[] array
// in REGUTILS.C.
#define INDEX_ACTIVE            0
#define INDEX_INACTIVE          8
#define INDEX_GRADIENTACTIVE    27
#define INDEX_GRADIENTINACTIVE  28


// for ConfirmFile()
#define CF_EXISTS    1
#define CF_FOUND     2
#define CF_NOTFOUND  3

//---------------------
// T Y P E S
//---------------------

typedef struct {
   TCHAR *szValName;                // register key value name
   int iValType;                    // REG_* flag for value type to read/write   
   BOOL bValRelPath;                // relative pathname file string in this val?
   int fValCheckbox;                // chkbox that controls setting this value
} FROST_VALUE;

typedef struct {
   TCHAR *szSubKey;                 // register subkey name string, 
                                    //   below ROOT or CUR_USER
   int fValues;                     // flag for number/type of values; see below
   BOOL bDefRelPath;                // relative pathname file str? for deflt str
   FROST_VALUE *fvVals;             // pointer to array of valuenames
   int iNumVals;                    // number of values
   int fDefCheckbox;                // chkbox that controls setting Default str
} FROST_SUBKEY;

typedef struct {
   DWORD dwControlID;
   DWORD dwHelpContextID;
} POPUP_HELP_ARRAY;

// defs for fValues field
#define  FV_DEFAULT     1           // single value associated with this key
                                    // name; like old INI file routines
                                    // save time, space, energy for common case.
                                    // fvVals is not used in this case.

#define  FV_LIST        2           // normal case of array of FROST_VALUEs

#define  FV_LISTPLUSDEFAULT  3      // normal list like FV_LIST, AND one member
                                    // of which is the default string

//
// defs for fValCheckbox and fDefCheckbox fields
#define  FC_SCRSVR               0
#define  FC_SOUND                1
#define  FC_PTRS                 2
#define  FC_WALL                 3
#define  FC_ICONS                4
//#define  FC_ICONSIZE             5
#define  FC_COLORS               5
#define  FC_FONTS                6
#define  FC_BORDERS              7
#define  FC_SCHEDULE             8

#define  FC_NULL                 9  // for fDefCheckbox with no def str

//
// string constant
#define  FROST_DEFSTR   TEXT("DefaultValue")
// default icon to apply if Theme file doesn't have MyDocs icon setting
#define  MYDOC_DEFSTR   TEXT("mydocs.dll,0")

//
// macros

#define WaitCursor();         SetCursor(LoadCursor(NULL, IDC_WAIT));
#define NormalCursor();       SetCursor(LoadCursor(NULL, IDC_ARROW));


/////////////////////////////
// 
// Debugging utility macro
//
/////////////////////////////

// Very simple assertion tool

#ifdef _DEBUG
__inline void ods(LPTSTR sz)
{
    OutputDebugString(sz);
    if (*sz && sz[lstrlen(sz)-1] == TEXT('\n'))
        OutputDebugString(TEXT("\r"));
}
#define Assert(p,s); if(!(p)) { ods(s); };
#else
#define Assert(p,s); 
#endif


//----------------------------------
// G L O B A L   V A R I A B L E S
//----------------------------------

//HWND hWndApp;                    // main application window handle
//HINSTANCE hInstApp;              // application instance handle
HICON hIconFrost;                // application icon, has to be painted by hand

BOOL bNoMem;                     // dialog init flag for out of mem
BOOL g_bGradient;                // Enuf colors for gradient captions?

BOOL bLowColorProblem;           // potential prob w/ theme colors > system
BOOL bNeverCheckBPP;             // from BPP Choice dlg; remember per session
int fLowBPPFilter;               // flag saying how to filter apply when bLowColorProblem is true

RECT rView;                      // preview area of dlg
RECT rFakeWin;                   // fake sample window within preview area
RECT rPreviewIcons;              // bounding rect for icon samples in preview area
int iThemeCount;                 // num of items in theme DDL, incl Cur and Other...
int iCurTheme;                   // 0-based index of cur theme in list

extern TCHAR *pRegColors[];      // have to be def'd in REGUTILS.C for sizing
extern int iSysColorIndices[];
extern BOOL gfCoInitDone;	     // track state of OLE CoInitialize()


// strings
TCHAR szAppName[MAX_STRLEN+1];    // application name
TCHAR szMsg[MAX_MSGLEN+1];        // scratch buffer
TCHAR szCurSettings[MAX_STRLEN+1];// "Current Windows settings" for DDLbox
TCHAR szPrevSettings[MAX_STRLEN+1];// "Previous Windows settings" for DDLbox
TCHAR szPrevSettingsFilename[MAX_STRLEN+1];  // theme file w/prev settings, no path
TCHAR szOther[MAX_STRLEN+1];      // "Other..." for DDLbox
TCHAR szNewFile[MAX_STRLEN+1];    // suggested new filename on save theme
TCHAR szExt[MAX_STRLEN+1];        // THM file extension for theme files
TCHAR szFileTypeDesc[MAX_STRLEN+1];  // for save/open file type description
TCHAR szPreviewTitle[MAX_STRLEN+1]; // Preview of "Foo" title at bottom of dlg

TCHAR szSaveTitle[MAX_STRLEN+1];  // title for saveas dlg
TCHAR szOpenTitle[MAX_STRLEN+1];  // title for open dlg

TCHAR szHelpFile[MAX_PATH];       // Help file name; no path nec.; Plus!95
TCHAR szHelpFile98[MAX_PATH];     // Help file name for Plus! 98 new topics

TCHAR szThemeDir[MAX_PATHLEN+1];  // dir of most theme files
TCHAR szWinDir[MAX_PATHLEN+1];    // Windows directory
TCHAR szCurDir[MAX_PATHLEN+1];    // last dir opened a theme file from
TCHAR szCurThemeFile[MAX_PATHLEN+1]; // path + filename of cur theme file
TCHAR szCurThemeName[MAX_PATHLEN+1];  // just name, no path and no extension

#define MAX_VALUELEN 1024        // extra meaty length for safety
extern TCHAR pValue[];           // multi-use buffer: char, hex string, etc.

// 
// Checkbox states, ids and values
// important that this is coordinated with FC_* in keys.h !!!!

#define  MAX_FCHECKS 9           // don't need one for NULL case

BOOL bCBStates[MAX_FCHECKS];     // main window checkbox states

// WebView names number must be consistent with szWVNames[] below
#define  MAX_WVNAMES 3           // number of WebView artwork files

// if in root file
#ifdef ROOTFILE
//

// Consistency Alert! the number of elements here should match MAX_FCHECKS above
int iCBIDs[] = {CB_SCRSVR,
                CB_SOUND,
                CB_PTRS,
                CB_WALL,     // checkbox IDs
                CB_ICONS,
                CB_COLORS,
                CB_FONTS,
                CB_BORDERS,
                CB_SCHEDULE };
//              CB_ICONS, CB_ICONSIZE, CB_COLORS, CB_FONTS, CB_BORDERS };
TCHAR * szCBNames[] = {  TEXT("Screen saver"),
                         TEXT("Sound events"),
                         TEXT("Mouse pointers"),
                         TEXT("Desktop wallpaper"),
                         TEXT("Icons"),
//                       TEXT("Icon size and spacing"),
                         TEXT("Colors"),
                         TEXT("Font names and styles"),
                         TEXT("Font and window sizes"),
                         TEXT("Rotate theme monthly")
                      };  

TCHAR szNULL[] = TEXT("");

TCHAR szColorApp[] = TEXT("Control Panel\\Colors");

TCHAR szClassName[] = TEXT("DesktopThemes");

// Names of the WebView artwork files -- found in \windir\web
//
// Consistency alert -- number of items must match MAX_WVNAMES
// defined above!

TCHAR * szWVNames[] = { TEXT("WVLEFT.BMP"),
                        TEXT("WVLINE.GIF"),
                        TEXT("WVLOGO.GIF")
                      };


#else  // else not root file

extern int iCBIDs[];
extern TCHAR * szCBNames[];
extern TCHAR szNULL[];
extern TCHAR szColorApp[];
extern TCHAR szClassName[];
extern TCHAR * szWVNames[];

// end if root file
#endif


//---------------------------
// F A R   R O U T I N E S
//---------------------------

// frost.c
INT_PTR FAR PASCAL PreviewDlgProc(HWND, UINT, WPARAM, LPARAM);
void FAR EnableThemeButtons();
#ifdef USECALLBACKS
UINT_PTR FAR PASCAL FileOpenHookProc(HWND, UINT, WPARAM, LPARAM);
#endif

// init.c
BOOL FAR InitFrost(HINSTANCE, HINSTANCE, LPTSTR, int);
void FAR SaveStates();
void FAR CloseFrost();

#ifdef FOO
// savedlg.c
INT_PTR FAR PASCAL SaveAsDlgProc(HWND, UINT, WPARAM, LPARAM);
#endif

// etcdlg.c
INT_PTR FAR DoEtcDlgs(HWND);

// regutils.c
void GetRegString(HKEY hkey, LPCTSTR szKey, LPCTSTR szValue, LPCTSTR szDefault, LPTSTR szBuffer, UINT cbBuffer);
int  GetRegInt(HKEY hkey, LPCTSTR szKey, LPCTSTR szValue, int def);

BOOL FAR GatherThemeToFile(LPTSTR);
BOOL FAR ApplyThemeFile(LPTSTR);
VOID FAR InstantiatePath(LPTSTR, int);
int FAR ConfirmFile(LPTSTR, BOOL);
COLORREF FAR RGBStringToColor(LPTSTR);
void FAR ColorToRGBString(LPTSTR, COLORREF);
BOOL FAR HandGet(HKEY hKeyRoot, LPTSTR lpszSubKey, LPTSTR lpszValName, LPTSTR lpszRet);
// void FAR SetCheckboxesFromThemeFile(LPTSTR);
// void FAR SetCheckboxesFromRegistry();
BOOL GetWVFilename(LPCTSTR, LPCTSTR, LPTSTR);

// bkgd.c
void FAR PASCAL BuildPreviewBitmap(LPTSTR lpszThemeFile);
void FAR PaintPreview(HWND, HDC, PRECT);
// bkgdutil.c
BOOL FAR PASCAL PreviewInit(void);
void FAR PASCAL PreviewDestroy(void);
HRESULT ExtractPlusColorIcon(LPCTSTR szPath, int nIndex, HICON *phIcon, UINT uSizeLarge, UINT uSizeSmall);


// fakewin.c
BOOL FAR PASCAL FakewinInit(void);
void FAR PASCAL FakewinDestroy(void);
void FAR FakewinSetTheme(LPTSTR);
void FAR PASCAL FakewinDraw(HDC);

// icons.c
BOOL FAR PASCAL IconsPreviewInit(void);
void FAR PASCAL IconsPreviewDestroy(void);
void FAR PASCAL IconsPreviewDraw(HDC, LPTSTR);

// utils.c
void FAR InitNoMem(HANDLE);
void FAR NoMemMsg(int);
void FAR TruncateExt(LPCTSTR);
LPTSTR FAR FileFromPath(LPCTSTR);
LPTSTR FAR FindChar(LPTSTR, TCHAR);
VOID FAR litoa(int, LPSTR);
int FAR latoi( LPSTR );
BOOL FAR FilenameToShort(LPTSTR lpszInput, LPTSTR lpszShort);
BOOL FAR FilenameToLong(LPTSTR lpszInput, LPTSTR lpszLong);
BOOL FAR IsValidThemeFile(LPTSTR);

BOOL FAR CheckSpace (HWND hWnd, BOOL fComplain);  // Defined in Regutils.c

// nc.c
VOID FAR TransmitFontCharacteristics(PLOGFONT, PLOGFONT, int);
#define TFC_STYLE    1
#define TFC_SIZE     2

// cb.c
void FAR InitCheckboxes();
void FAR SaveCheckboxes();
void FAR RestoreCheckboxes();
BOOL FAR IsAnyBoxChecked();