OSDN Git Service

RebaseDlg: Disable Reset\Swtich Command at context menu.
authorFrank Li <lznuaa@gmail.com>
Thu, 19 Feb 2009 14:45:55 +0000 (22:45 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 19 Feb 2009 14:45:55 +0000 (22:45 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/GitLogListBase.h
src/TortoiseProc/RebaseDlg.cpp

index 0b5e3d4..3bc63a3 100644 (file)
@@ -92,7 +92,7 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl()
        m_bExitThread=FALSE;\r
        m_IsOldFirst = FALSE;\r
        m_IsRebaseReplaceGraph = FALSE;\r
-       m_IsEnableRebaseMenu = FALSE;\r
+\r
 \r
        for(int i=0;i<Lanes::COLORS_NUM;i++)\r
        {\r
@@ -111,6 +111,12 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl()
        // get relative time display setting from registry\r
        DWORD regRelativeTimes = CRegDWORD(_T("Software\\TortoiseGit\\RelativeTimes"), FALSE);\r
        m_bRelativeTimes = (regRelativeTimes != 0);\r
+       m_ContextMenuMask = 0xFFFFFFFFFFFFFFFF;\r
+\r
+       m_ContextMenuMask &= ~GetContextMenuBit(ID_REBASE_PICK);\r
+       m_ContextMenuMask &= ~GetContextMenuBit(ID_REBASE_SQUASH);\r
+       m_ContextMenuMask &= ~GetContextMenuBit(ID_REBASE_EDIT);\r
+       m_ContextMenuMask &= ~GetContextMenuBit(ID_REBASE_SKIP);\r
 }\r
 \r
 CGitLogListBase::~CGitLogListBase()\r
@@ -1015,13 +1021,21 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
        if (popup.CreatePopupMenu())\r
        {\r
 \r
-               if(this->m_IsEnableRebaseMenu)\r
-               {\r
+               if(m_ContextMenuMask&GetContextMenuBit(ID_REBASE_PICK))\r
                        popup.AppendMenuIcon(ID_REBASE_PICK,   _T("Pick"),   IDI_OPEN);\r
+\r
+               if(m_ContextMenuMask&GetContextMenuBit(ID_REBASE_SQUASH))\r
                        popup.AppendMenuIcon(ID_REBASE_SQUASH, _T("Squash"), IDI_OPEN);\r
+\r
+               if(m_ContextMenuMask&GetContextMenuBit(ID_REBASE_EDIT))\r
                        popup.AppendMenuIcon(ID_REBASE_EDIT,   _T("Edit"),   IDI_OPEN);\r
+\r
+               if(m_ContextMenuMask&GetContextMenuBit(ID_REBASE_SKIP))\r
                        popup.AppendMenuIcon(ID_REBASE_SKIP,   _T("SKIP"),   IDI_OPEN);\r
-               }\r
+               \r
+               if(m_ContextMenuMask&(GetContextMenuBit(ID_REBASE_SKIP)|GetContextMenuBit(ID_REBASE_EDIT)|\r
+                             GetContextMenuBit(ID_REBASE_SQUASH)|GetContextMenuBit(ID_REBASE_PICK)))\r
+                       popup.AppendMenu(MF_SEPARATOR, NULL);\r
 \r
                if (GetSelectedCount() == 1)\r
                {\r
@@ -1047,7 +1061,8 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                        {\r
                                if (m_hasWC)\r
                                {\r
-                                       popup.AppendMenuIcon(ID_COMPARE, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
+                                       if(m_ContextMenuMask&GetContextMenuBit(ID_COMPARE))\r
+                                               popup.AppendMenuIcon(ID_COMPARE, IDS_LOG_POPUP_COMPARE, IDI_DIFF);\r
                                        // TODO:\r
                                        // TortoiseMerge could be improved to take a /blame switch\r
                                        // and then not 'cat' the files from a unified diff but\r
@@ -1056,8 +1071,11 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                                        // this feature is commented out.\r
                                        //popup.AppendMenu(ID_BLAMECOMPARE, IDS_LOG_POPUP_BLAMECOMPARE, IDI_BLAME);\r
                                }\r
-                               popup.AppendMenuIcon(ID_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF_CH, IDI_DIFF);\r
-                               popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF);\r
+                               if(m_ContextMenuMask&GetContextMenuBit(ID_GNUDIFF1))\r
+                                       popup.AppendMenuIcon(ID_GNUDIFF1, IDS_LOG_POPUP_GNUDIFF_CH, IDI_DIFF);\r
+\r
+                               if(m_ContextMenuMask&GetContextMenuBit(ID_COMPAREWITHPREVIOUS))\r
+                                       popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF);\r
                                //popup.AppendMenuIcon(ID_BLAMEWITHPREVIOUS, IDS_LOG_POPUP_BLAMEWITHPREVIOUS, IDI_BLAME);\r
                                popup.AppendMenu(MF_SEPARATOR, NULL);\r
                        }\r
@@ -1085,12 +1103,24 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                        \r
                        CString str;\r
                        str.Format(_T("Reset %s to this"),g_Git.GetCurrentBranch());\r
-                       popup.AppendMenuIcon(ID_RESET,str,IDI_REVERT);\r
-                       popup.AppendMenuIcon(ID_SWITCHTOREV, _T("Switch/Checkout to this") , IDI_SWITCH);\r
-                       popup.AppendMenuIcon(ID_CREATE_BRANCH, _T("Create Branch at this version") , IDI_COPY);\r
-                       popup.AppendMenuIcon(ID_CREATE_TAG, _T("Create Tag at this version"), IDI_COPY);\r
-                       popup.AppendMenuIcon(ID_CHERRY_PICK, _T("Cherry Pick this version"), IDI_EXPORT);\r
-                       popup.AppendMenuIcon(ID_EXPORT, _T("Export this version"), IDI_EXPORT);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_RESET))\r
+                               popup.AppendMenuIcon(ID_RESET,str,IDI_REVERT);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_SWITCHTOREV))\r
+                               popup.AppendMenuIcon(ID_SWITCHTOREV, _T("Switch/Checkout to this") , IDI_SWITCH);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_CREATE_BRANCH))\r
+                               popup.AppendMenuIcon(ID_CREATE_BRANCH, _T("Create Branch at this version") , IDI_COPY);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_CREATE_TAG))\r
+                               popup.AppendMenuIcon(ID_CREATE_TAG, _T("Create Tag at this version"), IDI_COPY);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_CHERRY_PICK))\r
+                               popup.AppendMenuIcon(ID_CHERRY_PICK, _T("Cherry Pick this version"), IDI_EXPORT);\r
+\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_EXPORT))\r
+                               popup.AppendMenuIcon(ID_EXPORT, _T("Export this version"), IDI_EXPORT); \r
                        \r
 \r
                        popup.AppendMenu(MF_SEPARATOR, NULL);\r
