2 * @file PropMergeColors.cpp
4 * @brief Implementation of PropMergeColors propertysheet
8 #include "PropMergeColors.h"
9 #include "OptionsCustomColors.h"
10 #include "OptionsDef.h"
11 #include "OptionsMgr.h"
12 #include "OptionsPanel.h"
19 * @brief Default constructor.
21 PropMergeColors::PropMergeColors(COptionsMgr *optionsMgr)
22 : OptionsPanel(optionsMgr, PropMergeColors::IDD)
27 void PropMergeColors::DoDataExchange(CDataExchange* pDX)
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);
59 UpdateTextColorButtonsState();
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)
106 * @brief Reads options values from storage to UI.
107 * (Property sheet calls this before displaying all property pages)
109 void PropMergeColors::ReadOptions()
111 SerializeColors(READ_OPTIONS);
115 * @brief Writes options values from UI to storage.
116 * (Property sheet calls this after displaying all property pages)
118 void PropMergeColors::WriteOptions()
120 SerializeColors(WRITE_OPTIONS);
124 * @brief Let user browse common color dialog, and select a color
126 void PropMergeColors::BrowseColor(CColorButton & colorButton)
128 CColorDialog dialog(colorButton.GetColor());
129 Options::CustomColors::Load(GetOptionsMgr(), m_cCustColors.data());
130 dialog.m_cc.lpCustColors = m_cCustColors.data();
132 if (dialog.DoModal() == IDOK)
133 colorButton.SetColor(dialog.GetColor());
134 Options::CustomColors::Save(GetOptionsMgr(), m_cCustColors.data());
137 void PropMergeColors::UpdateTextColorButtonState(int checkboxId, CColorButton &btn)
139 CheckDlgButton(checkboxId, btn.GetColor() != COLOR_NONE ? BST_CHECKED : BST_UNCHECKED);
140 btn.ShowWindow(btn.GetColor() != COLOR_NONE ? SW_SHOW : SW_HIDE);
143 void PropMergeColors::UpdateTextColorButtonsState()
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);
157 * @brief User wants to change difference color
159 void PropMergeColors::OnDifferenceColor()
161 BrowseColor(m_cDiff);
165 * @brief User wants to change selected difference color
167 void PropMergeColors::OnSelDifferenceColor()
169 BrowseColor(m_cSelDiff);
173 * @brief User wants to change deleted difference color
175 void PropMergeColors::OnDifferenceDeletedColor()
177 BrowseColor(m_cDiffDeleted);
181 * @brief User wants to change selected & deleted difference color
183 void PropMergeColors::OnSelDifferenceDeletedColor()
185 BrowseColor(m_cSelDiffDeleted);
189 * @brief User wants to change difference text color
191 void PropMergeColors::OnDifferenceTextColor()
193 BrowseColor(m_cDiffText);
197 * @brief User wants to change selected difference text color
199 void PropMergeColors::OnSelDifferenceTextColor()
201 BrowseColor(m_cSelDiffText);
205 * @brief User wants to change trivial difference color
207 void PropMergeColors::OnTrivialDiffColor()
209 BrowseColor(m_cTrivial);
213 * @brief User wants to change deleted trivial difference color
215 void PropMergeColors::OnTrivialDiffDeletedColor()
217 BrowseColor(m_cTrivialDeleted);
220 void PropMergeColors::OnTrivialDiffTextColor()
222 BrowseColor(m_cTrivialText);
225 void PropMergeColors::OnMovedColor()
227 BrowseColor(m_cMoved);
230 void PropMergeColors::OnMovedDeletedColor()
232 BrowseColor(m_cMovedDeleted);
235 void PropMergeColors::OnMovedTextColor()
237 BrowseColor(m_cMovedText);
240 void PropMergeColors::OnSelMovedColor()
242 BrowseColor(m_cSelMoved);
245 void PropMergeColors::OnSelMovedDeletedColor()
247 BrowseColor(m_cSelMovedDeleted);
250 void PropMergeColors::OnSelMovedTextColor()
252 BrowseColor(m_cSelMovedText);
255 void PropMergeColors::OnSNPColor()
260 void PropMergeColors::OnSNPDeletedColor()
262 BrowseColor(m_cSNPDeleted);
265 void PropMergeColors::OnSNPTextColor()
267 BrowseColor(m_cSNPText);
270 void PropMergeColors::OnSelSNPColor()
272 BrowseColor(m_cSelSNP);
275 void PropMergeColors::OnSelSNPDeletedColor()
277 BrowseColor(m_cSelSNPDeleted);
280 void PropMergeColors::OnSelSNPTextColor()
282 BrowseColor(m_cSelSNPText);
286 * @brief User wants to change word difference color
288 void PropMergeColors::OnWordDiffColor()
290 BrowseColor(m_cWordDiff);
293 * @brief User wants to change word difference deleted color
295 void PropMergeColors::OnWordDiffDeletedColor()
297 BrowseColor(m_cWordDiffDeleted);
301 * @brief User wants to change selected word difference color
303 void PropMergeColors::OnSelWordDiffColor()
305 BrowseColor(m_cSelWordDiff);
309 * @brief User wants to change word difference deleted color
311 void PropMergeColors::OnSelWordDiffDeletedColor()
313 BrowseColor(m_cSelWordDiffDeleted);
317 * @brief User wants to change word difference text color
319 void PropMergeColors::OnWordDiffTextColor()
321 BrowseColor(m_cWordDiffText);
325 * @brief User wants to change selected word difference text color
327 void PropMergeColors::OnSelWordDiffTextColor()
329 BrowseColor(m_cSelWordDiffText);
332 template<int checkbox_id, int colorbutton_id>
333 void PropMergeColors::OnUseTextColor()
335 CColorButton *cButton = dynamic_cast<CColorButton *>(GetDlgItem(colorbutton_id));
336 if (IsDlgButtonChecked(checkbox_id) != 0)
338 cButton->ShowWindow(SW_SHOW);
339 cButton->SetColor(0);
343 cButton->ShowWindow(SW_HIDE);
344 cButton->SetColor(COLOR_NONE);
348 void PropMergeColors::SerializeColors(OPERATION op)
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);
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);
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);
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);
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);
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);
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);
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);
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);
387 void PropMergeColors::SerializeColor(OPERATION op, CColorButton & btn, const String& optionName)
392 btn.SetColor(GetOptionsMgr()->GetDefault<unsigned>(optionName));
396 GetOptionsMgr()->SaveOption(optionName, (unsigned)btn.GetColor());
400 // Set colors for buttons, do NOT invalidate
401 btn.SetColor(GetOptionsMgr()->GetInt(optionName), false);