1 // SendMailDlg.cpp : implementation file
5 #include "TortoiseProc.h"
6 #include "SendMailDlg.h"
7 #include "MessageBox.h"
8 #include "commonresource.h"
10 #include "PatchListCtrl.h"
11 // CSendMailDlg dialog
13 IMPLEMENT_DYNAMIC(CSendMailDlg
, CResizableStandAloneDialog
)
15 CSendMailDlg::CSendMailDlg(CWnd
* pParent
/*=NULL*/)
16 : CResizableStandAloneDialog(CSendMailDlg::IDD
, pParent
)
21 , m_regAttach(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Attach"),0)
22 , m_regCombine(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Combine"),0)
24 m_bAttachment
= m_regAttach
;
25 m_bCombine
= m_regCombine
;
26 this->m_ctrlList
.m_ContextMenuMask
&=~ m_ctrlList
.GetMenuMask(CPatchListCtrl::MENU_SENDMAIL
);
29 CSendMailDlg::~CSendMailDlg()
33 void CSendMailDlg::DoDataExchange(CDataExchange
* pDX
)
35 CDialog::DoDataExchange(pDX
);
36 DDX_Text(pDX
, IDC_SENDMAIL_TO
, m_To
);
37 DDX_Text(pDX
, IDC_SENDMAIL_CC
, m_CC
);
38 DDX_Check(pDX
, IDC_SENDMAIL_ATTACHMENT
, m_bAttachment
);
39 DDX_Check(pDX
, IDC_SENDMAIL_COMBINE
, m_bCombine
);
40 DDX_Control(pDX
, IDC_SENDMAIL_PATCHS
, m_ctrlList
);
41 DDX_Control(pDX
,IDC_SENDMAIL_SETUP
, this->m_SmtpSetup
);
42 DDX_Control(pDX
,IDC_SENDMAIL_TO
,m_ctrlTO
);
43 DDX_Control(pDX
,IDC_SENDMAIL_CC
,m_ctrlCC
);
47 BEGIN_MESSAGE_MAP(CSendMailDlg
, CResizableStandAloneDialog
)
48 ON_BN_CLICKED(IDC_SENDMAIL_COMBINE
, &CSendMailDlg::OnBnClickedSendmailCombine
)
49 ON_BN_CLICKED(IDOK
, &CSendMailDlg::OnBnClickedOk
)
50 ON_NOTIFY(LVN_ITEMCHANGED
, IDC_SENDMAIL_PATCHS
, &CSendMailDlg::OnLvnItemchangedSendmailPatchs
)
51 ON_NOTIFY(NM_DBLCLK
, IDC_SENDMAIL_PATCHS
, &CSendMailDlg::OnNMDblclkSendmailPatchs
)
52 ON_EN_CHANGE(IDC_SENDMAIL_SUBJECT
, &CSendMailDlg::OnEnChangeSendmailSubject
)
56 // CSendMailDlg message handlers
58 BOOL
CSendMailDlg::OnInitDialog()
60 CResizableStandAloneDialog::OnInitDialog();
62 AddAnchor(IDC_SENDMAIL_GROUP
,TOP_LEFT
,TOP_RIGHT
);
63 AddAnchor(IDC_SENDMAIL_TO
,TOP_LEFT
,TOP_RIGHT
);
64 AddAnchor(IDC_SENDMAIL_CC
,TOP_LEFT
,TOP_RIGHT
);
65 AddAnchor(IDC_SENDMAIL_SUBJECT
,TOP_LEFT
,TOP_RIGHT
);
66 AddAnchor(IDC_SENDMAIL_SETUP
,TOP_RIGHT
);
68 AddAnchor(IDC_SENDMAIL_PATCHS
,TOP_LEFT
,BOTTOM_RIGHT
);
69 AddAnchor(IDOK
,BOTTOM_RIGHT
);
70 AddAnchor(IDCANCEL
,BOTTOM_RIGHT
);
71 AddAnchor(IDHELP
, BOTTOM_RIGHT
);
73 this->AddOthersToAnchor();
74 EnableSaveRestore(_T("SendMailDlg"));
79 m_ctrlCC
.SetSeparator(_T(";"));
80 m_ctrlTO
.SetSeparator(_T(";"));
82 m_AddressReg
.SetMaxHistoryItems(0xFFFF);
84 m_AddressReg
.Load(_T("Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\"),_T("email"));
85 for(int i
=0;i
<m_AddressReg
.GetCount();i
++)
87 m_ctrlCC
.AddSearchString(m_AddressReg
.GetEntry(i
));
88 m_ctrlTO
.AddSearchString(m_AddressReg
.GetEntry(i
));
91 m_ctrlList
.SetExtendedStyle( m_ctrlList
.GetExtendedStyle()| LVS_EX_CHECKBOXES
);
93 for(int i
=0;i
<m_PathList
.GetCount();i
++)
95 m_ctrlList
.InsertItem(i
,m_PathList
[i
].GetWinPathString());
96 m_ctrlList
.SetCheck(i
,true);
99 // m_ctrlCC.AddSearchString(_T("Tortoisegit-dev@google.com"));
100 // m_ctrlTO.AddSearchString(_T("Tortoisegit-dev@google.com"));
101 this->UpdateData(FALSE
);
102 OnBnClickedSendmailCombine();
105 void CSendMailDlg::OnBnClickedSendmailCombine()
107 // TODO: Add your control notification handler code here
109 this->GetDlgItem(IDC_SENDMAIL_SUBJECT
)->EnableWindow(this->m_bCombine
);
111 GetDlgItem(IDC_SENDMAIL_SUBJECT
)->SetWindowText(this->m_Subject
);
116 void CSendMailDlg::OnBnClickedOk()
121 if(this->m_To
.IsEmpty() && this->m_CC
.IsEmpty())
123 CMessageBox::Show(NULL
,IDS_ERR_ADDRESS_NO_EMPTY
,IDS_APPNAME
,MB_OK
|MB_ICONERROR
);
130 Address
=this->m_CC
.Tokenize(_T(";"),start
);
131 m_AddressReg
.AddEntry(Address
);
137 Address
=this->m_To
.Tokenize(_T(";"),start
);
138 m_AddressReg
.AddEntry(Address
);
142 this->m_PathList
.Clear();
143 for(int i
=0;i
<m_ctrlList
.GetItemCount();i
++)
146 if(m_ctrlList
.GetCheck(i
))
148 path
.SetFromWin(m_ctrlList
.GetItemText(i
,0));
149 this->m_PathList
.AddPath(path
);
153 m_regAttach
=m_bAttachment
;
154 m_regCombine
=m_bCombine
;
157 // TODO: Add your control notification handler code here
160 void CSendMailDlg::UpdateSubject()
164 if(!this->m_bCombine
)
166 if(m_ctrlList
.GetSelectedCount()==1)
168 POSITION pos
=m_ctrlList
.GetFirstSelectedItemPosition();
169 int index
=m_ctrlList
.GetNextSelectedItem(pos
);
170 if(this->m_MapPatch
.find(index
) == m_MapPatch
.end() )
172 m_MapPatch
[index
].Parser(m_ctrlList
.GetItemText(index
,0));
174 GetDlgItem(IDC_SENDMAIL_SUBJECT
)->SetWindowText(m_MapPatch
[index
].m_Subject
);
178 GetDlgItem(IDC_SENDMAIL_SUBJECT
)->SetWindowText(_T(""));
183 void CSendMailDlg::OnLvnItemchangedSendmailPatchs(NMHDR
*pNMHDR
, LRESULT
*pResult
)
185 LPNMLISTVIEW pNMLV
= reinterpret_cast<LPNMLISTVIEW
>(pNMHDR
);
188 // TODO: Add your control notification handler code here
193 void CSendMailDlg::OnNMDblclkSendmailPatchs(NMHDR
*pNMHDR
, LRESULT
*pResult
)
195 LPNMITEMACTIVATE pNMItemActivate
= reinterpret_cast<LPNMITEMACTIVATE
>(pNMHDR
);
196 // TODO: Add your control notification handler code here
197 CString path
=this->m_ctrlList
.GetItemText(pNMItemActivate
->iItem
,0);
199 gitpath
.SetFromWin(path
);
201 CAppUtils::StartUnifiedDiffViewer(path
,gitpath
.GetFilename());
206 void CSendMailDlg::OnEnChangeSendmailSubject()
208 // TODO: If this is a RICHEDIT control, the control will not
209 // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()
210 // function and call CRichEditCtrl().SetEventMask()
211 // with the ENM_CHANGE flag ORed into the mask.
213 // TODO: Add your control notification handler code here
216 GetDlgItem(IDC_SENDMAIL_SUBJECT
)->GetWindowText(this->m_Subject
);