OSDN Git Service

Rename CProp* classes to Prop* to keep them named in same way.
[winmerge-jp/winmerge-jp.git] / Src / PropSyntaxColors.cpp
1 /** 
2  * @file  PropSyntaxColors.cpp
3  *
4  * @brief Implementation of PropSyntaxColors propertysheet
5  */
6 // ID line follows -- this is updated by SVN
7 // $Id$
8
9 #include "stdafx.h"
10 #include "resource.h"
11 #include "SyntaxColors.h"
12 #include "PropSyntaxColors.h"
13 #include "Merge.h"
14 #include "OptionsPanel.h"
15
16 #ifdef _DEBUG
17 #define new DEBUG_NEW
18 #undef THIS_FILE
19 static char THIS_FILE[] = __FILE__;
20 #endif
21
22 IMPLEMENT_DYNAMIC(PropSyntaxColors, CPropertyPage)
23
24 PropSyntaxColors::PropSyntaxColors(COptionsMgr *optionsMgr, SyntaxColors *pColors)
25 : OptionsPanel(optionsMgr, PropSyntaxColors::IDD)
26 , m_nKeywordsBold(0)
27 , m_nFunctionsBold(0)
28 , m_nCommentsBold(0)
29 , m_nNumbersBold(0)
30 , m_nOperatorsBold(0)
31 , m_nStringsBold(0)
32 , m_nPreProcessorBold(0)
33 , m_nUser1Bold(0)
34 , m_nUser2Bold(0)
35 {
36         m_pTempColors = pColors;
37
38         // Set colors for buttons, do NOT invalidate
39         m_btnKeywordsText.SetColor(m_pTempColors->GetColor(COLORINDEX_KEYWORD), FALSE);
40         m_btnFunctionsText.SetColor(m_pTempColors->GetColor(COLORINDEX_FUNCNAME), FALSE);
41         m_btnCommentsText.SetColor(m_pTempColors->GetColor(COLORINDEX_COMMENT), FALSE);
42         m_btnNumbersText.SetColor(m_pTempColors->GetColor(COLORINDEX_NUMBER), FALSE);
43         m_btnOperatorsText.SetColor(m_pTempColors->GetColor(COLORINDEX_OPERATOR), FALSE);
44         m_btnStringsText.SetColor(m_pTempColors->GetColor(COLORINDEX_STRING), FALSE);
45         m_btnPreprocessorText.SetColor(m_pTempColors->GetColor(COLORINDEX_PREPROCESSOR), FALSE);
46         m_btnUser1Text.SetColor(m_pTempColors->GetColor(COLORINDEX_USER1), FALSE);
47         m_btnUser2Text.SetColor(m_pTempColors->GetColor(COLORINDEX_USER2), FALSE);
48
49         m_nKeywordsBold = GetCheckVal(COLORINDEX_KEYWORD);
50         m_nFunctionsBold = GetCheckVal(COLORINDEX_FUNCNAME);
51         m_nCommentsBold = GetCheckVal(COLORINDEX_COMMENT);
52         m_nNumbersBold = GetCheckVal(COLORINDEX_NUMBER);
53         m_nOperatorsBold = GetCheckVal(COLORINDEX_OPERATOR);
54         m_nStringsBold = GetCheckVal(COLORINDEX_STRING);
55         m_nPreProcessorBold = GetCheckVal(COLORINDEX_PREPROCESSOR);
56         m_nUser1Bold = GetCheckVal(COLORINDEX_USER1);
57         m_nUser2Bold = GetCheckVal(COLORINDEX_USER2);
58 }
59
60 void PropSyntaxColors::DoDataExchange(CDataExchange* pDX)
61 {
62         CPropertyPage::DoDataExchange(pDX);
63         DDX_Control(pDX, IDC_SCOLOR_KEYWORDS, m_btnKeywordsText);
64         DDX_Control(pDX, IDC_SCOLOR_FUNCTIONS, m_btnFunctionsText);
65         DDX_Control(pDX, IDC_SCOLOR_COMMENTS, m_btnCommentsText);
66         DDX_Control(pDX, IDC_SCOLOR_NUMBERS, m_btnNumbersText);
67         DDX_Control(pDX, IDC_SCOLOR_OPERATORS, m_btnOperatorsText);
68         DDX_Control(pDX, IDC_SCOLOR_STRINGS, m_btnStringsText);
69         DDX_Control(pDX, IDC_SCOLOR_PREPROCESSOR, m_btnPreprocessorText);
70         DDX_Control(pDX, IDC_SCOLOR_USER1, m_btnUser1Text);
71         DDX_Control(pDX, IDC_SCOLOR_USER2, m_btnUser2Text);
72         DDX_Control(pDX, IDC_SCOLOR_KEYWORDS_BOLD, m_btnKeywordsBold);
73         DDX_Control(pDX, IDC_SCOLOR_FUNCTIONS_BOLD, m_btnFunctionsBold);
74         DDX_Control(pDX, IDC_SCOLOR_COMMENTS_BOLD, m_btnCommentsBold);
75         DDX_Control(pDX, IDC_SCOLOR_NUMBERS_BOLD, m_btnNumbersBold);
76         DDX_Control(pDX, IDC_SCOLOR_OPERATORS_BOLD, m_btnOperatorsBold);
77         DDX_Control(pDX, IDC_SCOLOR_STRINGS_BOLD, m_btnStringsBold);
78         DDX_Control(pDX, IDC_SCOLOR_PREPROCESSOR_BOLD, m_btnPreProcessorBold);
79         DDX_Control(pDX, IDC_SCOLOR_USER1_BOLD, m_btnUser1Bold);
80         DDX_Control(pDX, IDC_SCOLOR_USER2_BOLD, m_btnUser2Bold);
81         DDX_Check(pDX, IDC_SCOLOR_KEYWORDS_BOLD, m_nKeywordsBold);
82         DDX_Check(pDX, IDC_SCOLOR_FUNCTIONS_BOLD, m_nFunctionsBold);
83         DDX_Check(pDX, IDC_SCOLOR_COMMENTS_BOLD, m_nCommentsBold);
84         DDX_Check(pDX, IDC_SCOLOR_NUMBERS_BOLD, m_nNumbersBold);
85         DDX_Check(pDX, IDC_SCOLOR_OPERATORS_BOLD, m_nOperatorsBold);
86         DDX_Check(pDX, IDC_SCOLOR_STRINGS_BOLD, m_nStringsBold);
87         DDX_Check(pDX, IDC_SCOLOR_PREPROCESSOR_BOLD, m_nPreProcessorBold);
88         DDX_Check(pDX, IDC_SCOLOR_USER1_BOLD, m_nUser1Bold);
89         DDX_Check(pDX, IDC_SCOLOR_USER2_BOLD, m_nUser2Bold);
90 }
91
92
93 BEGIN_MESSAGE_MAP(PropSyntaxColors, CPropertyPage)
94         ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS, OnBnClickedEcolorKeywords)
95         ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS, OnBnClickedEcolorFunctions)
96         ON_BN_CLICKED(IDC_SCOLOR_COMMENTS, OnBnClickedEcolorComments)
97         ON_BN_CLICKED(IDC_SCOLOR_NUMBERS, OnBnClickedEcolorNumbers)
98         ON_BN_CLICKED(IDC_SCOLOR_OPERATORS, OnBnClickedEcolorOperators)
99         ON_BN_CLICKED(IDC_SCOLOR_STRINGS, OnBnClickedEcolorStrings)
100         ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR, OnBnClickedEcolorPreprocessor)
101         ON_BN_CLICKED(IDC_SCOLOR_USER1, OnBnClickedEcolorUser1)
102         ON_BN_CLICKED(IDC_SCOLOR_USER2, OnBnClickedEcolorUser2)
103         ON_BN_CLICKED(IDC_SCOLORS_BDEFAULTS, OnBnClickedEcolorsBdefaults)
104         ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS_BOLD, OnBnClickedEcolorKeywordsBold)
105         ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS_BOLD, OnBnClickedEcolorFunctionsBold)
106         ON_BN_CLICKED(IDC_SCOLOR_COMMENTS_BOLD, OnBnClickedEcolorCommentsBold)
107         ON_BN_CLICKED(IDC_SCOLOR_NUMBERS_BOLD, OnBnClickedEcolorNumbersBold)
108         ON_BN_CLICKED(IDC_SCOLOR_OPERATORS_BOLD, OnBnClickedEcolorOperatorsBold)
109         ON_BN_CLICKED(IDC_SCOLOR_STRINGS_BOLD, OnBnClickedEcolorStringsBold)
110         ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR_BOLD, OnBnClickedEcolorPreprocessorBold)
111         ON_BN_CLICKED(IDC_SCOLOR_USER1_BOLD, OnBnClickedEcolorUser1Bold)
112         ON_BN_CLICKED(IDC_SCOLOR_USER2_BOLD, OnBnClickedEcolorUser2Bold)
113 END_MESSAGE_MAP()
114
115 /** 
116  * @brief Called before propertysheet is drawn.
117  */
118 BOOL PropSyntaxColors::OnInitDialog()
119 {
120         theApp.TranslateDialog(m_hWnd);
121         return CPropertyPage::OnInitDialog();
122 }
123
124 /** 
125  * @brief Reads options values from storage to UI.
126  * (Property sheet calls this before displaying all property pages)
127  */
128 void PropSyntaxColors::ReadOptions()
129 {
130 }
131
132 /** 
133  * @brief Writes options values from UI to storage.
134  * (Property sheet calls this after displaying all property pages)
135  */
136 void PropSyntaxColors::WriteOptions()
137 {
138         // User can only change colors via BrowseColorAndSave,
139         // which writes to m_pTempColors
140         // so user's latest choices are in m_pTempColors
141         // (we don't have to read them from screen)
142         m_pTempColors->SaveToRegistry();
143 }
144
145 /** 
146  * @brief Let user browse common color dialog, and select a color & save to registry
147  */
148 void PropSyntaxColors::BrowseColorAndSave(CColorButton & colorButton, int colorIndex)
149 {
150         COLORREF currentColor = m_pTempColors->GetColor(colorIndex);
151         CColorDialog dialog(currentColor);
152         LoadCustomColors();
153         dialog.m_cc.lpCustColors = m_cCustColors;
154         
155         if (dialog.DoModal() == IDOK)
156         {
157                 currentColor = dialog.GetColor();
158                 colorButton.SetColor(currentColor);
159                 m_pTempColors->SetColor(colorIndex, currentColor);
160         }
161         SaveCustomColors();
162 }
163
164 void PropSyntaxColors::OnBnClickedEcolorKeywords()
165 {
166         BrowseColorAndSave(m_btnKeywordsText, COLORINDEX_KEYWORD);
167 }
168
169 void PropSyntaxColors::OnBnClickedEcolorFunctions()
170 {
171         BrowseColorAndSave(m_btnFunctionsText, COLORINDEX_FUNCNAME);
172 }
173
174 void PropSyntaxColors::OnBnClickedEcolorComments()
175 {
176         BrowseColorAndSave(m_btnCommentsText, COLORINDEX_COMMENT);
177 }
178
179 void PropSyntaxColors::OnBnClickedEcolorNumbers()
180 {
181         BrowseColorAndSave(m_btnNumbersText, COLORINDEX_NUMBER);
182 }
183
184 void PropSyntaxColors::OnBnClickedEcolorOperators()
185 {
186         BrowseColorAndSave(m_btnOperatorsText, COLORINDEX_OPERATOR);
187 }
188
189 void PropSyntaxColors::OnBnClickedEcolorStrings()
190 {
191         BrowseColorAndSave(m_btnStringsText, COLORINDEX_STRING);
192 }
193
194 void PropSyntaxColors::OnBnClickedEcolorPreprocessor()
195 {
196         BrowseColorAndSave(m_btnPreprocessorText, COLORINDEX_PREPROCESSOR);
197 }
198
199 void PropSyntaxColors::OnBnClickedEcolorUser1()
200 {
201         BrowseColorAndSave(m_btnUser1Text, COLORINDEX_USER1);
202 }
203
204 void PropSyntaxColors::OnBnClickedEcolorUser2()
205 {
206         BrowseColorAndSave(m_btnUser2Text, COLORINDEX_USER2);
207 }
208
209 void PropSyntaxColors::OnBnClickedEcolorsBdefaults()
210 {
211         m_pTempColors->SetDefaults();
212         m_btnKeywordsText.SetColor(m_pTempColors->GetColor(COLORINDEX_KEYWORD));
213         m_btnFunctionsText.SetColor(m_pTempColors->GetColor(COLORINDEX_FUNCNAME));
214         m_btnCommentsText.SetColor(m_pTempColors->GetColor(COLORINDEX_COMMENT));
215         m_btnNumbersText.SetColor(m_pTempColors->GetColor(COLORINDEX_NUMBER));
216         m_btnOperatorsText.SetColor(m_pTempColors->GetColor(COLORINDEX_OPERATOR));
217         m_btnStringsText.SetColor(m_pTempColors->GetColor(COLORINDEX_STRING));
218         m_btnPreprocessorText.SetColor(m_pTempColors->GetColor(COLORINDEX_PREPROCESSOR));
219         m_btnUser1Text.SetColor(m_pTempColors->GetColor(COLORINDEX_USER1));
220         m_btnUser2Text.SetColor(m_pTempColors->GetColor(COLORINDEX_USER2));
221
222         m_nKeywordsBold = GetCheckVal(COLORINDEX_KEYWORD);
223         m_nFunctionsBold = GetCheckVal(COLORINDEX_FUNCNAME);
224         m_nCommentsBold = GetCheckVal(COLORINDEX_COMMENT);
225         m_nNumbersBold = GetCheckVal(COLORINDEX_NUMBER);
226         m_nOperatorsBold = GetCheckVal(COLORINDEX_OPERATOR);
227         m_nStringsBold = GetCheckVal(COLORINDEX_STRING);
228         m_nPreProcessorBold = GetCheckVal(COLORINDEX_PREPROCESSOR);
229         m_nUser1Bold = GetCheckVal(COLORINDEX_USER1);
230         m_nUser2Bold = GetCheckVal(COLORINDEX_USER2);
231
232         UpdateData(FALSE);
233 }
234
235 /** 
236  * @brief Loads color selection dialog's custom colors from registry
237  */
238 void PropSyntaxColors::LoadCustomColors()
239 {
240         SyntaxColors_Load(m_cCustColors, sizeof(m_cCustColors)/sizeof(m_cCustColors[0]));
241 }
242
243 /** 
244  * @brief Saves color selection dialog's custom colors to registry
245  */
246 void PropSyntaxColors::SaveCustomColors()
247 {
248         SyntaxColors_Save(m_cCustColors, sizeof(m_cCustColors)/sizeof(m_cCustColors[0]));
249 }
250
251 void PropSyntaxColors::OnBnClickedEcolorKeywordsBold()
252 {
253         UpdateBoldStatus(m_btnKeywordsBold, COLORINDEX_KEYWORD);
254 }
255
256 void PropSyntaxColors::OnBnClickedEcolorFunctionsBold()
257 {
258         UpdateBoldStatus(m_btnFunctionsBold, COLORINDEX_FUNCNAME);
259 }
260
261 void PropSyntaxColors::OnBnClickedEcolorCommentsBold()
262 {
263         UpdateBoldStatus(m_btnCommentsBold, COLORINDEX_COMMENT);
264 }
265
266 void PropSyntaxColors::OnBnClickedEcolorNumbersBold()
267 {
268         UpdateBoldStatus(m_btnNumbersBold, COLORINDEX_NUMBER);
269 }
270
271 void PropSyntaxColors::OnBnClickedEcolorOperatorsBold()
272 {
273         UpdateBoldStatus(m_btnOperatorsBold, COLORINDEX_OPERATOR);
274 }
275
276 void PropSyntaxColors::OnBnClickedEcolorStringsBold()
277 {
278         UpdateBoldStatus(m_btnStringsBold, COLORINDEX_STRING);
279 }
280
281 void PropSyntaxColors::OnBnClickedEcolorPreprocessorBold()
282 {
283         UpdateBoldStatus(m_btnPreProcessorBold, COLORINDEX_PREPROCESSOR);
284 }
285
286 void PropSyntaxColors::OnBnClickedEcolorUser1Bold()
287 {
288         UpdateBoldStatus(m_btnUser1Bold, COLORINDEX_USER1);
289 }
290
291 void PropSyntaxColors::OnBnClickedEcolorUser2Bold()
292 {
293         UpdateBoldStatus(m_btnUser2Bold, COLORINDEX_USER2);
294 }
295
296 int PropSyntaxColors::GetCheckVal(UINT nColorIndex)
297 {
298         if (m_pTempColors->GetBold(nColorIndex))
299                 return BST_CHECKED;
300         else
301                 return BST_UNCHECKED;
302 }
303
304 void PropSyntaxColors::UpdateBoldStatus(CButton &btn, UINT colorIndex)
305 {
306         int state = btn.GetCheck();
307         if (state == BST_CHECKED)
308                 m_pTempColors->SetBold(colorIndex, TRUE);
309         else
310                 m_pTempColors->SetBold(colorIndex, FALSE);
311 }