You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
7.1 KiB
152 lines
7.1 KiB
#ifndef _DBACK_H_
|
|
#define _DBACK_H_
|
|
|
|
#include <shimgdata.h>
|
|
#include "theme.h"
|
|
#include "dcomp.h"
|
|
#include "colorctrl.h"
|
|
|
|
#define SZ_ICONHEADER L"CLSID\\{"
|
|
|
|
HRESULT GetActiveDesktop(IActiveDesktop ** ppActiveDesktop);
|
|
HRESULT ReleaseActiveDesktop(IActiveDesktop ** ppActiveDesktop);
|
|
|
|
EXTERN_C BOOL g_fDirtyAdvanced;
|
|
EXTERN_C BOOL g_fLaunchGallery;
|
|
|
|
typedef struct tagDESKICONDATA {
|
|
BOOL fHideIcon; //To hide the icon on desktop?
|
|
BOOL fDirty; //Has this entry been modified and we not yet saved.
|
|
} DESKICONDATA;
|
|
|
|
typedef struct tagDeskIconNonEnumData {
|
|
|
|
ULONG rgfAttributes; // ShellFolder\Attributes are saved here.
|
|
BOOL fNonEnumPolicySet; // Disable the control because of policy Set.
|
|
|
|
} DESKICON_NONENUMDATA;
|
|
|
|
class CBackPropSheetPage : public CObjectWithSite
|
|
, public CObjectCLSID
|
|
, public IBasePropPage
|
|
, public IPropertyBag
|
|
{
|
|
public:
|
|
// *** IUnknown ***
|
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj);
|
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
// *** IBasePropPage ***
|
|
virtual STDMETHODIMP GetAdvancedDialog(OUT IAdvancedDialog ** ppAdvDialog);
|
|
virtual STDMETHODIMP OnApply(IN PROPPAGEONAPPLY oaAction);
|
|
|
|
// *** IPropertyBag ***
|
|
virtual STDMETHODIMP Read(IN LPCOLESTR pszPropName, IN VARIANT * pVar, IN IErrorLog *pErrorLog);
|
|
virtual STDMETHODIMP Write(IN LPCOLESTR pszPropName, IN VARIANT *pVar);
|
|
|
|
// *** IShellPropSheetExt ***
|
|
virtual STDMETHODIMP AddPages(IN LPFNSVADDPROPSHEETPAGE pfnAddPage, IN LPARAM lParam);
|
|
virtual STDMETHODIMP ReplacePage(IN EXPPS uPageID, IN LPFNSVADDPROPSHEETPAGE pfnReplaceWith, IN LPARAM lParam) {return E_NOTIMPL;}
|
|
|
|
|
|
CBackPropSheetPage(void);
|
|
virtual ~CBackPropSheetPage(void);
|
|
|
|
protected:
|
|
ICONDATA _IconData[NUM_ICONS];
|
|
|
|
DESKICONDATA _aHideDesktopIcon[2][NUM_DESKICONS];
|
|
BOOL _fHideDesktopIconDirty;
|
|
DESKICON_NONENUMDATA _aDeskIconNonEnumData[NUM_DESKICONS];
|
|
|
|
BOOL _fStateLoaded; // Have we loaded the state yet?
|
|
BOOL _fOpenAdvOnInit; // Does the caller want us to open the Advanced dialog when we initialize?
|
|
HWND _hwnd; // This is the hwnd of the property page.
|
|
HWND _hwndLV;
|
|
HWND _hwndWPStyle;
|
|
BOOL _fAllowHtml;
|
|
BOOL _fAllowAD;
|
|
BOOL _fAllowChanges;
|
|
BOOL _fPolicyForWallpaper; //Is there a policy for wallpaper?
|
|
BOOL _fPolicyForStyle; //Is there a policy for Wallpaper style?
|
|
BOOL _fForceAD; //Is there a policy to force Active desktop to be ON?
|
|
BOOL _fSelectionFromUser; // Is the user making the selection?
|
|
DWORD _dwApplyFlags; //Is there a policy to force Active desktop to be ON?
|
|
CColorControl _colorControl;
|
|
COLORREF _rgbBkgdColor;
|
|
|
|
void _AddPicturesFromDir(LPCTSTR pszDirName, BOOL fCount, BOOL fShouldAllowHTML);
|
|
int _AddAFileToLV(LPCTSTR pszDir, LPTSTR pszFile, UINT nBitmap);
|
|
int _FindWallpaper(LPCTSTR pszFile);
|
|
HRESULT _SetNewWallpaper(IN LPCTSTR pszFile, IN BOOL fUpdateThemePage);
|
|
void _UpdatePreview(IN WPARAM flags, IN BOOL fUpdateThemePage);
|
|
void _EnableControls(void);
|
|
int _GetImageIndex(LPCTSTR pszFile);
|
|
static int CALLBACK _SortBackgrounds(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
|
|
|
|
HRESULT _LoadState(void);
|
|
HRESULT _LoadIconState(void);
|
|
HRESULT _LoadDesktopOptionsState(void);
|
|
HRESULT _SaveIconState(void);
|
|
HRESULT _SaveDesktopOptionsState(void);
|
|
HRESULT _GetIconPath(IN CLSID clsid, IN LPCWSTR pszName, IN BOOL fOldIcon, IN LPWSTR pszPath, IN DWORD cchSize);
|
|
HRESULT _SetIconPath(IN CLSID clsid, IN LPCWSTR pszName, IN LPCWSTR pszPath, IN int nResourceID);
|
|
|
|
void _OnInitDialog(HWND hwnd);
|
|
void _OnNotify(LPNMHDR lpnm);
|
|
void _OnCommand(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
void _OnDestroy(void);
|
|
|
|
HRESULT _OnApply(void);
|
|
HRESULT _AddFilesToList(void);
|
|
HRESULT _AddPicturesFromDirRecursively(IN LPCTSTR pszDirName, BOOL fCount, BOOL fShouldAllowHTML);
|
|
HRESULT _GetHardDirThemesDir(LPTSTR pszPath, DWORD cchSize);
|
|
HRESULT _GetKidsThemesDir(LPTSTR pszPath, DWORD cchSize);
|
|
HRESULT _GetPlus95ThemesDir(LPTSTR pszPath, DWORD cchSize);
|
|
HRESULT _GetPlus98ThemesDir(LPTSTR pszPath, DWORD cchSize);
|
|
|
|
HRESULT _StartSizeChecker(void);
|
|
DWORD _SizeCheckerThreadProc(void);
|
|
static DWORD CALLBACK SizeCheckerThreadProc(LPVOID pvThis) { return ((CBackPropSheetPage *) pvThis)->_SizeCheckerThreadProc(); };
|
|
|
|
private:
|
|
UINT _cRef; // Reference count
|
|
BOOL _fThemePreviewCreated;
|
|
IThemePreview* _pThemePreview;
|
|
LPTSTR _pszOriginalFile; // If we are using a temp file, this is the original file selected. (non-.bmp). This updates as the user selects different files.
|
|
LPTSTR _pszOrigLastApplied; // Same as _pszOriginalFile except it doesn't change until apply is pressed.
|
|
LPWSTR _pszWallpaperInUse; // If using a temp file, keep the name in use so we don't stomp it while the user is previewing other files.
|
|
LPWSTR _pszLastSourcePath; // This will always be the last wallpaper set and it will be the pre-converted path.
|
|
|
|
FILETIME _ftLastWrite; // The date that the original file was last written to.
|
|
BOOL _fWallpaperChanged; // Did another tab change the wallpaper?
|
|
IMruDataList * _pSizeMRU; // MRU of Background wallpapers.
|
|
BOOL _fScanFinished; // Did we finish the background scan?
|
|
BOOL _fInitialized; //
|
|
int _nFileCount; // This is used when counting how many pictures are in the "My Pictures" folder.
|
|
int _nFileMax; // This is used when counting how many pictures are in the "My Pictures" folder.
|
|
|
|
// These objects are owned by the background thread.
|
|
IMruDataList * _pSizeMRUBk; // WARNING: Owned by SizeCheckerThreadProc background thread.
|
|
IShellImageDataFactory * _pImgFactBk; // Image factory used to compute size of background image to decide to default to tile or stretch
|
|
|
|
// Private Member Functions
|
|
HRESULT _LoadTempWallpaperSettings(IN LPCWSTR pszWallpaperFile);
|
|
HRESULT _LaunchAdvancedDisplayProperties(HWND hwnd);
|
|
INT_PTR _BackgroundDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
HRESULT _SetNewWallpaperTile(IN DWORD dwMode, IN BOOL fUpdateThemePage);
|
|
HRESULT _BrowseForBackground(void);
|
|
HRESULT _LoadBackgroundColor(IN BOOL fInit);
|
|
HRESULT _Initialize(void);
|
|
|
|
BOOL _DoesDirHaveMoreThanMax(LPCTSTR pszPath, int nMax);
|
|
DWORD _GetStretchMode(IN LPCTSTR pszPath);
|
|
HRESULT _GetMRUObject(IMruDataList ** ppSizeMRU);
|
|
HRESULT _CalcSizeFromDir(IN LPCTSTR szPath, IN OUT DWORD * pdwAdded, IN BOOL fRecursive);
|
|
HRESULT _CalcSizeForFile(IN LPCTSTR pszPath, IN WIN32_FIND_DATA * pfdFile, IN OUT DWORD * pdwAdded);
|
|
|
|
static INT_PTR CALLBACK BackgroundDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
#endif
|