#pragma once\r
#include "afxwin.h"\r
+#include "LogDlg.h"\r
\r
class CChooseVersion\r
{\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
}\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
+ }\r
+ }\r
+\r
void UpdateRevsionName()\r
{ \r
int radio=m_pWin->GetCheckedRadioButton(IDC_RADIO_HEAD,IDC_RADIO_VERSION); \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_BUTTON_SHOW, OnBnClickedShow)\\r
ON_BN_CLICKED(IDC_RADIO_VERSION, OnBnClickedChooseRadioHost)\r
\r
#define CHOOSE_VERSION_ADDANCHOR \\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
if (m_bSelect)\r
{\r
// the dialog is used to select revisions\r
- if (m_bSelectionMustBeContinuous)\r
- DialogEnableWindow(IDOK, (m_LogList.GetSelectedCount()!=0)&&(m_LogList.IsSelectionContinuous()));\r
- else\r
- DialogEnableWindow(IDOK, m_LogList.GetSelectedCount()!=0);\r
+ // enable the OK button if appropriate\r
+ EnableOKButton();\r
}\r
else\r
{\r
// the dialog is used to just view log messages\r
+ // hide the OK button and set text on Cancel button to OK\r
GetDlgItemText(IDOK, temp);\r
SetDlgItemText(IDCANCEL, temp);\r
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);\r
if (m_bSelect)\r
{\r
// the dialog is used to select revisions\r
- if (m_bSelectionMustBeContinuous)\r
+ if (m_bSelectionMustBeSingle)\r
+ {\r
+ // enable OK button if only a single revision is selected\r
+ DialogEnableWindow(IDOK, (m_LogList.GetSelectedCount()==1));\r
+ }\r
+ else if (m_bSelectionMustBeContinuous)\r
DialogEnableWindow(IDOK, (m_LogList.GetSelectedCount()!=0)&&(m_LogList.IsSelectionContinuous()));\r
else\r
DialogEnableWindow(IDOK, m_LogList.GetSelectedCount()!=0);\r
void CLogDlg::OnCancel()\r
{\r
// canceling means stopping the working thread if it's still running.\r
- // we do this by using the Subversion cancel callback.\r
- // But canceling can also mean just to close the dialog, depending on the\r
- // text shown on the cancel button (it could simply read "OK").\r
- CString temp, temp2;\r
- GetDlgItemText(IDOK, temp);\r
- temp2.LoadString(IDS_MSGBOX_CANCEL);\r
- if ((temp.Compare(temp2)==0)||(this->IsThreadRunning()))\r
- {\r
- //m_bCancelled = true;\r
- //return;\r
- if(m_LogList.m_bThreadRunning)\r
- {\r
- //m_LogList.m_bExitThread=true;\r
- //WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,INFINITE);\r
- m_LogList.TerminateThread();\r
- }\r
-\r
- //m_LogList.TerminateThread();\r
+ if (this->IsThreadRunning())\r
+ {\r
+ m_LogList.TerminateThread();\r
}\r
UpdateData();\r
\r
\r
void CLogDlg::OnOK()\r
{\r
-#if 0 \r
// since the log dialog is also used to select revisions for other\r
// dialogs, we have to do some work before closing this dialog\r
if (GetFocus() != GetDlgItem(IDOK))\r
return; // if the "OK" button doesn't have the focus, do nothing: this prevents closing the dialog when pressing enter\r
+\r
+ \r
+ if (this->IsThreadRunning())\r
+ {\r
+ m_LogList.TerminateThread();\r
+ }\r
+ UpdateData();\r
+ // check that one and only one row is selected\r
+ if (m_LogList.GetSelectedCount() == 1)\r
+ {\r
+ // get the selected row\r
+ POSITION pos = m_LogList.GetFirstSelectedItemPosition();\r
+ int selIndex = m_LogList.GetNextSelectedItem(pos);\r
+ if (selIndex < m_LogList.m_arShownList.GetCount())\r
+ {\r
+ // all ok, pick up the revision\r
+ GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_LogList.m_arShownList.GetAt(selIndex));\r
+ // extract the hash\r
+ m_sSelectedHash = pLogEntry->m_CommitHash;\r
+ }\r
+ }\r
+ UpdateData(FALSE);\r
+ SaveSplitterPos();\r
+ __super::OnOK();\r
+ \r
+ #if 0 \r
if (!GetDlgItem(IDOK)->IsWindowVisible() && GetFocus() != GetDlgItem(IDCANCEL))\r
return; // the Cancel button works as the OK button. But if the cancel button has not the focus, do nothing.\r
\r
void SetDialogTitle(const CString& sTitle) {m_sTitle = sTitle;}\r
void SetSelect(bool bSelect) {m_bSelect = bSelect;}\r
void ContinuousSelection(bool bCont = true) {m_bSelectionMustBeContinuous = bCont;}\r
+ void SingleSelection(bool bSingle = true) {m_bSelectionMustBeSingle = bSingle;}\r
void SetMergePath(const CTGitPath& mergepath) {m_mergePath = mergepath;}\r
+ /**\r
+ * Provides selected commit hash if available, call after OK return from here\r
+ * Empty if none\r
+ **/\r
+ CString GetSelectedHash(){ return m_sSelectedHash; }\r
\r
// const GitRevRangeArray& GetSelectedRevRanges() {return m_selectedRevs;}\r
\r
//GitRev m_wcRev;\r
// GitRevRangeArray m_selectedRevs;\r
// GitRevRangeArray m_selectedRevsOneRange;\r
+ CString m_sSelectedHash; // set to selected commit hash on OK if appropriate\r
bool m_bSelectionMustBeContinuous;\r
+ bool m_bSelectionMustBeSingle;\r
long m_logcounter;\r
bool m_bCancelled;\r
\r