windows-nt/Source/XPSP1/NT/shell/osshell/control/scrnsave/museum/config.h
2020-09-26 16:20:57 +08:00

144 lines
4 KiB
C++

/*****************************************************************************\
FILE: config.h
DESCRIPTION:
The class will handle the user's configuration state. It will also
display the Screen Saver's configuration dialog to allow the user to change
these settings.
BryanSt 12/18/2000
Copyright (C) Microsoft Corp 2000-2001. All rights reserved.
\*****************************************************************************/
#ifndef CONFIG_H
#define CONFIG_H
class CConfig;
#include "util.h"
#include "main.h"
#include "resource.h"
#define NUM_BOOL_SETTINGS 1
#define NUM_DWORD_SETTINGS 5
#define NUM_BOOL_FOLDERS 4
#define MAX_QUALITY 8
#define MAX_WALK 6
#define MAX_VIEWTIME 30
// Args for CConfig::GetFolderOn()
#define CONFIG_FOLDER_MYPICTS 0
#define CONFIG_FOLDER_COMMONPICTS 1
#define CONFIG_FOLDER_WINPICTS 2
#define CONFIG_FOLDER_OTHER 3
// Args for CConfig::GetDWORDSetting()
#define CONFIG_DWORD_RENDERQUALITY 0
#define CONFIG_DWORD_REALTIMEMODE 1
#define CONFIG_DWORD_QUALITY_SLIDER 2
#define CONFIG_DWORD_SPEED_SLIDER 3
#define CONFIG_DWORD_VIEWPAINTINGTIME 4
#define DEFAULT_QUALITYSLIDER 2
#define DEFAULT_VIEWTIMESLIDER 7
#define DEFAULT_SPEEDSLIDER 2
#define DEFAULT_WALKSPEED 2
#define DEFAULT_RENDERQUALITY 1
typedef struct
{
LPCTSTR pszRegValue;
} QUALITY_SETTING;
typedef struct
{
LPCTSTR pszRegValue;
BOOL fDefaultToOn;
} FOLDER_SETTING;
extern CConfig * g_pConfig; // The configuration settings the user wants to use.
extern QUALITY_SETTING s_QualitySettings[NUM_BOOL_SETTINGS];
class CConfig
{
public:
// Member Functions
virtual BOOL GetBoolSetting(UINT nSetting);
virtual DWORD GetDWORDSetting(UINT nSetting);
virtual BOOL GetFolderOn(UINT nSetting);
virtual HRESULT GetOtherDir(LPTSTR pszPath, DWORD cchSize);
virtual HRESULT GetTexturePath(int nTextureIndex, DWORD * pdwScale, LPTSTR pszPath, DWORD cchSize);
virtual HRESULT DisplayConfigDialog(HWND hwndParent);
HRESULT LoadStatePublic(void) { return _LoadState(); }
CConfig(CMSLogoDXScreenSaver * pMain);
~CConfig();
private:
// Helper Functions
HRESULT _LoadState(void);
HRESULT _SaveState(void);
HRESULT _GetState(void);
HRESULT _UpdateViewTimeSelection(void);
HRESULT _OnBrowseForFolder(void);
HRESULT _GetStateFromUI(void);
HRESULT _LoadQualitySliderValues(void);
BOOL _IsDialogDataValid(void);
HRESULT _OnInitDlg(HWND hDlg);
HRESULT _OnDestroy(HWND hDlg);
HRESULT _OnCommand(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
INT_PTR _ConfigDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
// Advanced Dialog
HRESULT DisplayAdvancedDialog(HWND hwndParent);
INT_PTR _AdvDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
HRESULT _OnAdvInitDlg(HWND hDlg);
HRESULT _OnAdvDestroy(HWND hDlg);
HRESULT _OnAdvCommand(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
HRESULT _GetAdvState(void);
HRESULT _OnEnableCustomTexture(int nIndex, BOOL fEnable);
static INT_PTR CALLBACK AdvDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK ConfigDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam);
// Member Variables
HKEY m_hkeyCurrentUser; // Cached Key
BOOL m_fSettings[NUM_BOOL_SETTINGS];
DWORD m_dwSettings[NUM_DWORD_SETTINGS];
BOOL m_fFolders[NUM_BOOL_FOLDERS];
TCHAR m_szOther[MAX_PATH];
BOOL m_fLoaded;
HWND m_hDlg;
HWND m_hDlgAdvanced;
LPWSTR m_pszCustomPaths[MAX_CUSTOMTEXTURES];
DWORD m_dwCustomScale[MAX_CUSTOMTEXTURES];
CMSLogoDXScreenSaver * m_pMain; // Weak reference
// Advanced Dialog
BOOL m_fAdvSettings[NUM_BOOL_SETTINGS];
DWORD m_dwAdvSettings[NUM_DWORD_SETTINGS];
};
#endif // CONFIG_H