ReactOS 0.4.16-dev-980-g00983aa
CRecycleBinItemContextMenu Class Reference
Inheritance diagram for CRecycleBinItemContextMenu:
Collaboration diagram for CRecycleBinItemContextMenu:

Public Member Functions

 CRecycleBinItemContextMenu ()
 
virtual ~CRecycleBinItemContextMenu ()
 
HRESULT WINAPI Initialize (UINT cidl, PCUITEMID_CHILD_ARRAY apidl)
 
STDMETHOD() QueryContextMenu (HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
 
STDMETHOD() InvokeCommand (LPCMINVOKECOMMANDINFO lpcmi) override
 
STDMETHOD() GetCommandString (UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) override
 
STDMETHOD() HandleMenuMsg (UINT uMsg, WPARAM wParam, LPARAM lParam) 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 HandleMenuMsg ([in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Private Attributes

PITEMID_CHILDm_apidl
 
UINT m_cidl
 

Additional Inherited Members

- Public Types inherited from IContextMenu2
typedef IContextMenu2LPCONTEXTMENU2
 
- Public Types inherited from IContextMenu
typedef IContextMenuLPCONTEXTMENU
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- 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
 
- Static Public Attributes inherited from IContextMenu
static const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 

Detailed Description

Definition at line 302 of file CRecycleBin.cpp.

Constructor & Destructor Documentation

◆ CRecycleBinItemContextMenu()

CRecycleBinItemContextMenu::CRecycleBinItemContextMenu ( )

Definition at line 401 of file CRecycleBin.cpp.

402{
403 m_apidl = NULL;
404 m_cidl = 0;
405}
#define NULL
Definition: types.h:112

◆ ~CRecycleBinItemContextMenu()

CRecycleBinItemContextMenu::~CRecycleBinItemContextMenu ( )
virtual

Definition at line 407 of file CRecycleBin.cpp.

408{
410}
void _ILFreeaPidl(LPITEMIDLIST *apidl, UINT cidl)
Definition: pidl.c:2572

Member Function Documentation

◆ GetCommandString()

HRESULT WINAPI CRecycleBinItemContextMenu::GetCommandString ( UINT_PTR  idCommand,
UINT  uFlags,
UINT lpReserved,
LPSTR  lpszName,
UINT  uMaxNameLen 
)
override

Implements IContextMenu.

Definition at line 612 of file CRecycleBin.cpp.

613{
614 TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
615 return SHELL_GetCommandStringImpl(idCommand, uFlags, lpszName, uMaxNameLen, g_BBItemVerbMap);
616}
static const CMVERBMAP g_BBItemVerbMap[]
static DWORD const LPVOID const lpReserved
UINT uFlags
Definition: api.c:59
HRESULT SHELL_GetCommandStringImpl(SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap)
Definition: utils.cpp:1783
#define TRACE(s)
Definition: solgame.cpp:4

◆ HandleMenuMsg()

HRESULT WINAPI CRecycleBinItemContextMenu::HandleMenuMsg ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
override

Implements IContextMenu2.

Definition at line 618 of file CRecycleBin.cpp.

619{
620 TRACE("CRecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
621
622 return E_NOTIMPL;
623}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ Initialize()

HRESULT WINAPI CRecycleBinItemContextMenu::Initialize ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl 
)

Definition at line 412 of file CRecycleBin.cpp.

413{
414 m_apidl = _ILCopyaPidl(apidl, cidl);
415 if (m_apidl == NULL)
416 return E_OUTOFMEMORY;
417 m_cidl = cidl;
418 return S_OK;
419}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define S_OK
Definition: intsafe.h:52
PITEMID_CHILD * _ILCopyaPidl(PCUITEMID_CHILD_ARRAY apidlsrc, UINT cidl)
Definition: pidl.c:2589

◆ InvokeCommand()

HRESULT WINAPI CRecycleBinItemContextMenu::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpcmi)
override

Implements IContextMenu.

Definition at line 546 of file CRecycleBin.cpp.

547{
548 TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd);
549
551
552 // Handle DefView accelerators
553 if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_CUT)
554 CmdId = IDC_BB_CUT;
555 if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_DELETE)
556 CmdId = IDC_BB_DELETE;
557 if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_PROPERTIES)
558 CmdId = IDC_BB_PROPERTIES;
559
560 if (CmdId == IDC_BB_RESTORE || CmdId == IDC_BB_DELETE)
561 {
562 HRESULT hr = S_OK;
563 if (CmdId == IDC_BB_DELETE && !ConfirmDelete(lpcmi, m_cidl, m_apidl[0]))
564 return S_OK;
565
566 LPWSTR pszzDst = NULL;
568 if (!pszzSrc)
569 return E_OUTOFMEMORY;
570 SHFILEOPSTRUCTW shfos = { lpcmi->hwnd, FO_DELETE, pszzSrc, NULL, FOF_NOCONFIRMMKDIR };
571 if (CmdId == IDC_BB_RESTORE)
572 {
574 if (!pszzDst)
576 shfos.wFunc = FO_MOVE;
577 shfos.pTo = pszzDst;
578 shfos.fFlags |= FOF_MULTIDESTFILES;
579 }
580 else // IDC_BB_DELETE
581 {
582 shfos.fFlags |= FOF_NOCONFIRMATION;
583 }
584 if (SUCCEEDED(hr))
585 {
586 if (lpcmi->fMask & CMIC_MASK_FLAG_NO_UI)
590 if (res && res != DE_OPCANCELLED && res != ERROR_CANCELLED)
591 hr = SHELL_ErrorBox(*lpcmi, E_FAIL);
592 }
593 LocalFree(pszzDst);
594 LocalFree(pszzSrc);
595 return hr;
596 }
597 else if (CmdId == IDC_BB_CUT)
598 {
599 FIXME("implement cut\n");
601 return E_NOTIMPL;
602 }
603 else if (CmdId == IDC_BB_PROPERTIES)
604 {
605 FIXME("implement properties\n");
607 return E_NOTIMPL;
608 }
609 return E_UNEXPECTED;
610}
static BOOL ConfirmDelete(LPCMINVOKECOMMANDINFO lpcmi, UINT cidl, LPCITEMIDLIST pidl)
static HRESULT CALLBACK FileOpCallback(FILEOPCALLBACKEVENT Event, LPCWSTR Src, LPCWSTR Dst, UINT Attrib, HRESULT hrOp, void *CallerData)
static LPWSTR CreateFileOpStrings(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, BOOL RecycledPath)
@ IDC_BB_DELETE
@ IDC_BB_RESTORE
@ IDC_BB_CUT
@ IDC_BB_PROPERTIES
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_FAIL
Definition: ddrawi.h:102
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ERROR_NOT_SUPPORTED
Definition: compat.h:100
int SHELL32_FileOperation(LPSHFILEOPSTRUCTW lpFileOp, FILEOPCALLBACK Callback, void *CallerData)
Definition: shlfileop.cpp:2093
HRESULT SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap)
Definition: utils.cpp:1749
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FOF_MULTIDESTFILES
Definition: shellapi.h:142
#define FO_DELETE
Definition: shellapi.h:139
#define FOF_NOERRORUI
Definition: shellapi.h:152
#define FOF_NOCONFIRMMKDIR
Definition: shellapi.h:151
#define FOF_NOCONFIRMATION
Definition: shellapi.h:146
#define FO_MOVE
Definition: shellapi.h:137
#define FOF_SILENT
Definition: shellapi.h:144
#define SHELL_ErrorBox
Definition: shellutils.h:126
#define DE_OPCANCELLED
Definition: shlfileop.c:45
HRESULT hr
Definition: shlfolder.c:183
#define FCIDM_SHVIEW_CUT
Definition: shresdef.h:854
#define FCIDM_SHVIEW_PROPERTIES
Definition: shresdef.h:853
#define FCIDM_SHVIEW_DELETE
Definition: shresdef.h:852
FILEOP_FLAGS fFlags
Definition: shellapi.h:360
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define ERROR_CANCELLED
Definition: winerror.h:726
#define E_UNEXPECTED
Definition: winerror.h:2456
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ QueryContextMenu()

