OSDN Git Service

Add color success and fail at ProgressDlg
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / ChooseVersion.h
index f4e51b1..1f18fb3 100644 (file)
@@ -1,8 +1,13 @@
 #pragma once\r
 #include "afxwin.h"\r
+#include "LogDlg.h"\r
+#include "BrowseRefsDlg.h"\r
 \r
 class CChooseVersion\r
 {\r
+public:\r
+       CString m_initialRefName;\r
+       \r
 private:\r
        CWnd *  m_pWin;\r
 protected:\r
@@ -10,6 +15,9 @@ protected:
        CHistoryCombo m_ChooseVersioinTags;    \r
        CHistoryCombo m_ChooseVersioinVersion; \r
 \r
+       //Notification when version changed. Can be implemented in derived classes.\r
+       virtual void OnVersionChanged(){}\r
+\r
        afx_msg void OnBnClickedChooseRadio() \r
        {\r
                this->m_ChooseVersioinTags.EnableWindow(FALSE);                                                                                                 \r
@@ -30,7 +38,29 @@ protected:
                        this->m_ChooseVersioinVersion.EnableWindow(TRUE);                                               \r
                break;          \r
                }\r
+               // enable version browse button if Version is selected\r
+               m_pWin->GetDlgItem(IDC_BUTTON_SHOW)->EnableWindow(radio == IDC_RADIO_VERSION);\r
+               OnVersionChanged();\r
+       }\r
+\r
+       void OnBnClickedChooseVersion()\r
+       {\r
+               // use the git log to allow selection of a version\r
+               CLogDlg dlg;\r
+               // tell the dialog to use mode for selecting revisions\r
+               dlg.SetSelect(true);\r
+               // only one revision must be selected however\r
+               dlg.SingleSelection(true);\r
+               if ( dlg.DoModal() == IDOK )\r
+               {\r
+                       // get selected hash if any\r
+                       CString selectedHash = dlg.GetSelectedHash();\r
+                       // load into window, do this even if empty so that it is clear that nothing has been selected\r
+                       m_ChooseVersioinVersion.SetWindowText( selectedHash );\r
+                       OnVersionChanged();\r
+               }\r
        }\r
+\r
        void UpdateRevsionName()\r
        {                                                                                                                                                       \r
                int radio=m_pWin->GetCheckedRadioButton(IDC_RADIO_HEAD,IDC_RADIO_VERSION);              \r
@@ -56,17 +86,72 @@ protected:
                OnBnClickedChooseRadio();\r
        }\r
 \r
-       void Init()\r
+       void OnBnClickedButtonBrowseRef()\r
        {\r
-               CStringList list;\r
+               CString origRef;\r
+               UpdateRevsionName();\r
+               CString resultRef = CBrowseRefsDlg::PickRef(false, m_VersionName, gPickRef_All);\r
+               if(resultRef.IsEmpty())\r
+                       return;\r
+               SelectRef(resultRef, false);\r
+       }\r
+\r
+       void SelectRef(CString refName, bool bRefNameIsPossiblyNotFullName = true)\r
+       {\r
+               if(bRefNameIsPossiblyNotFullName)\r
+               {\r
+                       //Make sure refName is a full ref name first\r
+                       CString fullRefName = g_Git.GetFullRefName(refName);\r
+                       if(!fullRefName.IsEmpty())\r
+                               refName = fullRefName;\r
+               }\r
+\r
+               if(wcsncmp(refName,L"refs/",5)==0)\r
+                       refName = refName.Mid(5);\r
+               if(wcsncmp(refName,L"heads/",6)==0)\r
+               {\r
+                       refName = refName.Mid(6);\r
+                       SetDefaultChoose(IDC_RADIO_BRANCH);\r
+                       m_ChooseVersioinBranch.SetCurSel(\r
+                               m_ChooseVersioinBranch.FindStringExact(-1, refName));\r
+               }\r
+               else if(wcsncmp(refName,L"remotes/",8)==0)\r
+               {\r
+                       SetDefaultChoose(IDC_RADIO_BRANCH);\r
+                       m_ChooseVersioinBranch.SetCurSel(\r
+                               m_ChooseVersioinBranch.FindStringExact(-1, refName));\r
+               }\r
+               else if(wcsncmp(refName,L"tags/",5)==0)\r
+               {\r
+                       refName = refName.Mid(5);\r
+                       SetDefaultChoose(IDC_RADIO_TAGS);\r
+                       m_ChooseVersioinTags.SetCurSel(\r
+                               m_ChooseVersioinTags.FindStringExact(-1, refName));\r
+               }\r
+               OnVersionChanged();\r
+       }\r
+\r
+\r
+       void Init()\r
+       {       \r
+               m_ChooseVersioinBranch.SetMaxHistoryItems(0x7FFFFFFF);\r
+               m_ChooseVersioinTags.SetMaxHistoryItems(0x7FFFFFFF);\r
+\r
+               STRING_VECTOR list;\r
                g_Git.GetTagList(list);\r
                m_ChooseVersioinTags.AddString(list);\r
 \r
-               list.RemoveAll();\r
+               list.clear();\r
                int current;\r
                g_Git.GetBranchList(list,&current,CGit::BRANCH_ALL);\r
                m_ChooseVersioinBranch.AddString(list);\r
                m_ChooseVersioinBranch.SetCurSel(current);\r
+\r
+\r
+               if(m_initialRefName.IsEmpty())\r
+                       OnVersionChanged();\r
+               else\r
+                       SelectRef(m_initialRefName);\r
        }\r
 public:                                        \r
        CString m_VersionName;\r
@@ -87,7 +172,9 @@ public:
        ON_BN_CLICKED(IDC_RADIO_HEAD,           OnBnClickedChooseRadioHost)\\r
        ON_BN_CLICKED(IDC_RADIO_BRANCH,         OnBnClickedChooseRadioHost)\\r
        ON_BN_CLICKED(IDC_RADIO_TAGS,           OnBnClickedChooseRadioHost)\\r
-       ON_BN_CLICKED(IDC_RADIO_VERSION,        OnBnClickedChooseRadioHost)\r
+       ON_BN_CLICKED(IDC_BUTTON_SHOW,          OnBnClickedShow)\\r
+       ON_BN_CLICKED(IDC_RADIO_VERSION,        OnBnClickedChooseRadioHost)\\r
+       ON_BN_CLICKED(IDC_BUTTON_BROWSE_REF,    OnBnClickedButtonBrowseRefHost)\r
 \r
 #define CHOOSE_VERSION_ADDANCHOR                                                               \\r
        {                                                                                                                       \\r
@@ -96,7 +183,10 @@ public:
                AddAnchor(IDC_COMBOBOXEX_VERSION, TOP_LEFT, TOP_RIGHT); \\r
                AddAnchor(IDC_GROUP_BASEON, TOP_LEFT, TOP_RIGHT);               \\r
                AddAnchor(IDC_BUTTON_SHOW,TOP_RIGHT);           \\r
+               AddAnchor(IDC_BUTTON_BROWSE_REF,TOP_RIGHT);             \\r
        }       \r
 \r
 #define CHOOSE_EVENT_RADIO() \\r
-       afx_msg void OnBnClickedChooseRadioHost(){OnBnClickedChooseRadio();}\r
+       afx_msg void OnBnClickedChooseRadioHost(){OnBnClickedChooseRadio();}\\r
+       afx_msg void OnBnClickedShow(){OnBnClickedChooseVersion();}\\r
+       afx_msg void OnBnClickedButtonBrowseRefHost(){OnBnClickedButtonBrowseRef();}\r