OSDN Git Service

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