OSDN Git Service

merge original branch.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Settings / SetLookAndFeelPage.cpp
index d73f7fa..588cf88 100644 (file)
 #include ".\setlookandfeelpage.h"\r
 #include "MessageBox.h"\r
 #include "XPTheme.h"\r
+#include "MenuInfo.h"\r
+#include "ShellCache.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
        : ISettingsPropPage(CSetLookAndFeelPage::IDD)\r
        , m_bBlock(false)\r
 {\r
-       m_regTopmenu = CRegDWORD(_T("Software\\TortoiseGit\\ContextMenuEntries"), MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT);\r
-       m_regTopmenuhigh = CRegDWORD(_T("Software\\TortoiseGit\\ContextMenuEntrieshigh"), (MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT)>>32);\r
+       ShellCache cache;\r
+       m_regTopmenu = cache.menulayoutlow;\r
+       m_regTopmenuhigh = cache.menulayouthigh;\r
 \r
        m_topmenu = unsigned __int64(DWORD(m_regTopmenuhigh))<<32;\r
        m_topmenu |= unsigned __int64(DWORD(m_regTopmenu));\r
@@ -86,43 +145,10 @@ BOOL CSetLookAndFeelPage::OnInitDialog()
        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
@@ -149,9 +175,11 @@ BOOL CSetLookAndFeelPage::PreTranslateMessage(MSG* pMsg)
 BOOL CSetLookAndFeelPage::OnApply()\r
 {\r
        UpdateData();\r
-    Store ((DWORD)(m_topmenu & 0xFFFFFFFF),    m_regTopmenu);\r
-    Store ((DWORD)(m_topmenu >> 32), m_regTopmenuhigh);\r
 \r
+       m_regTopmenu = m_topmenu & 0xFFFFFFFF;\r
+       m_regTopmenuhigh = (m_topmenu >> 32);\r
+       \r
+       m_regTopmenu.getErrorString();\r
        m_sNoContextPaths.Replace(_T("\r"), _T(""));\r
        if (m_sNoContextPaths.Right(1).Compare(_T("\n"))!=0)\r
                m_sNoContextPaths += _T("\n");\r
@@ -162,20 +190,6 @@ BOOL CSetLookAndFeelPage::OnApply()
        return ISettingsPropPage::OnApply();\r
 }\r
 \r
-void CSetLookAndFeelPage::InsertItem(UINT nTextID, UINT nIconID, unsigned __int64 dwFlags)\r
-{\r
-       HICON hIcon = reinterpret_cast<HICON>(::LoadImage(AfxGetResourceHandle(),\r
-               MAKEINTRESOURCE(nIconID),\r
-               IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT ));\r
-       int nImage = m_imgList.Add(hIcon);\r
-       CString temp;\r
-       temp.LoadString(nTextID);\r
-       CStringUtils::RemoveAccelerators(temp);\r
-       int nIndex = m_cMenuList.GetItemCount();\r
-       m_cMenuList.InsertItem(nIndex, temp, nImage);\r
-       m_cMenuList.SetCheck(nIndex, !!(m_topmenu & dwFlags));\r
-}\r
-\r
 void CSetLookAndFeelPage::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *pResult)\r
 {\r
        if (m_bBlock)\r
@@ -183,45 +197,7 @@ void CSetLookAndFeelPage::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *
        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
@@ -236,3 +212,119 @@ void CSetLookAndFeelPage::OnEnChangeNocontextpaths()
        SetModified();\r
 }\r
 \r
