00001
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"
00012
00013 #define INITGUID
00014 #include <propkey.h>
00015
00016 #include "HostPidlManager.h"
00017
00018 #define _ATL_DEBUG_QI
00019
00020
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
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
00047
00048 public IShellFolder2,
00049
00050 public IPersistFolder2,
00051 public IExtractIcon
00052
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
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 CHostPidlManager m_PidlManager;
00123 PIDLIST_ABSOLUTE m_pidl;
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
00132 enum PID_SWISH_HOST {
00133 PID_SWISH_HOST_USER = PID_FIRST_USABLE,
00134 PID_SWISH_HOST_PORT
00135 };
00136
00137
00138
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