OSDN Git Service

Use menuinfo to at setting connext menu page
authorFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 06:21:40 +0000 (14:21 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 06:21:40 +0000 (14:21 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/Settings/SetLookAndFeelPage.cpp
src/TortoiseProc/TortoiseProc.vcproj
src/TortoiseProc/resource.h

index e262a65..01d8be1 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index d73f7fa..a090387 100644 (file)
 #include ".\setlookandfeelpage.h"\r
 #include "MessageBox.h"\r
 #include "XPTheme.h"\r
 #include ".\setlookandfeelpage.h"\r
 #include "MessageBox.h"\r
 #include "XPTheme.h"\r
+#include "MenuInfo.h"\r
+\r
+extern MenuInfo menuInfo[];\r
+\r
+void InsertMenuItemToList(CListCtrl *list,CImageList *imagelist)\r
+{\r
+       int i=0;\r
+       while(menuInfo[i].command != ShellMenuLastEntry)\r
+       {\r
+               if(menuInfo[i].command != ShellSeparator &&\r
+                  menuInfo[i].command != ShellSubMenu &&\r
+                  menuInfo[i].command != ShellSubMenuFile &&\r
+                  menuInfo[i].command != ShellSubMenuFolder &&\r
+                  menuInfo[i].command != ShellSubMenuLink &&\r
+                  menuInfo[i].command != ShellSubMenuMultiple)\r
+               {\r
+                       HICON hIcon = reinterpret_cast<HICON>(::LoadImage(AfxGetResourceHandle(),\r
+                                       MAKEINTRESOURCE(menuInfo[i].iconID),IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT ));\r
+\r
+                       int nImage = imagelist -> Add(hIcon);\r
+\r
+                       CString temp;\r
+                       temp.LoadString(menuInfo[i].menuTextID);\r
+                       CStringUtils::RemoveAccelerators(temp);\r
+               \r
+                       int nIndex = list->GetItemCount();\r
+                       list->InsertItem(nIndex,temp,nImage);\r
+                       list->SetItemData(nIndex,i);\r
+               }\r
+               i++;\r
+       }\r
+}\r
+\r
+void SetMenuItemCheck(CListCtrl *list, unsigned __int64 mask)\r
+{\r
+       for(int i=0;i<list->GetItemCount();i++)\r
+       {\r
+               int data = list->GetItemData(i);\r
+               \r
+               list->SetCheck(i,(menuInfo[data].menuID & mask) == menuInfo[data].menuID);\r
+       }\r
+}\r
+\r
+unsigned __int64 GetMenuListMask(CListCtrl *list)\r
+{\r
+       unsigned __int64 mask = 0;\r
+\r
+       for(int i=0;i<list->GetItemCount();i++)\r
+       {               \r
+               if(list->GetCheck(i))\r
+               {\r
+                       int data = list->GetItemData(i);\r
+                       mask |= menuInfo[data].menuID ;\r
+               }\r
+       }\r
+       return mask;\r
+}\r
 \r
 IMPLEMENT_DYNAMIC(CSetLookAndFeelPage, ISettingsPropPage)\r
 CSetLookAndFeelPage::CSetLookAndFeelPage()\r
 \r
 IMPLEMENT_DYNAMIC(CSetLookAndFeelPage, ISettingsPropPage)\r
 CSetLookAndFeelPage::CSetLookAndFeelPage()\r
@@ -86,43 +143,10 @@ BOOL CSetLookAndFeelPage::OnInitDialog()
        m_imgList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 4, 1);\r
 \r
        m_bBlock = true;\r
        m_imgList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 4, 1);\r
 \r
        m_bBlock = true;\r
