1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "TortoiseProc.h"
21 #include "SwitchDlg.h"
22 //#include "RepositoryBrowser.h"
23 #include "BrowseFolder.h"
27 IMPLEMENT_DYNAMIC(CSwitchDlg
, CResizableStandAloneDialog
)
28 CSwitchDlg::CSwitchDlg(CWnd
* pParent
/*=NULL*/)
29 : CResizableStandAloneDialog(CSwitchDlg::IDD
, pParent
)
31 // , Revision(_T("HEAD"))
36 CSwitchDlg::~CSwitchDlg()
42 void CSwitchDlg::DoDataExchange(CDataExchange
* pDX
)
44 CResizableStandAloneDialog::DoDataExchange(pDX
);
45 DDX_Control(pDX
, IDC_URLCOMBO
, m_URLCombo
);
46 DDX_Text(pDX
, IDC_REVISION_NUM
, m_rev
);
50 BEGIN_MESSAGE_MAP(CSwitchDlg
, CResizableStandAloneDialog
)
51 ON_BN_CLICKED(IDC_BROWSE
, OnBnClickedBrowse
)
52 ON_BN_CLICKED(IDHELP
, OnBnClickedHelp
)
53 ON_EN_CHANGE(IDC_REVISION_NUM
, &CSwitchDlg::OnEnChangeRevisionNum
)
54 ON_BN_CLICKED(IDC_LOG
, &CSwitchDlg::OnBnClickedLog
)
55 ON_REGISTERED_MESSAGE(WM_REVSELECTED
, &CSwitchDlg::OnRevSelected
)
59 void CSwitchDlg::SetDialogTitle(const CString
& sTitle
)
64 void CSwitchDlg::SetUrlLabel(const CString
& sLabel
)
69 BOOL
CSwitchDlg::OnInitDialog()
71 CResizableStandAloneDialog::OnInitDialog();
73 CTGitPath
GitPath(m_path
);
74 SetDlgItemText(IDC_SWITCHPATH
, m_path
);
75 m_bFolder
= GitPath
.IsDirectory();
77 //CString url = Git.GetURLFromPath(GitPath);
78 //CString sUUID = Git.GetUUIDFromPath(GitPath);
79 //m_URLCombo.SetURLHistory(TRUE);
80 //m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS\\")+sUUID, _T("url"));
81 //m_URLCombo.SetCurSel(0);
83 // if (!url.IsEmpty())
86 // m_URLCombo.AddString(CTGitPath(url).GetUIPathString(), 0);
87 // m_URLCombo.SelectString(-1, CTGitPath(url).GetUIPathString());
91 if (m_sTitle
.IsEmpty())
92 GetWindowText(m_sTitle
);
93 SetWindowText(m_sTitle
);
94 if (m_sLabel
.IsEmpty())
95 GetDlgItemText(IDC_URLLABEL
, m_sLabel
);
96 SetDlgItemText(IDC_URLLABEL
, m_sLabel
);
98 // set head revision as default revision
99 // SetRevision(GitRev::REV_HEAD);
102 GetWindowRect(&rect
);
103 m_height
= rect
.bottom
- rect
.top
;
105 AddAnchor(IDC_SWITCHLABEL
, TOP_LEFT
, TOP_RIGHT
);
106 AddAnchor(IDC_SWITCHPATH
, TOP_LEFT
, TOP_RIGHT
);
107 AddAnchor(IDC_URLLABEL
, TOP_LEFT
, TOP_RIGHT
);
108 AddAnchor(IDC_URLCOMBO
, TOP_LEFT
, TOP_RIGHT
);
109 AddAnchor(IDC_BROWSE
, TOP_RIGHT
);
110 AddAnchor(IDC_REVGROUP
, TOP_LEFT
, BOTTOM_RIGHT
);
111 AddAnchor(IDC_REVISION_HEAD
, TOP_LEFT
);
112 AddAnchor(IDC_REVISION_N
, TOP_LEFT
);
113 AddAnchor(IDC_REVISION_NUM
, TOP_LEFT
);
114 AddAnchor(IDC_LOG
, TOP_LEFT
);
115 AddAnchor(IDOK
, BOTTOM_RIGHT
);
116 AddAnchor(IDCANCEL
, BOTTOM_RIGHT
);
117 AddAnchor(IDHELP
, BOTTOM_RIGHT
);
119 if ((m_pParentWnd
==NULL
)&&(hWndExplorer
))
120 CenterWindow(CWnd::FromHandle(hWndExplorer
));
121 EnableSaveRestore(_T("SwitchDlg"));
125 void CSwitchDlg::OnBnClickedBrowse()
129 if (GetCheckedRadioButton(IDC_REVISION_HEAD
, IDC_REVISION_N
) == IDC_REVISION_HEAD
)
131 // rev = GitRev::REV_HEAD;
134 // rev = GitRev(m_rev);
135 // if (!rev.IsValid())
136 // rev = GitRev::REV_HEAD;
137 // CAppUtils::BrowseRepository(m_URLCombo, this, rev);
141 void CSwitchDlg::OnOK()
143 if (!UpdateData(TRUE
))
144 return; // don't dismiss dialog (error message already shown by MFC framework)
146 // if head revision, set revision as HEAD
147 if (GetCheckedRadioButton(IDC_REVISION_HEAD
, IDC_REVISION_N
) == IDC_REVISION_HEAD
)
151 // Revision = GitRev(m_rev);
152 // if (!Revision.IsValid())
154 // ShowBalloon(IDC_REVISION_NUM, IDS_ERR_INVALIDREV);
158 m_URLCombo
.SaveHistory();
159 m_URL
= m_URLCombo
.GetString();
162 CResizableStandAloneDialog::OnOK();
165 void CSwitchDlg::OnBnClickedHelp()
170 void CSwitchDlg::OnEnChangeRevisionNum()
174 CheckRadioButton(IDC_REVISION_HEAD
, IDC_REVISION_N
, IDC_REVISION_HEAD
);
176 CheckRadioButton(IDC_REVISION_HEAD
, IDC_REVISION_N
, IDC_REVISION_N
);
179 void CSwitchDlg::SetRevision(const GitRev
& rev
)
182 // CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_HEAD);
185 // CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_N);
186 // m_rev = rev.ToString();
187 // UpdateData(FALSE);
191 void CSwitchDlg::OnBnClickedLog()
194 if (::IsWindow(m_pLogDlg
->GetSafeHwnd())&&(m_pLogDlg
->IsWindowVisible()))
196 m_URL
= m_URLCombo
.GetString();
197 if (!m_URL
.IsEmpty())
200 m_pLogDlg
= new CLogDlg();
201 CRegDWORD reg
= CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);
202 int limit
= (int)(LONG
)reg
;
203 m_pLogDlg
->SetSelect(true);
204 m_pLogDlg
->m_pNotifyWindow
= this;
205 m_pLogDlg
->m_wParam
= 0;
206 // m_pLogDlg->SetParams(CTGitPath(m_URL), GitRev::REV_HEAD, GitRev::REV_HEAD, 1, limit, TRUE);
207 m_pLogDlg
->ContinuousSelection(true);
208 m_pLogDlg
->SetProjectPropertiesPath(CTGitPath(m_path
));
209 m_pLogDlg
->Create(IDD_LOGMESSAGE
, this);
210 m_pLogDlg
->ShowWindow(SW_SHOW
);
212 AfxGetApp()->DoWaitCursor(-1);
215 LPARAM
CSwitchDlg::OnRevSelected(WPARAM
/*wParam*/, LPARAM lParam
)
218 temp
.Format(_T("%ld"), lParam
);
219 SetDlgItemText(IDC_REVISION_NUM
, temp
);
220 CheckRadioButton(IDC_REVISION_HEAD
, IDC_REVISION_N
, IDC_REVISION_N
);
224 void CSwitchDlg::OnSizing(UINT fwSide
, LPRECT pRect
)
226 // don't allow the dialog to be changed in height
230 case WMSZ_BOTTOMLEFT
:
231 case WMSZ_BOTTOMRIGHT
:
232 pRect
->bottom
= pRect
->top
+ m_height
;
237 pRect
->top
= pRect
->bottom
- m_height
;
240 CResizableStandAloneDialog::OnSizing(fwSide
, pRect
);