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.
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
)
39 CSetColorPage::~CSetColorPage()
44 static COLORREF
GetColorFromButton(const CMFCColorButton
& button
)
46 COLORREF col
= button
.GetColor();
48 return button
.GetAutomaticColor();
52 void CSetColorPage::SaveData()
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
)
156 // CSetColorPage message handlers
158 BOOL
CSetColorPage::OnInitDialog()
160 CPropertyPage::OnInitDialog();
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
);
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()
250 return CPropertyPage::OnApply();
253 void CSetColorPage::OnBnClickedColor()
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
);