1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2007-2008 - TortoiseSVN
\r
5 // This program is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU General Public License
\r
7 // as published by the Free Software Foundation; either version 2
\r
8 // of the License, or (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, write to the Free Software Foundation,
\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
20 #include "TortoiseProc.h"
\r
21 #include "MergeWizard.h"
\r
22 #include "MergeWizardRevRange.h"
\r
23 #include "AppUtils.h"
\r
24 #include "PathUtils.h"
\r
27 IMPLEMENT_DYNAMIC(CMergeWizardRevRange, CMergeWizardBasePage)
\r
29 CMergeWizardRevRange::CMergeWizardRevRange()
\r
30 : CMergeWizardBasePage(CMergeWizardRevRange::IDD)
\r
31 , m_sRevRange(_T(""))
\r
35 m_psp.dwFlags |= PSP_DEFAULT|PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE;
\r
36 m_psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_MERGEWIZARD_REVRANGETITLE);
\r
37 m_psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_MERGEWIZARD_REVRANGESUBTITLE);
\r
40 CMergeWizardRevRange::~CMergeWizardRevRange()
\r
44 m_pLogDlg->DestroyWindow();
\r
49 m_pLogDlg2->DestroyWindow();
\r
54 void CMergeWizardRevRange::DoDataExchange(CDataExchange* pDX)
\r
56 CMergeWizardBasePage::DoDataExchange(pDX);
\r
57 DDX_Text(pDX, IDC_REVISION_RANGE, m_sRevRange);
\r
58 DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);
\r
59 DDX_Check(pDX, IDC_REVERSEMERGE, ((CMergeWizard*)GetParent())->bReverseMerge);
\r
63 BEGIN_MESSAGE_MAP(CMergeWizardRevRange, CMergeWizardBasePage)
\r
64 ON_REGISTERED_MESSAGE(WM_REVLIST, OnRevSelected)
\r
65 ON_REGISTERED_MESSAGE(WM_REVLISTONERANGE, OnRevSelectedOneRange)
\r
66 ON_BN_CLICKED(IDC_SELLOG, &CMergeWizardRevRange::OnBnClickedShowlog)
\r
67 ON_BN_CLICKED(IDC_BROWSE, &CMergeWizardRevRange::OnBnClickedBrowse)
\r
68 ON_BN_CLICKED(IDC_SHOWLOGWC, &CMergeWizardRevRange::OnBnClickedShowlogwc)
\r
72 LRESULT CMergeWizardRevRange::OnWizardBack()
\r
74 return IDD_MERGEWIZARD_START;
\r
77 LRESULT CMergeWizardRevRange::OnWizardNext()
\r
80 m_URLCombo.SaveHistory();
\r
81 ((CMergeWizard*)GetParent())->URL1 = m_URLCombo.GetString();
\r
82 ((CMergeWizard*)GetParent())->URL2 = m_URLCombo.GetString();
\r
83 // if the revision range has HEAD as a revision specified, we have to
\r
84 // ask the server what the HEAD revision is: the SVNRevList can only deal
\r
85 // with numerical revisions because we have to sort the list to get the
\r
87 if (m_sRevRange.Find(_T("HEAD")) >= 0)
\r
89 if (!m_HEAD.IsValid())
\r
92 m_HEAD = svn.GetHEADRevision(CTSVNPath(((CMergeWizard*)GetParent())->URL1));
\r
94 m_sRevRange.Replace(_T("HEAD"), m_HEAD.ToString());
\r
96 if (!((CMergeWizard*)GetParent())->revRangeArray.FromListString(m_sRevRange))
\r
98 CBalloon::ShowBalloon(this, CBalloon::GetCtrlCentre(this, IDC_REVISION_RANGE), IDS_ERR_INVALIDREVRANGE, TRUE, IDI_EXCLAMATION);
\r
101 return IDD_MERGEWIZARD_OPTIONS;
\r
105 BOOL CMergeWizardRevRange::OnInitDialog()
\r
107 CMergeWizardBasePage::OnInitDialog();
\r
109 CMergeWizard * pWizard = (CMergeWizard*)GetParent();
\r
111 CString sUUID = pWizard->sUUID;
\r
112 m_URLCombo.SetURLHistory(TRUE);
\r
113 m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS\\")+sUUID, _T("url"));
\r
114 if (!(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\MergeWCURL"), FALSE))
\r
115 m_URLCombo.SetCurSel(0);
\r
116 if (!pWizard->url.IsEmpty())
\r
117 m_URLCombo.SetWindowText(CPathUtils::PathUnescape(pWizard->url));
\r
118 if (pWizard->revRangeArray.GetCount())
\r
120 m_sRevRange = pWizard->revRangeArray.ToListString();
\r
121 SetDlgItemText(IDC_REVISION_RANGE, m_sRevRange);
\r
125 sLabel.LoadString(IDS_MERGEWIZARD_REVRANGESTRING);
\r
126 SetDlgItemText(IDC_REVRANGELABEL, sLabel);
\r
128 SetDlgItemText(IDC_WCEDIT, ((CMergeWizard*)GetParent())->wcPath.GetWinPath());
\r
130 AdjustControlSize(IDC_REVERSEMERGE);
\r
135 void CMergeWizardRevRange::OnBnClickedShowlog()
\r
137 if (::IsWindow(m_pLogDlg->GetSafeHwnd())&&(m_pLogDlg->IsWindowVisible()))
\r
139 CString url = m_URLCombo.GetString();
\r
141 if (!url.IsEmpty())
\r
143 CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;
\r
145 m_pLogDlg->DestroyWindow();
\r
147 m_pLogDlg = new CLogDlg();
\r
148 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);
\r
149 int limit = (int)(LONG)reg;
\r
150 m_pLogDlg->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));
\r
152 m_pLogDlg->SetSelect(true);
\r
153 m_pLogDlg->m_pNotifyWindow = this;
\r
154 m_pLogDlg->SetParams(CTSVNPath(url), SVNRev::REV_HEAD, SVNRev::REV_HEAD, 1, limit, TRUE, FALSE);
\r
155 m_pLogDlg->SetProjectPropertiesPath(wcPath);
\r
156 m_pLogDlg->SetMergePath(wcPath);
\r
157 m_pLogDlg->Create(IDD_LOGMESSAGE, this);
\r
158 m_pLogDlg->ShowWindow(SW_SHOW);
\r
162 LPARAM CMergeWizardRevRange::OnRevSelected(WPARAM wParam, LPARAM lParam)
\r
164 ((CMergeWizard*)GetParent())->revRangeArray.Clear();
\r
166 // lParam is a pointer to an SVNRevList, wParam contains the number of elements in that list.
\r
167 if ((lParam)&&(wParam))
\r
170 CMergeWizard* dlg = (CMergeWizard*)GetParent();
\r
171 dlg->revRangeArray = *((SVNRevRangeArray*)lParam);
\r
172 bool bReverse = !!dlg->bReverseMerge;
\r
173 m_sRevRange = dlg->revRangeArray.ToListString(bReverse);
\r
179 LPARAM CMergeWizardRevRange::OnRevSelectedOneRange(WPARAM /*wParam*/, LPARAM lParam)
\r
181 ((CMergeWizard*)GetParent())->revRangeArray.Clear();
\r
183 // lParam is a pointer to an SVNRevList
\r
187 CMergeWizard* dlg = (CMergeWizard*)GetParent();
\r
188 dlg->revRangeArray = *((SVNRevRangeArray*)lParam);
\r
189 bool bReverse = !!dlg->bReverseMerge;
\r
190 m_sRevRange = dlg->revRangeArray.ToListString(bReverse);
\r
196 void CMergeWizardRevRange::OnBnClickedBrowse()
\r
198 SVNRev rev(SVNRev::REV_HEAD);
\r
199 CAppUtils::BrowseRepository(m_URLCombo, this, rev);
\r
203 BOOL CMergeWizardRevRange::OnSetActive()
\r
205 CPropertySheet* psheet = (CPropertySheet*) GetParent();
\r
206 psheet->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);
\r
209 return CMergeWizardBasePage::OnSetActive();
\r
212 void CMergeWizardRevRange::OnBnClickedShowlogwc()
\r
214 CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;
\r
216 m_pLogDlg2->DestroyWindow();
\r
218 m_pLogDlg2 = new CLogDlg();
\r
219 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);
\r
220 int limit = (int)(LONG)reg;
\r
221 m_pLogDlg2->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));
\r
223 m_pLogDlg2->m_pNotifyWindow = NULL;
\r
224 m_pLogDlg2->SetParams(wcPath, SVNRev::REV_HEAD, SVNRev::REV_HEAD, 1, limit, TRUE, FALSE);
\r
225 m_pLogDlg2->SetProjectPropertiesPath(wcPath);
\r
226 m_pLogDlg2->SetMergePath(wcPath);
\r
227 m_pLogDlg2->Create(IDD_LOGMESSAGE, this);
\r
228 m_pLogDlg2->ShowWindow(SW_SHOW);
\r