ReactOS 0.4.16-dev-716-g2b2bdab
folder.cpp File Reference
#include "cabview.h"
#include "util.h"
#include <pshpack1.h>
#include <poppack.h>
Include dependency graph for folder.cpp:

Go to the source code of this file.

Classes

struct  FOLDERCOLUMN
 
struct  CABITEM
 
struct  FILLCALLBACKDATA
 
struct  EXTRACTFILESDATA
 

Enumerations

enum  FOLDERCOLUMNS {
  COL_NAME , COL_SIZE , COL_TYPE , COL_MDATE ,
  COL_PATH , COL_ATT , COLCOUNT
}
 

Functions

static CABITEMCreateItem (LPCWSTR Path, UINT Attrib, UINT Size, UINT DateTime)
 
static CABITEMCreateItem (LPCSTR Path, UINT Attrib, UINT Size=0, UINT DateTime=0)
 
static HRESULT CALLBACK ItemMenuCallback (IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static HRESULT CALLBACK FolderBackgroundMenuCallback (IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static HRESULT CALLBACK EnumFillCallback (EXTRACTCALLBACKMSG msg, const EXTRACTCALLBACKDATA &ecd, LPVOID cookie)
 
static HRESULT GetFsPathFromIDList (PCIDLIST_ABSOLUTE pidl, PWSTR pszPath)
 
static int CALLBACK FolderBrowseCallback (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
 
static HWND GetUiOwner (const EXTRACTFILESDATA &data)
 
static HRESULT CALLBACK ExtractFilesCallback (EXTRACTCALLBACKMSG msg, const EXTRACTCALLBACKDATA &ecd, LPVOID cookie)
 
static void Free (EXTRACTFILESDATA &data)
 
static DWORD CALLBACK ExtractFilesThread (LPVOID pParam)
 

Variables

static const struct FOLDERCOLUMN g_Columns []
 

Enumeration Type Documentation

◆ FOLDERCOLUMNS

Enumerator
COL_NAME 
COL_SIZE 
COL_TYPE 
COL_MDATE 
COL_PATH 
COL_ATT 
COLCOUNT 

Definition at line 11 of file folder.cpp.

12{
13 COL_NAME, // PKEY_ItemNameDisplay
14 COL_SIZE, // PKEY_Size
15 COL_TYPE, // PKEY_ItemTypeText
16 COL_MDATE, // PKEY_DateModified
17 COL_PATH, // PKEY_?: Archive-relative path
18 COL_ATT, // PKEY_FileAttributes
20};
@ COL_NAME
Definition: folder.cpp:13
@ COLCOUNT
Definition: folder.cpp:19
@ COL_ATT
Definition: folder.cpp:18
@ COL_MDATE
Definition: folder.cpp:16
@ COL_TYPE
Definition: folder.cpp:15
@ COL_SIZE
Definition: folder.cpp:14
@ COL_PATH
Definition: folder.cpp:17

Function Documentation

◆ CreateItem() [1/2]

static CABITEM * CreateItem ( LPCSTR  Path,
UINT  Attrib,
UINT  Size = 0,
UINT  DateTime = 0 
)
static

Definition at line 102 of file folder.cpp.

103{
104 WCHAR buf[MAX_PATH * 2];
105 UINT codepage = (Attrib & _A_NAME_IS_UTF) ? CP_UTF8 : CP_ACP;
107 return CreateItem(buf, Attrib, Size, DateTime);
108 return NULL;
109}
PRTL_UNICODE_STRING_BUFFER Path
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define MultiByteToWideChar
Definition: compat.h:110
#define _A_NAME_IS_UTF
Definition: fci.h:131
static CABITEM * CreateItem(LPCWSTR Path, UINT Attrib, UINT Size, UINT DateTime)
Definition: folder.cpp:69
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
unsigned int UINT
Definition: ndis.h:50
#define CP_UTF8
Definition: nls.h:20
#define _countof(array)
Definition: sndvol32.h:70
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
int codepage
Definition: win_iconv.c:156
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ CreateItem() [2/2]

static CABITEM * CreateItem ( LPCWSTR  Path,
UINT  Attrib,
UINT  Size,
UINT  DateTime 
)
static

Definition at line 69 of file folder.cpp.

70{
72 if (cb > 0xffff)
73 return NULL;
74 CABITEM *p = (CABITEM*)SHAlloc(cb + sizeof(USHORT));
75 if (p)
76 {
77 p->cb = (USHORT)cb;
78 p->Unknown = 0;
79 p->Size = Size;
80 p->Attrib = Attrib;
81 p->Date = HIWORD(DateTime);
82 p->Time = LOWORD(DateTime);
83 p->NameOffset = 0;
84 for (UINT i = 0;; ++i)
85 {
86 WCHAR c = Path[i];
87 if (c == L':') // Don't allow absolute paths
88 c = L'_';
89 if (c == L'/') // Normalize
90 c = L'\\';
91 if (c == '\\')
92 p->NameOffset = i + 1;
93 p->Path[i] = c;
94 if (!c)
95 break;
96 }
97 ((SHITEMID*)((BYTE*)p + cb))->cb = 0;
98 }
99 return p;
100}
#define lstrlenW
Definition: compat.h:750
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
const GLubyte * c
Definition: glext.h:8905
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
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 c
Definition: ke_i.h:80
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
unsigned short USHORT
Definition: pedump.c:61
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define HIWORD(l)
Definition: typedefs.h:247
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CreateItem(), DispatchCreateKMix(), DispatchCreateSysAudio(), EnumFillCallback(), ExtractFilesCallback(), IKsFilter_DispatchCreatePin(), IKsFilterFactory_Create(), IKsFilterFactory_fnInitialize(), IKsFilterFactory_ItemFreeCb(), IKsPin_DispatchCreateClock(), InitializeFilterWithKs(), KMixAllocateDeviceHeader(), KopAddDevice(), KsAllocateObjectCreateItem(), KsDispatchQuerySecurity(), KsDispatchSetSecurity(), KsFilterFactoryAddCreateItem(), KsFreeObjectCreateItem(), KspCreateFilter(), KspCreatePin(), NewDispatchObject(), PcCreateItemDispatch(), PcCreatePinDispatch(), and SysAudioAllocateDeviceHeader().

◆ EnumFillCallback()

static HRESULT CALLBACK EnumFillCallback ( EXTRACTCALLBACKMSG  msg,
const EXTRACTCALLBACKDATA ecd,
LPVOID  cookie 
)
static

Definition at line 189 of file folder.cpp.

190{
192
193 switch ((UINT)msg)
194 {
195 case ECM_FILE:
196 {
197 const FDINOTIFICATION &fdin = *ecd.pfdin;
200 if (IncludeInEnumIDList(data.ContF, attr))
201 {
202 UINT datetime = MAKELONG(fdin.time, fdin.date);
203 CABITEM *item = CreateItem(fdin.psz1, fdin.attribs, fdin.cb, datetime);
204 if (!item)
205 return E_OUTOFMEMORY;
206 if (FAILED(hr = data.pEIDL->Append((LPCITEMIDLIST)item)))
207 SHFree(item);
208 }
209 return SUCCEEDED(hr) ? S_FALSE : hr; // Never extract
210 }
211 }
212 return E_NOTIMPL;
213}
#define msg(x)
Definition: auth_time.c:54
@ ECM_FILE
Definition: cabview.h:16
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
bool IncludeInEnumIDList(SHCONTF contf, SFGAOF att)
Definition: util.h:131
SFGAOF MapFSToSFAttributes(UINT att)
Definition: util.h:124
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static ATOM item
Definition: dde.c:856
HRESULT hr
Definition: shlfolder.c:183
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
@ FSATTS
Definition: folder.cpp:56
const FDINOTIFICATION * pfdin
Definition: cabview.h:20
USHORT time
Definition: fdi.h:236
char * psz1
Definition: fdi.h:228
USHORT date
Definition: fdi.h:235
USHORT attribs
Definition: fdi.h:237
LONG cb
Definition: fdi.h:227
Definition: cookie.c:202
Definition: cookie.c:34
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define S_FALSE
Definition: winerror.h:2357

Referenced by CEnumIDList::Fill().

◆ ExtractFilesCallback()

static HRESULT CALLBACK ExtractFilesCallback ( EXTRACTCALLBACKMSG  msg,
const EXTRACTCALLBACKDATA ecd,
LPVOID  cookie 
)
static

Definition at line 717 of file folder.cpp.

718{
720 switch ((UINT)msg)
721 {
722 case ECM_BEGIN:
723 {
724 data.cabfiles = (UINT)(SIZE_T)ecd.pfdin->hf;
725 return S_OK;
726 }
727
728 case ECM_FILE:
729 {
730 if (data.pPD && data.pPD->HasUserCancelled())
732 HRESULT hr = data.pCIDA ? S_FALSE : S_OK; // Filtering or all items?
733 if (hr != S_OK)
734 {
735 CABITEM *needle = CreateItem(ecd.pfdin->psz1, ecd.pfdin->attribs);
736 if (!needle)
737 return E_OUTOFMEMORY;
738 for (UINT i = 0; i < data.pCIDA->cidl && hr == S_FALSE; ++i)
739 {
741 LPCITEMIDLIST pidlChild = ILFindLastID(HIDA_GetPIDLItem(data.pCIDA, i));
742 CABITEM *haystack = CABITEM::Validate(pidlChild);
744 break;
745 if (!lstrcmpiW(needle->Path, haystack->Path))
746 {
747 if (data.pPD)
748 data.pPD->SetLine(1, needle->Path, TRUE, NULL);
749 hr = S_OK; // Found it in the list of files to extract
750 }
751 }
752 SHFree(needle);
753 }
754 if (data.pPD)
755 data.pPD->SetProgress(data.completed++, data.cabfiles);
756 return hr;
757 }
758
759 case ECM_PREPAREPATH:
760 {
763 }
764
765 case ECM_ERROR:
766 {
767 return ErrorBox(GetUiOwner(data), ecd.hr);
768 }
769 }
770 return E_NOTIMPL;
771}
#define FLATFOLDER
Definition: cabview.h:12
@ ECM_ERROR
Definition: cabview.h:16
@ ECM_BEGIN
Definition: cabview.h:16
@ ECM_PREPAREPATH
Definition: cabview.h:16
#define E_FAIL
Definition: ddrawi.h:102
#define TRUE
Definition: types.h:120
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
static HWND GetUiOwner(const EXTRACTFILESDATA &data)
Definition: folder.cpp:709
static UINT ErrorBox(UINT Error=GetLastError())
Definition: geninst.cpp:177
GLbitfield flags
Definition: glext.h:7161
#define S_OK
Definition: intsafe.h:52
#define C_ASSERT(e)
Definition: intsafe.h:73
static const char haystack[]
Definition: editor.c:145
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:637
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
Definition: shlfileop.cpp:2237
#define SHPPFW_IGNOREFILENAME
Definition: shlobj.h:341
#define SHPPFW_DIRCREATE
Definition: shlobj.h:338
static CABITEM * Validate(PIDL pidl)
Definition: folder.cpp:61
WCHAR Path[ANYSIZE_ARRAY]
Definition: folder.cpp:49
INT_PTR hf
Definition: fdi.h:233
#define ERROR_CANCELLED
Definition: winerror.h:726
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

Referenced by ExtractFilesThread().

◆ ExtractFilesThread()

static DWORD CALLBACK ExtractFilesThread ( LPVOID  pParam)
static

Definition at line 787 of file folder.cpp.

788{
790 HRESULT hr = S_OK;
791 if (SUCCEEDED(SHCoCreateInstance(NULL, &CLSID_ProgressDialog, NULL, IID_PPV_ARG(IProgressDialog, &data.pPD))))
792 {
793 // TODO: IActionProgress SPACTION_COPYING
794 if (SUCCEEDED(data.pPD->StartProgressDialog(data.hWndOwner, NULL, PROGDLG_NOTIME, NULL)))
795 {
796 data.pPD->SetTitle(data.cab);
797 data.pPD->SetLine(2, data.path, TRUE, NULL);
798 data.pPD->SetAnimation(GetModuleHandleW(L"SHELL32"), 161);
799 data.pPD->SetProgress(0, 0);
800 }
801 }
802 if (data.pMarshalDO)
803 {
805 data.pMarshalDO = NULL;
806 if (SUCCEEDED(hr))
807 hr = CDataObjectHIDA::CreateCIDA(data.pDO, &data.pCIDA, data.cidamedium);
808 }
809 if (SUCCEEDED(hr))
810 {
812 }
813 Free(data);
814 return 0;
815}
HRESULT ExtractCabinet(LPCWSTR cab, LPCWSTR destination, EXTRACTCALLBACK callback, LPVOID cookie)
Definition: extract.cpp:189
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID riid, LPVOID *ppv)
Definition: marshal.c:2144
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID refiid, LPVOID *ppv)
Definition: shellole.c:105
static HRESULT CALLBACK ExtractFilesCallback(EXTRACTCALLBACKMSG msg, const EXTRACTCALLBACKDATA &ecd, LPVOID cookie)
Definition: folder.cpp:717
#define PROGDLG_NOTIME
Definition: shlobj.h:967
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815
#define IID_PPV_ARG(Itype, ppType)

Referenced by CCabFolder::ExtractFilesUI().

◆ FolderBackgroundMenuCallback()

static HRESULT CALLBACK FolderBackgroundMenuCallback ( IShellFolder psf,
HWND  hwnd,
IDataObject pdtobj,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 164 of file folder.cpp.

167{
168 return ItemMenuCallback(psf, hwnd, NULL, uMsg, wParam, lParam);
169}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HRESULT CALLBACK ItemMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: folder.cpp:111
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by CCabFolder::CreateViewObject().

◆ FolderBrowseCallback()

static int CALLBACK FolderBrowseCallback ( HWND  hwnd,
UINT  uMsg,
LPARAM  lParam,
LPARAM  lpData 
)
static

Definition at line 645 of file folder.cpp.

646{
648 switch (uMsg)
649 {
650 case BFFM_INITIALIZED:
651 {
652 if (LoadStringW(_AtlBaseModule.GetResourceInstance(), IDS_EXTRACT, buf, _countof(buf)))
653 {
654 // Remove leading and trailing dots
655 WCHAR *s = buf, *e = s + lstrlenW(s);
656 while (*s == '.') ++s;
657 while (e > s && e[-1] == '.') *--e = UNICODE_NULL;
660 }
661 if (lpData)
662 {
665 }
666 break;
667 }
668
669 case BFFM_SELCHANGED:
670 {
671 SFGAOF wanted = SFGAO_FILESYSTEM | SFGAO_FOLDER, query = wanted | SFGAO_STREAM;
673 BOOL enable = ILIsEmpty(pidl); // Allow the desktop
675 IShellFolder *pSF;
677 {
678 SFGAOF attrib = query;
679 if (SUCCEEDED(pSF->GetAttributesOf(1, &child, &attrib)))
680 enable = (attrib & query) == wanted;
681 pSF->Release();
682 }
683 if (enable)
684 {
685 // We don't trust .zip folders, check the file-system to make sure
688 }
690 break;
691 }
692 }
693 return 0;
694}
#define FALSE
Definition: types.h:117
#define IDS_EXTRACT
Definition: resource.h:24
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
unsigned int BOOL
Definition: ntddk_ex.h:94
static HRESULT GetFsPathFromIDList(PCIDLIST_ABSOLUTE pidl, PWSTR pszPath)
Definition: folder.cpp:637
GLdouble s
Definition: gl.h:2039
GLboolean enable
Definition: glext.h:11120
HRESULT GetAttributesOf([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
ULONG Release()
#define e
Definition: ke_i.h:82
static HWND child
Definition: cursoricon.c:298
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define UNICODE_NULL
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
#define BFFM_SELCHANGED
Definition: shlobj.h:1237
#define BFFM_SETEXPANDED
Definition: shlobj.h:1249
#define BFFM_ENABLEOK
Definition: shlobj.h:1244
#define BFFM_SETSELECTION
Definition: shlobj.h:1256
static BOOL ILIsEmpty(_In_opt_ PCUIDLIST_RELATIVE pidl)
Definition: shlobj.h:2519
#define BFFM_INITIALIZED
Definition: shlobj.h:1236
const ITEMIDLIST_ABSOLUTE * PCIDLIST_ABSOLUTE
Definition: shtypes.idl:62
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:833
#define WM_SETTEXT
Definition: winuser.h:1620
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by CCabFolder::ExtractFilesUI().

◆ Free()

static void Free ( EXTRACTFILESDATA data)
static

Definition at line 773 of file folder.cpp.

774{
775 if (data.pPD)
776 {
777 data.pPD->StopProgressDialog();
778 data.pPD->Release();
779 }
780 CDataObjectHIDA::DestroyCIDA(data.pCIDA, data.cidamedium);
781 IUnknown_Set((IUnknown**)&data.pDO, NULL);
782 IUnknown_Set((IUnknown**)&data.pMarshalDO, NULL);
783 IUnknown_Set((IUnknown**)&data.pLifetimeCF, NULL);
784 SHFree(&data);
785}
VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
Definition: ordinal.c:2190

◆ GetFsPathFromIDList()

static HRESULT GetFsPathFromIDList ( PCIDLIST_ABSOLUTE  pidl,
PWSTR  pszPath 
)
static

Definition at line 637 of file folder.cpp.

638{
639 BOOL ret = SHGetPathFromIDListW(pidl, pszPath);
640 if (!ret && ILIsEmpty(pidl))
643}
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3092
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2188
int ret

Referenced by CCabFolder::ExtractFilesUI(), and FolderBrowseCallback().

◆ GetUiOwner()

static HWND GetUiOwner ( const EXTRACTFILESDATA data)
static

Definition at line 709 of file folder.cpp.

710{
711 HWND hWnd;
713 return hWnd;
714 return IsWindowVisible(data.hWndOwner) ? data.hWndOwner : NULL;
715}
HWND hWnd
Definition: settings.c:17
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
BOOL WINAPI IsWindowVisible(_In_ HWND)

Referenced by ExtractFilesCallback().

◆ ItemMenuCallback()

static HRESULT CALLBACK ItemMenuCallback ( IShellFolder psf,
HWND  hwnd,
IDataObject pdtobj,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 111 of file folder.cpp.

113{
114 enum { IDC_EXTRACT, IDC_EXTRACTALL };
116 const BOOL Background = !pdtobj;
117
118 switch (uMsg)
119 {
121 {
122 *((UINT*)lParam) = wParam | CMF_NOVERBS | (Background ? 0 : CMF_VERBSONLY);
123 return S_OK;
124 }
125
127 {
128 QCMINFO &qcmi = *(QCMINFO*)lParam;
129 UINT pos = qcmi.indexMenu, id = 0;
130 if (Background || SUCCEEDED(hr = InsertMenuItem(qcmi, pos, id, IDC_EXTRACT, IDS_EXTRACT, MFS_DEFAULT)))
131 {
132 hr = InsertMenuItem(qcmi, pos, id, IDC_EXTRACTALL, IDS_EXTRACTALL);
133 if (SUCCEEDED(hr) && !Background)
134 {
135 --pos;
136 InsertMenuItem(qcmi, pos, id, 0, -1); // Separator
137 }
138 }
139 if (SUCCEEDED(hr))
140 {
141 qcmi.idCmdFirst = id + 1;
142 hr = S_FALSE; // Don't add verbs
143 }
144 break;
145 }
146
148 {
149 hr = S_FALSE;
150 CCabFolder *pCabFolder = static_cast<CCabFolder*>(psf);
151 switch (wParam)
152 {
153 case IDC_EXTRACT:
154 case IDC_EXTRACTALL:
155 hr = pCabFolder->ExtractFilesUI(hwnd, wParam == IDC_EXTRACT ? pdtobj : NULL);
156 break;
157 }
158 break;
159 }
160 }
161 return hr;
162}
HRESULT ExtractFilesUI(HWND hWnd, IDataObject *pDO)
Definition: folder.cpp:817
#define IDS_EXTRACTALL
Definition: resource.h:25
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define DFM_MODIFYQCMFLAGS
Definition: shlobj.h:2605
UINT idCmdFirst
Definition: shlobj.h:1392
UINT indexMenu
Definition: shlobj.h:1391
#define InsertMenuItem
Definition: winuser.h:5816
#define MFS_DEFAULT
Definition: winuser.h:751

Referenced by FolderBackgroundMenuCallback(), and CCabFolder::GetUIObjectOf().

Variable Documentation

◆ g_Columns

const struct FOLDERCOLUMN g_Columns[]
static
Initial value:
=
{
}
#define IDS_COL_TYPE
Definition: resource.h:9
EXTERN_C const GUID CLSID_CabFolder
Definition: cabview.h:14
#define IDS_COL_MDATE
Definition: resource.h:20
#define IDS_COL_NAME
Definition: resource.h:17
#define IDS_COL_ATT
Definition: resource.h:22
#define IDS_COL_SIZE
Definition: resource.h:18
#define IDS_COL_PATH
Definition: resource.h:21
#define PID_STG_STORAGETYPE
Definition: ntquery.h:50
#define PID_STG_WRITETIME
Definition: ntquery.h:60
#define PID_STG_SIZE
Definition: ntquery.h:58
#define PID_STG_ATTRIBUTES
Definition: ntquery.h:59
#define PID_STG_NAME
Definition: ntquery.h:56
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define LVCFMT_RIGHT
Definition: commctrl.h:2604
@ SHCOLSTATE_TYPE_INT
Definition: shtypes.idl:122
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125

Referenced by CCabFolder::GetDefaultColumnState(), CCabFolder::GetDetailsOf(), CCabFolder::MapColumnToSCID(), and CCabFolder::MapSCIDToColumn().