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