OSDN Git Service

Add bugtraq to support commit dialog bug track.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / InputLogDlg.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "stdafx.h"\r
20 #include "TortoiseProc.h"\r
21 #include "InputLogDlg.h"\r
22 #include "Registry.h"\r
23 #include "HistoryDlg.h"\r
24 #include "RegHistory.h"\r
25 \r
26 \r
27 // CInputLogDlg dialog\r
28 \r
29 IMPLEMENT_DYNAMIC(CInputLogDlg, CResizableStandAloneDialog)\r
30 \r
31 CInputLogDlg::CInputLogDlg(CWnd* pParent /*=NULL*/)\r
32         : CResizableStandAloneDialog(CInputLogDlg::IDD, pParent)\r
33         , m_pProjectProperties(NULL)\r
34 {\r
35 \r
36 }\r
37 \r
38 CInputLogDlg::~CInputLogDlg()\r
39 {\r
40 }\r
41 \r
42 void CInputLogDlg::DoDataExchange(CDataExchange* pDX)\r
43 {\r
44         CResizableStandAloneDialog::DoDataExchange(pDX);\r
45         DDX_Control(pDX, IDC_INPUTTEXT, m_cInput);\r
46 }\r
47 \r
48 \r
49 BEGIN_MESSAGE_MAP(CInputLogDlg, CResizableStandAloneDialog)\r
50         ON_EN_CHANGE(IDC_INPUTTEXT, OnEnChangeLogmessage)\r
51         ON_BN_CLICKED(IDC_HISTORY, &CInputLogDlg::OnBnClickedHistory)\r
52 END_MESSAGE_MAP()\r
53 \r
54 \r
55 BOOL CInputLogDlg::OnInitDialog()\r
56 {\r
57         CResizableStandAloneDialog::OnInitDialog();\r
58 \r
59 #ifdef DEBUG\r
60         if (m_pProjectProperties == NULL)\r
61                 TRACE("InputLogDlg: project properties not set\n");\r
62         if (m_sActionText.IsEmpty())\r
63                 TRACE("InputLogDlg: action text not set\n");\r
64         if (m_sUUID.IsEmpty())\r
65                 TRACE("InputLogDlg: repository UUID not set\n");\r
66 #endif\r
67 \r
68         if (m_pProjectProperties)\r
69                 m_cInput.Init(*m_pProjectProperties);\r
70         else\r
71                 m_cInput.Init();\r
72 \r
73         m_cInput.SetFont((CString)CRegString(_T("Software\\TortoiseGit\\LogFontName"), _T("Courier New")), (DWORD)CRegDWORD(_T("Software\\TortoiseGit\\LogFontSize"), 8));\r
74 \r
75         if (m_pProjectProperties)\r
76         {\r
77                 if (m_pProjectProperties->nLogWidthMarker)\r
78                 {\r
79                         m_cInput.Call(SCI_SETWRAPMODE, SC_WRAP_NONE);\r
80                         m_cInput.Call(SCI_SETEDGEMODE, EDGE_LINE);\r
81                         m_cInput.Call(SCI_SETEDGECOLUMN, m_pProjectProperties->nLogWidthMarker);\r
82                 }\r
83                 else\r
84                 {\r
85                         m_cInput.Call(SCI_SETEDGEMODE, EDGE_NONE);\r
86                         m_cInput.Call(SCI_SETWRAPMODE, SC_WRAP_WORD);\r
87                 }\r
88                 m_cInput.SetText(m_pProjectProperties->sLogTemplate);\r
89         }\r
90 \r
91         SetDlgItemText(IDC_ACTIONLABEL, m_sActionText);\r
92 \r
93         AddAnchor(IDC_ACTIONLABEL, TOP_LEFT, TOP_RIGHT);\r
94         AddAnchor(IDC_GROUPBOX, TOP_LEFT, BOTTOM_RIGHT);\r
95         AddAnchor(IDC_HISTORY, TOP_LEFT);\r
96         AddAnchor(IDC_INPUTTEXT, TOP_LEFT, BOTTOM_RIGHT);\r
97         AddAnchor(IDCANCEL, BOTTOM_RIGHT);\r
98         AddAnchor(IDOK, BOTTOM_RIGHT);\r
99         EnableSaveRestore(_T("InputDlg"));\r
100         if (hWndExplorer)\r
101                 CenterWindow(CWnd::FromHandle(hWndExplorer));\r
102         GetDlgItem(IDC_INPUTTEXT)->SetFocus();\r
103         return FALSE;\r
104 }\r
105 \r
106 void CInputLogDlg::OnOK()\r
107 {\r
108         UpdateData();\r
109         m_sLogMsg = m_cInput.GetText();\r
110         \r
111         CString reg;\r
112         reg.Format(_T("Software\\TortoiseGit\\History\\commit%s"), (LPCTSTR)m_sUUID);\r
113 \r
114         CRegHistory history;\r
115         history.Load(reg, _T("logmsgs"));\r
116         history.AddEntry(m_sLogMsg);\r
117         history.Save();\r
118 \r
119         CResizableStandAloneDialog::OnOK();\r
120 }\r
121 \r
122 BOOL CInputLogDlg::PreTranslateMessage(MSG* pMsg)\r
123 {\r
124         if (pMsg->message == WM_KEYDOWN)\r
125         {\r
126                 switch (pMsg->wParam)\r
127                 {\r
128                 case VK_RETURN:\r
129                         {\r
130                                 if (GetAsyncKeyState(VK_CONTROL)&0x8000)\r
131                                 {\r
132                                         if ( GetDlgItem(IDOK)->IsWindowEnabled() )\r
133                                         {\r
134                                                 PostMessage(WM_COMMAND, IDOK);\r
135                                         }\r
136                                 }\r
137                         }\r
138                         break;\r
139                 }\r
140         }\r
141 \r
142         return CResizableStandAloneDialog::PreTranslateMessage(pMsg);\r
143 }\r
144 \r
145 void CInputLogDlg::OnEnChangeLogmessage()\r
146 {\r
147         UpdateOKButton();\r
148 }\r
149 \r
150 void CInputLogDlg::UpdateOKButton()\r
151 {\r
152         CString sTemp = m_cInput.GetText();\r
153         if (((m_pProjectProperties==NULL)||(sTemp.GetLength() >= m_pProjectProperties->nMinLogSize)))\r
154         {\r
155                 DialogEnableWindow(IDOK, TRUE);\r
156         }\r
157         else\r
158         {\r
159                 DialogEnableWindow(IDOK, FALSE);\r
160         }\r
161 }\r
162 \r
163 void CInputLogDlg::OnBnClickedHistory()\r
164 {\r
165         CString reg;\r
166         reg.Format(_T("Software\\TortoiseGit\\History\\commit%s"), (LPCTSTR)m_sUUID);\r
167         CRegHistory history;\r
168         history.Load(reg, _T("logmsgs"));\r
169         CHistoryDlg HistoryDlg;\r
170         HistoryDlg.SetHistory(history);\r
171         if (HistoryDlg.DoModal()==IDOK)\r
172         {\r
173                 if (HistoryDlg.GetSelectedText().Compare(m_cInput.GetText().Left(HistoryDlg.GetSelectedText().GetLength()))!=0)\r
174                 {\r
175                         if ((m_pProjectProperties)&&(m_pProjectProperties->sLogTemplate.Compare(m_cInput.GetText())!=0))\r
176                                 m_cInput.InsertText(HistoryDlg.GetSelectedText(), !m_cInput.GetText().IsEmpty());\r
177                         else\r
178                                 m_cInput.SetText(HistoryDlg.GetSelectedText());\r
179                 }\r
180 \r
181                 UpdateOKButton();\r
182                 GetDlgItem(IDC_INPUTTEXT)->SetFocus();\r
183         }\r
184 }\r