+\r
+\r
+// Set Extmenu class\r
+#include "SetExtMenu.h"\r
+\r
+IMPLEMENT_DYNAMIC(CSetExtMenu, ISettingsPropPage)\r
+CSetExtMenu::CSetExtMenu()\r
+       : ISettingsPropPage(CSetExtMenu::IDD)\r
+{\r
+       ShellCache shell;\r
+\r
+       m_regExtmenu = shell.menuextlow;\r
+       m_regExtmenuhigh = shell.menuexthigh;\r
+\r
+       m_extmenu = unsigned __int64(DWORD(m_regExtmenuhigh))<<32;\r
+       m_extmenu |= unsigned __int64(DWORD(m_regExtmenu));\r
+\r
+}\r
+\r
+CSetExtMenu::~CSetExtMenu()\r
+{\r
+}\r
+\r
+void CSetExtMenu::DoDataExchange(CDataExchange* pDX)\r
+{\r
+       ISettingsPropPage::DoDataExchange(pDX);\r
+       DDX_Control(pDX, IDC_MENULIST, m_cMenuList);\r
+}\r
+\r
+\r
+BEGIN_MESSAGE_MAP(CSetExtMenu, ISettingsPropPage)\r
+       ON_NOTIFY(LVN_ITEMCHANGED, IDC_MENULIST, OnLvnItemchangedMenulist)\r
+       ON_BN_CLICKED(IDC_GETLOCKTOP, OnChange)\r
+END_MESSAGE_MAP()\r
+\r
+\r
+BOOL CSetExtMenu::OnInitDialog()\r
+{\r
+       ISettingsPropPage::OnInitDialog();\r
+\r
+       m_tooltips.Create(this);\r
+       m_tooltips.AddTool(IDC_MENULIST, IDS_SETTINGS_MENULAYOUT_TT);\r
+       //m_tooltips.AddTool(IDC_GETLOCKTOP, IDS_SETTINGS_GETLOCKTOP_TT);\r
+       //m_tooltips.AddTool(IDC_NOCONTEXTPATHS, IDS_SETTINGS_EXCLUDECONTEXTLIST_TT);\r
+\r
+       m_cMenuList.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);\r
+\r
+       m_cMenuList.DeleteAllItems();\r
+       int c = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;\r
+       while (c>=0)\r
+               m_cMenuList.DeleteColumn(c--);\r
+       m_cMenuList.InsertColumn(0, _T(""));\r
+\r
+       CXPTheme theme;\r
+       theme.SetWindowTheme(m_cMenuList.GetSafeHwnd(), L"Explorer", NULL);\r
+\r
+       m_cMenuList.SetRedraw(false);\r
+\r
+       m_imgList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 4, 1);\r
+\r
+       m_bBlock = true;\r
+\r
+       InsertMenuItemToList(&m_cMenuList,&m_imgList);\r
+       SetMenuItemCheck(&m_cMenuList,m_extmenu);\r
+\r
+       m_bBlock = false;\r
+\r
+       m_cMenuList.SetImageList(&m_imgList, LVSIL_SMALL);\r
+       int mincol = 0;\r
+       int maxcol = ((CHeaderCtrl*)(m_cMenuList.GetDlgItem(0)))->GetItemCount()-1;\r
+       int col;\r
+       for (col = mincol; col <= maxcol; col++)\r
+       {\r
+               m_cMenuList.SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);\r
+       }\r
+       m_cMenuList.SetRedraw(true);\r
+\r
+       UpdateData(FALSE);\r
+\r
+       return TRUE;\r
+}\r
+\r
+BOOL CSetExtMenu::PreTranslateMessage(MSG* pMsg)\r
+{\r
+       m_tooltips.RelayEvent(pMsg);\r
+       return ISettingsPropPage::PreTranslateMessage(pMsg);\r
+}\r
+\r
+BOOL CSetExtMenu::OnApply()\r
+{\r
+       UpdateData();\r
+\r
+       m_regExtmenu = (DWORD)(m_extmenu & 0xFFFFFFFF);\r
+       m_regExtmenuhigh = (DWORD)(m_extmenu >> 32);\r
+\r
+       SetModified(FALSE);\r
+       return ISettingsPropPage::OnApply();\r
+}\r
+\r
+void CSetExtMenu::OnLvnItemchangedMenulist(NMHDR * /*pNMHDR*/, LRESULT *pResult)\r
+{\r
+       if( m_bBlock )\r
+               return;\r
+\r
+       SetModified(TRUE);\r
+       if (m_cMenuList.GetItemCount() > 0)\r
+       {\r
+               m_extmenu = GetMenuListMask(&m_cMenuList);\r
+       }\r
+       *pResult = 0;\r
+}\r
+\r
+void CSetExtMenu::OnChange()\r
+{\r
+       SetModified();\r
+}\r