OSDN Git Service

Add Many Help button at dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SendMailDlg.cpp
1 // SendMailDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\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
10 #include "PatchListCtrl.h"\r
11 // CSendMailDlg dialog\r
12 \r
13 IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)\r
14 \r
15 CSendMailDlg::CSendMailDlg(CWnd* pParent /*=NULL*/)\r
16         : CResizableStandAloneDialog(CSendMailDlg::IDD, pParent)\r
17         , m_To(_T(""))\r
18         , m_CC(_T(""))\r
19         , m_Subject(_T(""))\r
20         \r
21         , m_regAttach(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Attach"),0)\r
22         , m_regCombine(_T("Software\\TortoiseGit\\TortoiseProc\\SendMail\\Combine"),0)\r
23 {\r
24         m_bAttachment  = m_regAttach;\r
25         m_bCombine =     m_regCombine;\r
26         this->m_ctrlList.m_ContextMenuMask &=~ m_ctrlList.GetMenuMask(CPatchListCtrl::MENU_SENDMAIL);\r
27 }\r
28 \r
29 CSendMailDlg::~CSendMailDlg()\r
30 {\r
31 }\r
32 \r
33 void CSendMailDlg::DoDataExchange(CDataExchange* pDX)\r
34 {\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
44 }\r
45 \r
46 \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
53 END_MESSAGE_MAP()\r
54 \r
55 \r
56 // CSendMailDlg message handlers\r
57 \r
58 BOOL CSendMailDlg::OnInitDialog()\r
59 {\r
60         CResizableStandAloneDialog::OnInitDialog();\r
61 \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
67 \r
68         AddAnchor(IDC_SENDMAIL_PATCHS,TOP_LEFT,BOTTOM_RIGHT);\r
69         AddAnchor(IDOK,BOTTOM_RIGHT);\r
70         AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
71         AddAnchor(IDHELP, BOTTOM_RIGHT);\r
72 \r
73         this->AddOthersToAnchor();\r
74         EnableSaveRestore(_T("SendMailDlg"));\r
75 \r
76         m_ctrlCC.Init();\r
77         m_ctrlTO.Init();\r
78 \r
79         m_ctrlCC.SetSeparator(_T(";"));\r
80         m_ctrlTO.SetSeparator(_T(";"));\r
81 \r
82         m_AddressReg.SetMaxHistoryItems(0xFFFF);\r
83 \r
84         m_AddressReg.Load(_T("Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\"),_T("email"));\r
85         for(int i=0;i<m_AddressReg.GetCount();i++)\r
86         {\r
87                 m_ctrlCC.AddSearchString(m_AddressReg.GetEntry(i));\r
88                 m_ctrlTO.AddSearchString(m_AddressReg.GetEntry(i));\r
89         }\r
90 \r
91         m_ctrlList.SetExtendedStyle( m_ctrlList.GetExtendedStyle()| LVS_EX_CHECKBOXES );\r
92 \r
93         for(int i=0;i<m_PathList.GetCount();i++)\r
94         {\r
95                 m_ctrlList.InsertItem(i,m_PathList[i].GetWinPathString());\r
96                 m_ctrlList.SetCheck(i,true);\r
97         }\r
98         \r
99 //      m_ctrlCC.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
100 //      m_ctrlTO.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
101         this->UpdateData(FALSE);\r
102         OnBnClickedSendmailCombine();\r
103         return TRUE;\r
104 }\r
105 void CSendMailDlg::OnBnClickedSendmailCombine()\r
106 {\r
107         // TODO: Add your control notification handler code here\r
108         this->UpdateData();\r
109         this->GetDlgItem(IDC_SENDMAIL_SUBJECT)->EnableWindow(this->m_bCombine);\r
110         if(m_bCombine)\r
111                 GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(this->m_Subject);\r
112 \r
113         UpdateSubject();\r
114 }\r
115 \r
116 void CSendMailDlg::OnBnClickedOk()\r
117 {\r
118         \r
119         this->UpdateData();\r
120 \r
121         if(this->m_To.IsEmpty() && this->m_CC.IsEmpty())\r
122         {\r
123                 CMessageBox::Show(NULL,IDS_ERR_ADDRESS_NO_EMPTY,IDS_APPNAME,MB_OK|MB_ICONERROR);\r
124                 return;\r
125         }\r
126         int start =0;\r
127         CString Address;\r
128         while(start>=0)\r
129         {\r
130                 Address=this->m_CC.Tokenize(_T(";"),start);\r
131                 m_AddressReg.AddEntry(Address);\r
132                 m_AddressReg.Save();\r
133         }\r
134         start =0;\r
135         while(start>=0)\r
136         {\r
137                 Address=this->m_To.Tokenize(_T(";"),start);\r
138                 m_AddressReg.AddEntry(Address);\r
139                 m_AddressReg.Save();\r
140         }       \r
141         \r
142         this->m_PathList.Clear();\r
143         for(int i=0;i<m_ctrlList.GetItemCount();i++)\r
144         {\r
145                 CTGitPath path;\r
146                 if(m_ctrlList.GetCheck(i))\r
147                 {\r
148                         path.SetFromWin(m_ctrlList.GetItemText(i,0));\r
149                         this->m_PathList.AddPath(path);\r
150                 }\r
151         }\r
152 \r
153         m_regAttach=m_bAttachment;\r
154         m_regCombine=m_bCombine;\r
155 \r
156         OnOK();\r
157         // TODO: Add your control notification handler code here\r
158 }\r
159 \r
160 void CSendMailDlg::UpdateSubject()\r
161 {\r
162         this->UpdateData();\r
163 \r
164         if(!this->m_bCombine)\r
165         {\r
166                 if(m_ctrlList.GetSelectedCount()==1)\r
167                 {\r
168                         POSITION pos=m_ctrlList.GetFirstSelectedItemPosition();\r
169                         int index=m_ctrlList.GetNextSelectedItem(pos);\r
170                         if(this->m_MapPatch.find(index) == m_MapPatch.end() )\r
171                         {\r
172                                 m_MapPatch[index].Parser(m_ctrlList.GetItemText(index,0));\r
173                         }\r
174                         GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(m_MapPatch[index].m_Subject);\r
175                 }\r
176                 else\r
177                 {\r
178                         GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(_T(""));\r
179                 }\r
180         }\r
181 }\r
182 \r
183 void CSendMailDlg::OnLvnItemchangedSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)\r
184 {\r
185         LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
186         \r
187         UpdateSubject();\r
188         // TODO: Add your control notification handler code here\r
189         \r
190         *pResult = 0;\r
191 }\r
192 \r
193 void CSendMailDlg::OnNMDblclkSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)\r
194 {\r
195         LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r
196         // TODO: Add your control notification handler code here\r
197         CString path=this->m_ctrlList.GetItemText(pNMItemActivate->iItem,0);\r
198         CTGitPath gitpath;\r
199         gitpath.SetFromWin(path);\r
200         \r
201         CAppUtils::StartUnifiedDiffViewer(path,gitpath.GetFilename());\r
202 \r
203         *pResult = 0;\r
204 }\r
205 \r
206 void CSendMailDlg::OnEnChangeSendmailSubject()\r
207 {\r
208         // TODO:  If this is a RICHEDIT control, the control will not\r
209         // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()\r
210         // function and call CRichEditCtrl().SetEventMask()\r
211         // with the ENM_CHANGE flag ORed into the mask.\r
212 \r
213         // TODO:  Add your control notification handler code here\r
214         this->UpdateData();\r
215         if(this->m_bCombine)\r
216                 GetDlgItem(IDC_SENDMAIL_SUBJECT)->GetWindowText(this->m_Subject);\r
217 }\r