Merge branch 'restructure-tree'
[TortoiseGit.git] / src / TortoiseProc / MergeWizardRevRange.cpp
blob55dafd84025617353205c8f1b24bbd3560aa218e
1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2007-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.
19 #include "stdafx.h"
20 #include "TortoiseProc.h"
21 #include "MergeWizard.h"
22 #include "MergeWizardRevRange.h"
23 #include "AppUtils.h"
24 #include "PathUtils.h"
27 IMPLEMENT_DYNAMIC(CMergeWizardRevRange, CMergeWizardBasePage)
29 CMergeWizardRevRange::CMergeWizardRevRange()
30 : CMergeWizardBasePage(CMergeWizardRevRange::IDD)
31 , m_sRevRange(_T(""))
32 , m_pLogDlg(NULL)
33 , m_pLogDlg2(NULL)
35 m_psp.dwFlags |= PSP_DEFAULT|PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE;
36 m_psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_MERGEWIZARD_REVRANGETITLE);
37 m_psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_MERGEWIZARD_REVRANGESUBTITLE);
40 CMergeWizardRevRange::~CMergeWizardRevRange()
42 if (m_pLogDlg)
44 m_pLogDlg->DestroyWindow();
45 delete m_pLogDlg;
47 if (m_pLogDlg2)
49 m_pLogDlg2->DestroyWindow();
50 delete m_pLogDlg2;
54 void CMergeWizardRevRange::DoDataExchange(CDataExchange* pDX)
56 CMergeWizardBasePage::DoDataExchange(pDX);
57 DDX_Text(pDX, IDC_REVISION_RANGE, m_sRevRange);
58 DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);
59 DDX_Check(pDX, IDC_REVERSEMERGE, ((CMergeWizard*)GetParent())->bReverseMerge);
63 BEGIN_MESSAGE_MAP(CMergeWizardRevRange, CMergeWizardBasePage)
64 ON_REGISTERED_MESSAGE(WM_REVLIST, OnRevSelected)
65 ON_REGISTERED_MESSAGE(WM_REVLISTONERANGE, OnRevSelectedOneRange)
66 ON_BN_CLICKED(IDC_SELLOG, &CMergeWizardRevRange::OnBnClickedShowlog)
67 ON_BN_CLICKED(IDC_BROWSE, &CMergeWizardRevRange::OnBnClickedBrowse)
68 ON_BN_CLICKED(IDC_SHOWLOGWC, &CMergeWizardRevRange::OnBnClickedShowlogwc)
69 END_MESSAGE_MAP()
72 LRESULT CMergeWizardRevRange::OnWizardBack()
74 return IDD_MERGEWIZARD_START;
77 LRESULT CMergeWizardRevRange::OnWizardNext()
79 UpdateData();
80 m_URLCombo.SaveHistory();
81 ((CMergeWizard*)GetParent())->URL1 = m_URLCombo.GetString();
82 ((CMergeWizard*)GetParent())->URL2 = m_URLCombo.GetString();
83 // if the revision range has HEAD as a revision specified, we have to
84 // ask the server what the HEAD revision is: the SVNRevList can only deal
85 // with numerical revisions because we have to sort the list to get the
86 // ranges correctly
87 if (m_sRevRange.Find(_T("HEAD")) >= 0)
89 if (!m_HEAD.IsValid())
91 SVN svn;
92 m_HEAD = svn.GetHEADRevision(CTSVNPath(((CMergeWizard*)GetParent())->URL1));
94 m_sRevRange.Replace(_T("HEAD"), m_HEAD.ToString());
96 if (!((CMergeWizard*)GetParent())->revRangeArray.FromListString(m_sRevRange))
98 CBalloon::ShowBalloon(this, CBalloon::GetCtrlCentre(this, IDC_REVISION_RANGE), IDS_ERR_INVALIDREVRANGE, TRUE, IDI_EXCLAMATION);
99 return -1;
101 return IDD_MERGEWIZARD_OPTIONS;
105 BOOL CMergeWizardRevRange::OnInitDialog()
107 CMergeWizardBasePage::OnInitDialog();
109 CMergeWizard * pWizard = (CMergeWizard*)GetParent();
111 CString sUUID = pWizard->sUUID;
112 m_URLCombo.SetURLHistory(TRUE);
113 m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS\\")+sUUID, _T("url"));
114 if (!(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\MergeWCURL"), FALSE))
115 m_URLCombo.SetCurSel(0);
116 if (!pWizard->url.IsEmpty())
117 m_URLCombo.SetWindowText(CPathUtils::PathUnescape(pWizard->url));
118 if (pWizard->revRangeArray.GetCount())
120 m_sRevRange = pWizard->revRangeArray.ToListString();
121 SetDlgItemText(IDC_REVISION_RANGE, m_sRevRange);
124 CString sLabel;
125 sLabel.LoadString(IDS_MERGEWIZARD_REVRANGESTRING);
126 SetDlgItemText(IDC_REVRANGELABEL, sLabel);
128 SetDlgItemText(IDC_WCEDIT, ((CMergeWizard*)GetParent())->wcPath.GetWinPath());
130 AdjustControlSize(IDC_REVERSEMERGE);
132 return TRUE;
135 void CMergeWizardRevRange::OnBnClickedShowlog()
137 if (::IsWindow(m_pLogDlg->GetSafeHwnd())&&(m_pLogDlg->IsWindowVisible()))
138 return;
139 CString url = m_URLCombo.GetString();
141 if (!url.IsEmpty())
143 CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;
144 if (m_pLogDlg)
145 m_pLogDlg->DestroyWindow();
146 delete m_pLogDlg;
147 m_pLogDlg = new CLogDlg();
148 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);
149 int limit = (int)(LONG)reg;
150 m_pLogDlg->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));
152 m_pLogDlg->SetSelect(true);
153 m_pLogDlg->m_pNotifyWindow = this;
154 m_pLogDlg->SetParams(CTSVNPath(url), SVNRev::REV_HEAD, SVNRev::REV_HEAD, 1, limit, TRUE, FALSE);
155 m_pLogDlg->SetProjectPropertiesPath(wcPath);
156 m_pLogDlg->SetMergePath(wcPath);
157 m_pLogDlg->Create(IDD_LOGMESSAGE, this);
158 m_pLogDlg->ShowWindow(SW_SHOW);
162 LPARAM CMergeWizardRevRange::OnRevSelected(WPARAM wParam, LPARAM lParam)
164 ((CMergeWizard*)GetParent())->revRangeArray.Clear();
166 // lParam is a pointer to an SVNRevList, wParam contains the number of elements in that list.
167 if ((lParam)&&(wParam))
169 UpdateData(TRUE);
170 CMergeWizard* dlg = (CMergeWizard*)GetParent();
171 dlg->revRangeArray = *((SVNRevRangeArray*)lParam);
172 bool bReverse = !!dlg->bReverseMerge;
173 m_sRevRange = dlg->revRangeArray.ToListString(bReverse);
174 UpdateData(FALSE);
176 return 0;
179 LPARAM CMergeWizardRevRange::OnRevSelectedOneRange(WPARAM /*wParam*/, LPARAM lParam)
181 ((CMergeWizard*)GetParent())->revRangeArray.Clear();
183 // lParam is a pointer to an SVNRevList
184 if ((lParam))
186 UpdateData(TRUE);
187 CMergeWizard* dlg = (CMergeWizard*)GetParent();
188 dlg->revRangeArray = *((SVNRevRangeArray*)lParam);
189 bool bReverse = !!dlg->bReverseMerge;
190 m_sRevRange = dlg->revRangeArray.ToListString(bReverse);
191 UpdateData(FALSE);
193 return 0;
196 void CMergeWizardRevRange::OnBnClickedBrowse()
198 SVNRev rev(SVNRev::REV_HEAD);
199 CAppUtils::BrowseRepository(m_URLCombo, this, rev);
203 BOOL CMergeWizardRevRange::OnSetActive()
205 CPropertySheet* psheet = (CPropertySheet*) GetParent();
206 psheet->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);
207 SetButtonTexts();
209 return CMergeWizardBasePage::OnSetActive();
212 void CMergeWizardRevRange::OnBnClickedShowlogwc()
214 CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;
215 if (m_pLogDlg2)
216 m_pLogDlg2->DestroyWindow();
217 delete m_pLogDlg2;
218 m_pLogDlg2 = new CLogDlg();
219 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);
220 int limit = (int)(LONG)reg;
221 m_pLogDlg2->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));
223 m_pLogDlg2->m_pNotifyWindow = NULL;
224 m_pLogDlg2->SetParams(wcPath, SVNRev::REV_HEAD, SVNRev::REV_HEAD, 1, limit, TRUE, FALSE);
225 m_pLogDlg2->SetProjectPropertiesPath(wcPath);
226 m_pLogDlg2->SetMergePath(wcPath);
227 m_pLogDlg2->Create(IDD_LOGMESSAGE, this);
228 m_pLogDlg2->ShowWindow(SW_SHOW);