OSDN Git Service

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