OSDN Git Service

Fix last line problem
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SwitchDlg.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-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 "SwitchDlg.h"\r
22 //#include "RepositoryBrowser.h"\r
23 #include "BrowseFolder.h"\r
24 #include "TGitPath.h"\r
25 #include "AppUtils.h"\r
26 \r
27 IMPLEMENT_DYNAMIC(CSwitchDlg, CResizableStandAloneDialog)\r
28 CSwitchDlg::CSwitchDlg(CWnd* pParent /*=NULL*/)\r
29         : CResizableStandAloneDialog(CSwitchDlg::IDD, pParent)\r
30         , m_URL(_T(""))\r
31 //      , Revision(_T("HEAD"))\r
32         , m_pLogDlg(NULL)\r
33 {\r
34 }\r
35 \r
36 CSwitchDlg::~CSwitchDlg()\r
37 {\r
38         if (m_pLogDlg)\r
39                 delete m_pLogDlg;\r
40 }\r
41 \r
42 void CSwitchDlg::DoDataExchange(CDataExchange* pDX)\r
43 {\r
44         CResizableStandAloneDialog::DoDataExchange(pDX);\r
45         DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);\r
46         DDX_Text(pDX, IDC_REVISION_NUM, m_rev);\r
47 }\r
48 \r
49 \r
50 BEGIN_MESSAGE_MAP(CSwitchDlg, CResizableStandAloneDialog)\r
51         ON_BN_CLICKED(IDC_BROWSE, OnBnClickedBrowse)\r
52         ON_BN_CLICKED(IDHELP, OnBnClickedHelp)\r
53         ON_EN_CHANGE(IDC_REVISION_NUM, &CSwitchDlg::OnEnChangeRevisionNum)\r
54         ON_BN_CLICKED(IDC_LOG, &CSwitchDlg::OnBnClickedLog)\r
55         ON_REGISTERED_MESSAGE(WM_REVSELECTED, &CSwitchDlg::OnRevSelected)\r
56         ON_WM_SIZING()\r
57 END_MESSAGE_MAP()\r
58 \r
59 void CSwitchDlg::SetDialogTitle(const CString& sTitle)\r
60 {\r
61         m_sTitle = sTitle;\r
62 }\r
63 \r
64 void CSwitchDlg::SetUrlLabel(const CString& sLabel)\r
65 {\r
66         m_sLabel = sLabel;\r
67 }\r
68 \r
69 BOOL CSwitchDlg::OnInitDialog()\r
70 {\r
71         CResizableStandAloneDialog::OnInitDialog();\r
72 \r
73         CTGitPath GitPath(m_path);\r
74         SetDlgItemText(IDC_SWITCHPATH, m_path);\r
75         m_bFolder = GitPath.IsDirectory();\r
76         //Git Git;\r
77         //CString url = Git.GetURLFromPath(GitPath);\r
78         //CString sUUID = Git.GetUUIDFromPath(GitPath);\r
79         //m_URLCombo.SetURLHistory(TRUE);\r
80         //m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS\\")+sUUID, _T("url"));\r
81         //m_URLCombo.SetCurSel(0);\r
82 \r
83 //      if (!url.IsEmpty())\r
84 //      {\r
85 //              m_path = url;\r
86 //              m_URLCombo.AddString(CTGitPath(url).GetUIPathString(), 0);\r
87 //              m_URLCombo.SelectString(-1, CTGitPath(url).GetUIPathString());\r
88 //              m_URL = m_path;\r
89 //      }\r
90 \r
91         if (m_sTitle.IsEmpty())\r
92                 GetWindowText(m_sTitle);\r
93         SetWindowText(m_sTitle);\r
94         if (m_sLabel.IsEmpty())\r
95                 GetDlgItemText(IDC_URLLABEL, m_sLabel);\r
96         SetDlgItemText(IDC_URLLABEL, m_sLabel);\r
97 \r
98         // set head revision as default revision\r
99 //      SetRevision(GitRev::REV_HEAD);\r
100 \r
101         RECT rect;\r
102         GetWindowRect(&rect);\r
103         m_height = rect.bottom - rect.top;\r
104 \r
105         AddAnchor(IDC_SWITCHLABEL, TOP_LEFT, TOP_RIGHT);\r
106         AddAnchor(IDC_SWITCHPATH, TOP_LEFT, TOP_RIGHT);\r
107         AddAnchor(IDC_URLLABEL, TOP_LEFT, TOP_RIGHT);\r
108         AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT);\r
109         AddAnchor(IDC_BROWSE, TOP_RIGHT);\r
110         AddAnchor(IDC_REVGROUP, TOP_LEFT, BOTTOM_RIGHT);\r
111         AddAnchor(IDC_REVISION_HEAD, TOP_LEFT);\r
112         AddAnchor(IDC_REVISION_N, TOP_LEFT);\r
113         AddAnchor(IDC_REVISION_NUM, TOP_LEFT);\r
114         AddAnchor(IDC_LOG, TOP_LEFT);\r
115         AddAnchor(IDOK, BOTTOM_RIGHT);\r
116         AddAnchor(IDCANCEL, BOTTOM_RIGHT);\r
117         AddAnchor(IDHELP, BOTTOM_RIGHT);\r
118 \r
119         if ((m_pParentWnd==NULL)&&(hWndExplorer))\r
120                 CenterWindow(CWnd::FromHandle(hWndExplorer));\r
121         EnableSaveRestore(_T("SwitchDlg"));\r
122         return TRUE;\r
123 }\r
124 \r
125 void CSwitchDlg::OnBnClickedBrowse()\r
126 {\r
127         UpdateData();\r
128         GitRev rev;\r
129         if (GetCheckedRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N) == IDC_REVISION_HEAD)\r
130         {\r
131 //              rev = GitRev::REV_HEAD;\r
132         }\r
133 //      else\r
134 //              rev = GitRev(m_rev);\r
135 //      if (!rev.IsValid())\r
136 //              rev = GitRev::REV_HEAD;\r
137 //      CAppUtils::BrowseRepository(m_URLCombo, this, rev);\r
138 //      SetRevision(rev);\r
139 }\r
140 \r
141 void CSwitchDlg::OnOK()\r
142 {\r
143         if (!UpdateData(TRUE))\r
144                 return; // don't dismiss dialog (error message already shown by MFC framework)\r
145 \r
146         // if head revision, set revision as HEAD\r
147         if (GetCheckedRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N) == IDC_REVISION_HEAD)\r
148         {\r
149                 m_rev = _T("HEAD");\r
150         }\r
151 //      Revision = GitRev(m_rev);\r
152 //      if (!Revision.IsValid())\r
153 //      {\r
154 //              ShowBalloon(IDC_REVISION_NUM, IDS_ERR_INVALIDREV);\r
155 //              return;\r
156 //      }\r
157 \r
158         m_URLCombo.SaveHistory();\r
159         m_URL = m_URLCombo.GetString();\r
160 \r
161         UpdateData(FALSE);\r
162         CResizableStandAloneDialog::OnOK();\r
163 }\r
164 \r
165 void CSwitchDlg::OnBnClickedHelp()\r
166 {\r
167         OnHelp();\r
168 }\r
169 \r
170 void CSwitchDlg::OnEnChangeRevisionNum()\r
171 {\r
172         UpdateData();\r
173         if (m_rev.IsEmpty())\r
174                 CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_HEAD);\r
175         else\r
176                 CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_N);\r
177 }\r
178 \r
179 void CSwitchDlg::SetRevision(const GitRev& rev)\r
180 {\r
181 //      if (rev.IsHead())\r
182 //              CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_HEAD);\r
183 //      else\r
184 //      {\r
185 //              CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_N);\r
186 //              m_rev = rev.ToString();\r
187 //              UpdateData(FALSE);\r
188 //      }\r
189 }\r
190 \r
191 void CSwitchDlg::OnBnClickedLog()\r
192 {\r
193         UpdateData(TRUE);\r
194         if (::IsWindow(m_pLogDlg->GetSafeHwnd())&&(m_pLogDlg->IsWindowVisible()))\r
195                 return;\r
196         m_URL = m_URLCombo.GetString();\r
197         if (!m_URL.IsEmpty())\r
198         {\r
199                 delete m_pLogDlg;\r
200                 m_pLogDlg = new CLogDlg();\r
201                 CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100);\r
202                 int limit = (int)(LONG)reg;\r
203                 m_pLogDlg->SetSelect(true);\r
204                 m_pLogDlg->m_pNotifyWindow = this;\r
205                 m_pLogDlg->m_wParam = 0;\r
206 //              m_pLogDlg->SetParams(CTGitPath(m_URL), GitRev::REV_HEAD, GitRev::REV_HEAD, 1, limit, TRUE);\r
207                 m_pLogDlg->ContinuousSelection(true);\r
208                 m_pLogDlg->SetProjectPropertiesPath(CTGitPath(m_path));\r
209                 m_pLogDlg->Create(IDD_LOGMESSAGE, this);\r
210                 m_pLogDlg->ShowWindow(SW_SHOW);\r
211         }\r
212         AfxGetApp()->DoWaitCursor(-1);\r
213 }\r
214 \r
215 LPARAM CSwitchDlg::OnRevSelected(WPARAM /*wParam*/, LPARAM lParam)\r
216 {\r
217         CString temp;\r
218         temp.Format(_T("%ld"), lParam);\r
219         SetDlgItemText(IDC_REVISION_NUM, temp);\r
220         CheckRadioButton(IDC_REVISION_HEAD, IDC_REVISION_N, IDC_REVISION_N);\r
221         return 0;\r
222 }\r
223 \r
224 void CSwitchDlg::OnSizing(UINT fwSide, LPRECT pRect)\r
225 {\r
226         // don't allow the dialog to be changed in height\r
227         switch (fwSide)\r
228         {\r
229         case WMSZ_BOTTOM:\r
230         case WMSZ_BOTTOMLEFT:\r
231         case WMSZ_BOTTOMRIGHT:\r
232                 pRect->bottom = pRect->top + m_height;\r
233                 break;\r
234         case WMSZ_TOP:\r
235         case WMSZ_TOPLEFT:\r
236         case WMSZ_TOPRIGHT:\r
237                 pRect->top = pRect->bottom - m_height;\r
238                 break;\r
239         }\r
240         CResizableStandAloneDialog::OnSizing(fwSide, pRect);\r
241 }\r