OSDN Git Service

Update Email Subject at sendmaildlg
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SendMailDlg.cpp
index fdcd57d..dee06f9 100644 (file)
@@ -4,8 +4,9 @@
 #include "stdafx.h"\r
 #include "TortoiseProc.h"\r
 #include "SendMailDlg.h"\r
-\r
-\r
+#include "MessageBox.h"\r
+#include "commonresource.h"\r
+#include "AppUtils.h"\r
 // CSendMailDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CSendMailDlg, CResizableStandAloneDialog)\r
@@ -16,7 +17,7 @@ CSendMailDlg::CSendMailDlg(CWnd* pParent /*=NULL*/)
        , m_CC(_T(""))\r
        , m_Subject(_T(""))\r
        , m_bAttachment(FALSE)\r
-       , m_bBranch(FALSE)\r
+       , m_bCombine(FALSE)\r
 {\r
 \r
 }\r
@@ -30,16 +31,21 @@ void CSendMailDlg::DoDataExchange(CDataExchange* pDX)
        CDialog::DoDataExchange(pDX);\r
        DDX_Text(pDX, IDC_SENDMAIL_TO, m_To);\r
        DDX_Text(pDX, IDC_SENDMAIL_CC, m_CC);\r
-       DDX_Text(pDX, IDC_SENDMAIL_SUBJECT, m_Subject);\r
        DDX_Check(pDX, IDC_SENDMAIL_ATTACHMENT, m_bAttachment);\r
-       DDX_Check(pDX, IDC_SENDMAIL_COMBINE, m_bBranch);\r
+       DDX_Check(pDX, IDC_SENDMAIL_COMBINE, m_bCombine);\r
        DDX_Control(pDX, IDC_SENDMAIL_PATCHS, m_ctrlList);\r
        DDX_Control(pDX,IDC_SENDMAIL_SETUP, this->m_SmtpSetup);\r
+       DDX_Control(pDX,IDC_SENDMAIL_TO,m_ctrlTO);\r
+       DDX_Control(pDX,IDC_SENDMAIL_CC,m_ctrlCC);\r
 }\r
 \r
 \r
 BEGIN_MESSAGE_MAP(CSendMailDlg, CResizableStandAloneDialog)\r
        ON_BN_CLICKED(IDC_SENDMAIL_COMBINE, &CSendMailDlg::OnBnClickedSendmailCombine)\r
+       ON_BN_CLICKED(IDOK, &CSendMailDlg::OnBnClickedOk)\r
+       ON_NOTIFY(LVN_ITEMCHANGED, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnLvnItemchangedSendmailPatchs)\r
+       ON_NOTIFY(NM_DBLCLK, IDC_SENDMAIL_PATCHS, &CSendMailDlg::OnNMDblclkSendmailPatchs)\r
+       ON_EN_CHANGE(IDC_SENDMAIL_SUBJECT, &CSendMailDlg::OnEnChangeSendmailSubject)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -61,9 +67,142 @@ BOOL CSendMailDlg::OnInitDialog()
 \r
        this->AddOthersToAnchor();\r
        EnableSaveRestore(_T("SendMailDlg"));\r