@@ -1100,12 +1130,14 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                        bool bAddSeparator = false;\r
                        if (IsSelectionContinuous() || (GetSelectedCount() == 2))\r
                        {\r
-                               popup.AppendMenuIcon(ID_COMPARETWO, IDS_LOG_POPUP_COMPARETWO, IDI_DIFF);\r
+                               if(m_ContextMenuMask&GetContextMenuBit(ID_COMPARETWO))\r
+                                       popup.AppendMenuIcon(ID_COMPARETWO, IDS_LOG_POPUP_COMPARETWO, IDI_DIFF);\r
                        }\r
                        if (GetSelectedCount() == 2)\r
                        {\r
                                //popup.AppendMenuIcon(ID_BLAMETWO, IDS_LOG_POPUP_BLAMEREVS, IDI_BLAME);\r
-                               popup.AppendMenuIcon(ID_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
+                               if(m_ContextMenuMask&GetContextMenuBit(ID_GNUDIFF2))\r
+                                       popup.AppendMenuIcon(ID_GNUDIFF2, IDS_LOG_POPUP_GNUDIFF, IDI_DIFF);\r
                                bAddSeparator = true;\r
                        }\r
                        if (m_hasWC)\r
@@ -1134,13 +1166,17 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point)
                \r
                if (GetSelectedCount() == 1)\r
                {\r
-                       popup.AppendMenuIcon(ID_COPYHASH, _T("Copy Commit Hash"));\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_COPYHASH))\r
+                               popup.AppendMenuIcon(ID_COPYHASH, _T("Copy Commit Hash"));\r
                }\r
                if (GetSelectedCount() != 0)\r
                {\r
-                       popup.AppendMenuIcon(ID_COPYCLIPBOARD, IDS_LOG_POPUP_COPYTOCLIPBOARD);\r
+                       if(m_ContextMenuMask&GetContextMenuBit(ID_COPYCLIPBOARD))\r
+                               popup.AppendMenuIcon(ID_COPYCLIPBOARD, IDS_LOG_POPUP_COPYTOCLIPBOARD);\r
                }\r
