RemoteFolder.h

Go to the documentation of this file.
00001 // RemoteFolder.h : Declaration of the CRemoteFolder
00002 
00003 #ifndef REMOTEFOLDER_H
00004 #define REMOTEFOLDER_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 "RemotePidlManager.h"
00017 
00018 #define _ATL_DEBUG_QI
00019 
00020 // IRemoteFolder
00021 [
00022         object,
00023         uuid("b816a83b-5022-11dc-9153-0090f5284f85"),
00024         helpstring("IRemoteFolder Interface"),
00025         pointer_default(unique)
00026 ]
00027 __interface IRemoteFolder : IUnknown
00028 {
00029 };
00030 
00031 
00032 // CRemoteFolder
00033 [
00034         coclass,
00035         default(IRemoteFolder),
00036         threading(apartment),
00037         vi_progid("Swish.RemoteFolder"),
00038         progid("Swish.RemoteFolder.1"),
00039         version(1.0),
00040         registration_script("RemoteFolder.rgs"),
00041         uuid("b816a83c-5022-11dc-9153-0090f5284f85"),
00042         helpstring("RemoteFolder Class")
00043 ]
00044 class ATL_NO_VTABLE CRemoteFolder :
00045         public IRemoteFolder,
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         CRemoteFolder() : m_pidl(NULL)
00056         {
00057         }
00058 
00059         ~CRemoteFolder()
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     CRemotePidlManager m_PidlManager;
00123         PIDLIST_ABSOLUTE   m_pidl; // Absolute pidl of this folder object
00124 
00125         CString _GetLongNameFromPIDL( PCUITEMID_CHILD pidl, BOOL fCanonical );
00126         CString _GetLabelFromPIDL( PCUITEMID_CHILD pidl );
00127         HRESULT _FillDetailsVariant( PCWSTR szDetail, VARIANT *pv );
00128         HRESULT _FillDateVariant( CTime dtDate, VARIANT *pv );
00129         HRESULT _FillUI8Variant( ULONGLONG ull, VARIANT *pv );
00130 };
00131 
00132 // Remote folder listing column property IDs
00133 enum PID_SWISH_REMOTE {
00134         PID_SWISH_REMOTE_GROUP = PID_FIRST_USABLE,
00135         PID_SWISH_REMOTE_PERMISSIONS
00136 };
00137 
00138 // PKEYs for custom swish details/properties
00139 // Swish remote folder FMTID GUID {b816a851-5022-11dc-9153-0090f5284f85}
00140 DEFINE_PROPERTYKEY(PKEY_SwishRemoteGroup, 0xb816a851, 0x5022, 0x11dc, \
00141                                    0x91, 0x53, 0x00, 0x90, 0xf5, 0x28, 0x4f, 0x85, \
00142                                    PID_SWISH_REMOTE_GROUP);
00143 DEFINE_PROPERTYKEY(PKEY_SwishRemotePermissions, 0xb816a851, 0x5022, 0x11dc, \
00144                                    0x91, 0x53, 0x00, 0x90, 0xf5, 0x28, 0x4f, 0x85, \
00145                                    PID_SWISH_REMOTE_PERMISSIONS);
00146 
00147 #endif // REMOTEFOLDER_H

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