OSDN Git Service

compiler-calculated maximum value for `m_SourceDefs` (#966)
[winmerge-jp/winmerge-jp.git] / Src / PropMergeColors.cpp
1 /** 
2  * @file  PropMergeColors.cpp
3  *
4  * @brief Implementation of PropMergeColors propertysheet
5  */
6
7 #include "stdafx.h"
8 #include "PropMergeColors.h"
9 #include "OptionsCustomColors.h"
10 #include "OptionsDef.h"
11 #include "OptionsMgr.h"
12 #include "OptionsPanel.h"
13
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #endif
17
18 /** 
19  * @brief Default constructor.
20  */
21 PropMergeColors::PropMergeColors(COptionsMgr *optionsMgr)
22  : OptionsPanel(optionsMgr, PropMergeColors::IDD)
23  , m_cCustColors()
24 {
25 }
26
27 void PropMergeColors::DoDataExchange(CDataExchange* pDX)
28 {
29         CDialog::DoDataExchange(pDX);
30         //{{AFX_DATA_MAP(PropMergeColors)
31         DDX_Control(pDX, IDC_TRIVIAL_DIFF_DELETED_COLOR, m_cTrivialDeleted);
32         DDX_Control(pDX, IDC_TRIVIAL_DIFF_COLOR, m_cTrivial);
33         DDX_Control(pDX, IDC_SEL_DIFFERENCE_TEXT_COLOR, m_cSelDiffText);
34         DDX_Control(pDX, IDC_DIFFERENCE_TEXT_COLOR, m_cDiffText);
35         DDX_Control(pDX, IDC_SEL_DIFFERENCE_DELETED_COLOR, m_cSelDiffDeleted);
36         DDX_Control(pDX, IDC_DIFFERENCE_DELETED_COLOR, m_cDiffDeleted);
37         DDX_Control(pDX, IDC_SEL_DIFFERENCE_COLOR, m_cSelDiff);
38         DDX_Control(pDX, IDC_DIFFERENCE_COLOR, m_cDiff);
39         DDX_Control(pDX, IDC_TRIVIAL_DIFF_TEXT_COLOR, m_cTrivialText);
40         DDX_Control(pDX, IDC_MOVEDBLOCK_COLOR, m_cMoved);
41         DDX_Control(pDX, IDC_MOVEDBLOCK_DELETED_COLOR, m_cMovedDeleted);
42         DDX_Control(pDX, IDC_MOVEDBLOCK_TEXT_COLOR, m_cMovedText);
43         DDX_Control(pDX, IDC_SEL_MOVEDBLOCK_COLOR, m_cSelMoved);
44         DDX_Control(pDX, IDC_SEL_MOVEDBLOCK_DELETED_COLOR, m_cSelMovedDeleted);
45         DDX_Control(pDX, IDC_SEL_MOVEDBLOCK_TEXT_COLOR, m_cSelMovedText);
46         DDX_Control(pDX, IDC_SNP_COLOR, m_cSNP);
47         DDX_Control(pDX, IDC_SNP_DELETED_COLOR, m_cSNPDeleted);
48         DDX_Control(pDX, IDC_SNP_TEXT_COLOR, m_cSNPText);
49         DDX_Control(pDX, IDC_SEL_SNP_COLOR, m_cSelSNP);
50         DDX_Control(pDX, IDC_SEL_SNP_DELETED_COLOR, m_cSelSNPDeleted);
51         DDX_Control(pDX, IDC_SEL_SNP_TEXT_COLOR, m_cSelSNPText);
52         DDX_Control(pDX, IDC_WORDDIFF_COLOR, m_cWordDiff);
53         DDX_Control(pDX, IDC_WORDDIFF_DELETED_COLOR, m_cWordDiffDeleted);
54         DDX_Control(pDX, IDC_WORDDIFF_TEXT_COLOR, m_cWordDiffText);
55         DDX_Control(pDX, IDC_SEL_WORDDIFF_COLOR, m_cSelWordDiff);
56         DDX_Control(pDX, IDC_SEL_WORDDIFF_DELETED_COLOR, m_cSelWordDiffDeleted);
57         DDX_Control(pDX, IDC_SEL_WORDDIFF_TEXT_COLOR, m_cSelWordDiffText);
58
59         UpdateTextColorButtonsState();
60         //}}AFX_DATA_MAP
61 }
62
63
64 BEGIN_MESSAGE_MAP(PropMergeColors, OptionsPanel)
65         //{{AFX_MSG_MAP(PropMergeColors)
66         ON_BN_CLICKED(IDC_DIFFERENCE_COLOR, OnDifferenceColor)
67         ON_BN_CLICKED(IDC_DIFFERENCE_DELETED_COLOR, OnDifferenceDeletedColor)
68         ON_BN_CLICKED(IDC_SEL_DIFFERENCE_DELETED_COLOR, OnSelDifferenceDeletedColor)
69         ON_BN_CLICKED(IDC_SEL_DIFFERENCE_COLOR, OnSelDifferenceColor)
70         ON_BN_CLICKED(IDC_DIFFERENCE_USE_TEXT_COLOR, (OnUseTextColor<IDC_DIFFERENCE_USE_TEXT_COLOR, IDC_DIFFERENCE_TEXT_COLOR>))
71         ON_BN_CLICKED(IDC_DIFFERENCE_TEXT_COLOR, OnDifferenceTextColor)
72         ON_BN_CLICKED(IDC_SEL_DIFFERENCE_USE_TEXT_COLOR, (OnUseTextColor<IDC_SEL_DIFFERENCE_USE_TEXT_COLOR, IDC_SEL_DIFFERENCE_TEXT_COLOR>))
73         ON_BN_CLICKED(IDC_SEL_DIFFERENCE_TEXT_COLOR, OnSelDifferenceTextColor)
74         ON_BN_CLICKED(IDC_TRIVIAL_DIFF_COLOR, OnTrivialDiffColor)
75         ON_BN_CLICKED(IDC_TRIVIAL_DIFF_DELETED_COLOR, OnTrivialDiffDeletedColor)
76         ON_BN_CLICKED(IDC_TRIVIAL_DIFF_USE_TEXT_COLOR, (OnUseTextColor<IDC_TRIVIAL_DIFF_USE_TEXT_COLOR, IDC_TRIVIAL_DIFF_TEXT_COLOR>))
77         ON_BN_CLICKED(IDC_TRIVIAL_DIFF_TEXT_COLOR, OnTrivialDiffTextColor)
78         ON_BN_CLICKED(IDC_MOVEDBLOCK_COLOR, OnMovedColor)
79         ON_BN_CLICKED(IDC_MOVEDBLOCK_DELETED_COLOR, OnMovedDeletedColor)
80         ON_BN_CLICKED(IDC_MOVEDBLOCK_USE_TEXT_COLOR, (OnUseTextColor<IDC_MOVEDBLOCK_USE_TEXT_COLOR, IDC_MOVEDBLOCK_TEXT_COLOR>))
81         ON_BN_CLICKED(IDC_MOVEDBLOCK_TEXT_COLOR, OnMovedTextColor)
82         ON_BN_CLICKED(IDC_SEL_MOVEDBLOCK_COLOR, OnSelMovedColor)
83         ON_BN_CLICKED(IDC_SEL_MOVEDBLOCK_DELETED_COLOR, OnSelMovedDeletedColor)
84         ON_BN_CLICKED(IDC_SEL_MOVEDBLOCK_USE_TEXT_COLOR, (OnUseTextColor<IDC_SEL_MOVEDBLOCK_USE_TEXT_COLOR, IDC_SEL_MOVEDBLOCK_TEXT_COLOR>))
85         ON_BN_CLICKED(IDC_SEL_MOVEDBLOCK_TEXT_COLOR, OnSelMovedTextColor)
86         ON_BN_CLICKED(IDC_SNP_COLOR, OnSNPColor)
87         ON_BN_CLICKED(IDC_SNP_DELETED_COLOR, OnSNPDeletedColor)
88         ON_BN_CLICKED(IDC_SNP_USE_TEXT_COLOR, (OnUseTextColor<IDC_SNP_USE_TEXT_COLOR, IDC_SNP_TEXT_COLOR>))
89         ON_BN_CLICKED(IDC_SNP_TEXT_COLOR, OnSNPTextColor)
90         ON_BN_CLICKED(IDC_SEL_SNP_COLOR, OnSelSNPColor)
91         ON_BN_CLICKED(IDC_SEL_SNP_DELETED_COLOR, OnSelSNPDeletedColor)
92         ON_BN_CLICKED(IDC_SEL_SNP_USE_TEXT_COLOR, (OnUseTextColor<IDC_SEL_SNP_USE_TEXT_COLOR, IDC_SEL_SNP_TEXT_COLOR>))
93         ON_BN_CLICKED(IDC_SEL_SNP_TEXT_COLOR, OnSelSNPTextColor)
94         ON_BN_CLICKED(IDC_WORDDIFF_COLOR, OnWordDiffColor)
95         ON_BN_CLICKED(IDC_WORDDIFF_DELETED_COLOR, OnWordDiffDeletedColor)
96         ON_BN_CLICKED(IDC_WORDDIFF_USE_TEXT_COLOR, (OnUseTextColor<IDC_WORDDIFF_USE_TEXT_COLOR, IDC_WORDDIFF_TEXT_COLOR>))
97         ON_BN_CLICKED(IDC_WORDDIFF_TEXT_COLOR, OnWordDiffTextColor)
98         ON_BN_CLICKED(IDC_SEL_WORDDIFF_COLOR, OnSelWordDiffColor)
99         ON_BN_CLICKED(IDC_SEL_WORDDIFF_DELETED_COLOR, OnSelWordDiffDeletedColor)
100         ON_BN_CLICKED(IDC_SEL_WORDDIFF_USE_TEXT_COLOR, (OnUseTextColor<IDC_SEL_WORDDIFF_USE_TEXT_COLOR, IDC_SEL_WORDDIFF_TEXT_COLOR>))
101         ON_BN_CLICKED(IDC_SEL_WORDDIFF_TEXT_COLOR, OnSelWordDiffTextColor)
102         //}}AFX_MSG_MAP
103 END_MESSAGE_MAP()
104
105 /** 
106  * @brief Reads options values from storage to UI.
107  * (Property sheet calls this before displaying all property pages)
108  */
109 void PropMergeColors::ReadOptions()
110 {
111         SerializeColors(READ_OPTIONS);
112 }
113
114 /** 
115  * @brief Writes options values from UI to storage.
116  * (Property sheet calls this after displaying all property pages)
117  */
118 void PropMergeColors::WriteOptions()
119 {
120         SerializeColors(WRITE_OPTIONS);
121 }
122
123 /** 
124  * @brief Let user browse common color dialog, and select a color
125  */
126 void PropMergeColors::BrowseColor(CColorButton & colorButton)
127 {
128         CColorDialog dialog(colorButton.GetColor());
129         Options::CustomColors::Load(GetOptionsMgr(), m_cCustColors.data());
130         dialog.m_cc.lpCustColors = m_cCustColors.data();
131         
132         if (dialog.DoModal() == IDOK)
133                 colorButton.SetColor(dialog.GetColor());
134         Options::CustomColors::Save(GetOptionsMgr(), m_cCustColors.data());
135 }
136
137 void PropMergeColors::UpdateTextColorButtonState(int checkboxId, CColorButton &btn)
138 {
139         CheckDlgButton(checkboxId, btn.GetColor() != COLOR_NONE ? BST_CHECKED : BST_UNCHECKED);
140         btn.ShowWindow(btn.GetColor() != COLOR_NONE ? SW_SHOW : SW_HIDE);
141 }
142
143 void PropMergeColors::UpdateTextColorButtonsState()
144 {
145         UpdateTextColorButtonState(IDC_DIFFERENCE_USE_TEXT_COLOR, m_cDiffText);
146         UpdateTextColorButtonState(IDC_SEL_DIFFERENCE_USE_TEXT_COLOR, m_cSelDiffText);
147         UpdateTextColorButtonState(IDC_TRIVIAL_DIFF_USE_TEXT_COLOR, m_cTrivialText);
148         UpdateTextColorButtonState(IDC_MOVEDBLOCK_USE_TEXT_COLOR, m_cMovedText);
149         UpdateTextColorButtonState(IDC_SEL_MOVEDBLOCK_USE_TEXT_COLOR, m_cSelMovedText);
150         UpdateTextColorButtonState(IDC_SNP_USE_TEXT_COLOR, m_cSNPText);
151         UpdateTextColorButtonState(IDC_SEL_SNP_USE_TEXT_COLOR, m_cSelSNPText);
152         UpdateTextColorButtonState(IDC_WORDDIFF_USE_TEXT_COLOR, m_cWordDiffText);
153         UpdateTextColorButtonState(IDC_SEL_WORDDIFF_USE_TEXT_COLOR, m_cSelWordDiffText);
154 }
155
156 /** 
157  * @brief User wants to change difference color
158  */
159 void PropMergeColors::OnDifferenceColor() 
160 {
161         BrowseColor(m_cDiff);
162 }
163
164 /** 
165  * @brief User wants to change selected difference color
166  */
167 void PropMergeColors::OnSelDifferenceColor() 
168 {
169         BrowseColor(m_cSelDiff);
170 }
171
172 /** 
173  * @brief User wants to change deleted difference color
174  */
175 void PropMergeColors::OnDifferenceDeletedColor() 
176 {
177         BrowseColor(m_cDiffDeleted);
178 }
179
180 /** 
181  * @brief User wants to change selected & deleted difference color
182  */
183 void PropMergeColors::OnSelDifferenceDeletedColor() 
184 {
185         BrowseColor(m_cSelDiffDeleted);
186 }
187
188 /** 
189  * @brief User wants to change difference text color
190  */
191 void PropMergeColors::OnDifferenceTextColor() 
192 {
193         BrowseColor(m_cDiffText);
194 }
195
196 /** 
197  * @brief User wants to change selected difference text color
198  */
199 void PropMergeColors::OnSelDifferenceTextColor() 
200 {
201         BrowseColor(m_cSelDiffText);
202 }
203
204 /** 
205  * @brief User wants to change trivial difference color
206  */
207 void PropMergeColors::OnTrivialDiffColor() 
208 {
209         BrowseColor(m_cTrivial);
210 }
211
212 /** 
213  * @brief User wants to change deleted trivial difference color
214  */
215 void PropMergeColors::OnTrivialDiffDeletedColor() 
216 {
217         BrowseColor(m_cTrivialDeleted);
218 }
219
220 void PropMergeColors::OnTrivialDiffTextColor()
221 {
222         BrowseColor(m_cTrivialText);
223 }
224
225 void PropMergeColors::OnMovedColor()
226 {
227         BrowseColor(m_cMoved);
228 }
229
230 void PropMergeColors::OnMovedDeletedColor()
231 {
232         BrowseColor(m_cMovedDeleted);
233 }
234
235 void PropMergeColors::OnMovedTextColor()
236 {
237         BrowseColor(m_cMovedText);
238 }
239
240 void PropMergeColors::OnSelMovedColor()
241 {
242         BrowseColor(m_cSelMoved);
243 }
244
245 void PropMergeColors::OnSelMovedDeletedColor()
246 {
247         BrowseColor(m_cSelMovedDeleted);
248 }
249
250 void PropMergeColors::OnSelMovedTextColor()
251 {
252         BrowseColor(m_cSelMovedText);
253 }
254
255 void PropMergeColors::OnSNPColor()
256 {
257         BrowseColor(m_cSNP);
258 }
259
260 void PropMergeColors::OnSNPDeletedColor()
261 {
262         BrowseColor(m_cSNPDeleted);
263 }
264
265 void PropMergeColors::OnSNPTextColor()
266 {
267         BrowseColor(m_cSNPText);
268 }
269
270 void PropMergeColors::OnSelSNPColor()
271 {
272         BrowseColor(m_cSelSNP);
273 }
274
275 void PropMergeColors::OnSelSNPDeletedColor()
276 {
277         BrowseColor(m_cSelSNPDeleted);
278 }
279
280 void PropMergeColors::OnSelSNPTextColor()
281 {
282         BrowseColor(m_cSelSNPText);
283 }
284
285 /** 
286  * @brief User wants to change word difference color
287  */
288 void PropMergeColors::OnWordDiffColor() 
289 {
290         BrowseColor(m_cWordDiff);
291 }
292 /** 
293  * @brief User wants to change word difference deleted color
294  */
295 void PropMergeColors::OnWordDiffDeletedColor() 
296 {
297         BrowseColor(m_cWordDiffDeleted);
298 }
299
300 /** 
301  * @brief User wants to change selected word difference color
302  */
303 void PropMergeColors::OnSelWordDiffColor() 
304 {
305         BrowseColor(m_cSelWordDiff);
306 }
307
308 /** 
309  * @brief User wants to change word difference deleted color
310  */
311 void PropMergeColors::OnSelWordDiffDeletedColor()
312 {
313         BrowseColor(m_cSelWordDiffDeleted);
314 }
315
316 /** 
317  * @brief User wants to change word difference text color
318  */
319 void PropMergeColors::OnWordDiffTextColor() 
320 {
321         BrowseColor(m_cWordDiffText);
322 }
323
324 /** 
325  * @brief User wants to change selected word difference text color
326  */
327 void PropMergeColors::OnSelWordDiffTextColor() 
328 {
329         BrowseColor(m_cSelWordDiffText);
330 }
331
332 template<int checkbox_id, int colorbutton_id>
333 void PropMergeColors::OnUseTextColor()
334 {
335         CColorButton *cButton = dynamic_cast<CColorButton *>(GetDlgItem(colorbutton_id));
336         if (IsDlgButtonChecked(checkbox_id) != 0)
337         {
338                 cButton->ShowWindow(SW_SHOW);
339                 cButton->SetColor(0);
340         }
341         else
342         {
343                 cButton->ShowWindow(SW_HIDE);
344                 cButton->SetColor(COLOR_NONE);
345         }
346 }
347
348 void PropMergeColors::SerializeColors(OPERATION op)
349 {
350         SerializeColor(op, m_cDiff, OPT_CLR_DIFF);
351         SerializeColor(op, m_cDiffDeleted, OPT_CLR_DIFF_DELETED);
352         SerializeColor(op, m_cSelDiff, OPT_CLR_SELECTED_DIFF);
353
354         SerializeColor(op, m_cDiffText, OPT_CLR_DIFF_TEXT);
355         SerializeColor(op, m_cSelDiffDeleted, OPT_CLR_SELECTED_DIFF_DELETED);
356         SerializeColor(op, m_cSelDiffText, OPT_CLR_SELECTED_DIFF_TEXT);
357
358         SerializeColor(op, m_cTrivial, OPT_CLR_TRIVIAL_DIFF);
359         SerializeColor(op, m_cTrivialDeleted, OPT_CLR_TRIVIAL_DIFF_DELETED);
360         SerializeColor(op, m_cTrivialText, OPT_CLR_TRIVIAL_DIFF_TEXT);
361         
362         SerializeColor(op, m_cMoved, OPT_CLR_MOVEDBLOCK);
363         SerializeColor(op, m_cMovedDeleted, OPT_CLR_MOVEDBLOCK_DELETED);
364         SerializeColor(op, m_cMovedText, OPT_CLR_MOVEDBLOCK_TEXT);
365         
366         SerializeColor(op, m_cSNP, OPT_CLR_SNP);
367         SerializeColor(op, m_cSNPDeleted, OPT_CLR_SNP_DELETED);
368         SerializeColor(op, m_cSNPText, OPT_CLR_SNP_TEXT);
369
370         SerializeColor(op, m_cSelMoved, OPT_CLR_SELECTED_MOVEDBLOCK);
371         SerializeColor(op, m_cSelMovedDeleted, OPT_CLR_SELECTED_MOVEDBLOCK_DELETED);
372         SerializeColor(op, m_cSelMovedText, OPT_CLR_SELECTED_MOVEDBLOCK_TEXT);
373         
374         SerializeColor(op, m_cSelSNP, OPT_CLR_SELECTED_SNP);
375         SerializeColor(op, m_cSelSNPDeleted, OPT_CLR_SELECTED_SNP_DELETED);
376         SerializeColor(op, m_cSelSNPText, OPT_CLR_SELECTED_SNP_TEXT);
377
378         SerializeColor(op, m_cWordDiff, OPT_CLR_WORDDIFF);
379         SerializeColor(op, m_cWordDiffDeleted, OPT_CLR_WORDDIFF_DELETED);
380         SerializeColor(op, m_cWordDiffText, OPT_CLR_WORDDIFF_TEXT);
381
382         SerializeColor(op, m_cSelWordDiff, OPT_CLR_SELECTED_WORDDIFF);
383         SerializeColor(op, m_cSelWordDiffDeleted, OPT_CLR_SELECTED_WORDDIFF_DELETED);
384         SerializeColor(op, m_cSelWordDiffText, OPT_CLR_SELECTED_WORDDIFF_TEXT);
385 }
386
387 void PropMergeColors::SerializeColor(OPERATION op, CColorButton & btn, const String& optionName)
388 {
389         switch (op)
390         {
391         case SET_DEFAULTS:
392                 btn.SetColor(GetOptionsMgr()->GetDefault<unsigned>(optionName));
393                 return;
394
395         case WRITE_OPTIONS:
396                 GetOptionsMgr()->SaveOption(optionName, (unsigned)btn.GetColor());
397                 return;
398
399         case READ_OPTIONS:
400                 // Set colors for buttons, do NOT invalidate
401                 btn.SetColor(GetOptionsMgr()->GetInt(optionName), false);
402                 return;
403         }
404 }
405