-               popup.AppendMenuIcon(ID_FINDENTRY, IDS_LOG_POPUP_FIND);\r
+\r
+               if(m_ContextMenuMask&GetContextMenuBit(ID_FINDENTRY))\r
+                       popup.AppendMenuIcon(ID_FINDENTRY, IDS_LOG_POPUP_FIND);\r
 \r
                int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
 //             DialogEnableWindow(IDOK, FALSE);\r
index afbde22..659c881 100644 (file)
@@ -68,12 +68,13 @@ public:
        BOOL m_IsIDReplaceAction;\r
        BOOL m_IsOldFirst;\r
        BOOL m_IsRebaseReplaceGraph;\r
-       BOOL m_IsEnableRebaseMenu;\r
+\r
 \r
        BOOL m_bStrictStopped;\r
        BOOL m_bShowBugtraqColumn;\r
        BOOL m_bSearchIndex;\r
        BOOL m_bCancelled;\r
+       unsigned __int64 m_ContextMenuMask;\r
 \r
        bool                            m_hasWC;\r
        GitRev                          m_wcRev;\r
@@ -138,6 +139,7 @@ public:
        ID_REBASE_SQUASH,\r
        ID_REBASE_SKIP,\r
        };\r
+       inline unsigned __int64 GetContextMenuBit(int i){ return ((unsigned __int64 )0x1)<<i ;}\r
        void InsertGitColumn();\r
        void ResizeAllListCtrlCols();\r
        void CopySelectionToClipBoard(bool hashonly=FALSE);\r
index 28f8d1b..f67c46a 100644 (file)
@@ -178,6 +178,13 @@ BOOL CRebaseDlg::OnInitDialog()
        FetchLogList();\r
        SetContinueButtonText();\r
        this->SetControlEnable();\r
+\r
+       m_CommitList.m_ContextMenuMask &= ~(m_CommitList.GetContextMenuBit(CGitLogListBase::ID_CHERRY_PICK)|\r
+                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_SWITCHTOREV)|\r
+                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_RESET)|\r
+                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTREV)|\r
+                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTTOREV));\r
+\r
        return TRUE;\r
 }\r
 // CRebaseDlg message handlers\r
@@ -748,7 +755,11 @@ void CRebaseDlg::SetControlEnable()
                this->GetDlgItem(IDC_SQUASH_ALL)->EnableWindow(TRUE);\r
                this->GetDlgItem(IDC_REBASE_COMBOXEX_BRANCH)->EnableWindow(TRUE);\r
                this->GetDlgItem(IDC_REBASE_COMBOXEX_UPSTREAM)->EnableWindow(TRUE);\r
-               this->m_CommitList.m_IsEnableRebaseMenu=TRUE;\r
+               //this->m_CommitList.m_IsEnableRebaseMenu=TRUE;\r
+               this->m_CommitList.m_ContextMenuMask |= m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_PICK)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SQUASH)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_EDIT)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SKIP);\r
                break;\r
 \r
        case REBASE_START:\r
@@ -763,7 +774,11 @@ void CRebaseDlg::SetControlEnable()
                this->GetDlgItem(IDC_SQUASH_ALL)->EnableWindow(FALSE);\r
                this->GetDlgItem(IDC_REBASE_COMBOXEX_BRANCH)->EnableWindow(FALSE);\r
                this->GetDlgItem(IDC_REBASE_COMBOXEX_UPSTREAM)->EnableWindow(FALSE);\r
-               this->m_CommitList.m_IsEnableRebaseMenu=FALSE;\r
+               //this->m_CommitList.m_IsEnableRebaseMenu=FALSE;\r
+               this->m_CommitList.m_ContextMenuMask &= ~(m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_PICK)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SQUASH)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_EDIT)|\r
+                                                                                               m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SKIP));\r
                break;\r
        }\r
 \r