1 // TortoiseGitMerge - a Diff/Patch program
3 // Copyright (C) 2006-2008, 2012 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "TortoiseMerge.h"
21 #include "SetColorPage.h"
22 #include "DiffColors.h"
25 // CSetColorPage dialog
26 #define INLINEADDED_COLOR RGB(255, 255, 150)
27 #define INLINEREMOVED_COLOR RGB(200, 100, 100)
28 #define MODIFIED_COLOR RGB(220, 220, 255)
30 IMPLEMENT_DYNAMIC(CSetColorPage
, CPropertyPage
)
31 CSetColorPage::CSetColorPage()
32 : CPropertyPage(CSetColorPage::IDD
)
33 , m_bReloadNeeded(FALSE
)
34 , m_regInlineAdded(_T("Software\\TortoiseGitMerge\\InlineAdded"), INLINEADDED_COLOR
)
35 , m_regInlineRemoved(_T("Software\\TortoiseGitMerge\\InlineRemoved"), INLINEREMOVED_COLOR
)
36 , m_regModifiedBackground(_T("Software\\TortoiseGitMerge\\Colors\\ColorModifiedB"), MODIFIED_COLOR
)
41 CSetColorPage::~CSetColorPage()
46 void CSetColorPage::SaveData()
51 COLORREF cFg
= ::GetSysColor(COLOR_WINDOWTEXT
);
53 COLORREF cBk
= m_cBkNormal
.GetColor();
55 cBk
= m_cBkNormal
.GetAutomaticColor();
56 CDiffColors::GetInstance().SetColors(DIFFSTATE_NORMAL
, cBk
, cFg
);
57 CDiffColors::GetInstance().SetColors(DIFFSTATE_UNKNOWN
, cBk
, cFg
);
59 cBk
= m_cBkRemoved
.GetColor();
61 cBk
= m_cBkRemoved
.GetAutomaticColor();
62 CDiffColors::GetInstance().SetColors(DIFFSTATE_REMOVED
, cBk
, cFg
);
63 CDiffColors::GetInstance().SetColors(DIFFSTATE_IDENTICALREMOVED
, cBk
, cFg
);
64 CDiffColors::GetInstance().SetColors(DIFFSTATE_THEIRSREMOVED
, cBk
, cFg
);
65 CDiffColors::GetInstance().SetColors(DIFFSTATE_YOURSREMOVED
, cBk
, cFg
);
67 cBk
= m_cBkAdded
.GetColor();
69 cBk
= m_cBkAdded
.GetAutomaticColor();
70 CDiffColors::GetInstance().SetColors(DIFFSTATE_ADDED
, cBk
, cFg
);
71 CDiffColors::GetInstance().SetColors(DIFFSTATE_IDENTICALADDED
, cBk
, cFg
);
72 CDiffColors::GetInstance().SetColors(DIFFSTATE_THEIRSADDED
, cBk
, cFg
);
73 CDiffColors::GetInstance().SetColors(DIFFSTATE_YOURSADDED
, cBk
, cFg
);
74 CDiffColors::GetInstance().SetColors(DIFFSTATE_MOVED_TO
, cBk
, cFg
);
76 if ((DWORD
)m_regInlineAdded
!= (DWORD
)m_cBkInlineAdded
.GetColor())
77 m_bReloadNeeded
= true;
78 m_regInlineAdded
= (m_cBkInlineAdded
.GetColor() == -1 ? m_cBkInlineAdded
.GetAutomaticColor() : m_cBkInlineAdded
.GetColor());
79 if ((DWORD
)m_regInlineRemoved
!= (DWORD
)m_cBkInlineRemoved
.GetColor())
80 m_bReloadNeeded
= true;
81 m_regInlineRemoved
= (m_cBkInlineRemoved
.GetColor() == -1 ? m_cBkInlineRemoved
.GetAutomaticColor() : m_cBkInlineRemoved
.GetColor());
82 if ((DWORD
)m_regModifiedBackground
!= (DWORD
)m_cBkModified
.GetColor())
83 m_bReloadNeeded
= true;
84 m_regModifiedBackground
= (m_cBkModified
.GetColor() == -1 ? m_cBkModified
.GetAutomaticColor() : m_cBkModified
.GetColor());
86 cBk
= m_cBkEmpty
.GetColor();
88 cBk
= m_cBkEmpty
.GetAutomaticColor();
89 CDiffColors::GetInstance().SetColors(DIFFSTATE_EMPTY
, cBk
, cFg
);
91 COLORREF adjustedcolor
= cBk
;
92 cBk
= m_cBkConflict
.GetColor();
94 cBk
= m_cBkConflict
.GetAutomaticColor();
95 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTED
, cBk
, cFg
);
96 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTED_IGNORED
, cBk
, cFg
);
97 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTADDED
, cBk
, cFg
);
98 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTEMPTY
, adjustedcolor
, cFg
);
100 cBk
= m_cBkConflictResolved
.GetColor();
102 cBk
= m_cBkConflictResolved
.GetAutomaticColor();
103 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTRESOLVED
, cBk
, cFg
);
105 cBk
= m_cBkMovedFrom
.GetColor();
107 cBk
= m_cBkMovedFrom
.GetAutomaticColor();
108 CDiffColors::GetInstance().SetColors(DIFFSTATE_MOVED_FROM
, cBk
, cFg
);
110 cBk
= m_cBkMovedTo
.GetColor();
112 cBk
= m_cBkMovedTo
.GetAutomaticColor();
113 CDiffColors::GetInstance().SetColors(DIFFSTATE_MOVED_TO
, cBk
, cFg
);
115 cFg
= m_cFgWhitespaces
.GetColor();
117 cFg
= m_cFgWhitespaces
.GetAutomaticColor();
118 CRegDWORD
regWhitespaceColor(_T("Software\\TortoiseGitMerge\\Colors\\Whitespace"), GetSysColor(COLOR_GRAYTEXT
));
119 regWhitespaceColor
= cFg
;
122 void CSetColorPage::DoDataExchange(CDataExchange
* pDX
)
124 CPropertyPage::DoDataExchange(pDX
);
125 DDX_Control(pDX
, IDC_BKNORMAL
, m_cBkNormal
);
126 DDX_Control(pDX
, IDC_BKREMOVED
, m_cBkRemoved
);
127 DDX_Control(pDX
, IDC_BKADDED
, m_cBkAdded
);
128 DDX_Control(pDX
, IDC_BKWHITESPACES
, m_cBkInlineAdded
);
129 DDX_Control(pDX
, IDC_BKWHITESPACEDIFF
, m_cBkInlineRemoved
);
130 DDX_Control(pDX
, IDC_BKMODIFIED
, m_cBkModified
);
131 DDX_Control(pDX
, IDC_BKEMPTY
, m_cBkEmpty
);
132 DDX_Control(pDX
, IDC_BKCONFLICTED
, m_cBkConflict
);
133 DDX_Control(pDX
, IDC_BKCONFLICTRESOLVED
, m_cBkConflictResolved
);
134 DDX_Control(pDX
, IDC_BKMOVEDFROM
, m_cBkMovedFrom
);
135 DDX_Control(pDX
, IDC_BKMOVEDTO
, m_cBkMovedTo
);
136 DDX_Control(pDX
, IDC_FGWHITESPACES
, m_cFgWhitespaces
);
140 BEGIN_MESSAGE_MAP(CSetColorPage
, CPropertyPage
)
141 ON_BN_CLICKED(IDC_BKNORMAL
, &CSetColorPage::OnBnClickedColor
)
142 ON_BN_CLICKED(IDC_BKREMOVED
, &CSetColorPage::OnBnClickedColor
)
143 ON_BN_CLICKED(IDC_BKADDED
, &CSetColorPage::OnBnClickedColor
)
144 ON_BN_CLICKED(IDC_BKWHITESPACES
, &CSetColorPage::OnBnClickedColor
)
145 ON_BN_CLICKED(IDC_BKWHITESPACEDIFF
, &CSetColorPage::OnBnClickedColor
)
146 ON_BN_CLICKED(IDC_BKMODIFIED
, &CSetColorPage::OnBnClickedColor
)
147 ON_BN_CLICKED(IDC_BKEMPTY
, &CSetColorPage::OnBnClickedColor
)
148 ON_BN_CLICKED(IDC_BKCONFLICTED
, &CSetColorPage::OnBnClickedColor
)
149 ON_BN_CLICKED(IDC_BKCONFLICTRESOLVED
, &CSetColorPage::OnBnClickedColor
)
150 ON_BN_CLICKED(IDC_BKMOVEDFROM
, &CSetColorPage::OnBnClickedColor
)
151 ON_BN_CLICKED(IDC_BKMOVEDTO
, &CSetColorPage::OnBnClickedColor
)
152 ON_BN_CLICKED(IDC_FGWHITESPACES
, &CSetColorPage::OnBnClickedColor
)
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_cBkNormal
.SetColor(cBk
);
171 m_cBkNormal
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_NORMAL_DEFAULT_BG
);
172 m_cBkNormal
.EnableOtherButton(sCustomText
);
174 CDiffColors::GetInstance().GetColors(DIFFSTATE_REMOVED
, cBk
, cFg
);
175 m_cBkRemoved
.SetColor(cBk
);
176 m_cBkRemoved
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_REMOVED_DEFAULT_BG
);
177 m_cBkRemoved
.EnableOtherButton(sCustomText
);
179 CDiffColors::GetInstance().GetColors(DIFFSTATE_ADDED
, cBk
, cFg
);
180 m_cBkAdded
.SetColor(cBk
);
181 m_cBkAdded
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_ADDED_DEFAULT_BG
);
182 m_cBkAdded
.EnableOtherButton(sCustomText
);
184 m_cBkInlineAdded
.SetColor((DWORD
)m_regInlineAdded
);
185 m_cBkInlineAdded
.EnableAutomaticButton(sDefaultText
, INLINEADDED_COLOR
);
186 m_cBkInlineAdded
.EnableOtherButton(sCustomText
);
188 m_cBkInlineRemoved
.SetColor((DWORD
)m_regInlineRemoved
);
189 m_cBkInlineRemoved
.EnableAutomaticButton(sDefaultText
, INLINEREMOVED_COLOR
);
190 m_cBkInlineRemoved
.EnableOtherButton(sCustomText
);
192 m_cBkModified
.SetColor((DWORD
)m_regModifiedBackground
);
193 m_cBkModified
.EnableAutomaticButton(sDefaultText
, MODIFIED_COLOR
);
194 m_cBkModified
.EnableOtherButton(sCustomText
);
196 CDiffColors::GetInstance().GetColors(DIFFSTATE_EMPTY
, cBk
, cFg
);
197 m_cBkEmpty
.SetColor(cBk
);
198 m_cBkEmpty
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_EMPTY_DEFAULT_BG
);
199 m_cBkEmpty
.EnableOtherButton(sCustomText
);
201 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTED
, cBk
, cFg
);
202 m_cBkConflict
.SetColor(cBk
);
203 m_cBkConflict
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_CONFLICTED_DEFAULT_BG
);
204 m_cBkConflict
.EnableOtherButton(sCustomText
);
206 CDiffColors::GetInstance().GetColors(DIFFSTATE_MOVED_FROM
, cBk
, cFg
);
207 m_cBkMovedFrom
.SetColor(cBk
);
208 m_cBkMovedFrom
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_MOVEDFROM_DEFAULT_BG
);
209 m_cBkMovedFrom
.EnableOtherButton(sCustomText
);
211 CDiffColors::GetInstance().GetColors(DIFFSTATE_MOVED_TO
, cBk
, cFg
);
212 m_cBkMovedTo
.SetColor(cBk
);
213 m_cBkMovedTo
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_MOVEDTO_DEFAULT_BG
);
214 m_cBkMovedTo
.EnableOtherButton(sCustomText
);
216 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTRESOLVED
, cBk
, cFg
);
217 m_cBkConflictResolved
.SetColor(cBk
);
218 m_cBkConflictResolved
.EnableAutomaticButton(sDefaultText
, DIFFSTATE_CONFLICTRESOLVED_DEFAULT_BG
);
219 m_cBkConflictResolved
.EnableOtherButton(sCustomText
);
222 CRegDWORD
regWhitespaceColor(_T("Software\\TortoiseGitMerge\\Colors\\Whitespace"), GetSysColor(COLOR_GRAYTEXT
));
223 m_cFgWhitespaces
.SetColor((COLORREF
)(DWORD
)regWhitespaceColor
);
224 m_cFgWhitespaces
.EnableAutomaticButton(sDefaultText
, GetSysColor(COLOR_GRAYTEXT
));
225 m_cFgWhitespaces
.EnableOtherButton(sCustomText
);
230 return TRUE
; // return TRUE unless you set the focus to a control
231 // EXCEPTION: OCX Property Pages should return FALSE
234 BOOL
CSetColorPage::OnApply()
239 return CPropertyPage::OnApply();
242 void CSetColorPage::OnBnClickedColor()