00001
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"
00012
00013 #define INITGUID
00014 #include <propkey.h>
00015
00016 #include "RemotePidlManager.h"
00017
00018 #define _ATL_DEBUG_QI
00019
00020
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
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
00047
00048 public IShellFolder2,
00049
00050 public IPersistFolder2,
00051 public IExtractIcon
00052
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
00075 STDMETHOD(GetClassID)( CLSID* );
00076
00077
00078 STDMETHOD(Initialize)( PCIDLIST_ABSOLUTE pidl );
00079
00080
00081 STDMETHOD(GetCurFolder)( PIDLIST_ABSOLUTE *ppidl );
00082
00083
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
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
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
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;
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
00133 enum PID_SWISH_REMOTE {
00134 PID_SWISH_REMOTE_GROUP = PID_FIRST_USABLE,
00135 PID_SWISH_REMOTE_PERMISSIONS
00136 };
00137
00138
00139
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