OSDN Git Service

Auto List okay for Diff dialog
authorFrank Li <lznuaa@gmail.com>
Sun, 24 Jan 2010 06:22:35 +0000 (14:22 +0800)
committerFrank Li <lznuaa@gmail.com>
Sun, 24 Jan 2010 06:22:35 +0000 (14:22 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/FileDiffDlg.cpp
src/TortoiseProc/FileDiffDlg.h

index 1286648..4613889 100644 (file)
@@ -53,6 +53,7 @@ CFileDiffDlg::CFileDiffDlg(CWnd* pParent /*=NULL*/)
        m_pProgDlg(NULL),\r
        m_bCancelled(false)\r
 {\r
        m_pProgDlg(NULL),\r
        m_bCancelled(false)\r
 {\r
+       m_bLoadingRef=FALSE;\r
 }\r
 \r
 CFileDiffDlg::~CFileDiffDlg()\r
 }\r
 \r
 CFileDiffDlg::~CFileDiffDlg()\r
@@ -90,6 +91,7 @@ BEGIN_MESSAGE_MAP(CFileDiffDlg, CResizableStandAloneDialog)
        ON_WM_TIMER()\r
        ON_EN_CHANGE(IDC_REV1EDIT, &CFileDiffDlg::OnEnChangeRev1edit)\r
        ON_EN_CHANGE(IDC_REV2EDIT, &CFileDiffDlg::OnEnChangeRev2edit)\r
        ON_WM_TIMER()\r
        ON_EN_CHANGE(IDC_REV1EDIT, &CFileDiffDlg::OnEnChangeRev1edit)\r
        ON_EN_CHANGE(IDC_REV2EDIT, &CFileDiffDlg::OnEnChangeRev2edit)\r
+       ON_MESSAGE(MSG_REF_LOADED, OnRefLoad)\r
 END_MESSAGE_MAP()\r
 \r
 \r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -250,6 +252,14 @@ BOOL CFileDiffDlg::OnInitDialog()
                CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
        }\r
 \r
                CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
        }\r
 \r
+       InterlockedExchange(&m_bLoadingRef, TRUE);\r
+       if (AfxBeginThread(LoadRefThreadEntry, this)==NULL)\r
+       {\r
+               InterlockedExchange(&m_bLoadingRef, FALSE);\r
+               CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
+       }\r
+\r
+\r
        this->m_cRev1Btn.AddEntry(_T("RefBrowse"));\r
        this->m_cRev1Btn.AddEntry(_T("Log"));\r
        this->m_cRev1Btn.AddEntry(_T("RefLog"));\r
        this->m_cRev1Btn.AddEntry(_T("RefBrowse"));\r
        this->m_cRev1Btn.AddEntry(_T("Log"));\r
        this->m_cRev1Btn.AddEntry(_T("RefLog"));\r
@@ -373,7 +383,6 @@ void CFileDiffDlg::EnableInputControl(bool b)
        this->m_cRev2Btn.EnableWindow(b);\r
        m_cFilter.EnableWindow(b);\r
        m_SwitchButton.EnableWindow(b);\r
        this->m_cRev2Btn.EnableWindow(b);\r
        m_cFilter.EnableWindow(b);\r
        m_SwitchButton.EnableWindow(b);\r
-       \r
 }\r
 \r
 void CFileDiffDlg::DoDiff(int selIndex, bool blame)\r
 }\r
 \r
 void CFileDiffDlg::DoDiff(int selIndex, bool blame)\r
@@ -668,6 +677,16 @@ void CFileDiffDlg::OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult)
        }\r
 }\r
 \r
        }\r
 }\r
 \r
+UINT CFileDiffDlg::LoadRefThread()\r
+{\r
+       g_Git.GetBranchList(m_Reflist,NULL,CGit::BRANCH_ALL);\r
+       g_Git.GetTagList(m_Reflist);\r
+\r
+       this->PostMessage(MSG_REF_LOADED);\r
+       InterlockedExchange(&m_bLoadingRef, FALSE);\r
+       return 0;\r
+}\r
+\r
 void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)\r
 {\r
        if ((pWnd==0)||(pWnd != &m_cFileList))\r
 void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)\r
 {\r
        if ((pWnd==0)||(pWnd != &m_cFileList))\r
@@ -1284,3 +1303,18 @@ void CFileDiffDlg::OnEnChangeRev2edit()
 \r
        // TODO:  Add your control notification handler code here\r
 }\r
 \r
        // TODO:  Add your control notification handler code here\r
 }\r
+\r
+LRESULT CFileDiffDlg::OnRefLoad(WPARAM wParam, LPARAM lParam)\r
+{\r
+       for(int i=0;i<m_Reflist.size();i++)\r
+       {\r
+               CString str=m_Reflist[i];\r
+               \r
+               if(str.Find(_T("remotes/")) == 0)\r
+                       str=str.Mid(8);\r
+\r
+               m_ctrRev1Edit.AddSearchString(str);\r
+               m_ctrRev2Edit.AddSearchString(str);\r
+       }\r
+       return 0;\r
+}\r
index fec2833..163a194 100644 (file)
@@ -39,6 +39,8 @@
  * repository. It shows a list of files/folders which were changed in those\r
  * two revisions.\r
  */\r
  * repository. It shows a list of files/folders which were changed in those\r
  * two revisions.\r
  */\r
+#define MSG_REF_LOADED (WM_USER+120)\r
+\r
 class CFileDiffDlg : public CResizableStandAloneDialog\r
 {\r
        DECLARE_DYNAMIC(CFileDiffDlg)\r
 class CFileDiffDlg : public CResizableStandAloneDialog\r
 {\r
        DECLARE_DYNAMIC(CFileDiffDlg)\r
@@ -72,6 +74,7 @@ protected:
        virtual void OnCancel();\r
        virtual BOOL OnInitDialog();\r
        virtual BOOL PreTranslateMessage(MSG* pMsg);\r
        virtual void OnCancel();\r
        virtual BOOL OnInitDialog();\r
        virtual BOOL PreTranslateMessage(MSG* pMsg);\r
+       afx_msg LRESULT OnRefLoad(WPARAM wParam, LPARAM lParam);\r
        afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
@@ -125,6 +128,15 @@ private:
        static UINT                     ExportThreadEntry(LPVOID pVoid);\r
        UINT                            ExportThread();\r
 \r
        static UINT                     ExportThreadEntry(LPVOID pVoid);\r
        UINT                            ExportThread();\r
 \r
+       static UINT                     LoadRefThreadEntry(LPVOID pVoid)\r
+       {\r
+               return ((CFileDiffDlg *)pVoid)->LoadRefThread();\r
+       };\r
+\r
+       UINT                            LoadRefThread();\r
+\r
+       STRING_VECTOR           m_Reflist;\r
+\r
        virtual BOOL            Cancel() {return m_bCancelled;}\r
 \r
        CToolTips                       m_tooltips;\r
        virtual BOOL            Cancel() {return m_bCancelled;}\r
 \r
        CToolTips                       m_tooltips;\r
@@ -158,6 +170,8 @@ private:
        bool                            m_bDoPegDiff;\r
        volatile LONG           m_bThreadRunning;\r
 \r
        bool                            m_bDoPegDiff;\r
        volatile LONG           m_bThreadRunning;\r
 \r
+       volatile LONG           m_bLoadingRef;\r
+\r
        bool                            m_bCancelled;\r
 \r
        void                            Sort();\r
        bool                            m_bCancelled;\r
 \r
        void                            Sort();\r