HostFolder.h

Go to the documentation of this file.
00001 // HostFolder.h : Declaration of the CHostFolder
00002 
00003 #ifndef HOSTFOLDER_H
00004 #define HOSTFOLDER_H
00005 
00006 #if _MSC_VER > 1000
00007 #pragma once
00008 #endif // _MSC_VER > 1000
00009 
00010 #include "stdafx.h"
00011 #include "resource.h"       // main symbols
00012 
00013 #define INITGUID
00014 #include <propkey.h>
00015 
00016 #include "HostPidlManager.h"
00017 
00018 #define _ATL_DEBUG_QI
00019 
00020 // IHostFolder
00021 [
00022         object,
00023         uuid("b816a839-5022-11dc-9153-0090f5284f85"),
00024         helpstring("IHostFolder Interface"),
00025         pointer_default(unique)
00026 ]
00027 __interface IHostFolder : IUnknown
00028 {
00029 };
00030 
00031 
00032 // CHostFolder
00033 [
00034         coclass,
00035         default(IHostFolder),
00036         threading(apartment),
00037         vi_progid("Swish.HostFolder"),
00038         progid("Swish.HostFolder.1"),
00039         version(1.0),
00040         registration_script("HostFolder.rgs"),
00041         uuid("b816a83a-5022-11dc-9153-0090f5284f85"),
00042         helpstring("HostFolder Class")
00043 ]
00044 class ATL_NO_VTABLE CHostFolder :
00045         public IHostFolder,
00046         // The IShellFolder2-specific detail-handling methods are not compatible
00047         // with Win 9x/NT but it supports all those of IShellDetails which are
00048         public IShellFolder2, 
00049         // IPersistFolder2 needed for Details expando
00050         public IPersistFolder2, 
00051         public IExtractIcon
00052 //      public IShellDetails // This is compatible with 9x/NT unlike IShellFolder2
00053 {
00054 public:
00055         CHostFolder() : m_pidl(NULL)
00056         {
00057         }
00058 
00059         ~CHostFolder()
00060         {
00061                 if (m_pidl)
00062                         m_PidlManager.Delete( m_pidl );
00063         }
00064 
00065         DECLARE_PROTECT_FINAL_CONSTRUCT()
00066         HRESULT FinalConstruct()
00067         {
00068                 return S_OK;
00069         }
00070         void FinalRelease()
00071         {
00072         }
00073 
00074     // IPersist
00075     STDMETHOD(GetClassID)( CLSID* );
00076 
00077         // IPersistFolder
00078     STDMETHOD(Initialize)( PCIDLIST_ABSOLUTE pidl );
00079 
00080         // IPersistFolder2
00081         STDMETHOD(GetCurFolder)( PIDLIST_ABSOLUTE *ppidl );
00082 
00083         // IShellFolder
00084     STDMETHOD(BindToObject)(PCUIDLIST_RELATIVE pidl, LPBC, REFIID, void** );
00085         STDMETHOD(EnumObjects)( HWND, DWORD, LPENUMIDLIST* );
00086     STDMETHOD(CreateViewObject)( HWND, REFIID, void** );
00087     STDMETHOD(GetAttributesOf) ( UINT, LPCITEMIDLIST*, LPDWORD );
00088     STDMETHOD(GetUIObjectOf)
00089                 ( HWND, UINT, LPCITEMIDLIST*, REFIID, LPUINT, void** );
00090         STDMETHOD(CompareIDs)
00091                 ( LPARAM, LPCITEMIDLIST, LPCITEMIDLIST );
00092     STDMETHOD(BindToStorage)( LPCITEMIDLIST, LPBC, REFIID, void** )
00093         { return E_NOTIMPL; }
00094     STDMETHOD(GetDisplayNameOf)( PCUITEMID_CHILD, SHGDNF, LPSTRRET );
00095     STDMETHOD(ParseDisplayName)
00096                 ( HWND, LPBC, LPOLESTR, LPDWORD, LPITEMIDLIST*, LPDWORD )
00097         { return E_NOTIMPL; }
00098     STDMETHOD(SetNameOf)( HWND, LPCITEMIDLIST, LPCOLESTR, DWORD, LPITEMIDLIST* )
00099         { return E_NOTIMPL; }
00100 
00101         // IShellFolder2
00102         STDMETHOD(EnumSearches)( IEnumExtraSearch **ppEnum );
00103         STDMETHOD(GetDefaultColumn)( DWORD, ULONG *pSort, ULONG *pDisplay );
00104         STDMETHOD(GetDefaultColumnState)( UINT iColumn, SHCOLSTATEF *pcsFlags );                STDMETHOD(GetDefaultSearchGUID)( GUID *pguid )
00105                 { return E_NOTIMPL; }
00106         STDMETHOD(GetDetailsEx)( PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, 
00107                                                          VARIANT *pv );
00108         STDMETHOD(MapColumnToSCID)( UINT iColumn, SHCOLUMNID *pscid );
00109 
00110         // IExtractIcon
00111         STDMETHOD(Extract)( LPCTSTR pszFile, UINT nIconIndex, HICON *phiconLarge, 
00112                                                 HICON *phiconSmall, UINT nIconSize );
00113         STDMETHOD(GetIconLocation)( UINT uFlags, LPTSTR szIconFile, UINT cchMax, 
00114                                                                 int *piIndex, UINT *pwFlags );
00115 
00116         // IShellDetails
00117         STDMETHOD(GetDetailsOf)( PCUITEMID_CHILD pidl, UINT iColumn, 
00118                                                          LPSHELLDETAILS pDetails );
00119         STDMETHOD(ColumnClick)( UINT iColumn );
00120 
00121 private:
00122     CHostPidlManager      m_PidlManager;
00123         PIDLIST_ABSOLUTE      m_pidl; // Absolute pidl of this folder object
00124         std::vector<HOSTPIDL> m_vecConnData;
00125 
00126         CString _GetLongNameFromPIDL( PCUITEMID_CHILD pidl, BOOL fCanonical );
00127         CString _GetLabelFromPIDL( PCUITEMID_CHILD pidl );
00128         HRESULT _FillDetailsVariant( PCWSTR szDetail, VARIANT *pv );
00129 };
00130 
00131 // Host column property IDs
00132 enum PID_SWISH_HOST {
00133         PID_SWISH_HOST_USER = PID_FIRST_USABLE,
00134         PID_SWISH_HOST_PORT
00135 };
00136 
00137 // PKEYs for custom swish details/properties
00138 // Swish Host FMTID GUID {b816a850-5022-11dc-9153-0090f5284f85}
00139 DEFINE_PROPERTYKEY(PKEY_SwishHostUser, 0xb816a850, 0x5022, 0x11dc, \
00140                                    0x91, 0x53, 0x00, 0x90, 0xf5, 0x28, 0x4f, 0x85, \
00141                                    PID_SWISH_HOST_USER);
00142 DEFINE_PROPERTYKEY(PKEY_SwishHostPort, 0xb816a850, 0x5022, 0x11dc, \
00143                                    0x91, 0x53, 0x00, 0x90, 0xf5, 0x28, 0x4f, 0x85, \
00144                                    PID_SWISH_HOST_PORT);
00145 
00146 #endif // HOSTFOLDER_H

Generated on Mon Nov 12 22:43:53 2007 for Swish by  doxygen 1.5.3