#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
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
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
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,¤t,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
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
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