HRESULT WINAPI CRecycleBinItemContextMenu::QueryContextMenu ( HMENU  hMenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
override

Implements IContextMenu.

Definition at line 431 of file CRecycleBin.cpp.

432{
433 UINT idHigh = 0, id;
434
435 TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
436
437 id = idCmdFirst + IDC_BB_RESTORE;
438 if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_RESTORE), 0))
439 {
440 idHigh = max(idHigh, id);
441 indexMenu++;
442 }
443 id = idCmdFirst + IDC_BB_CUT;
445 {
446 idHigh = max(idHigh, id);
447 if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0))
448 indexMenu++;
449 }
450 id = idCmdFirst + IDC_BB_DELETE;
451 if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_DELETE), 0))
452 {
453 idHigh = max(idHigh, id);
454 if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0))
455 indexMenu++;
456 }
457 id = idCmdFirst + IDC_BB_PROPERTIES;
458 if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), 0))
459 {
460 idHigh = max(idHigh, id);
461 if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0))
462 indexMenu++;
463 }
464 return idHigh ? MAKE_HRESULT(SEVERITY_SUCCESS, 0, idHigh - idCmdFirst + 1) : S_OK;
465}
#define IDS_DELETE
Definition: resource.h:40
#define IDS_PROPERTIES
Definition: resource.h:108
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
GLuint id
Definition: glext.h:5910
unsigned int UINT
Definition: ndis.h:50
void WINAPI _InsertMenuItemW(HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState)
#define IDS_CUT
Definition: shresdef.h:226
#define IDS_RESTORE
Definition: shresdef.h:227
#define max(a, b)
Definition: svc.c:63
#define SEVERITY_SUCCESS
Definition: winerror.h:64
#define MFS_DISABLED
Definition: winuser.h:760
#define MFT_SEPARATOR
Definition: winuser.h:755
#define MFT_STRING
Definition: winuser.h:757
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Member Data Documentation

◆ m_apidl

PITEMID_CHILD* CRecycleBinItemContextMenu::m_apidl
private

◆ m_cidl

UINT CRecycleBinItemContextMenu::m_cidl
private

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