[ACPPAGE] Convert CLayerUIPropPage to use CPropertyPageImpl
[reactos.git] / dll / shellext / acppage / CLayerUIPropPage.hpp
1 /*
2 * PROJECT: ReactOS Compatibility Layer Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: CLayerUIPropPage definition
5 * COPYRIGHT: Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8 class CLayerUIPropPage :
9 public CPropertyPageImpl<CLayerUIPropPage>,
10 public CComCoClass<CLayerUIPropPage, &CLSID_CLayerUIPropPage>,
11 public CComObjectRootEx<CComMultiThreadModelNoCS>,
12 public IShellExtInit,
13 public IShellPropSheetExt
14 {
15 public:
16 CLayerUIPropPage();
17 ~CLayerUIPropPage();
18
19 // IShellExtInit
20 STDMETHODIMP Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT pdtobj, HKEY hkeyProgID);
21
22
23 // IShellPropSheetExt
24 STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
25 {
26 HPROPSHEETPAGE hPage = Create();
27 if (hPage && !pfnAddPage(hPage, lParam))
28 DestroyPropertySheetPage(hPage);
29
30 return S_OK;
31 }
32
33 STDMETHODIMP ReplacePage(UINT, LPFNADDPROPSHEETPAGE, LPARAM)
34 {
35 return E_NOTIMPL;
36 }
37
38 VOID OnPageAddRef()
39 {
40 InterlockedIncrement(&g_ModuleRefCnt);
41 }
42
43 VOID OnPageRelease()
44 {
45 InterlockedDecrement(&g_ModuleRefCnt);
46 }
47
48 HRESULT InitFile(PCWSTR Filename);
49 void UpdateControls();
50 INT_PTR DisableControls();
51 BOOL HasChanges() const;
52
53 int OnSetActive();
54 int OnApply();
55 LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
56 LRESULT OnCtrlCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
57 LRESULT OnEditModes(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
58 LRESULT OnClickNotify(INT uCode, LPNMHDR hdr, BOOL& bHandled);
59
60 static INT_PTR CALLBACK PropDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
61 static INT_PTR CALLBACK EditModesProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
62
63 protected:
64 CString m_Filename;
65 BOOL m_IsSfcProtected;
66 BOOL m_AllowPermLayer;
67 DWORD m_LayerQueryFlags;
68 DWORD m_RegistryOSMode, m_OSMode;
69 DWORD m_RegistryEnabledLayers, m_EnabledLayers;
70 CSimpleArray<CString> m_RegistryCustomLayers, m_CustomLayers;
71
72 public:
73 enum { IDD = IDD_ACPPAGESHEET };
74
75 BEGIN_MSG_MAP(CLayerUIPropPage)
76 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
77 COMMAND_RANGE_HANDLER(IDC_CHKRUNCOMPATIBILITY, IDC_CHKDISABLEVISUALTHEMES, OnCtrlCommand)
78 COMMAND_ID_HANDLER(IDC_EDITCOMPATIBILITYMODES, OnEditModes)
79 NOTIFY_CODE_HANDLER(NM_CLICK, OnClickNotify)
80 NOTIFY_CODE_HANDLER(NM_RETURN, OnClickNotify)
81 CHAIN_MSG_MAP(CPropertyPageImpl<CLayerUIPropPage>)
82 END_MSG_MAP()
83
84 DECLARE_REGISTRY_RESOURCEID(IDR_ACPPAGE)
85 DECLARE_NOT_AGGREGATABLE(CLayerUIPropPage)
86
87 DECLARE_PROTECT_FINAL_CONSTRUCT()
88
89 BEGIN_COM_MAP(CLayerUIPropPage)
90 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
91 COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt)
92 END_COM_MAP()
93 };