OSDN Git Service

Use Shared Choose Version code
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / MergeWizardRevRange.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2007-2008 - TortoiseSVN\r
4 \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
9 \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
14 \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
18 //\r
19 #include "stdafx.h"\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
25 \r
26 \r
27 IMPLEMENT_DYNAMIC(CMergeWizardRevRange, CMergeWizardBasePage)\r
28 \r
29 CMergeWizardRevRange::CMergeWizardRevRange()\r
30         : CMergeWizardBasePage(CMergeWizardRevRange::IDD)\r
31         , m_sRevRange(_T(""))\r
32         , m_pLogDlg(NULL)\r
33         , m_pLogDlg2(NULL)\r
34 {\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
38 }\r
39 \r
40 CMergeWizardRevRange::~CMergeWizardRevRange()\r
41 {\r
42         if (m_pLogDlg)\r
43         {\r
44                 m_pLogDlg->DestroyWindow();\r
45                 delete m_pLogDlg;\r
46         }\r
47         if (m_pLogDlg2)\r
48         {\r
49                 m_pLogDlg2->DestroyWindow();\r
50                 delete m_pLogDlg2;\r
51         }\r
52 }\r
53 \r
54 void CMergeWizardRevRange::DoDataExchange(CDataExchange* pDX)\r
55 {\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
60 }\r
61 \r
62 \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
69 END_MESSAGE_MAP()\r
70 \r
71 \r
72 LRESULT CMergeWizardRevRange::OnWizardBack()\r
73 {\r
74         return IDD_MERGEWIZARD_START;\r
75 }\r
76 \r
77 LRESULT CMergeWizardRevRange::OnWizardNext()\r
78 {\r
79         UpdateData();\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
86         // ranges correctly\r
87         if (m_sRevRange.Find(_T("HEAD")) >= 0)\r
88         {\r
89                 if (!m_HEAD.IsValid())\r
90                 {\r
91                         SVN svn;\r
92                         m_HEAD = svn.GetHEADRevision(CTSVNPath(((CMergeWizard*)GetParent())->URL1));\r
93                 }\r
94                 m_sRevRange.Replace(_T("HEAD"), m_HEAD.ToString());\r
95         }\r
96         if (!((CMergeWizard*)GetParent())->revRangeArray.FromListString(m_sRevRange))\r
97         {\r
98                 CBalloon::ShowBalloon(this, CBalloon::GetCtrlCentre(this, IDC_REVISION_RANGE), IDS_ERR_INVALIDREVRANGE, TRUE, IDI_EXCLAMATION);\r
99                 return -1;\r
100         }\r
101         return IDD_MERGEWIZARD_OPTIONS;\r
102 }\r
103 \r
104 \r
105 BOOL CMergeWizardRevRange::OnInitDialog()\r
106 {\r
107         CMergeWizardBasePage::OnInitDialog();\r
108 \r
109         CMergeWizard * pWizard = (CMergeWizard*)GetParent();\r
110 \r
111         CString sUUID = pWizard->sUUID;\r
112         m_URLCombo.SetURLHistory(TRUE);\r
113         m_URLCombo.LoadHistory(_T("Software\\TortoiseSVN\\History\\repoURLS\\")+sUUID, _T("url"));\r
114         if (!(DWORD)CRegDWORD(_T("Software\\TortoiseSVN\\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
119         {\r
120                 m_sRevRange = pWizard->revRangeArray.ToListString();\r
121                 SetDlgItemText(IDC_REVISION_RANGE, m_sRevRange);\r
122         }\r
123 \r
124         CString sLabel;\r
125         sLabel.LoadString(IDS_MERGEWIZARD_REVRANGESTRING);\r
126         SetDlgItemText(IDC_REVRANGELABEL, sLabel);\r
127 \r
128         SetDlgItemText(IDC_WCEDIT, ((CMergeWizard*)GetParent())->wcPath.GetWinPath());\r
129 \r
130         AdjustControlSize(IDC_REVERSEMERGE);\r
131 \r
132         return TRUE;\r
133 }\r
134 \r
135 void CMergeWizardRevRange::OnBnClickedShowlog()\r
136 {\r
137         if (::IsWindow(m_pLogDlg->GetSafeHwnd())&&(m_pLogDlg->IsWindowVisible()))\r
138                 return;\r
139         CString url = m_URLCombo.GetString();\r
140 \r
141         if (!url.IsEmpty())\r
142         {\r
143                 CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;\r
144                 if (m_pLogDlg)\r
145                         m_pLogDlg->DestroyWindow();\r
146                 delete m_pLogDlg;\r
147                 m_pLogDlg = new CLogDlg();\r
148                 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseSVN\\NumberOfLogs"), 100);\r
149                 int limit = (int)(LONG)reg;\r
150                 m_pLogDlg->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));\r
151 \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
159         }\r
160 }\r
161 \r
162 LPARAM CMergeWizardRevRange::OnRevSelected(WPARAM wParam, LPARAM lParam)\r
163 {\r
164         ((CMergeWizard*)GetParent())->revRangeArray.Clear();\r
165 \r
166         // lParam is a pointer to an SVNRevList, wParam contains the number of elements in that list.\r
167         if ((lParam)&&(wParam))\r
168         {\r
169                 UpdateData(TRUE);\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
174                 UpdateData(FALSE);\r
175         }\r
176         return 0;\r
177 }\r
178 \r
179 LPARAM CMergeWizardRevRange::OnRevSelectedOneRange(WPARAM /*wParam*/, LPARAM lParam)\r
180 {\r
181         ((CMergeWizard*)GetParent())->revRangeArray.Clear();\r
182 \r
183         // lParam is a pointer to an SVNRevList\r
184         if ((lParam))\r
185         {\r
186                 UpdateData(TRUE);\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
191                 UpdateData(FALSE);\r
192         }\r
193         return 0;\r
194 }\r
195 \r
196 void CMergeWizardRevRange::OnBnClickedBrowse()\r
197 {\r
198         SVNRev rev(SVNRev::REV_HEAD);\r
199         CAppUtils::BrowseRepository(m_URLCombo, this, rev);\r
200 }\r
201 \r
202 \r
203 BOOL CMergeWizardRevRange::OnSetActive()\r
204 {\r
205         CPropertySheet* psheet = (CPropertySheet*) GetParent();   \r
206         psheet->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);\r
207         SetButtonTexts();\r
208 \r
209         return CMergeWizardBasePage::OnSetActive();\r
210 }\r
211 \r
212 void CMergeWizardRevRange::OnBnClickedShowlogwc()\r
213 {\r
214         CTSVNPath wcPath = ((CMergeWizard*)GetParent())->wcPath;\r
215         if (m_pLogDlg2)\r
216                 m_pLogDlg2->DestroyWindow();\r
217         delete m_pLogDlg2;\r
218         m_pLogDlg2 = new CLogDlg();\r
219         CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseSVN\\NumberOfLogs"), 100);\r
220         int limit = (int)(LONG)reg;\r
221         m_pLogDlg2->SetDialogTitle(CString(MAKEINTRESOURCE(IDS_MERGE_SELECTRANGE)));\r
222 \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
229 }\r