Get rid of magic numbers
[TortoiseGit.git] / src / TortoiseMerge / SetColorPage.cpp
blobb21a6be79ca6291226e46ef30ee80fec875d2059
1 // TortoiseGitMerge - a Diff/Patch program
3 // Copyright (C) 2006-2008, 2012-2014, 2017 - TortoiseSVN
4 // Copyright (C) 2016 - TortoiseGit
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "stdafx.h"
21 #include "TortoiseMerge.h"
22 #include "SetColorPage.h"
23 #include "DiffColors.h"
26 // CSetColorPage dialog
28 IMPLEMENT_DYNAMIC(CSetColorPage, CPropertyPage)
29 CSetColorPage::CSetColorPage()
30 : CPropertyPage(CSetColorPage::IDD)
31 , m_bReloadNeeded(FALSE)
32 , m_regInlineAdded(L"Software\\TortoiseGitMerge\\InlineAdded", INLINEADDED_COLOR)
33 , m_regInlineRemoved(L"Software\\TortoiseGitMerge\\InlineRemoved", INLINEREMOVED_COLOR)
34 , m_regModifiedBackground(L"Software\\TortoiseGitMerge\\Colors\\ColorModifiedB", MODIFIED_COLOR)
35 , m_bInit(false)
39 CSetColorPage::~CSetColorPage()
41 m_bInit = FALSE;
44 static COLORREF GetColorFromButton(const CMFCColorButton& button)
46 COLORREF col = button.GetColor();
47 if (col == -1)
48 return button.GetAutomaticColor();
49 return col;
52 void CSetColorPage::SaveData()
54 if (!m_bInit)
55 return;
57 COLORREF cFg = GetColorFromButton(m_cFgNormal);
58 COLORREF cBk = GetColorFromButton(m_cBkNormal);
59 CDiffColors::GetInstance().SetColors(DIFFSTATE_NORMAL, cBk, cFg);
60 CDiffColors::GetInstance().SetColors(DIFFSTATE_UNKNOWN, cBk, cFg);
62 cFg = GetColorFromButton(m_cFgRemoved);
63 cBk = GetColorFromButton(m_cBkRemoved);
64 CDiffColors::GetInstance().SetColors(DIFFSTATE_REMOVED, cBk, cFg);
65 CDiffColors::GetInstance().SetColors(DIFFSTATE_IDENTICALREMOVED, cBk, cFg);
66 CDiffColors::GetInstance().SetColors(DIFFSTATE_THEIRSREMOVED, cBk, cFg);
67 CDiffColors::GetInstance().SetColors(DIFFSTATE_YOURSREMOVED, cBk, cFg);
69 cFg = GetColorFromButton(m_cFgAdded);
70 cBk = GetColorFromButton(m_cBkAdded);
71 CDiffColors::GetInstance().SetColors(DIFFSTATE_ADDED, cBk, cFg);
72 CDiffColors::GetInstance().SetColors(DIFFSTATE_IDENTICALADDED, cBk, cFg);
73 CDiffColors::GetInstance().SetColors(DIFFSTATE_THEIRSADDED, cBk, cFg);
74 CDiffColors::GetInstance().SetColors(DIFFSTATE_YOURSADDED, cBk, cFg);
76 if ((DWORD)m_regInlineAdded != (DWORD)m_cBkInlineAdded.GetColor())
77 m_bReloadNeeded = true;
78 m_regInlineAdded = GetColorFromButton(m_cBkInlineAdded);
79 if ((DWORD)m_regInlineRemoved != (DWORD)m_cBkInlineRemoved.GetColor())
80 m_bReloadNeeded = true;
81 m_regInlineRemoved = GetColorFromButton(m_cBkInlineRemoved);
82 if ((DWORD)m_regModifiedBackground != (DWORD)m_cBkModified.GetColor())
83 m_bReloadNeeded = true;
84 m_regModifiedBackground = GetColorFromButton(m_cBkModified);
85 CDiffColors::GetInstance().SetColors(DIFFSTATE_EDITED, (DWORD)m_regModifiedBackground, cFg);
87 cFg = GetColorFromButton(m_cFgEmpty);
88 cBk = GetColorFromButton(m_cBkEmpty);
89 CDiffColors::GetInstance().SetColors(DIFFSTATE_EMPTY, cBk, cFg);
91 COLORREF adjustedcolor = cBk;
92 cFg = GetColorFromButton(m_cFgConflict);
93 cBk = GetColorFromButton(m_cBkConflict);
94 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTED, cBk, cFg);
95 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTED_IGNORED, cBk, cFg);
96 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTADDED, cBk, cFg);
97 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTEMPTY, adjustedcolor, cFg);
99 cFg = GetColorFromButton(m_cFgConflictResolved);
100 cBk = GetColorFromButton(m_cBkConflictResolved);
101 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTRESOLVED, cBk, cFg);
103 cFg = GetColorFromButton(m_cFgWhitespaces);
104 CRegDWORD regWhitespaceColor(L"Software\\TortoiseGitMerge\\Colors\\Whitespace", GetSysColor(COLOR_3DSHADOW));
105 regWhitespaceColor = cFg;
107 cBk = GetColorFromButton(m_cBkFiltered);
108 CDiffColors::GetInstance().SetColors(DIFFSTATE_FILTEREDDIFF, cBk, DIFFSTATE_NORMAL_DEFAULT_FG);
111 void CSetColorPage::DoDataExchange(CDataExchange* pDX)
113 CPropertyPage::DoDataExchange(pDX);
114 DDX_Control(pDX, IDC_BKNORMAL, m_cBkNormal);
115 DDX_Control(pDX, IDC_BKREMOVED, m_cBkRemoved);
116 DDX_Control(pDX, IDC_BKADDED, m_cBkAdded);
117 DDX_Control(pDX, IDC_BKWHITESPACES, m_cBkInlineAdded);
118 DDX_Control(pDX, IDC_BKWHITESPACEDIFF, m_cBkInlineRemoved);
119 DDX_Control(pDX, IDC_BKMODIFIED, m_cBkModified);
120 DDX_Control(pDX, IDC_BKEMPTY, m_cBkEmpty);
121 DDX_Control(pDX, IDC_BKCONFLICTED, m_cBkConflict);
122 DDX_Control(pDX, IDC_BKCONFLICTRESOLVED, m_cBkConflictResolved);
123 DDX_Control(pDX, IDC_FGWHITESPACES, m_cFgWhitespaces);
124 DDX_Control(pDX, IDC_FGNORMAL, m_cFgNormal);
125 DDX_Control(pDX, IDC_FGREMOVED, m_cFgRemoved);
126 DDX_Control(pDX, IDC_FGADDED, m_cFgAdded);
127 DDX_Control(pDX, IDC_FGEMPTY, m_cFgEmpty);
128 DDX_Control(pDX, IDC_FGCONFLICTED, m_cFgConflict);
129 DDX_Control(pDX, IDC_FGCONFLICTRESOLVED, m_cFgConflictResolved);
130 DDX_Control(pDX, IDC_BKFILTERED, m_cBkFiltered);
134 BEGIN_MESSAGE_MAP(CSetColorPage, CPropertyPage)
135 ON_BN_CLICKED(IDC_BKNORMAL, &CSetColorPage::OnBnClickedColor)
136 ON_BN_CLICKED(IDC_BKREMOVED, &CSetColorPage::OnBnClickedColor)
137 ON_BN_CLICKED(IDC_BKADDED, &CSetColorPage::OnBnClickedColor)
138 ON_BN_CLICKED(IDC_BKWHITESPACES, &CSetColorPage::OnBnClickedColor)
139 ON_BN_CLICKED(IDC_BKWHITESPACEDIFF, &CSetColorPage::OnBnClickedColor)
140 ON_BN_CLICKED(IDC_BKMODIFIED, &CSetColorPage::OnBnClickedColor)
141 ON_BN_CLICKED(IDC_BKEMPTY, &CSetColorPage::OnBnClickedColor)
142 ON_BN_CLICKED(IDC_BKCONFLICTED, &CSetColorPage::OnBnClickedColor)
143 ON_BN_CLICKED(IDC_BKCONFLICTRESOLVED, &CSetColorPage::OnBnClickedColor)
144 ON_BN_CLICKED(IDC_FGNORMAL, &CSetColorPage::OnBnClickedColor)
145 ON_BN_CLICKED(IDC_FGREMOVED, &CSetColorPage::OnBnClickedColor)
146 ON_BN_CLICKED(IDC_FGADDED, &CSetColorPage::OnBnClickedColor)
147 ON_BN_CLICKED(IDC_FGEMPTY, &CSetColorPage::OnBnClickedColor)
148 ON_BN_CLICKED(IDC_FGCONFLICTED, &CSetColorPage::OnBnClickedColor)
149 ON_BN_CLICKED(IDC_FGCONFLICTRESOLVED, &CSetColorPage::OnBnClickedColor)
150 ON_BN_CLICKED(IDC_FGWHITESPACES, &CSetColorPage::OnBnClickedColor)
151 ON_BN_CLICKED(IDC_BKFILTERED, &CSetColorPage::OnBnClickedColor)
152 ON_BN_CLICKED(IDC_RESTORE, &CSetColorPage::OnBnClickedRestore)
153 END_MESSAGE_MAP()
156 // CSetColorPage message handlers
158 BOOL CSetColorPage::OnInitDialog()
160 CPropertyPage::OnInitDialog();
162 COLORREF cBk;
163 COLORREF cFg;
165 CString sDefaultText, sCustomText;
166 sDefaultText.LoadString(IDS_COLOURPICKER_DEFAULTTEXT);
167 sCustomText.LoadString(IDS_COLOURPICKER_CUSTOMTEXT);
169 CDiffColors::GetInstance().GetColors(DIFFSTATE_NORMAL, cBk, cFg);
170 m_cFgNormal.SetColor(cFg);
171 m_cFgNormal.EnableAutomaticButton(sDefaultText, DIFFSTATE_NORMAL_DEFAULT_FG);
172 m_cFgNormal.EnableOtherButton(sCustomText);
173 m_cBkNormal.SetColor(cBk);
174 m_cBkNormal.EnableAutomaticButton(sDefaultText, DIFFSTATE_NORMAL_DEFAULT_BG);
175 m_cBkNormal.EnableOtherButton(sCustomText);
177 CDiffColors::GetInstance().GetColors(DIFFSTATE_REMOVED, cBk, cFg);
178 m_cFgRemoved.SetColor(cFg);
179 m_cFgRemoved.EnableAutomaticButton(sDefaultText, DIFFSTATE_REMOVED_DEFAULT_FG);
180 m_cFgRemoved.EnableOtherButton(sCustomText);
181 m_cBkRemoved.SetColor(cBk);
182 m_cBkRemoved.EnableAutomaticButton(sDefaultText, DIFFSTATE_REMOVED_DEFAULT_BG);
183 m_cBkRemoved.EnableOtherButton(sCustomText);
185 CDiffColors::GetInstance().GetColors(DIFFSTATE_ADDED, cBk, cFg);
186 m_cFgAdded.SetColor(cFg);
187 m_cFgAdded.EnableAutomaticButton(sDefaultText, DIFFSTATE_ADDED_DEFAULT_FG);
188 m_cFgAdded.EnableOtherButton(sCustomText);
189 m_cBkAdded.SetColor(cBk);
190 m_cBkAdded.EnableAutomaticButton(sDefaultText, DIFFSTATE_ADDED_DEFAULT_BG);
191 m_cBkAdded.EnableOtherButton(sCustomText);
193 m_cBkInlineAdded.SetColor((DWORD)m_regInlineAdded);
194 m_cBkInlineAdded.EnableAutomaticButton(sDefaultText, INLINEADDED_COLOR);
195 m_cBkInlineAdded.EnableOtherButton(sCustomText);
197 m_cBkInlineRemoved.SetColor((DWORD)m_regInlineRemoved);
198 m_cBkInlineRemoved.EnableAutomaticButton(sDefaultText, INLINEREMOVED_COLOR);
199 m_cBkInlineRemoved.EnableOtherButton(sCustomText);
201 m_cBkModified.SetColor((DWORD)m_regModifiedBackground);
202 m_cBkModified.EnableAutomaticButton(sDefaultText, MODIFIED_COLOR);
203 m_cBkModified.EnableOtherButton(sCustomText);
205 CDiffColors::GetInstance().GetColors(DIFFSTATE_EMPTY, cBk, cFg);
206 m_cFgEmpty.SetColor(cFg);
207 m_cFgEmpty.EnableAutomaticButton(sDefaultText, DIFFSTATE_EMPTY_DEFAULT_FG);
208 m_cFgEmpty.EnableOtherButton(sCustomText);
209 m_cBkEmpty.SetColor(cBk);
210 m_cBkEmpty.EnableAutomaticButton(sDefaultText, DIFFSTATE_EMPTY_DEFAULT_BG);
211 m_cBkEmpty.EnableOtherButton(sCustomText);
213 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTED, cBk, cFg);
214 m_cFgConflict.SetColor(cFg);
215 m_cFgConflict.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTED_DEFAULT_FG);
216 m_cFgConflict.EnableOtherButton(sCustomText);
217 m_cBkConflict.SetColor(cBk);
218 m_cBkConflict.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTED_DEFAULT_BG);
219 m_cBkConflict.EnableOtherButton(sCustomText);
221 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTRESOLVED, cBk, cFg);
222 m_cFgConflictResolved.SetColor(cFg);
223 m_cFgConflictResolved.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTRESOLVED_DEFAULT_FG);
224 m_cFgConflictResolved.EnableOtherButton(sCustomText);
225 m_cBkConflictResolved.SetColor(cBk);
226 m_cBkConflictResolved.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTRESOLVED_DEFAULT_BG);
227 m_cBkConflictResolved.EnableOtherButton(sCustomText);
229 CRegDWORD regWhitespaceColor(L"Software\\TortoiseGitMerge\\Colors\\Whitespace", GetSysColor(COLOR_3DSHADOW));
230 m_cFgWhitespaces.SetColor((COLORREF)(DWORD)regWhitespaceColor);
231 m_cFgWhitespaces.EnableAutomaticButton(sDefaultText, GetSysColor(COLOR_3DSHADOW));
232 m_cFgWhitespaces.EnableOtherButton(sCustomText);
234 CDiffColors::GetInstance().GetColors(DIFFSTATE_FILTEREDDIFF, cBk, cFg);
235 m_cBkFiltered.SetColor(cBk);
236 m_cBkFiltered.EnableAutomaticButton(sDefaultText, DIFFSTATE_FILTERED_DEFAULT_BG);
237 m_cBkFiltered.EnableOtherButton(sCustomText);
239 m_bInit = TRUE;
241 return TRUE; // return TRUE unless you set the focus to a control
242 // EXCEPTION: OCX Property Pages should return FALSE
245 BOOL CSetColorPage::OnApply()
247 UpdateData();
248 SaveData();
249 SetModified(FALSE);
250 return CPropertyPage::OnApply();
253 void CSetColorPage::OnBnClickedColor()
255 SetModified();
258 void CSetColorPage::OnBnClickedRestore()
260 m_cBkNormal.SetColor(DIFFSTATE_NORMAL_DEFAULT_BG);
261 m_cBkRemoved.SetColor(DIFFSTATE_REMOVED_DEFAULT_BG);
262 m_cBkAdded.SetColor(DIFFSTATE_ADDED_DEFAULT_BG);
263 m_cBkInlineAdded.SetColor(INLINEADDED_COLOR);
264 m_cBkInlineRemoved.SetColor(INLINEREMOVED_COLOR);
265 m_cBkModified.SetColor(MODIFIED_COLOR);
266 m_cBkEmpty.SetColor(DIFFSTATE_EMPTY_DEFAULT_BG);
267 m_cBkConflict.SetColor(DIFFSTATE_CONFLICTED_DEFAULT_BG);
268 m_cBkConflictResolved.SetColor(DIFFSTATE_CONFLICTRESOLVED_DEFAULT_BG);
269 m_cFgNormal.SetColor(DIFFSTATE_NORMAL_DEFAULT_FG);
270 m_cFgRemoved.SetColor(DIFFSTATE_REMOVED_DEFAULT_FG);
271 m_cFgAdded.SetColor(DIFFSTATE_ADDED_DEFAULT_FG);
272 m_cFgEmpty.SetColor(DIFFSTATE_EMPTY_DEFAULT_FG);
273 m_cFgConflict.SetColor(DIFFSTATE_CONFLICTED_DEFAULT_FG);
274 m_cFgConflictResolved.SetColor(DIFFSTATE_CONFLICTRESOLVED_DEFAULT_FG);
275 m_cFgWhitespaces.SetColor(GetSysColor(COLOR_3DSHADOW));
276 m_cBkFiltered.SetColor(DIFFSTATE_FILTERED_DEFAULT_BG);
277 SetModified();