OSDN Git Service

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