Merge branch 'ntfs_rebase'
[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 #pragma once
9
10 class CLayerUIPropPage :
11 public CPropertyPageImpl<CLayerUIPropPage>,
12 public CComCoClass<CLayerUIPropPage, &CLSID_CLayerUIPropPage>,
13 public CComObjectRootEx<CComMultiThreadModelNoCS>,
14 public IShellExtInit,
15 public IShellPropSheetExt
16 {
17 public:
18 CLayerUIPropPage();
19 ~CLayerUIPropPage();
20
21 // IShellExtInit
22 STDMETHODIMP Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT pdtobj, HKEY hkeyProgID);
23
24
25 // IShellPropSheetExt
26 STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
27 {
28 HPROPSHEETPAGE hPage = Create();
29 if (hPage && !pfnAddPage(hPage, lParam))
30 DestroyPropertySheetPage(hPage);
31
32 return S_OK;
33 }
34
35 STDMETHODIMP ReplacePage(UINT, LPFNADDPROPSHEETPAGE, LPARAM)
36 {
37 return E_NOTIMPL;
38 }
39
40 VOID OnPageAddRef()
41 {
42 InterlockedIncrement(&g_ModuleRefCnt);
43 }
44
45 VOID OnPageRelease()
46 {
47 InterlockedDecrement(&g_ModuleRefCnt);
48 }
49
50 HRESULT InitFile(PCWSTR Filename);
51 void UpdateControls();
52 INT_PTR DisableControls();
53 BOOL HasChanges() const;
54
55 int OnSetActive();
56 int OnApply();
57 LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
58 LRESULT OnCtrlCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
59 LRESULT OnEditModes(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
60 LRESULT OnClickNotify(INT uCode, LPNMHDR hdr, BOOL& bHandled);
61
62 static INT_PTR CALLBACK PropDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
63 static INT_PTR CALLBACK EditModesProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
64
65 protected:
66 CString m_Filename;
67 BOOL m_IsSfcProtected;
68 BOOL m_AllowPermLayer;
69 DWORD m_LayerQueryFlags;
70 DWORD m_RegistryOSMode, m_OSMode;
71 DWORD m_RegistryEnabledLayers, m_EnabledLayers;
72 CSimpleArray<CString> m_RegistryCustomLayers, m_CustomLayers;
73
74 public:
75 enum { IDD = IDD_ACPPAGESHEET };
76
77 BEGIN_MSG_MAP(CLayerUIPropPage)
78 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
79 COMMAND_RANGE_HANDLER(IDC_CHKRUNCOMPATIBILITY, IDC_CHKDISABLEVISUALTHEMES, OnCtrlCommand)
80 COMMAND_ID_HANDLER(IDC_EDITCOMPATIBILITYMODES, OnEditModes)
81 NOTIFY_CODE_HANDLER(NM_CLICK, OnClickNotify)
82 NOTIFY_CODE_HANDLER(NM_RETURN, OnClickNotify)
83 CHAIN_MSG_MAP(CPropertyPageImpl<CLayerUIPropPage>)
84 END_MSG_MAP()
85
86 DECLARE_REGISTRY_RESOURCEID(IDR_ACPPAGE)
87 DECLARE_NOT_AGGREGATABLE(CLayerUIPropPage)
88
89 DECLARE_PROTECT_FINAL_CONSTRUCT()
90
91 BEGIN_COM_MAP(CLayerUIPropPage)
92 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
93 COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt)
94 END_COM_MAP()
95 };