+\r
+       m_ctrlCC.Init();\r
+       m_ctrlTO.Init();\r
+\r
+       m_ctrlCC.SetSeparator(_T(";"));\r
+       m_ctrlTO.SetSeparator(_T(";"));\r
+\r
+       m_AddressReg.SetMaxHistoryItems(0xFFFF);\r
+\r
+       m_AddressReg.Load(_T("Software\\TortoiseGit\\TortoiseProc\\EmailAddress\\"),_T("email"));\r
+       for(int i=0;i<m_AddressReg.GetCount();i++)\r
+       {\r
+               m_ctrlCC.AddSearchString(m_AddressReg.GetEntry(i));\r
+               m_ctrlTO.AddSearchString(m_AddressReg.GetEntry(i));\r
+       }\r
+\r
+       m_ctrlList.SetExtendedStyle( m_ctrlList.GetExtendedStyle()| LVS_EX_CHECKBOXES );\r
+\r
+       for(int i=0;i<m_PathList.GetCount();i++)\r
+       {\r
+               m_ctrlList.InsertItem(i,m_PathList[i].GetWinPathString());\r
+               m_ctrlList.SetCheck(i,true);\r
+       }\r
+       \r
+//     m_ctrlCC.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
+//     m_ctrlTO.AddSearchString(_T("Tortoisegit-dev@google.com"));\r
+       this->UpdateData(FALSE);\r
+       OnBnClickedSendmailCombine();\r
        return TRUE;\r
 }\r
 void CSendMailDlg::OnBnClickedSendmailCombine()\r
 {\r
        // TODO: Add your control notification handler code here\r
+       this->UpdateData();\r
+       this->GetDlgItem(IDC_SENDMAIL_SUBJECT)->EnableWindow(this->m_bCombine);\r
+       if(m_bCombine)\r
+               GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(this->m_Subject);\r
+\r
+       UpdateSubject();\r
+}\r
+\r
+void CSendMailDlg::OnBnClickedOk()\r
+{\r
+       \r
+       this->UpdateData();\r
+\r
+       if(this->m_To.IsEmpty() && this->m_CC.IsEmpty())\r
+       {\r
+               CMessageBox::Show(NULL,IDS_ERR_ADDRESS_NO_EMPTY,IDS_APPNAME,MB_OK|MB_ICONERROR);\r
+               return;\r
+       }\r
+       int start =0;\r
+       CString Address;\r
+       while(start>=0)\r
+       {\r
+               Address=this->m_CC.Tokenize(_T(";"),start);\r
+               m_AddressReg.AddEntry(Address);\r
+               m_AddressReg.Save();\r
+       }\r
+       start =0;\r
+       while(start>=0)\r
+       {\r
+               Address=this->m_To.Tokenize(_T(";"),start);\r
+               m_AddressReg.AddEntry(Address);\r
+               m_AddressReg.Save();\r
+       }       \r
+       \r
+       this->m_PathList.Clear();\r
+       for(int i=0;i<m_ctrlList.GetItemCount();i++)\r
+       {\r
+               CTGitPath path;\r
+               if(m_ctrlList.GetCheck(i))\r
+               {\r
+                       path.SetFromWin(m_ctrlList.GetItemText(i,0));\r
+                       this->m_PathList.AddPath(path);\r
+               }\r
+       }\r
+       OnOK();\r
+       // TODO: Add your control notification handler code here\r
+}\r
+\r
+void CSendMailDlg::UpdateSubject()\r
+{\r
+       this->UpdateData();\r
+\r
+       if(!this->m_bCombine)\r
+       {\r
+               if(m_ctrlList.GetSelectedCount()==1)\r
+               {\r
+                       POSITION pos=m_ctrlList.GetFirstSelectedItemPosition();\r
+                       int index=m_ctrlList.GetNextSelectedItem(pos);\r
+                       if(this->m_MapPatch.find(index) == m_MapPatch.end() )\r
+                       {\r
+                               m_MapPatch[index].Parser(m_ctrlList.GetItemText(index,0));\r
+                       }\r
+                       GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(m_MapPatch[index].m_Subject);\r
+               }\r
+               else\r
+               {\r
+                       GetDlgItem(IDC_SENDMAIL_SUBJECT)->SetWindowText(_T(""));\r
+               }\r
+       }\r
+}\r
+\r
+void CSendMailDlg::OnLvnItemchangedSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
+       \r
+       UpdateSubject();\r
+       // TODO: Add your control notification handler code here\r
+       \r
+       *pResult = 0;\r
+}\r
+\r
+void CSendMailDlg::OnNMDblclkSendmailPatchs(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r
+       // TODO: Add your control notification handler code here\r
+       CString path=this->m_ctrlList.GetItemText(pNMItemActivate->iItem,0);\r
+       CTGitPath gitpath;\r
+       gitpath.SetFromWin(path);\r
+       \r
+       CAppUtils::StartUnifiedDiffViewer(path,gitpath.GetFilename());\r
+\r
+       *pResult = 0;\r
+}\r
+\r
+void CSendMailDlg::OnEnChangeSendmailSubject()\r
+{\r
+       // TODO:  If this is a RICHEDIT control, the control will not\r
+       // send this notification unless you override the CResizableStandAloneDialog::OnInitDialog()\r
+       // function and call CRichEditCtrl().SetEventMask()\r
+       // with the ENM_CHANGE flag ORed into the mask.\r
+\r
+       // TODO:  Add your control notification handler code here\r
+       this->UpdateData();\r
+       if(this->m_bCombine)\r
+               GetDlgItem(IDC_SENDMAIL_SUBJECT)->GetWindowText(this->m_Subject);\r
 }\r