OSDN Git Service

FormatPatch: Implemented browse buttons and added browsebutton for 'since'.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / FormatPatchDlg.cpp
1 // FormatPatch.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "TortoiseProc.h"\r
6 #include "FormatPatchDlg.h"\r
7 #include "git.h"\r
8 #include "BrowseFolder.h"\r
9 #include "LogDlg.h"\r
10 #include "BrowseRefsDlg.h"\r
11 // CFormatPatchDlg dialog\r
12 \r
13 IMPLEMENT_DYNAMIC(CFormatPatchDlg, CResizableStandAloneDialog)\r
14 \r
15 CFormatPatchDlg::CFormatPatchDlg(CWnd* pParent /*=NULL*/)\r
16         : CResizableStandAloneDialog(CFormatPatchDlg::IDD, pParent),\r
17         m_regSendMail(_T("Software\\TortoiseGit\\TortoiseProc\\FormatPatch\\SendMail"),0)\r
18 {\r
19         m_Num=1;\r
20         this->m_bSendMail = m_regSendMail;\r
21         this->m_Radio = IDC_RADIO_SINCE;\r
22 }\r
23 \r
24 CFormatPatchDlg::~CFormatPatchDlg()\r
25 {\r
26 }\r
27 \r
28 void CFormatPatchDlg::DoDataExchange(CDataExchange* pDX)\r
29 {\r
30         CDialog::DoDataExchange(pDX);\r
31         DDX_Control(pDX, IDC_COMBOBOXEX_DIR,    m_cDir);\r
32         DDX_Control(pDX, IDC_COMBOBOXEX_SINCE,  m_cSince);\r
33         DDX_Control(pDX, IDC_COMBOBOXEX_FROM,   m_cFrom);\r
34         DDX_Control(pDX, IDC_COMBOBOXEX_TO,             m_cTo);\r
35         DDX_Control(pDX, IDC_EDIT_NUM,                  m_cNum);\r
36 \r
37         DDX_Text(pDX,IDC_EDIT_NUM,m_Num);\r
38 \r
39         DDX_Text(pDX, IDC_COMBOBOXEX_DIR,       m_Dir);\r
40         DDX_Text(pDX, IDC_COMBOBOXEX_SINCE,     m_Since);\r
41         DDX_Text(pDX, IDC_COMBOBOXEX_FROM,      m_From);\r
42         DDX_Text(pDX, IDC_COMBOBOXEX_TO,        m_To);\r
43         \r
44         DDX_Check(pDX, IDC_CHECK_SENDMAIL, m_bSendMail);\r
45 }\r
46 \r
47 \r
48 BEGIN_MESSAGE_MAP(CFormatPatchDlg, CResizableStandAloneDialog)\r
49         ON_BN_CLICKED(IDC_BUTTON_DIR, &CFormatPatchDlg::OnBnClickedButtonDir)\r
50         ON_BN_CLICKED(IDC_BUTTON_FROM, &CFormatPatchDlg::OnBnClickedButtonFrom)\r
51         ON_BN_CLICKED(IDC_BUTTON_TO, &CFormatPatchDlg::OnBnClickedButtonTo)\r
52         ON_BN_CLICKED(IDOK, &CFormatPatchDlg::OnBnClickedOk)\r
53         ON_BN_CLICKED(IDC_RADIO_SINCE, &CFormatPatchDlg::OnBnClickedRadio)\r
54         ON_BN_CLICKED(IDC_RADIO_NUM, &CFormatPatchDlg::OnBnClickedRadio)\r
55         ON_BN_CLICKED(IDC_RADIO_RANGE, &CFormatPatchDlg::OnBnClickedRadio)\r
56         ON_BN_CLICKED(IDC_BUTTON_REF, &CFormatPatchDlg::OnBnClickedButtonRef)\r
57 END_MESSAGE_MAP()\r
58 \r
59 BOOL CFormatPatchDlg::OnInitDialog()\r
60 {\r
61         CResizableStandAloneDialog::OnInitDialog();\r
62         \r
63         AddAnchor(IDC_GROUP_DIR, TOP_LEFT, TOP_RIGHT);\r
64         AddAnchor(IDC_COMBOBOXEX_DIR,TOP_LEFT, TOP_RIGHT);\r
65         AddAnchor(IDC_BUTTON_DIR, TOP_RIGHT);\r
66 \r
67         AddAnchor(IDC_GROUP_VERSION, TOP_LEFT, TOP_RIGHT);\r
68         AddAnchor(IDC_COMBOBOXEX_SINCE, TOP_LEFT, TOP_RIGHT);\r
69         AddAnchor(IDC_EDIT_NUM, TOP_LEFT, TOP_RIGHT);\r
70         AddAnchor(IDC_SPIN_NUM, TOP_RIGHT);\r
71 \r
72         AddAnchor(IDC_COMBOBOXEX_FROM, TOP_LEFT, TOP_RIGHT);\r
73         AddAnchor(IDC_COMBOBOXEX_TO, TOP_LEFT, TOP_RIGHT);\r
74 \r
75         AddAnchor(IDC_BUTTON_FROM,  TOP_RIGHT);\r
76         AddAnchor(IDC_BUTTON_TO,        TOP_RIGHT);\r
77         AddAnchor(IDC_CHECK_SENDMAIL,BOTTOM_LEFT);\r
78         AddAnchor(IDOK,BOTTOM_RIGHT);\r
79         AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
80 \r
81         this->AddOthersToAnchor();\r
82 \r
83         m_cDir.SetPathHistory(TRUE);\r
84         m_cDir.LoadHistory(_T("Software\\TortoiseGit\\History\\FormatPatchURLS"), _T("path"));\r
85         m_cDir.SetCurSel(0);\r
86 \r
87         STRING_VECTOR list;\r
88         g_Git.GetBranchList(list,NULL,CGit::BRANCH_ALL);\r
89         m_cSince.SetMaxHistoryItems(list.size());\r
90         m_cSince.AddString(list);\r
91 \r
92         if(!m_Since.IsEmpty())\r
93                 m_cSince.SetWindowText(m_Since);\r
94 \r
95         m_cFrom.LoadHistory(_T("Software\\TortoiseGit\\History\\FormatPatchFromURLS"), _T("ver"));\r
96         m_cFrom.SetCurSel(0);\r
97 \r
98         if(!m_From.IsEmpty())\r
99                 m_cFrom.SetWindowText(m_From);\r
100 \r
101         m_cTo.LoadHistory(_T("Software\\TortoiseGit\\History\\FormatPatchToURLS"), _T("ver"));\r
102         m_cTo.SetCurSel(0);\r
103 \r
104         if(!m_To.IsEmpty())\r
105                 m_cTo.SetWindowText(m_To);\r
106 \r
107         this->CheckRadioButton(IDC_RADIO_SINCE,IDC_RADIO_RANGE,this->m_Radio);\r
108         \r
109         OnBnClickedRadio();\r
110 \r
111         EnableSaveRestore(_T("FormatPatchDlg"));\r
112         return TRUE;\r
113 }\r
114 // CFormatPatchDlg message handlers\r
115 \r
116 void CFormatPatchDlg::OnBnClickedButtonDir()\r
117 {\r
118         // TODO: Add your control notification handler code here\r
119         CBrowseFolder browseFolder;\r
120         browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
121         CString strCloneDirectory;\r
122         this->UpdateData(TRUE);\r
123         strCloneDirectory=m_Dir;\r
124         if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK) \r
125         {\r
126                 m_Dir=strCloneDirectory;\r
127                 this->UpdateData(FALSE);\r
128         }\r
129 }\r
130 \r
131 void CFormatPatchDlg::OnBnClickedButtonFrom()\r
132 {\r
133         CLogDlg dlg;\r
134         // tell the dialog to use mode for selecting revisions\r
135         dlg.SetSelect(true);\r
136         // only one revision must be selected however\r
137         dlg.SingleSelection(true);\r
138         if ( dlg.DoModal() == IDOK )\r
139         {\r
140                 // get selected hash if any\r
141                 CString selectedHash = dlg.GetSelectedHash();\r
142                 // load into window, do this even if empty so that it is clear that nothing has been selected\r
143                 m_cFrom.AddString(selectedHash);\r
144                 CheckRadioButton(IDC_RADIO_SINCE, IDC_RADIO_RANGE, IDC_RADIO_RANGE);\r
145                 OnBnClickedRadio();\r
146         }\r
147 }\r
148 \r
149 void CFormatPatchDlg::OnBnClickedButtonTo()\r
150 {\r
151         CLogDlg dlg;\r
152         // tell the dialog to use mode for selecting revisions\r
153         dlg.SetSelect(true);\r
154         // only one revision must be selected however\r
155         dlg.SingleSelection(true);\r
156         if ( dlg.DoModal() == IDOK )\r
157         {\r
158                 // get selected hash if any\r
159                 CString selectedHash = dlg.GetSelectedHash();\r
160                 // load into window, do this even if empty so that it is clear that nothing has been selected\r
161                 m_cTo.AddString(selectedHash);\r
162                 CheckRadioButton(IDC_RADIO_SINCE, IDC_RADIO_RANGE, IDC_RADIO_RANGE);\r
163                 OnBnClickedRadio();\r
164         }\r
165 }\r
166 \r
167 void CFormatPatchDlg::OnBnClickedOk()\r
168 {\r
169         // TODO: Add your control notification handler code here\r
170 \r
171         m_cDir.SaveHistory();\r
172         m_cFrom.SaveHistory();\r
173         m_cTo.SaveHistory();\r
174         this->UpdateData(TRUE);\r
175         this->m_Radio=GetCheckedRadioButton(IDC_RADIO_SINCE,IDC_RADIO_RANGE);\r
176 \r
177         m_regSendMail=this->m_bSendMail;\r
178         OnOK();\r
179 }\r
180 \r
181 void CFormatPatchDlg::OnBnClickedRadio()\r
182 {\r
183         // TODO: Add your control notification handler code here\r
184         int radio=this->GetCheckedRadioButton(IDC_RADIO_SINCE,IDC_RADIO_RANGE);\r
185         m_cSince.EnableWindow(FALSE);\r
186         m_cNum.EnableWindow(FALSE);\r
187         m_cFrom.EnableWindow(FALSE);\r
188         m_cTo.EnableWindow(FALSE);\r
189         switch(radio)\r
190         {\r
191         case IDC_RADIO_SINCE:\r
192                 m_cSince.EnableWindow(TRUE);\r
193                 break;\r
194         case IDC_RADIO_NUM:\r
195                 m_cNum.EnableWindow(TRUE);\r
196                 break;\r
197         case IDC_RADIO_RANGE:\r
198                 m_cFrom.EnableWindow(TRUE);\r
199                 m_cTo.EnableWindow(TRUE);\r
200         }\r
201 }\r
202 \r
203 void CFormatPatchDlg::OnBnClickedButtonRef()\r
204 {\r
205         if(CBrowseRefsDlg::PickRefForCombo(&m_cSince, gPickRef_NoTag))\r
206         {\r
207                 CheckRadioButton(IDC_RADIO_SINCE, IDC_RADIO_RANGE, IDC_RADIO_SINCE);\r
208                 OnBnClickedRadio();\r
209         }\r
210 }\r