// Copyright (C) 2011 Fog Creek Software
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include "GlobalData.h"
typedef CAtlMap<CString, CMenuDescription> CMenuDescriptionMap;
typedef CAtlMap<UINT, CMenuDescription> CMenuIdCmdMap;
class CTortoiseHgCmenuBase :
public CComObjectRootEx<CComMultiThreadModel>,
public IContextMenu3,
public IShellExtInit
{
protected:
CAtlList<CString> m_listFiles;
CString m_strFolder;
CMenuDescriptionMap m_mapMenuDesc;
CMenuIdCmdMap m_mapMenuId;
void TweakMenuForVista(HMENU hMenu);
void InitMenuMaps(const CMenuDescription *pMenuDescs, int nCount);
void InsertMenuItemByName(HMENU hMenu, const CString& strName, UINT indexMenu,
UINT idCmd, UINT idCmdFirst, const CStringW& strPrefix);
void AddMenuList(UINT idCmd, const CString& strName);
#ifdef _DEBUG
void PrintDebugHeader(LPCITEMIDLIST pIDFolder, LPDATAOBJECT pDataObj);
#endif
public:
CTortoiseHgCmenuBase();
BEGIN_COM_MAP(CTortoiseHgCmenuBase)
COM_INTERFACE_ENTRY(IContextMenu)
COM_INTERFACE_ENTRY(IContextMenu2)
COM_INTERFACE_ENTRY(IContextMenu3)
COM_INTERFACE_ENTRY(IShellExtInit)
END_COM_MAP()
// IContextMenu3
STDMETHOD(QueryContextMenu)(HMENU hMenu, UINT indexMenu, UINT idCmdFirst,
UINT idCmdLast, UINT uFlags);
STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpcmi);
STDMETHOD(GetCommandString)(UINT_PTR idCmd, UINT uFlags, UINT FAR* reserved,
LPSTR pszName, UINT cchMax);
STDMETHOD(HandleMenuMsg)(UINT uMsg, WPARAM wParam, LPARAM lParam);
STDMETHOD(HandleMenuMsg2)(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
// IShellExtInit
STDMETHOD(Initialize)(LPCITEMIDLIST pIDFolder, LPDATAOBJECT pDataObj, HKEY hKeyID);
};
class CTortoiseHgCmenu :
public CTortoiseHgCmenuBase,
public CComCoClass<CTortoiseHgCmenu, &CLSID_TortoiseHgCmenu>
{
public:
CTortoiseHgCmenu();
DECLARE_REGISTRY_RESOURCEID(IDR_CMENU)
};
|
Loading...