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.
20 #include "TortoiseProc.h"
21 #include "MergeWizard.h"
22 #include "MergeWizardRevRange.h"
24 #include "PathUtils.h"
27 IMPLEMENT_DYNAMIC(CMergeWizardRevRange
, CMergeWizardBasePage
)
29 CMergeWizardRevRange::CMergeWizardRevRange()
30 : CMergeWizardBasePage(CMergeWizardRevRange::IDD
)
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()
44 m_pLogDlg
->DestroyWindow();
49 m_pLogDlg2
->DestroyWindow();
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
)
72 LRESULT
CMergeWizardRevRange::OnWizardBack()
74 return IDD_MERGEWIZARD_START
;
77 LRESULT
CMergeWizardRevRange::OnWizardNext()
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
87 if (m_sRevRange
.Find(_T("HEAD")) >= 0)
89 if (!m_HEAD
.IsValid())
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
);
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
);
125 sLabel
.LoadString(IDS_MERGEWIZARD_REVRANGESTRING
);
126 SetDlgItemText(IDC_REVRANGELABEL
, sLabel
);
128 SetDlgItemText(IDC_WCEDIT
, ((CMergeWizard
*)GetParent())->wcPath
.GetWinPath());
130 AdjustControlSize(IDC_REVERSEMERGE
);
135 void CMergeWizardRevRange::OnBnClickedShowlog()
137 if (::IsWindow(m_pLogDlg
->GetSafeHwnd())&&(m_pLogDlg
->IsWindowVisible()))
139 CString url
= m_URLCombo
.GetString();
143 CTSVNPath wcPath
= ((CMergeWizard
*)GetParent())->wcPath
;
145 m_pLogDlg
->DestroyWindow();
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
))
170 CMergeWizard
* dlg
= (CMergeWizard
*)GetParent();
171 dlg
->revRangeArray
= *((SVNRevRangeArray
*)lParam
);
172 bool bReverse
= !!dlg
->bReverseMerge
;
173 m_sRevRange
= dlg
->revRangeArray
.ToListString(bReverse
);
179 LPARAM
CMergeWizardRevRange::OnRevSelectedOneRange(WPARAM
/*wParam*/, LPARAM lParam
)
181 ((CMergeWizard
*)GetParent())->revRangeArray
.Clear();
183 // lParam is a pointer to an SVNRevList
187 CMergeWizard
* dlg
= (CMergeWizard
*)GetParent();
188 dlg
->revRangeArray
= *((SVNRevRangeArray
*)lParam
);
189 bool bReverse
= !!dlg
->bReverseMerge
;
190 m_sRevRange
= dlg
->revRangeArray
.ToListString(bReverse
);
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
);
209 return CMergeWizardBasePage::OnSetActive();
212 void CMergeWizardRevRange::OnBnClickedShowlogwc()
214 CTSVNPath wcPath
= ((CMergeWizard
*)GetParent())->wcPath
;
216 m_pLogDlg2
->DestroyWindow();
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
);