-       InsertItem(IDS_MENUCLONE,IDI_CLONE, MENUCLONE);\r
-       InsertItem(IDS_MENUSYNC, IDI_RELOCATE, MENUSYNC);\r
-       InsertItem(IDS_MENUPULL, IDI_PULL, MENUPULL);\r
-       InsertItem(IDS_MENUFETCH, IDI_PULL, MENUFETCH);\r
-       InsertItem(IDS_MENUPUSH, IDI_PUSH, MENUPUSH);\r
-       InsertItem(IDS_MENUCOMMIT, IDI_COMMIT, MENUCOMMIT);\r
-       InsertItem(IDS_MENUDIFF, IDI_DIFF, MENUDIFF);\r
-       InsertItem(IDS_MENUPREVDIFF, IDI_DIFF, MENUPREVDIFF);\r
-//     InsertItem(IDS_MENUURLDIFF, IDI_DIFF, MENUURLDIFF);\r
-       InsertItem(IDS_MENULOG, IDI_LOG, MENULOG);\r
-//     InsertItem(IDS_MENUREPOBROWSE, IDI_REPOBROWSE, MENUREPOBROWSE);\r
-       InsertItem(IDS_MENUSHOWCHANGED, IDI_SHOWCHANGED, MENUSHOWCHANGED);\r
-//     InsertItem(IDS_MENUREVISIONGRAPH, IDI_REVISIONGRAPH, MENUREVISIONGRAPH);\r
-       InsertItem(IDS_MENUCONFLICT, IDI_CONFLICT, MENUCONFLICTEDITOR);\r
-//     InsertItem(IDS_MENURESOLVE, IDI_RESOLVE, MENURESOLVE);\r
-//     InsertItem(IDS_MENUUPDATEEXT, IDI_UPDATE, MENUUPDATEEXT);\r
-       InsertItem(IDS_MENURENAME, IDI_RENAME, MENURENAME);\r
-       InsertItem(IDS_MENUREMOVE, IDI_DELETE, MENUREMOVE);\r
-       InsertItem(IDS_MENUREVERT, IDI_REVERT, MENUREVERT);\r
-       InsertItem(IDS_MENUDELUNVERSIONED, IDI_DELUNVERSIONED, MENUDELUNVERSIONED);\r
-       InsertItem(IDS_MENUCLEANUP, IDI_CLEANUP, MENUCLEANUP);\r
-//     InsertItem(IDS_MENU_LOCK, IDI_LOCK, MENULOCK);\r
-//     InsertItem(IDS_MENU_UNLOCK, IDI_UNLOCK, MENUUNLOCK);\r
-       InsertItem(IDS_MENUBRANCH, IDI_COPY, MENUCOPY);\r
-       InsertItem(IDS_MENUSWITCH, IDI_SWITCH, MENUSWITCH);\r
-       InsertItem(IDS_MENUMERGE, IDI_MERGE, MENUMERGE);\r
-       InsertItem(IDS_MENUEXPORT, IDI_EXPORT, MENUEXPORT);\r
-//     InsertItem(IDS_MENURELOCATE, IDI_RELOCATE, MENURELOCATE);\r
-       InsertItem(IDS_MENUCREATEREPOS, IDI_CREATEREPOS, MENUCREATEREPOS);\r
-       InsertItem(IDS_MENUADD, IDI_ADD, MENUADD);\r
-//     InsertItem(IDS_MENUIMPORT, IDI_IMPORT, MENUIMPORT);\r
-       InsertItem(IDS_MENUBLAME, IDI_BLAME, MENUBLAME);\r
-       InsertItem(IDS_MENUIGNORE, IDI_IGNORE, MENUIGNORE);\r
-       InsertItem(IDS_MENUCREATEPATCH, IDI_CREATEPATCH, MENUCREATEPATCH);\r
-       InsertItem(IDS_MENUAPPLYPATCH, IDI_PATCH, MENUAPPLYPATCH);\r
-       InsertItem(IDS_MENUPROPERTIES, IDI_PROPERTIES, MENUPROPERTIES);\r
-//     InsertItem(IDS_MENUCLIPPASTE, IDI_CLIPPASTE, MENUCLIPPASTE);\r
+       \r
+       InsertMenuItemToList(&m_cMenuList,&m_imgList);\r
+       SetMenuItemCheck(&m_cMenuList,m_topmenu);\r
+\r
        m_bBlock = false;\r
 \r
        m_cMenuList.SetImageList(&m_imgList, LVSIL_SMALL);\r
        m_bBlock = false;\r
 \r
        m_cMenuList.SetImageList(&m_imgList, LVSIL_SMALL);\r
@@ -183,45 +207,7 @@ void CSetLookAndFeelPage::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *
        SetModified(TRUE);\r
        if (m_cMenuList.GetItemCount() > 0)\r
        {\r
        SetModified(TRUE);\r
        if (m_cMenuList.GetItemCount() > 0)\r
        {\r
-               int i=0;\r
-               m_topmenu = 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCLONE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUSYNC : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPULL : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUFETCH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPUSH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCOMMIT : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUDIFF : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPREVDIFF : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUURLDIFF : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENULOG : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREPOBROWSE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUSHOWCHANGED : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREVISIONGRAPH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCONFLICTEDITOR : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURESOLVE : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUUPDATEEXT : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURENAME : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREMOVE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUREVERT : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUDELUNVERSIONED : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCLEANUP : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENULOCK : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUUNLOCK : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCOPY : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUSWITCH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUMERGE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUEXPORT : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENURELOCATE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCREATEREPOS : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUADD : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUIMPORT : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUBLAME : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUIGNORE : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCREATEPATCH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUAPPLYPATCH : 0;\r
-               m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUPROPERTIES : 0;\r
-//             m_topmenu |= m_cMenuList.GetCheck(i++) ? MENUCLIPPASTE : 0;\r
+               m_topmenu = GetMenuListMask(&m_cMenuList);\r
        }\r
        *pResult = 0;\r
 }\r
        }\r
        *pResult = 0;\r
 }\r
index b5cf793..8bc5cbb 100644 (file)
                                Name="setting"\r
                                >\r
                                <File\r
                                Name="setting"\r
                                >\r
                                <File\r
+                                       RelativePath="..\TortoiseShell\MenuInfo.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
                                        RelativePath=".\Settings\SetBugTraq.cpp"\r
                                        >\r
                                </File>\r
                                        RelativePath=".\Settings\SetBugTraq.cpp"\r
                                        >\r
                                </File>\r
index 775a248..a5613d2 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