OSDN Git Service

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