ReactOS 0.4.15-dev-5858-g16decc6
CMoveToMenu Class Reference

#include <CCopyToMoveToMenu.h>

Inheritance diagram for CMoveToMenu:
Collaboration diagram for CMoveToMenu:

Public Member Functions

 CMoveToMenu ()
 
 ~CMoveToMenu ()
 
virtual HRESULT WINAPI QueryContextMenu (HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
 
virtual HRESULT WINAPI InvokeCommand (LPCMINVOKECOMMANDINFO lpcmi)
 
virtual HRESULT WINAPI GetCommandString (UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
 
virtual HRESULT WINAPI HandleMenuMsg (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
virtual HRESULT WINAPI Initialize (PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
 
virtual HRESULT WINAPI SetSite (IUnknown *pUnkSite)
 
virtual HRESULT WINAPI GetSite (REFIID riid, void **ppvSite)
 
- 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 ()
 
- Public Member Functions inherited from IObjectWithSite
HRESULT SetSite ([in] IUnknown *pUnkSite)
 
HRESULT GetSite ([in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID)
 

Public Attributes

CComHeapPtr< ITEMIDLISTm_pidlFolder
 
WNDPROC m_fnOldWndProc
 
BOOL m_bIgnoreTextBoxChange
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Protected Member Functions

HRESULT DoMoveToFolder (LPCMINVOKECOMMANDINFO lpici)
 
HRESULT DoRealMove (LPCMINVOKECOMMANDINFO lpici, PCUIDLIST_ABSOLUTE pidl)
 
CStringW DoGetFileTitle ()
 

Protected Attributes

UINT m_idCmdFirst
 
UINT m_idCmdLast
 
UINT m_idCmdMoveTo
 
CComPtr< IDataObjectm_pDataObject
 
CComPtr< IUnknownm_pSite
 

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
 
- Public Types inherited from IObjectWithSite
typedef IObjectWithSiteLPOBJECTWITHSITE
 
- Public Types inherited from IShellExtInit
typedef IShellExtInitLPSHELLEXTINIT
 
- 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)
 
- 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 62 of file CCopyToMoveToMenu.h.

Constructor & Destructor Documentation

◆ CMoveToMenu()

CMoveToMenu::CMoveToMenu ( )

Definition at line 12 of file CMoveToMenu.cpp.

12 :
13 m_idCmdFirst(0),
14 m_idCmdLast(0),
15 m_idCmdMoveTo(-1),
18{
19}
BOOL m_bIgnoreTextBoxChange
WNDPROC m_fnOldWndProc
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117

◆ ~CMoveToMenu()

CMoveToMenu::~CMoveToMenu ( )

Definition at line 21 of file CMoveToMenu.cpp.

22{
23}

Member Function Documentation

◆ DoGetFileTitle()

CStringW CMoveToMenu::DoGetFileTitle ( )
protected

Definition at line 192 of file CMoveToMenu.cpp.

193{
194 CStringW ret = L"(file)";
195
196 CDataObjectHIDA pCIDA(m_pDataObject);
197 if (FAILED_UNEXPECTEDLY(pCIDA.hr()))
198 return ret;
199
200 PCUIDLIST_ABSOLUTE pidlParent = HIDA_GetPIDLFolder(pCIDA);
201 if (!pidlParent)
202 {
203 ERR("HIDA_GetPIDLFolder failed\n");
204 return ret;
205 }
206
208 PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(pCIDA, 0);
209 if (!pidlRelative)
210 {
211 ERR("HIDA_GetPIDLItem failed\n");
212 return ret;
213 }
214
215 CComHeapPtr<ITEMIDLIST> pidlCombine(ILCombine(pidlParent, pidlRelative));
216
217 if (SHGetPathFromIDListW(pidlCombine, szPath))
219 else
220 ERR("Cannot get path\n");
221
222 if (pCIDA->cidl > 1)
223 ret += L" ...";
224
225 return ret;
226}
#define ERR(fmt,...)
Definition: debug.h:110
CComPtr< IDataObject > m_pDataObject
#define MAX_PATH
Definition: compat.h:34
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
LPCWSTR szPath
Definition: env.c:37
#define L(x)
Definition: ntvdm.h:50
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:699
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:569
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:564
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
Definition: shtypes.idl:63
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
int ret
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by DoMoveToFolder().

◆ DoMoveToFolder()

HRESULT CMoveToMenu::DoMoveToFolder ( LPCMINVOKECOMMANDINFO  lpici)
protected

Definition at line 228 of file CMoveToMenu.cpp.

229{
230 WCHAR wszPath[MAX_PATH];
231 HRESULT hr = E_FAIL;
232
233 TRACE("DoMoveToFolder(%p)\n", lpici);
234
235 if (!SHGetPathFromIDListW(m_pidlFolder, wszPath))
236 {
237 ERR("SHGetPathFromIDListW failed\n");
238 return hr;
239 }
240
241 CStringW strFileTitle = DoGetFileTitle();
242 CStringW strTitle;
243 strTitle.Format(IDS_MOVETOTITLE, static_cast<LPCWSTR>(strFileTitle));
244
245 BROWSEINFOW info = { lpici->hwnd };
246 info.pidlRoot = NULL;
247 info.lpszTitle = strTitle;
250 info.lParam = reinterpret_cast<LPARAM>(this);
252 if (pidl)
253 {
254 hr = DoRealMove(lpici, pidl);
255 }
256
257 return hr;
258}
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
CStringW DoGetFileTitle()
CComHeapPtr< ITEMIDLIST > m_pidlFolder
HRESULT DoRealMove(LPCMINVOKECOMMANDINFO lpici, PCUIDLIST_ABSOLUTE pidl)
#define E_FAIL
Definition: ddrawi.h:102
static INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
Definition: wizard.c:583
HRESULT hr
Definition: shlfolder.c:183
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1144
#define BIF_USENEWUI
Definition: shlobj.h:1151
#define SHBrowseForFolder
Definition: shlobj.h:1180
#define IDS_MOVETOTITLE
Definition: shresdef.h:327
#define TRACE(s)
Definition: solgame.cpp:4
LONG_PTR LPARAM
Definition: windef.h:208
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by InvokeCommand().

◆ DoRealMove()

HRESULT CMoveToMenu::DoRealMove ( LPCMINVOKECOMMANDINFO  lpici,
PCUIDLIST_ABSOLUTE  pidl 
)
protected

Definition at line 128 of file CMoveToMenu.cpp.

129{
130 CDataObjectHIDA pCIDA(m_pDataObject);
131 if (FAILED_UNEXPECTEDLY(pCIDA.hr()))
132 return pCIDA.hr();
133
134 PCUIDLIST_ABSOLUTE pidlParent = HIDA_GetPIDLFolder(pCIDA);
135 if (!pidlParent)
136 {
137 ERR("HIDA_GetPIDLFolder failed\n");
138 return E_FAIL;
139 }
140
141 CStringW strFiles;
143 for (UINT n = 0; n < pCIDA->cidl; ++n)
144 {
145 PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(pCIDA, n);
146 if (!pidlRelative)
147 continue;
148
149 CComHeapPtr<ITEMIDLIST> pidlCombine(ILCombine(pidlParent, pidlRelative));
150 if (!pidl)
151 return E_FAIL;
152
153 SHGetPathFromIDListW(pidlCombine, szPath);
154
155 if (n > 0)
156 strFiles += L'|';
157 strFiles += szPath;
158 }
159
160 strFiles += L'|'; // double null-terminated
161 strFiles.Replace(L'|', L'\0');
162
163 if (_ILIsDesktop(pidl))
165 else
167 INT cchPath = lstrlenW(szPath);
168 if (cchPath + 1 < MAX_PATH)
169 {
170 szPath[cchPath + 1] = 0; // double null-terminated
171 }
172 else
173 {
174 ERR("Too long path\n");
175 return E_FAIL;
176 }
177
178 SHFILEOPSTRUCTW op = { lpici->hwnd };
179 op.wFunc = FO_MOVE;
180 op.pFrom = strFiles;
181 op.pTo = szPath;
182 op.fFlags = FOF_ALLOWUNDO;
183 int res = SHFileOperationW(&op);
184 if (res)
185 {
186 ERR("SHFileOperationW failed with 0x%x\n", res);
187 return E_FAIL;
188 }
189 return S_OK;
190}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
int Replace(PCXSTR pszOld, PCXSTR pszNew)
Definition: cstringt.h:811
UINT op
Definition: effect.c:236
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3061
GLdouble n
Definition: glext.h:7729
GLuint res
Definition: glext.h:9613
#define S_OK
Definition: intsafe.h:52
unsigned int UINT
Definition: ndis.h:50
#define FOF_ALLOWUNDO
Definition: shellapi.h:144
#define FO_MOVE
Definition: shellapi.h:133
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
Definition: shlfileop.cpp:1982
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2040
int32_t INT
Definition: typedefs.h:58

Referenced by DoMoveToFolder().

◆ GetCommandString()

HRESULT WINAPI CMoveToMenu::GetCommandString ( UINT_PTR  idCommand,
UINT  uFlags,
UINT lpReserved,
LPSTR  lpszName,
UINT  uMaxNameLen 
)
virtual

Implements IContextMenu.

Definition at line 345 of file CMoveToMenu.cpp.

350{
351 FIXME("%p %lu %u %p %p %u\n", this,
352 idCmd, uType, pwReserved, pszName, cchMax);
353
354 return E_NOTIMPL;
355}
UINT cchMax
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ GetSite()

HRESULT WINAPI CMoveToMenu::GetSite ( REFIID  riid,
void **  ppvSite 
)
virtual

Definition at line 379 of file CMoveToMenu.cpp.

380{
381 if (!m_pSite)
382 return E_FAIL;
383
384 return m_pSite->QueryInterface(riid, ppvSite);
385}
CComPtr< IUnknown > m_pSite
REFIID riid
Definition: atlbase.h:39

◆ HandleMenuMsg()

HRESULT WINAPI CMoveToMenu::HandleMenuMsg ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
virtual

Implements IContextMenu2.

Definition at line 358 of file CMoveToMenu.cpp.

359{
360 TRACE("This %p uMsg %x\n", this, uMsg);
361 return E_NOTIMPL;
362}

◆ Initialize()

HRESULT WINAPI CMoveToMenu::Initialize ( PCIDLIST_ABSOLUTE  pidlFolder,
IDataObject pdtobj,
HKEY  hkeyProgID 
)
virtual

Implements IShellExtInit.

Definition at line 365 of file CMoveToMenu.cpp.

367{
368 m_pidlFolder.Attach(ILClone(pidlFolder));
369 m_pDataObject = pdtobj;
370 return S_OK;
371}
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:228

◆ InvokeCommand()

HRESULT WINAPI CMoveToMenu::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpcmi)
virtual

Implements IContextMenu.

Definition at line 321 of file CMoveToMenu.cpp.

322{
323 HRESULT hr = E_FAIL;
324 TRACE("CMoveToMenu::InvokeCommand(%p)\n", lpici);
325
326 if (HIWORD(lpici->lpVerb) == 0)
327 {
328 if (m_idCmdFirst + LOWORD(lpici->lpVerb) == m_idCmdMoveTo)
329 {
330 hr = DoMoveToFolder(lpici);
331 }
332 }
333 else
334 {
335 if (::lstrcmpiA(lpici->lpVerb, "moveto") == 0)
336 {
337 hr = DoMoveToFolder(lpici);
338 }
339 }
340
341 return hr;
342}
HRESULT DoMoveToFolder(LPCMINVOKECOMMANDINFO lpici)
int WINAPI lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:42
#define LOWORD(l)
Definition: pedump.c:82
#define HIWORD(l)
Definition: typedefs.h:247

◆ QueryContextMenu()

HRESULT WINAPI CMoveToMenu::QueryContextMenu ( HMENU  hMenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
virtual

Implements IContextMenu.

Definition at line 261 of file CMoveToMenu.cpp.

266{
267 MENUITEMINFOW mii;
268 UINT Count = 0;
269
270 TRACE("CMoveToMenu::QueryContextMenu(%p, %u, %u, %u, %u)\n",
271 hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
272
273 if (uFlags & (CMF_NOVERBS | CMF_VERBSONLY))
274 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst);
275
276 m_idCmdFirst = m_idCmdLast = idCmdFirst;
277
278 // insert separator if necessary
280 WCHAR szBuff[128];
281 ZeroMemory(&mii, sizeof(mii));
282 mii.cbSize = sizeof(mii);
283 mii.fMask = MIIM_TYPE;
284 mii.dwTypeData = szBuff;
285 mii.cch = _countof(szBuff);
286 if (GetMenuItemInfoW(hMenu, indexMenu - 1, TRUE, &mii) &&
287 mii.fType != MFT_SEPARATOR &&
288 !(mii.fType == MFT_STRING && CStringW(szBuff) == strCopyTo))
289 {
290 ZeroMemory(&mii, sizeof(mii));
291 mii.cbSize = sizeof(mii);
292 mii.fMask = MIIM_TYPE;
293 mii.fType = MFT_SEPARATOR;
294 if (InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
295 {
296 ++indexMenu;
297 ++Count;
298 }
299 }
300
301 // insert "Move to folder..."
303 ZeroMemory(&mii, sizeof(mii));
304 mii.cbSize = sizeof(mii);
305 mii.fMask = MIIM_ID | MIIM_TYPE;
306 mii.fType = MFT_STRING;
307 mii.dwTypeData = strText.GetBuffer();
308 mii.cch = wcslen(mii.dwTypeData);
309 mii.wID = m_idCmdLast;
310 if (InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
311 {
313 ++indexMenu;
314 ++Count;
315 }
316
317 return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst + Count);
318}
#define TRUE
Definition: types.h:120
UINT uFlags
Definition: api.c:59
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
int Count
Definition: noreturn.cpp:7
#define IDS_MOVETOMENU
Definition: shresdef.h:326
#define IDS_COPYTOMENU
Definition: shresdef.h:322
#define _countof(array)
Definition: sndvol32.h:68
LPWSTR dwTypeData
Definition: winuser.h:3259
#define ZeroMemory
Definition: winbase.h:1670
#define SEVERITY_SUCCESS
Definition: winerror.h:64
#define MIIM_ID
Definition: winuser.h:717
#define MFT_SEPARATOR
Definition: winuser.h:739
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define MFT_STRING
Definition: winuser.h:741
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define MIIM_TYPE
Definition: winuser.h:720
BOOL WINAPI InsertMenuItemW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)

◆ SetSite()

HRESULT WINAPI CMoveToMenu::SetSite ( IUnknown pUnkSite)
virtual

Implements IObjectWithSite.

Definition at line 373 of file CMoveToMenu.cpp.

374{
375 m_pSite = pUnkSite;
376 return S_OK;
377}

Member Data Documentation

◆ m_bIgnoreTextBoxChange

BOOL CMoveToMenu::m_bIgnoreTextBoxChange

Definition at line 81 of file CCopyToMoveToMenu.h.

Referenced by BrowseCallbackProc(), and WindowProc().

◆ m_fnOldWndProc

WNDPROC CMoveToMenu::m_fnOldWndProc

Definition at line 80 of file CCopyToMoveToMenu.h.

Referenced by BrowseCallbackProc(), and WindowProc().

◆ m_idCmdFirst

UINT CMoveToMenu::m_idCmdFirst
protected

Definition at line 70 of file CCopyToMoveToMenu.h.

Referenced by InvokeCommand(), and QueryContextMenu().

◆ m_idCmdLast

UINT CMoveToMenu::m_idCmdLast
protected

Definition at line 70 of file CCopyToMoveToMenu.h.

Referenced by QueryContextMenu().

◆ m_idCmdMoveTo

UINT CMoveToMenu::m_idCmdMoveTo
protected

Definition at line 70 of file CCopyToMoveToMenu.h.

Referenced by InvokeCommand(), and QueryContextMenu().

◆ m_pDataObject

CComPtr<IDataObject> CMoveToMenu::m_pDataObject
protected

Definition at line 71 of file CCopyToMoveToMenu.h.

Referenced by DoGetFileTitle(), DoRealMove(), and Initialize().

◆ m_pidlFolder

CComHeapPtr<ITEMIDLIST> CMoveToMenu::m_pidlFolder

Definition at line 79 of file CCopyToMoveToMenu.h.

Referenced by BrowseCallbackProc(), DoMoveToFolder(), and Initialize().

◆ m_pSite

CComPtr<IUnknown> CMoveToMenu::m_pSite
protected

Definition at line 72 of file CCopyToMoveToMenu.h.

Referenced by GetSite(), and SetSite().


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