xref: /reactos/dll/win32/shell32/CFolderOptions.h (revision 0b366ea1)
1 /*
2  * Folder options.
3  *
4  * Copyright (C) 2016 Mark Jansen
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #ifndef _CFOLDEROPTIONS_H_
22 #define _CFOLDEROPTIONS_H_
23 
24 class CFolderOptions :
25     public CComCoClass<CFolderOptions, &CLSID_ShellFldSetExt>,
26     public CComObjectRootEx<CComMultiThreadModelNoCS>,
27     public IShellPropSheetExt,
28     public IShellExtInit,
29     public IObjectWithSite
30 {
31     private:
32         CComPtr<IUnknown> m_pSite;
33         //LPITEMIDLIST pidl;
34         //INT iIdEmpty;
35         //UINT cfShellIDList;
36         //void SF_RegisterClipFmt();
37         //BOOL fAcceptFmt;       /* flag for pending Drop */
38         //BOOL QueryDrop (DWORD dwKeyState, LPDWORD pdwEffect);
39         //BOOL RecycleBinIsEmpty();
40 
41     protected:
42         enum DEFFOLDERSETTINGACTION { DFSA_QUERY = -1, DFSA_RESET, DFSA_APPLY };
43         HRESULT HandleDefFolderSettings(int Action);
44 
45     public:
46         CFolderOptions();
47         ~CFolderOptions();
48 
49         // IShellPropSheetExt
50         STDMETHOD(AddPages)(LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) override;
51         STDMETHOD(ReplacePage)(EXPPS uPageID, LPFNSVADDPROPSHEETPAGE pfnReplaceWith, LPARAM lParam) override;
52 
53         // IShellExtInit
54         STDMETHOD(Initialize)(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) override;
55 
56         // IObjectWithSite
57         STDMETHOD(SetSite)(IUnknown *pUnkSite) override;
58         STDMETHOD(GetSite)(REFIID riid, void **ppvSite) override;
59 
60         bool CanSetDefFolderSettings()
61         {
62             return SUCCEEDED(HandleDefFolderSettings(DFSA_QUERY));
63         }
64         HRESULT ApplyDefFolderSettings(bool ResetToDefault)
65         {
66             return HandleDefFolderSettings(ResetToDefault ? DFSA_RESET : DFSA_APPLY);
67         }
68 
69         DECLARE_REGISTRY_RESOURCEID(IDR_FOLDEROPTIONS)
70         DECLARE_NOT_AGGREGATABLE(CFolderOptions)
71 
72         DECLARE_PROTECT_FINAL_CONSTRUCT()
73 
74         BEGIN_COM_MAP(CFolderOptions)
75         COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt)
76         COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
77         COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
78         END_COM_MAP()
79 };
80 
81 #endif /* _CFOLDEROPTIONS_H_ */
82