1 // SendMailDlg.cpp : implementation file
\r
5 #include "TortoiseProc.h"
\r
6 #include "SendMailDlg.h"
\r
7 #include "MessageBox.h"
\r
8 #include "commonresource.h"
\r
9 #include "AppUtils.h"
\r
11 // CSendMailDlg dialog
\r
13 IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)
\r
15 CSendMailDlg::CSendMailDlg(CWnd* pParent /*=NULL*/)
\r
16 : CResizableStandAloneDialog(CSendMailDlg::IDD, pParent)
\r
21 , m_regAttach(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Attach"),0)
\r
22 , m_regCombine(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Combine"),0)
\r
24 m_bAttachment = m_regAttach;
\r
25 m_bCombine = m_regCombine;
\r
29 CSendMailDlg::~CSendMailDlg()
\r
33 void CSendMailDlg::DoDataExchange(CDataExchange* pDX)
\r
35 CDialog::DoDataExchange(pDX);
\r
36 DDX_Text(pDX, IDC_SENDMAIL_TO, m_To);
\r
37 DDX_Text(pDX, IDC_SENDMAIL_CC, m_CC);
\r
38 DDX_Check(pDX, IDC_SENDMAIL_ATTACHMENT, m_bAttachment);
\r
39 DDX_Check(pDX, IDC_SENDMAIL_COMBINE, m_bCombine);
\r
40 DDX_Control(pDX, IDC_SENDMAIL_PATCHS, m_ctrlList);
\r
41 DDX_Control(pDX,IDC_SENDMAIL_SETUP, this->m_SmtpSetup);
\r
42 DDX_Control(pDX,IDC_SENDMAIL_TO,m_ctrlTO);
\r
43 DDX_Control(pDX,IDC_SENDMAIL_CC,m_ctrlCC);
\r
47 BEGIN_MESSAGE_MAP(CSendMailDlg, CResizableStandAloneDialog)
\r
48 ON_BN_CLICKED(IDC_SENDMAIL_COMBINE, &CSendMailDlg::OnBnClickedSendmailCombine)
\r
49 ON_BN_CLICKED(IDOK, &CSendMailDlg::OnBnClickedOk)
\r
50 ON_NOTIFY(LVN_ITEMCHANGED, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnLvnItemchangedSendmailPatchs)
\r
51 ON_NOTIFY(NM_DBLCLK, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnNMDblclkSendmailPatchs)
\r
52 ON_EN_CHANGE(IDC_SENDMAIL_SUBJECT, &CSendMailDlg::OnEnChangeSendmailSubject)
\r
56 // CSendMailDlg message handlers
\r
58 BOOL CSendMailDlg::OnInitDialog()
\r
60 CResizableStandAloneDialog::OnInitDialog();
\r
62 AddAnchor(IDC_SENDMAIL_GROUP,TOP_LEFT,TOP_RIGHT);
\r
63 AddAnchor(IDC_SENDMAIL_TO,TOP_LEFT,TOP_RIGHT);
\r
64 AddAnchor(IDC_SENDMAIL_CC,TOP_LEFT,TOP_RIGHT);
\r
65 AddAnchor(IDC_SENDMAIL_SUBJECT,TOP_LEFT,TOP_RIGHT);
\r
66 AddAnchor(IDC_SENDMAIL_SETUP,TOP_RIGHT);
\r
68 AddAnchor(IDC_SENDMAIL_PATCHS,TOP_LEFT,BOTTOM_RIGHT);
\r
69 AddAnchor(IDOK,BOTTOM_RIGHT);
\r
70 AddAnchor(IDCANCEL,BOTTOM_RIGHT);
\r
72 this->AddOthersToAnchor();
\r
73 EnableSaveRestore(_T("SendMailDlg"));
\r
78 m_ctrlCC.SetSeparator(_T(";"));
\r
79 m_ctrlTO.SetSeparator(_T(";"));
\r
81 m_AddressReg.SetMaxHistoryItems(0xFFFF);
\r
83 m_AddressReg.Load(_T("Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\"),_T("email"));
\r
84 for(int i=0;i<m_AddressReg.GetCount();i++)
\r
86 m_ctrlCC.AddSearchString(m_AddressReg.GetEntry(i));
\r
87 m_ctrlTO.AddSearchString(m_AddressReg.GetEntry(i));
\r
90 m_ctrlList.SetExtendedStyle( m_ctrlList.GetExtendedStyle()| LVS_EX_CHECKBOXES );
\r
92 for(int i=0;i<m_PathList.GetCount();i++)
\r
94 m_ctrlList.InsertItem(i,m_PathList[i].GetWinPathString());
\r
95 m_ctrlList.SetCheck(i,true);
\r
98 // m_ctrlCC.AddSearchString(_T("Tortoisegit-dev@google.com"));
\r
99 // m_ctrlTO.AddSearchString(_T("Tortoisegit-dev@google.com"));
\r
100 this->UpdateData(FALSE);
\r
101 OnBnClickedSendmailCombine();
\r
104 void CSendMailDlg::OnBnClickedSendmailCombine()
\r
106 // TODO: Add your control notification handler code here
\r
107 this->UpdateData();
\r
108 this->GetDlgItem(IDC_SENDMAIL_SUBJECT)->EnableWindow(this->m_bCombine);
\r
110 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(this->m_Subject);
\r
115 void CSendMailDlg::OnBnClickedOk()
\r
118 this->UpdateData();
\r
120 if(this->m_To.IsEmpty() && this->m_CC.IsEmpty())
\r
122 CMessageBox::Show(NULL,IDS_ERR_ADDRESS_NO_EMPTY,IDS_APPNAME,MB_OK|MB_ICONERROR);
\r
129 Address=this->m_CC.Tokenize(_T(";"),start);
\r
130 m_AddressReg.AddEntry(Address);
\r
131 m_AddressReg.Save();
\r
136 Address=this->m_To.Tokenize(_T(";"),start);
\r
137 m_AddressReg.AddEntry(Address);
\r
138 m_AddressReg.Save();
\r
141 this->m_PathList.Clear();
\r
142 for(int i=0;i<m_ctrlList.GetItemCount();i++)
\r
145 if(m_ctrlList.GetCheck(i))
\r
147 path.SetFromWin(m_ctrlList.GetItemText(i,0));
\r
148 this->m_PathList.AddPath(path);
\r
152 m_regAttach=m_bAttachment;
\r
153 m_regCombine=m_bCombine;
\r
156 // TODO: Add your control notification handler code here
\r
159 void CSendMailDlg::UpdateSubject()
\r
161 this->UpdateData();
\r
163 if(!this->m_bCombine)
\r
165 if(m_ctrlList.GetSelectedCount()==1)
\r
167 POSITION pos=m_ctrlList.GetFirstSelectedItemPosition();
\r
168 int index=m_ctrlList.GetNextSelectedItem(pos);
\r
169 if(this->m_MapPatch.find(index) == m_MapPatch.end() )
\r
171 m_MapPatch[index].Parser(m_ctrlList.GetItemText(index,0));
\r
173 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(m_MapPatch[index].m_Subject);
\r
177 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(_T(""));
\r
182 void CSendMailDlg::OnLvnItemchangedSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)
\r
184 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
\r
187 // TODO: Add your control notification handler code here
\r
192 void CSendMailDlg::OnNMDblclkSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)
\r
194 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
\r
195 // TODO: Add your control notification handler code here
\r
196 CString path=this->m_ctrlList.GetItemText(pNMItemActivate->iItem,0);
\r
198 gitpath.SetFromWin(path);
\r
200 CAppUtils::StartUnifiedDiffViewer(path,gitpath.GetFilename());
\r
205 void CSendMailDlg::OnEnChangeSendmailSubject()
\r
207 // TODO: If this is a RICHEDIT control, the control will not
\r
208 // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()
\r
209 // function and call CRichEditCtrl().SetEventMask()
\r
210 // with the ENM_CHANGE flag ORed into the mask.
\r
212 // TODO: Add your control notification handler code here
\r
213 this->UpdateData();
\r
214 if(this->m_bCombine)
\r
215 GetDlgItem(IDC_SENDMAIL_SUBJECT)->GetWindowText(this->m_Subject);
\r