1 /* 2 * Shell AutoComplete list 3 * 4 * Copyright 2015 Thomas Faber 5 * Copyright 2020 Katayama Hirofumi MZ 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 20 */ 21 22 #pragma once 23 24 class CACListISF : 25 public CComCoClass<CACListISF, &CLSID_ACListISF>, 26 public CComObjectRootEx<CComMultiThreadModelNoCS>, 27 public IEnumString, 28 public IACList2, 29 public ICurrentWorkingDirectory, 30 public IShellService, 31 public IPersistFolder 32 { 33 private: 34 enum LOCATION_TYPE 35 { 36 LT_DIRECTORY, 37 LT_DESKTOP, 38 LT_MYCOMPUTER, 39 LT_FAVORITES, 40 LT_MAX 41 }; 42 43 DWORD m_dwOptions; 44 LOCATION_TYPE m_iNextLocation; 45 BOOL m_fShowHidden; 46 CStringW m_szExpand; 47 CComHeapPtr<ITEMIDLIST> m_pidlLocation; 48 CComHeapPtr<ITEMIDLIST> m_pidlCurDir; 49 CComPtr<IEnumIDList> m_pEnumIDList; 50 CComPtr<IShellFolder> m_pShellFolder; 51 CComPtr<IBrowserService> m_pBrowserService; 52 53 public: 54 CACListISF(); 55 ~CACListISF(); 56 57 HRESULT NextLocation(); 58 HRESULT SetLocation(LPITEMIDLIST pidl); 59 HRESULT GetDisplayName(LPCITEMIDLIST pidlChild, CComHeapPtr<WCHAR>& pszChild); 60 HRESULT GetPathName(LPCITEMIDLIST pidlChild, CComHeapPtr<WCHAR>& pszPath); 61 62 // *** IEnumString methods *** 63 STDMETHODIMP Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched) override; 64 STDMETHODIMP Skip(ULONG celt) override; 65 STDMETHODIMP Reset() override; 66 STDMETHODIMP Clone(IEnumString **ppenum) override; 67 68 // *** IACList methods *** 69 STDMETHODIMP Expand(LPCOLESTR pszExpand) override; 70 71 // *** IACList2 methods *** 72 STDMETHODIMP SetOptions(DWORD dwFlag) override; 73 STDMETHODIMP GetOptions(DWORD* pdwFlag) override; 74 75 // FIXME: These virtual keywords below should be removed. 76 77 // *** IShellService methods *** 78 virtual STDMETHODIMP SetOwner(IUnknown *punkOwner) override; 79 80 // *** IPersist methods *** 81 virtual STDMETHODIMP GetClassID(CLSID *pClassID) override; 82 83 // *** IPersistFolder methods *** 84 virtual STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidl) override; 85 86 // *** ICurrentWorkingDirectory methods *** 87 STDMETHODIMP GetDirectory(LPWSTR pwzPath, DWORD cchSize) override; 88 STDMETHODIMP SetDirectory(LPCWSTR pwzPath) override; 89 90 public: 91 DECLARE_REGISTRY_RESOURCEID(IDR_ACLISTISF) 92 DECLARE_NOT_AGGREGATABLE(CACListISF) 93 94 DECLARE_PROTECT_FINAL_CONSTRUCT() 95 96 BEGIN_COM_MAP(CACListISF) 97 COM_INTERFACE_ENTRY_IID(IID_IEnumString, IEnumString) 98 COM_INTERFACE_ENTRY_IID(IID_IACList, IACList) 99 COM_INTERFACE_ENTRY_IID(IID_IACList2, IACList2) 100 COM_INTERFACE_ENTRY_IID(IID_IShellService, IShellService) 101 // Windows doesn't return this 102 //COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) 103 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) 104 COM_INTERFACE_ENTRY_IID(IID_ICurrentWorkingDirectory, ICurrentWorkingDirectory) 105 END_COM_MAP() 106 }; 107