ReactOS 0.4.16-dev-1020-gf135cab
CCabFolder Class Reference

#include <cabview.h>

Inheritance diagram for CCabFolder:
Collaboration diagram for CCabFolder:

Public Member Functions

HRESULT ExtractFilesUI (HWND hWnd, IDataObject *pDO)
 
HRESULT GetItemDetails (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd, VARIANT *pv)
 
int MapSCIDToColumn (const SHCOLUMNID &scid)
 
HRESULT CompareID (LPARAM lParam, PCUITEMID_CHILD pidl1, PCUITEMID_CHILD pidl2)
 
HRESULT CreateEnum (CEnumIDList **List)
 
IFACEMETHODIMP GetDefaultSearchGUID (GUID *pguid) override
 
IFACEMETHODIMP EnumSearches (IEnumExtraSearch **ppenum) override
 
IFACEMETHODIMP GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
 
IFACEMETHODIMP GetDefaultColumnState (UINT iColumn, SHCOLSTATEF *pcsFlags) override
 
IFACEMETHODIMP GetDetailsEx (PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
 
IFACEMETHODIMP GetDetailsOf (PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
 
IFACEMETHODIMP MapColumnToSCID (UINT column, SHCOLUMNID *pscid) override
 
IFACEMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes) override
 
IFACEMETHODIMP EnumObjects (HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
 
IFACEMETHODIMP BindToObject (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
IFACEMETHODIMP BindToStorage (PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
 
IFACEMETHODIMP CompareIDs (LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
 
IFACEMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
 
IFACEMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut) override
 
IFACEMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
 
IFACEMETHODIMP GetDisplayNameOf (PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName) override
 
IFACEMETHODIMP SetNameOf (HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
 
IFACEMETHODIMP GetCurFolder (PIDLIST_ABSOLUTE *pidl) override
 
IFACEMETHODIMP Initialize (PCIDLIST_ABSOLUTE pidl) override
 
IFACEMETHODIMP GetClassID (CLSID *lpClassId) override
 
IFACEMETHODIMP MessageSFVCB (UINT uMsg, WPARAM wParam, LPARAM lParam) override
 
IFACEMETHODIMP GetIconOf (PCUITEMID_CHILD pidl, UINT flags, int *pIconIndex) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
HRESULT GetUIObjectOf ([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 
HRESULT GetIconOf ([in] PCUITEMID_CHILD pidl, [in] UINT flags, [out] int *pIconIndex)
 

Protected Attributes

CComHeapPtr< ITEMIDLISTm_CurDir
 
HWND m_ShellViewWindow = NULL
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0 , SHGDN_INFOLDER = 1 , SHGDN_FOREDITING = 0x1000 , SHGDN_INCLUDE_NONFILESYS = 0x2000 ,
  SHGDN_FORADDRESSBAR = 0x4000 , SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32 , SHCONTF_NONFOLDERS = 64 , SHCONTF_INCLUDEHIDDEN = 128 , SHCONTF_INIT_ON_FIRST_NEXT = 256 ,
  SHCONTF_NETPRINTERSRCH = 512 , SHCONTF_SHAREABLE = 1024 , SHCONTF_STORAGE = 2048 , SHCONTF_NAVIGATION_ENUM = 0x01000 ,
  SHCONTF_FASTITEMS = 0x02000 , SHCONTF_FLATLIST = 0x04000 , SHCONTF_ENABLE_ASYNC = 0x08000 , SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
typedef ULONG SFGAOF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 116 of file cabview.h.

Member Function Documentation

◆ BindToObject()

IFACEMETHODIMP CCabFolder::BindToObject ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
override

Definition at line 450 of file folder.cpp.

451{
453 return E_NOTIMPL;
454}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ BindToStorage()

IFACEMETHODIMP CCabFolder::BindToStorage ( PCUIDLIST_RELATIVE  pidl,
LPBC  pbcReserved,
REFIID  riid,
LPVOID ppvOut 
)
inlineoverride

Definition at line 172 of file cabview.h.

173 {
175 return E_NOTIMPL;
176 }

◆ CompareID()

HRESULT CCabFolder::CompareID ( LPARAM  lParam,
PCUITEMID_CHILD  pidl1,
PCUITEMID_CHILD  pidl2 
)

Definition at line 456 of file folder.cpp.

457{
458 CABITEM *p1 = (CABITEM*)pidl1, *p2 = (CABITEM*)pidl2;
459 HRESULT hr = S_OK;
460 int ret = 0;
461
463 {
464 ret = lstrcmpiW(p1->Path, p2->Path);
465 if (ret && (lParam & SHCIDS_ALLFIELDS))
466 {
467 for (UINT i = 0; ret && SUCCEEDED(hr) && i < COLCOUNT; ++i)
468 {
469 hr = (i == COL_NAME) ? 0 : CompareID(i, pidl1, pidl2);
471 }
472 }
473 }
474 else
475 {
476 UINT col = lParam & SHCIDS_COLUMNMASK;
477 switch (col)
478 {
479 case COL_NAME:
480 ret = StrCmpLogicalW(p1->GetName(), p2->GetName());
481 break;
482
483 case COL_SIZE:
484 ret = p1->Size - p2->Size;
485 break;
486
487 case COL_MDATE:
488 ret = MAKELONG(p1->Time, p1->Date) - MAKELONG(p2->Time, p2->Date);
489 break;
490
491 default:
492 {
493 if (col < COLCOUNT)
494 {
495 PWSTR str1, str2;
496 if (SUCCEEDED(hr = ::GetDetailsOf(*this, pidl1, col, str1)))
497 {
498 if (SUCCEEDED(hr = ::GetDetailsOf(*this, pidl2, col, str2)))
499 {
500 ret = StrCmpLogicalW(str1, str2);
501 SHFree(str2);
502 }
503 SHFree(str1);
504 }
505 }
506 else
507 {
509 }
510 }
511 }
512 }
514}
#define SHCIDS_ALLFIELDS
Definition: CFontExt.cpp:14
HRESULT CompareID(LPARAM lParam, PCUITEMID_CHILD pidl1, PCUITEMID_CHILD pidl2)
Definition: folder.cpp:456
IFACEMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
Definition: folder.cpp:404
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
INT WINAPI StrCmpLogicalW(LPCWSTR lpszStr, LPCWSTR lpszComp)
Definition: string.c:2310
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
@ COL_NAME
Definition: folder.cpp:13
@ COLCOUNT
Definition: folder.cpp:19
@ COL_MDATE
Definition: folder.cpp:16
@ COL_SIZE
Definition: folder.cpp:14
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
unsigned int UINT
Definition: ndis.h:50
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:623
HRESULT hr
Definition: shlfolder.c:183
LPCWSTR GetName() const
Definition: folder.cpp:59
UINT Size
Definition: folder.cpp:45
WORD Date
Definition: folder.cpp:46
WCHAR Path[ANYSIZE_ARRAY]
Definition: folder.cpp:49
WORD Time
Definition: folder.cpp:46
uint16_t * PWSTR
Definition: typedefs.h:56
#define MAKELONG(a, b)
Definition: typedefs.h:249
int ret
#define HRESULT_CODE(hr)
Definition: winerror.h:76

Referenced by CompareID(), and CompareIDs().

◆ CompareIDs()

IFACEMETHODIMP CCabFolder::CompareIDs ( LPARAM  lParam,
PCUIDLIST_RELATIVE  pidl1,
PCUIDLIST_RELATIVE  pidl2 
)
override

Implements IShellFolder.

Definition at line 516 of file folder.cpp.

517{
519 if (!pidl1 || !ILIsSingle(pidl1) || !pidl2 || !ILIsSingle(pidl2))
520 return E_UNEXPECTED;
521
522 return CompareID(lParam, pidl1, pidl2);
523}
#define FLATFOLDER
Definition: cabview.h:12
#define C_ASSERT(e)
Definition: intsafe.h:73
static BOOL ILIsSingle(LPCITEMIDLIST pidl)
Definition: shellutils.h:631
#define E_UNEXPECTED
Definition: winerror.h:2456

◆ CreateEnum()

HRESULT CCabFolder::CreateEnum ( CEnumIDList **  List)
inline

Definition at line 134 of file cabview.h.

135 {
137 *List = pEIDL;
138 return pEIDL ? pEIDL->Fill(m_CurDir) : E_OUTOFMEMORY;
139 }
CComHeapPtr< ITEMIDLIST > m_CurDir
Definition: cabview.h:125
HRESULT Fill(LPCWSTR path, HWND hwnd=NULL, SHCONTF contf=0)
Definition: folder.cpp:215
static CEnumIDList * CreateInstance()
Definition: cabview.h:102
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550

Referenced by GetAttributesOf().

◆ CreateViewObject()

IFACEMETHODIMP CCabFolder::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
LPVOID ppvOut 
)
override

Definition at line 525 of file folder.cpp.

526{
527 if (riid == IID_IShellView)
528 {
529 SFV_CREATE sfvc = { sizeof(SFV_CREATE), static_cast<IShellFolder*>(this) };
530 return SHCreateShellFolderView(&sfvc, (IShellView**)ppv);
531 }
532 if (riid == IID_IContextMenu)
533 {
535 IContextMenu **ppCM = (IContextMenu**)ppv;
536 return CDefFolderMenu_Create2(m_CurDir, hwndOwner, 0, NULL, this, func, 0, NULL, ppCM);
537 }
538 return E_NOINTERFACE;
539}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4794
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
#define NULL
Definition: types.h:112
static HRESULT CALLBACK FolderBackgroundMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: folder.cpp:164
GLenum func
Definition: glext.h:6028
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
struct _SFV_CREATE SFV_CREATE
HRESULT(CALLBACK * LPFNDFMCALLBACK)(_In_opt_ IShellFolder *, _In_opt_ HWND, _In_opt_ IDataObject *, UINT, WPARAM, LPARAM)
Definition: shlobj.h:2576
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ EnumObjects()

IFACEMETHODIMP CCabFolder::EnumObjects ( HWND  hwndOwner,
DWORD  dwFlags,
LPENUMIDLIST *  ppEnumIDList 
)
override

Definition at line 443 of file folder.cpp.

444{
446 *ppEnumIDList = static_cast<LPENUMIDLIST>(p);
447 return p ? p->Fill(m_CurDir, hwndOwner, dwFlags) : E_OUTOFMEMORY;
448}
GLfloat GLfloat p
Definition: glext.h:8902
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

◆ EnumSearches()

IFACEMETHODIMP CCabFolder::EnumSearches ( IEnumExtraSearch **  ppenum)
inlineoverride

Implements IShellFolder2.

Definition at line 147 of file cabview.h.

148 {
149 return E_NOTIMPL;
150 }

◆ ExtractFilesUI()

HRESULT CCabFolder::ExtractFilesUI ( HWND  hWnd,
IDataObject pDO 
)

Definition at line 817 of file folder.cpp.

818{
821
823 if (!pData)
824 return E_OUTOFMEMORY;
825 ZeroMemory(pData, sizeof(*pData));
826 pData->hWndOwner = hWnd;
827 pData->pLifetimeCF = this;
828 pData->pLifetimeCF->AddRef();
829
831 if (SUCCEEDED(hr) && pDO)
832 {
834 }
835 if (SUCCEEDED(hr))
836 {
838 LPITEMIDLIST pidlInitial = ILClone(m_CurDir);
839 ILRemoveLastID(pidlInitial); // Remove the "name.cab" part (we can't extract into ourselves)
841 BROWSEINFO bi = { hWnd, NULL, NULL, pData->cab, bif, FolderBrowseCallback, (LPARAM)pidlInitial };
843 {
845 ILFree(folder);
846 if (SUCCEEDED(hr))
847 {
850 }
851 }
852 ILFree(pidlInitial);
853 }
854 if (hr != S_OK)
855 Free(*pData);
857}
HWND hWnd
Definition: settings.c:17
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1460
HWND m_ShellViewWindow
Definition: cabview.h:126
HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm)
Definition: marshal.c:2100
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
Definition: thread.c:356
static int CALLBACK FolderBrowseCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
Definition: folder.cpp:645
static HRESULT GetFsPathFromIDList(PCIDLIST_ABSOLUTE pidl, PWSTR pszPath)
Definition: folder.cpp:637
static DWORD CALLBACK ExtractFilesThread(LPVOID pParam)
Definition: folder.cpp:787
nsrefcnt AddRef()
const GUID IID_IDataObject
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1225
#define BROWSEINFO
Definition: shlobj.h:1218
#define BIF_USENEWUI
Definition: shlobj.h:1232
#define CTF_PROCESS_REF
Definition: shlwapi.h:1980
#define CTF_COINIT
Definition: shlwapi.h:1981
#define CTF_FREELIBANDEXIT
Definition: shlwapi.h:1982
#define CTF_THREAD_REF
Definition: shlwapi.h:1979
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
Definition: fci.c:116
BSTR path
Definition: filesystem.c:114
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
#define ZeroMemory
Definition: winbase.h:1743
LONG_PTR LPARAM
Definition: windef.h:208
#define ERROR_CANCELLED
Definition: winerror.h:726
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
BOOL WINAPI IsWindowVisible(_In_ HWND)
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815

Referenced by ItemMenuCallback().

◆ GetAttributesOf()

IFACEMETHODIMP CCabFolder::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
SFGAOF rgfInOut 
)
override

Implements IShellFolder.

Definition at line 541 of file folder.cpp.

542{
543 if (!cidl)
544 {
545 const SFGAOF ThisFolder = (SFGAO_FOLDER | SFGAO_BROWSABLE | SFGAO_CANLINK);
546 *rgfInOut = *rgfInOut & ThisFolder;
547 return S_OK;
548 }
549 else if (!apidl)
550 {
551 return E_INVALIDARG;
552 }
553 HRESULT hr = S_OK;
554 const SFGAOF filemask = SFGAO_READONLY | SFGAO_HIDDEN | SFGAO_SYSTEM | SFGAO_ISSLOW;
555 SFGAOF remain = *rgfInOut & filemask, validate = *rgfInOut & SFGAO_VALIDATE;
556 CComPtr<CEnumIDList> list;
557 for (UINT i = 0; i < cidl && (remain || validate); ++i)
558 {
559 CABITEM *item = CABITEM::Validate(apidl[i]);
560 if (!item)
561 {
563 break;
564 }
565 else if (validate)
566 {
568 return hr;
569 if (list->FindNamedItem((PCUITEMID_CHILD)item) == -1)
571 }
572 SFGAOF att = MapFSToSFAttributes(item->GetFSAttributes()) | SFGAO_ISSLOW;
573 remain &= att & ~(FLATFOLDER ? SFGAO_FOLDER : 0);
574 }
575 *rgfInOut = remain;
576 return hr;
577}
HRESULT CreateEnum(CEnumIDList **List)
Definition: cabview.h:134
Definition: list.h:37
#define SFGAO_SYSTEM
Definition: shobjidl.idl:198
SFGAOF MapFSToSFAttributes(UINT att)
Definition: util.h:124
#define FAILED_UNEXPECTEDLY(hr)
Definition: debug.h:83
static FRESULT validate(void *obj)
Definition: ff.c:2372
ULONG SFGAOF
Definition: shobjidl.idl:222
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static ATOM item
Definition: dde.c:856
#define list
Definition: rosglue.h:35
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
static CABITEM * Validate(PIDL pidl)
Definition: folder.cpp:61

◆ GetClassID()

IFACEMETHODIMP CCabFolder::GetClassID ( CLSID lpClassId)
inlineoverride

Implements IPersist.

Definition at line 216 of file cabview.h.

217 {
218 *lpClassId = CLSID_CabFolder;
219 return S_OK;
220 }
EXTERN_C const GUID CLSID_CabFolder
Definition: cabview.h:14

◆ GetCurFolder()

IFACEMETHODIMP CCabFolder::GetCurFolder ( PIDLIST_ABSOLUTE pidl)
inlineoverride

Implements IPersistFolder2.

Definition at line 194 of file cabview.h.

195 {
197 return curdir ? SHILClone(curdir, pidl) : E_UNEXPECTED;
198 }
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:133

◆ GetDefaultColumn()

IFACEMETHODIMP CCabFolder::GetDefaultColumn ( DWORD  dwRes,
ULONG pSort,
ULONG pDisplay 
)
override

Implements IShellFolder2.

Definition at line 229 of file folder.cpp.

230{
231 if (pSort)
232 *pSort = COL_NAME;
233 if (pDisplay)
234 *pDisplay = COL_NAME;
235 return S_OK;
236}

◆ GetDefaultColumnState()

IFACEMETHODIMP CCabFolder::GetDefaultColumnState ( UINT  iColumn,
SHCOLSTATEF pcsFlags 
)
override

Implements IShellFolder2.

Definition at line 238 of file folder.cpp.

239{
240 if (!pcsFlags || iColumn >= _countof(g_Columns))
241 return E_INVALIDARG;
242 *pcsFlags = g_Columns[iColumn].ColFlags;
243 return S_OK;
244}
static const struct FOLDERCOLUMN g_Columns[]
#define _countof(array)
Definition: sndvol32.h:70

◆ GetDefaultSearchGUID()

IFACEMETHODIMP CCabFolder::GetDefaultSearchGUID ( GUID pguid)
inlineoverride

Implements IShellFolder2.

Definition at line 142 of file cabview.h.

143 {
144 return E_NOTIMPL;
145 }

◆ GetDetailsEx()

IFACEMETHODIMP CCabFolder::GetDetailsEx ( PCUITEMID_CHILD  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)
override

Implements IShellFolder2.

Definition at line 376 of file folder.cpp.

377{
378 if (!pscid || !pv)
379 return E_INVALIDARG;
380
381 CABITEM *item;
382 int col = MapSCIDToColumn(*pscid);
383 if (col >= 0)
384 {
385 return GetItemDetails(pidl, col, NULL, pv);
386 }
387 else if ((item = CABITEM::Validate(pidl)) == NULL)
388 {
389 return E_INVALIDARG;
390 }
391 else if (IsEqual(*pscid, FMTID_ShellDetails, PID_FINDDATA))
392 {
393 WIN32_FIND_DATA wfd;
394 ZeroMemory(&wfd, sizeof(wfd));
395 wfd.dwFileAttributes = item->GetFSAttributes();
396 wfd.nFileSizeLow = item->Size;
397 DosDateTimeToFileTime(item->Date, item->Time, &wfd.ftLastWriteTime);
398 lstrcpyn(wfd.cFileName, item->GetName(), MAX_PATH);
399 return InitVariantFromBuffer(&wfd, sizeof(wfd), pv);
400 }
401 return E_FAIL;
402}
int MapSCIDToColumn(const SHCOLUMNID &scid)
Definition: folder.cpp:422
HRESULT GetItemDetails(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd, VARIANT *pv)
Definition: folder.cpp:278
#define E_FAIL
Definition: ddrawi.h:102
HRESULT InitVariantFromBuffer(const void *buffer, UINT cb, VARIANT *pv)
Definition: util.h:26
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
@ IsEqual
Definition: fatprocs.h:1887
#define PID_FINDDATA
Definition: shlguid.h:169
#define lstrcpyn
Definition: winbase.h:3906

◆ GetDetailsOf()

IFACEMETHODIMP CCabFolder::GetDetailsOf ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)
override

Implements IShellFolder2.

Definition at line 404 of file folder.cpp.

405{
406 if (!psd || iColumn >= _countof(g_Columns))
407 {
408 return E_INVALIDARG;
409 }
410 else if (!pidl)
411 {
412 psd->fmt = g_Columns[iColumn].LvcFmt;
413 psd->cxChar = g_Columns[iColumn].LvcChars;
415 if (LoadStringW(_AtlBaseModule.GetResourceInstance(), g_Columns[iColumn].TextId, buf, _countof(buf)))
416 return StrTo(buf, psd->str);
417 return E_FAIL;
418 }
419 return GetItemDetails(pidl, iColumn, psd, NULL);
420}
HRESULT StrTo(LPCWSTR str, UINT len, STRRET &sr)
Definition: util.h:49
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
STRRET str
Definition: shtypes.idl:108
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CompareID().

◆ GetDisplayNameOf()

IFACEMETHODIMP CCabFolder::GetDisplayNameOf ( PCUITEMID_CHILD  pidl,
DWORD  dwFlags,
LPSTRRET  pName 
)
override

Definition at line 246 of file folder.cpp.

247{
249 if (!item || !pName)
250 return E_INVALIDARG;
251
253 {
255 return StrTo(FLATFOLDER ? item->Path : item->GetName(), *pName);
256
259 return E_FAIL;
260 UINT cch = lstrlenW(parent) + 1 + lstrlenW(item->Path) + 1;
261 pName->uType = STRRET_WSTR;
262 pName->pOleStr = (LPWSTR)SHAlloc(cch * sizeof(WCHAR));
263 if (!pName->pOleStr)
264 return E_OUTOFMEMORY;
265 lstrcpyW(pName->pOleStr, parent);
266 PathAppendW(pName->pOleStr, item->Path);
267 return S_OK;
268 }
269
270 SHFILEINFO fi;
271 DWORD attr = item->IsFolder() ? FILE_ATTRIBUTE_DIRECTORY : 0;
273 if (SHGetFileInfo(item->GetName(), attr, &fi, sizeof(fi), flags))
274 return StrTo(fi.szDisplayName, *pName);
275 return StrTo(item->GetName(), *pName);
276}
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
r parent
Definition: btrfs.c:3010
unsigned long DWORD
Definition: ntddk_ex.h:95
GLbitfield flags
Definition: glext.h:7161
static LPSTR pName
Definition: security.c:75
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PathAppendW
Definition: pathcch.h:309
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define SHGetFileInfo
Definition: shellapi.h:720
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:182
@ STRRET_WSTR
Definition: shtypes.idl:85
CHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:369
Definition: cookie.c:202
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by GetItemDetails().

◆ GetIconOf()

IFACEMETHODIMP CCabFolder::GetIconOf ( PCUITEMID_CHILD  pidl,
UINT  flags,
int pIconIndex 
)
override

Implements IShellIcon.

Definition at line 621 of file folder.cpp.

622{
623 if (CABITEM *item = CABITEM::Validate(pidl))
624 {
625 int index = MapPIDLToSystemImageListIndex(this, pidl, flags);
626 if (index == -1 && item->IsFolder())
627 index = (flags & GIL_OPENICON) ? SIID_FOLDEROPEN : SIID_FOLDER;
628 if (index != -1)
629 {
630 *pIconIndex = index;
631 return S_OK;
632 }
633 }
634 return S_FALSE;
635}
#define index(s, c)
Definition: various.h:29
#define SIID_FOLDEROPEN
Definition: precomp.h:31
#define SIID_FOLDER
Definition: precomp.h:30
int MapPIDLToSystemImageListIndex(IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT GilFlags=0)
Definition: util.h:150
GLuint index
Definition: glext.h:6031
#define S_FALSE
Definition: winerror.h:2357

◆ GetItemDetails()

HRESULT CCabFolder::GetItemDetails ( PCUITEMID_CHILD  pidl,
UINT  iColumn,
SHELLDETAILS psd,
VARIANT pv 
)

Definition at line 278 of file folder.cpp.

279{
280 HRESULT hr = E_FAIL;
281 STRRET *psr = &psd->str, srvar;
283 if (!item)
284 return E_INVALIDARG;
285
286 switch (iColumn)
287 {
288 case COL_NAME:
289 {
290 hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, pv ? &srvar : psr);
291 return SUCCEEDED(hr) && pv ? StrRetToVariantBSTR(&srvar, *pv) : hr;
292 }
293
294 case COL_SIZE:
295 {
296 UINT data = item->Size;
297 if (pv)
298 {
299 V_VT(pv) = VT_UI4;
300 V_UI4(pv) = data;
301 }
302 else
303 {
304 psr->uType = STRRET_CSTR;
306 }
307 return S_OK;
308 }
309
310 case COL_TYPE:
311 {
312 SHFILEINFO fi;
314 DWORD attr = item->GetFSAttributes();
316 if (SHGetFileInfo(item->GetName(), attr, &fi, sizeof(fi), flags))
317 return pv ? StrTo(data, *pv) : StrTo(data, *psr);
318 break;
319 }
320
321 case COL_MDATE:
322 {
323 if (pv)
324 {
325 if (DosDateTimeToVariantTime(item->Date, item->Time, &V_DATE(pv)))
326 {
327 V_VT(pv) = VT_DATE;
328 return S_OK;
329 }
330 }
331 else
332 {
333 FILETIME utc, loc;
334 if (DosDateTimeToFileTime(item->Date, item->Time, &utc) && FileTimeToLocalFileTime(&utc, &loc))
335 {
336 psr->uType = STRRET_CSTR;
337 if (SHFormatDateTimeA(&loc, NULL, psr->cStr, _countof(psr->cStr)))
338 {
339 return S_OK;
340 }
341 }
342 }
343 break;
344 }
345
346 case COL_PATH:
347 {
348 UINT len = item->NameOffset ? item->NameOffset - 1 : 0;
349 return pv ? StrTo(item->Path, len, *pv) : StrTo(item->Path, len, *psr);
350 }
351
352 case COL_ATT:
353 {
354 UINT data = item->GetFSAttributes();
355 if (pv)
356 {
357 V_VT(pv) = VT_UI4;
358 V_UI4(pv) = data;
359 }
360 else
361 {
362 UINT i = 0;
363 psr->uType = STRRET_CSTR;
364 if (data & FILE_ATTRIBUTE_READONLY) psr->cStr[i++] = 'R';
365 if (data & FILE_ATTRIBUTE_HIDDEN) psr->cStr[i++] = 'H';
366 if (data & FILE_ATTRIBUTE_SYSTEM) psr->cStr[i++] = 'S';
367 if (data & FILE_ATTRIBUTE_ARCHIVE) psr->cStr[i++] = 'A';
368 psr->cStr[i++] = '\0';
369 }
370 return S_OK;
371 }
372 }
373 return hr;
374}
PRTL_UNICODE_STRING_BUFFER Path
IFACEMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName) override
Definition: folder.cpp:246
EXTERN_C INT WINAPI SHFormatDateTimeA(const FILETIME UNALIGNED *fileTime, DWORD *flags, LPSTR buf, UINT size)
Definition: ordinal.c:5334
HRESULT StrRetToVariantBSTR(STRRET *psr, VARIANT &v)
Definition: util.h:80
@ VT_DATE
Definition: compat.h:2302
@ VT_UI4
Definition: compat.h:2313
static DOUBLE utc(DOUBLE time, DateInstance *date)
Definition: date.c:357
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
LPSTR WINAPI StrFormatByteSizeA(DWORD dwBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:2530
@ COL_ATT
Definition: folder.cpp:18
@ COL_TYPE
Definition: folder.cpp:15
@ COL_PATH
Definition: folder.cpp:17
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum GLsizei len
Definition: glext.h:6722
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define V_VT(A)
Definition: oleauto.h:211
#define V_UI4(A)
Definition: oleauto.h:270
#define V_DATE(A)
Definition: oleauto.h:231
#define SHGFI_TYPENAME
Definition: shellapi.h:168
@ STRRET_CSTR
Definition: shtypes.idl:87
CHAR szTypeName[80]
Definition: shellapi.h:370
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
INT WINAPI DosDateTimeToVariantTime(USHORT wDosDate, USHORT wDosTime, double *pDateOut)
Definition: variant.c:1211
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by GetDetailsEx(), and GetDetailsOf().

◆ GetUIObjectOf()

IFACEMETHODIMP CCabFolder::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
LPVOID ppvOut 
)
override

Definition at line 579 of file folder.cpp.

580{
582 if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
583 {
584 if (cidl != 1)
585 return E_INVALIDARG;
586 CABITEM *item = CABITEM::Validate(apidl[0]);
587 if (!item)
588 return E_INVALIDARG;
589
590 DWORD attr = item->GetFSAttributes();
591 return SHCreateFileExtractIconW(item->GetName(), attr, riid, ppvOut);
592 }
593 else if (riid == IID_IContextMenu && cidl)
594 {
596 IContextMenu **ppCM = (IContextMenu**)ppvOut;
597 return CDefFolderMenu_Create2(NULL, hwndOwner, cidl, apidl, this, func, 0, NULL, ppCM);
598 }
599 else if (riid == IID_IDataObject && cidl)
600 {
601 // Note: This IDataObject is only compatible with IContextMenu, it cannot handle drag&drop of virtual items!
602 return CIDLData_CreateFromIDArray(m_CurDir, cidl, apidl, (IDataObject**)ppvOut);
603 }
604 return hr;
605}
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
static HRESULT CALLBACK ItemMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: folder.cpp:111
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2419

◆ Initialize()

IFACEMETHODIMP CCabFolder::Initialize ( PCIDLIST_ABSOLUTE  pidl)
inlineoverride

Implements IPersistFolder.

Definition at line 200 of file cabview.h.

201 {
203 if (SHGetPathFromIDListW(pidl, path))
204 {
205 PIDLIST_ABSOLUTE curdir = ILClone(pidl);
206 if (curdir)
207 {
208 m_CurDir.Attach(curdir);
209 return S_OK;
210 }
211 return E_OUTOFMEMORY;
212 }
213 return E_INVALIDARG;
214 }

◆ MapColumnToSCID()

IFACEMETHODIMP CCabFolder::MapColumnToSCID ( UINT  column,
SHCOLUMNID pscid 
)
override

Implements IShellFolder2.

Definition at line 432 of file folder.cpp.

433{
435 {
436 pscid->fmtid = *g_Columns[column].pkg;
437 pscid->pid = g_Columns[column].pki;
438 return S_OK;
439 }
440 return E_FAIL;
441}

◆ MapSCIDToColumn()

int CCabFolder::MapSCIDToColumn ( const SHCOLUMNID scid)

Definition at line 422 of file folder.cpp.

423{
424 for (UINT i = 0; i < _countof(g_Columns); ++i)
425 {
426 if (g_Columns[i].pkg && IsEqual(scid, *g_Columns[i].pkg, g_Columns[i].pki))
427 return i;
428 }
429 return -1;
430}

Referenced by GetDetailsEx().

◆ MessageSFVCB()

IFACEMETHODIMP CCabFolder::MessageSFVCB ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
override

Definition at line 607 of file folder.cpp.

608{
609 switch (uMsg)
610 {
613 return S_OK;
616 return S_OK;
617 }
618 return E_NOTIMPL;
619}
#define SFVM_WINDOWCLOSING
WPARAM wParam
Definition: combotst.c:138
HANDLE HWND
Definition: compat.h:19
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1316

◆ ParseDisplayName()

IFACEMETHODIMP CCabFolder::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbc,
LPOLESTR  lpszDisplayName,
ULONG pchEaten,
PIDLIST_RELATIVE ppidl,
ULONG pdwAttributes 
)
inlineoverride

Implements IShellFolder.

Definition at line 162 of file cabview.h.

163 {
165 return E_NOTIMPL;
166 }

◆ SetNameOf()

IFACEMETHODIMP CCabFolder::SetNameOf ( HWND  hwndOwner,
PCUITEMID_CHILD  pidl,
LPCOLESTR  lpName,
DWORD  dwFlags,
PITEMID_CHILD pPidlOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 188 of file cabview.h.

189 {
190 return E_NOTIMPL;
191 }

Member Data Documentation

◆ m_CurDir

CComHeapPtr<ITEMIDLIST> CCabFolder::m_CurDir
protected

◆ m_ShellViewWindow

HWND CCabFolder::m_ShellViewWindow = NULL
protected

Definition at line 126 of file cabview.h.

Referenced by ExtractFilesUI(), and MessageSFVCB().


The documentation for this class was generated from the following files: