106 lines
4.4 KiB
C
106 lines
4.4 KiB
C
|
/*****************************************************************************
|
||
|
* ftpcm.h
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifndef _FTPCONTEXTMENU_H
|
||
|
#define _FTPCONTEXTMENU_H
|
||
|
|
||
|
#include "ftpdrop.h"
|
||
|
|
||
|
|
||
|
typedef HRESULT (*INVOKEPROC)(CFtpMenu * pfcm, LPCMINVOKECOMMANDINFO pici, LPCTSTR pszCmd, LPCITEMIDLIST pidl);
|
||
|
|
||
|
typedef struct { /* enum invoke info */
|
||
|
CFtpMenu * pfcm;
|
||
|
LPCMINVOKECOMMANDINFO pici;
|
||
|
HRESULT hres;
|
||
|
INVOKEPROC pfn;
|
||
|
LPCTSTR ptszCmd;
|
||
|
} EII, *PEII;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* CFtpMenu
|
||
|
*
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
class CFtpMenu : public IContextMenu
|
||
|
, public CObjectWithSite
|
||
|
{
|
||
|
public:
|
||
|
//////////////////////////////////////////////////////
|
||
|
// Public Interfaces
|
||
|
//////////////////////////////////////////////////////
|
||
|
|
||
|
// *** IUnknown ***
|
||
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
||
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
|
||
|
|
||
|
// *** IContextMenu ***
|
||
|
virtual STDMETHODIMP QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
|
||
|
virtual STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpici);
|
||
|
virtual STDMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax);
|
||
|
|
||
|
public:
|
||
|
CFtpMenu();
|
||
|
~CFtpMenu(void);
|
||
|
|
||
|
// Public Member Variables
|
||
|
DWORD m_sfgao; // Shell attributes of objects
|
||
|
CFtpPidlList * m_pflHfpl; // The list of items (pidls) that the context menu represents.
|
||
|
CFtpFolder * m_pff; // CFtpFolder in which our pidls live
|
||
|
CFtpDir * m_pfd; // FtpDir in which our pidls live
|
||
|
HWND m_hwnd; // Owner window for UI
|
||
|
POINT m_ptNewItem; // Points where the context menu was invoked. Used to later position a new folder.
|
||
|
DWORD m_uFlags; // Flags used in ::QueryContextMenu() to determine if the menu was invoked by the file menu.
|
||
|
BOOL m_fBackground; // Is this a forground or background context menu?
|
||
|
|
||
|
// Friend Functions
|
||
|
friend HRESULT CFtpMenu_Create(CFtpFolder * pff, CFtpPidlList * pflHfpl, HWND hwnd, REFIID riid, LPVOID * ppvObj);
|
||
|
friend HRESULT CFtpMenu_Create(CFtpFolder * pff, CFtpPidlList * pflHfpl, HWND hwnd, CFtpMenu ** ppfm);
|
||
|
|
||
|
static DWORD CALLBACK _DownloadDialogThreadProc(LPVOID pvThis) { return ((CFtpMenu *) pvThis)->_DownloadDialogThreadProc(); };
|
||
|
|
||
|
protected:
|
||
|
int m_cRef;
|
||
|
|
||
|
LPTSTR m_pszDownloadDir; // Download Directory
|
||
|
DWORD m_dwDownloadType; // Download Directory
|
||
|
|
||
|
// Private Member Functions
|
||
|
int _RemoveContextMenuItems(HMENU hmenu, UINT idCmdFirst, DWORD sfgao);
|
||
|
int _InvokeOne(LPCITEMIDLIST pidl, PEII peii);
|
||
|
HRESULT _InvokeDelete(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeRename(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeCutCopy(UINT_PTR id, LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _DoDrop(IDropTarget * pdt, IDataObject * pdto);
|
||
|
HRESULT _InvokePaste(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeDownloadVerb(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeDeleteVerb(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeLoginAsVerb(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _InvokeNewFolderVerb(LPCMINVOKECOMMANDINFO pici);
|
||
|
HRESULT _AddToRecentDocs(LPCITEMIDLIST pidl);
|
||
|
CStatusBar * _GetStatusBar(void);
|
||
|
DWORD _DownloadDialogThreadProc(void);
|
||
|
DWORD _DownloadThreadProc(void);
|
||
|
BOOL _AreAllFolders(CFtpPidlList * pflHfpl);
|
||
|
LPITEMIDLIST GetSoftLinkDestination(LPCITEMIDLIST pidlToSoftLink);
|
||
|
|
||
|
static HRESULT _SoftLinkDestCB(HINTERNET hint, HINTPROCINFO * phpi, LPVOID pvsldcbs, BOOL * pfReleaseHint);
|
||
|
static int _InvokeOneCB(LPVOID pvPidl, LPVOID pv);
|
||
|
static HRESULT _ApplyOne(CFtpMenu * pfcm, LPCMINVOKECOMMANDINFO pici, LPCTSTR ptszCmd, LPCITEMIDLIST pidl);
|
||
|
static DWORD CALLBACK DownloadThreadProc(LPVOID pvThis) { return ((CFtpMenu *) pvThis)->_DownloadThreadProc(); };
|
||
|
STDMETHODIMP _EnumInvoke(LPCMINVOKECOMMANDINFO pici, INVOKEPROC pfn, LPCTSTR ptszCmd);
|
||
|
|
||
|
private:
|
||
|
BOOL _ContainsForgroundItems(void);
|
||
|
BOOL _IsCallerCaptionBar(UINT indexMenu, UINT uFlags);
|
||
|
};
|
||
|
|
||
|
#endif // _FTPCONTEXTMENU_H
|