Merge branch 'scintilla-551'
[TortoiseGit.git] / src / TortoiseProc / SendMailDlg.cpp
blobd4f10bdb29fae414a7866cba802ce395ed890a4a
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2013, 2015-2017, 2022, 2024 - TortoiseGit
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.
19 // SendMailDlg.cpp : implementation file
22 #include "stdafx.h"
23 #include "TortoiseProc.h"
24 #include "SendMailDlg.h"
25 #include "MessageBox.h"
26 #include "AppUtils.h"
27 #include "PatchListCtrl.h"
28 #include "SendMailPatch.h"
30 // CSendMailDlg dialog
32 IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)
34 CSendMailDlg::CSendMailDlg(CWnd* pParent /*=nullptr*/)
35 : CResizableStandAloneDialog(CSendMailDlg::IDD, pParent)
36 , m_bCustomSubject(FALSE)
37 , m_regAttach(L"Software\\TortoiseGit\\TortoiseProc\\SendMail\\Attach", 0)
38 , m_regCombine(L"Software\\TortoiseGit\\TortoiseProc\\SendMail\\Combine", 0)
40 m_bAttachment = m_regAttach;
41 m_bCombine = m_regCombine;
42 this->m_ctrlList.m_ContextMenuMask &=~ m_ctrlList.GetMenuMask(CPatchListCtrl::MENU_SENDMAIL);
45 CSendMailDlg::~CSendMailDlg()
49 void CSendMailDlg::DoDataExchange(CDataExchange* pDX)
51 CDialog::DoDataExchange(pDX);
52 DDX_Text(pDX, IDC_SENDMAIL_TO, m_To);
53 DDX_Text(pDX, IDC_SENDMAIL_CC, m_CC);
54 DDX_Check(pDX, IDC_SENDMAIL_ATTACHMENT, m_bAttachment);
55 DDX_Check(pDX, IDC_SENDMAIL_COMBINE, m_bCombine);
56 DDX_Control(pDX, IDC_SENDMAIL_PATCHS, m_ctrlList);
57 DDX_Control(pDX,IDC_SENDMAIL_SETUP, this->m_SmtpSetup);
58 DDX_Control(pDX,IDC_SENDMAIL_TO,m_ctrlTO);
59 DDX_Control(pDX,IDC_SENDMAIL_CC,m_ctrlCC);
63 BEGIN_MESSAGE_MAP(CSendMailDlg, CResizableStandAloneDialog)
64 ON_BN_CLICKED(IDC_SENDMAIL_COMBINE, &CSendMailDlg::OnBnClickedSendmailCombine)
65 ON_BN_CLICKED(IDOK, &CSendMailDlg::OnBnClickedOk)
66 ON_NOTIFY(LVN_ITEMCHANGED, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnLvnItemchangedSendmailPatchs)
67 ON_NOTIFY(NM_DBLCLK, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnNMDblclkSendmailPatchs)
68 ON_EN_CHANGE(IDC_SENDMAIL_SUBJECT, &CSendMailDlg::OnEnChangeSendmailSubject)
69 ON_STN_CLICKED(IDC_SENDMAIL_SETUP, &CSendMailDlg::OnStnClickedSendmailSetup)
70 END_MESSAGE_MAP()
72 // CSendMailDlg message handlers
74 BOOL CSendMailDlg::OnInitDialog()
76 CResizableStandAloneDialog::OnInitDialog();
77 CAppUtils::MarkWindowAsUnpinnable(m_hWnd);
79 AdjustControlSize(IDC_SENDMAIL_ATTACHMENT);
80 AdjustControlSize(IDC_SENDMAIL_COMBINE);
81 AdjustControlSize(IDC_SENDMAIL_SETUP);
83 AddAnchor(IDC_SENDMAIL_GROUP,TOP_LEFT,TOP_RIGHT);
84 AddAnchor(IDC_SENDMAIL_TO,TOP_LEFT,TOP_RIGHT);
85 AddAnchor(IDC_SENDMAIL_CC,TOP_LEFT,TOP_RIGHT);
86 AddAnchor(IDC_SENDMAIL_SUBJECT,TOP_LEFT,TOP_RIGHT);
87 AddAnchor(IDC_SENDMAIL_SETUP,TOP_RIGHT);
89 AddAnchor(IDC_SENDMAIL_PATCHS,TOP_LEFT,BOTTOM_RIGHT);
90 AddAnchor(IDOK,BOTTOM_RIGHT);
91 AddAnchor(IDCANCEL,BOTTOM_RIGHT);
92 AddAnchor(IDHELP, BOTTOM_RIGHT);
94 this->AddOthersToAnchor();
96 EnableSaveRestore(L"SendMailDlg");
98 CAppUtils::SetWindowTitle(*this, m_PathList.GetCommonRoot().GetUIPathString());
100 m_ctrlCC.Init();
101 m_ctrlTO.Init();
103 m_ctrlCC.SetSeparator(L";");
104 m_ctrlTO.SetSeparator(L";");
106 m_AddressReg.SetMaxHistoryItems(0xFFFF);
108 m_AddressReg.Load(L"Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\", L"email");
109 for (size_t i = 0; i < m_AddressReg.GetCount(); ++i)
111 m_ctrlCC.AddSearchString(m_AddressReg.GetEntry(i));
112 m_ctrlTO.AddSearchString(m_AddressReg.GetEntry(i));
115 m_ctrlList.SetExtendedStyle( m_ctrlList.GetExtendedStyle()| LVS_EX_CHECKBOXES );
117 for (int i = 0; i < m_PathList.GetCount(); ++i)
119 m_ctrlList.InsertItem(i,m_PathList[i].GetWinPathString());
120 m_ctrlList.SetCheck(i,true);
123 if (m_PathList.GetCount() == 1)
124 m_ctrlList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
126 this->UpdateData(FALSE);
127 OnBnClickedSendmailCombine();
129 m_SmtpSetup.SetURL(CString());
131 return TRUE;
133 void CSendMailDlg::OnBnClickedSendmailCombine()
135 this->UpdateData();
137 if (m_bCustomSubject)
138 return;
140 this->GetDlgItem(IDC_SENDMAIL_SUBJECT)->EnableWindow(this->m_bCombine);
141 if(m_bCombine)
142 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(this->m_Subject);
144 UpdateSubject();
147 void CSendMailDlg::OnBnClickedOk()
149 this->UpdateData();
151 if (m_To.IsEmpty() && m_CC.IsEmpty() && CRegDWORD(L"Software\\TortoiseGit\\TortoiseProc\\SendMail\\DeliveryType", SEND_MAIL_MAPI) != SEND_MAIL_MAPI)
153 CMessageBox::Show(GetSafeHwnd(), IDS_ERR_ADDRESS_NO_EMPTY, IDS_APPNAME, MB_OK | MB_ICONEXCLAMATION);
154 return;
156 int start =0;
157 CString Address;
158 while(start>=0)
160 Address = m_CC.Tokenize(L";", start);
161 m_AddressReg.AddEntry(Address);
162 m_AddressReg.Save();
164 start =0;
165 while(start>=0)
167 Address = m_To.Tokenize(L";", start);
168 m_AddressReg.AddEntry(Address);
169 m_AddressReg.Save();
172 this->m_PathList.Clear();
173 for (int i = 0; i < m_ctrlList.GetItemCount(); ++i)
175 CTGitPath path;
176 if(m_ctrlList.GetCheck(i))
178 path.SetFromWin(m_ctrlList.GetItemText(i,0));
179 this->m_PathList.AddPath(path);
183 m_regAttach=m_bAttachment;
184 m_regCombine=m_bCombine;
186 OnOK();
189 void CSendMailDlg::UpdateSubject()
191 this->UpdateData();
193 if(!this->m_bCombine)
195 if(m_ctrlList.GetSelectedCount()==1)
197 POSITION pos=m_ctrlList.GetFirstSelectedItemPosition();
198 int index=m_ctrlList.GetNextSelectedItem(pos);
199 if(this->m_MapPatch.find(index) == m_MapPatch.end() )
201 CString pathfile=m_ctrlList.GetItemText(index,0);
202 m_MapPatch[index].Parse(pathfile, false);
204 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(m_MapPatch[index].m_Subject);
206 else
207 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(L"");
211 void CSendMailDlg::OnLvnItemchangedSendmailPatchs(NMHDR * /*pNMHDR*/, LRESULT *pResult)
213 if (!m_bCustomSubject)
214 UpdateSubject();
216 *pResult = 0;
219 void CSendMailDlg::OnNMDblclkSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)
221 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
222 *pResult = 0;
224 CPoint point(pNMItemActivate->ptAction);
225 UINT uFlags = 0;
226 m_ctrlList.HitTest(point, &uFlags);
227 if (uFlags == LVHT_ONITEMSTATEICON)
228 return;
230 CString path=this->m_ctrlList.GetItemText(pNMItemActivate->iItem,0);
231 CTGitPath gitpath;
232 gitpath.SetFromWin(path);
234 CAppUtils::StartUnifiedDiffViewer(path,gitpath.GetFilename());
237 void CSendMailDlg::OnEnChangeSendmailSubject()
239 this->UpdateData();
240 if (m_bCombine || m_bCustomSubject)
241 GetDlgItem(IDC_SENDMAIL_SUBJECT)->GetWindowText(this->m_Subject);
244 void CSendMailDlg::OnStnClickedSendmailSetup()
246 CCommonAppUtils::RunTortoiseGitProc(L"/command:settings /page:smtp");