Fixed issue #1507: Submodule Diff Dialog should show dirty state only on working...
[TortoiseGit.git] / src / TortoiseMerge / SetColorPage.cpp
blob2f6e4dc1faa3a66618937e2f5180167954771a93
1 // TortoiseMerge - a Diff/Patch program
3 // Copyright (C) 2006-2008 - 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.
19 #include "stdafx.h"
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\\TortoiseMerge\\InlineAdded"), INLINEADDED_COLOR)
35 , m_regInlineRemoved(_T("Software\\TortoiseMerge\\InlineRemoved"), INLINEREMOVED_COLOR)
36 , m_regModifiedBackground(_T("Software\\TortoiseMerge\\Colors\\ColorModifiedB"), MODIFIED_COLOR)
40 CSetColorPage::~CSetColorPage()
42 m_bInit = FALSE;
45 void CSetColorPage::SaveData()
47 if (m_bInit)
49 COLORREF cBk;
50 COLORREF cFg;
52 cFg = ::GetSysColor(COLOR_WINDOWTEXT);
54 cBk = m_cBkNormal.GetColor();
55 if (cBk == -1)
56 cBk = m_cBkNormal.GetAutomaticColor();
57 CDiffColors::GetInstance().SetColors(DIFFSTATE_NORMAL, cBk, cFg);
58 CDiffColors::GetInstance().SetColors(DIFFSTATE_UNKNOWN, cBk, cFg);
60 cBk = m_cBkRemoved.GetColor();
61 if (cBk == -1)
62 cBk = m_cBkRemoved.GetAutomaticColor();
63 CDiffColors::GetInstance().SetColors(DIFFSTATE_REMOVED, cBk, cFg);
64 CDiffColors::GetInstance().SetColors(DIFFSTATE_IDENTICALREMOVED, cBk, cFg);
65 CDiffColors::GetInstance().SetColors(DIFFSTATE_THEIRSREMOVED, cBk, cFg);
66 CDiffColors::GetInstance().SetColors(DIFFSTATE_YOURSREMOVED, cBk, cFg);
68 cBk = m_cBkAdded.GetColor();
69 if (cBk == -1)
70 cBk = m_cBkAdded.GetAutomaticColor();
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 = (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();
87 if (cBk == -1)
88 cBk = m_cBkEmpty.GetAutomaticColor();
89 CDiffColors::GetInstance().SetColors(DIFFSTATE_EMPTY, cBk, cFg);
91 COLORREF adjustedcolor;
92 cBk = m_cBkConflict.GetColor();
93 if (cBk == -1)
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();
101 if (cBk == -1)
102 cBk = m_cBkConflictResolved.GetAutomaticColor();
103 CDiffColors::GetInstance().SetColors(DIFFSTATE_CONFLICTRESOLVED, cBk, cFg);
105 cFg = m_cFgWhitespaces.GetColor();
106 if (cFg == -1)
107 cFg = m_cFgWhitespaces.GetAutomaticColor();
108 CRegDWORD regWhitespaceColor(_T("Software\\TortoiseMerge\\Colors\\Whitespace"), GetSysColor(COLOR_GRAYTEXT));
109 regWhitespaceColor = cFg;
113 void CSetColorPage::DoDataExchange(CDataExchange* pDX)
115 CPropertyPage::DoDataExchange(pDX);
116 DDX_Control(pDX, IDC_BKNORMAL, m_cBkNormal);
117 DDX_Control(pDX, IDC_BKREMOVED, m_cBkRemoved);
118 DDX_Control(pDX, IDC_BKADDED, m_cBkAdded);
119 DDX_Control(pDX, IDC_BKWHITESPACES, m_cBkInlineAdded);
120 DDX_Control(pDX, IDC_BKWHITESPACEDIFF, m_cBkInlineRemoved);
121 DDX_Control(pDX, IDC_BKMODIFIED, m_cBkModified);
122 DDX_Control(pDX, IDC_BKEMPTY, m_cBkEmpty);
123 DDX_Control(pDX, IDC_BKCONFLICTED, m_cBkConflict);
124 DDX_Control(pDX, IDC_BKCONFLICTRESOLVED, m_cBkConflictResolved);
125 DDX_Control(pDX, IDC_FGWHITESPACES, m_cFgWhitespaces);
129 BEGIN_MESSAGE_MAP(CSetColorPage, CPropertyPage)
130 ON_BN_CLICKED(IDC_BKNORMAL, &CSetColorPage::OnBnClickedColor)
131 ON_BN_CLICKED(IDC_BKREMOVED, &CSetColorPage::OnBnClickedColor)
132 ON_BN_CLICKED(IDC_BKADDED, &CSetColorPage::OnBnClickedColor)
133 ON_BN_CLICKED(IDC_BKWHITESPACES, &CSetColorPage::OnBnClickedColor)
134 ON_BN_CLICKED(IDC_BKWHITESPACEDIFF, &CSetColorPage::OnBnClickedColor)
135 ON_BN_CLICKED(IDC_BKMODIFIED, &CSetColorPage::OnBnClickedColor)
136 ON_BN_CLICKED(IDC_BKEMPTY, &CSetColorPage::OnBnClickedColor)
137 ON_BN_CLICKED(IDC_BKCONFLICTED, &CSetColorPage::OnBnClickedColor)
138 ON_BN_CLICKED(IDC_BKCONFLICTRESOLVED, &CSetColorPage::OnBnClickedColor)
139 ON_BN_CLICKED(IDC_FGWHITESPACES, &CSetColorPage::OnBnClickedColor)
140 END_MESSAGE_MAP()
143 // CSetColorPage message handlers
145 BOOL CSetColorPage::OnInitDialog()
147 CPropertyPage::OnInitDialog();
149 COLORREF cBk;
150 COLORREF cFg;
152 CString sDefaultText, sCustomText;
153 sDefaultText.LoadString(IDS_COLOURPICKER_DEFAULTTEXT);
154 sCustomText.LoadString(IDS_COLOURPICKER_CUSTOMTEXT);
156 CDiffColors::GetInstance().GetColors(DIFFSTATE_NORMAL, cBk, cFg);
157 m_cBkNormal.SetColor(cBk);
158 m_cBkNormal.EnableAutomaticButton(sDefaultText, DIFFSTATE_NORMAL_DEFAULT_BG);
159 m_cBkNormal.EnableOtherButton(sCustomText);
161 CDiffColors::GetInstance().GetColors(DIFFSTATE_REMOVED, cBk, cFg);
162 m_cBkRemoved.SetColor(cBk);
163 m_cBkRemoved.EnableAutomaticButton(sDefaultText, DIFFSTATE_REMOVED_DEFAULT_BG);
164 m_cBkRemoved.EnableOtherButton(sCustomText);
166 CDiffColors::GetInstance().GetColors(DIFFSTATE_ADDED, cBk, cFg);
167 m_cBkAdded.SetColor(cBk);
168 m_cBkAdded.EnableAutomaticButton(sDefaultText, DIFFSTATE_ADDED_DEFAULT_BG);
169 m_cBkAdded.EnableOtherButton(sCustomText);
171 m_cBkInlineAdded.SetColor((DWORD)m_regInlineAdded);
172 m_cBkInlineAdded.EnableAutomaticButton(sDefaultText, INLINEADDED_COLOR);
173 m_cBkInlineAdded.EnableOtherButton(sCustomText);
175 m_cBkInlineRemoved.SetColor((DWORD)m_regInlineRemoved);
176 m_cBkInlineRemoved.EnableAutomaticButton(sDefaultText, INLINEREMOVED_COLOR);
177 m_cBkInlineRemoved.EnableOtherButton(sCustomText);
179 m_cBkModified.SetColor((DWORD)m_regModifiedBackground);
180 m_cBkModified.EnableAutomaticButton(sDefaultText, MODIFIED_COLOR);
181 m_cBkModified.EnableOtherButton(sCustomText);
183 CDiffColors::GetInstance().GetColors(DIFFSTATE_EMPTY, cBk, cFg);
184 m_cBkEmpty.SetColor(cBk);
185 m_cBkEmpty.EnableAutomaticButton(sDefaultText, DIFFSTATE_EMPTY_DEFAULT_BG);
186 m_cBkEmpty.EnableOtherButton(sCustomText);
188 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTED, cBk, cFg);
189 m_cBkConflict.SetColor(cBk);
190 m_cBkConflict.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTED_DEFAULT_BG);
191 m_cBkConflict.EnableOtherButton(sCustomText);
193 CDiffColors::GetInstance().GetColors(DIFFSTATE_CONFLICTRESOLVED, cBk, cFg);
194 m_cBkConflictResolved.SetColor(cBk);
195 m_cBkConflictResolved.EnableAutomaticButton(sDefaultText, DIFFSTATE_CONFLICTRESOLVED_DEFAULT_BG);
196 m_cBkConflictResolved.EnableOtherButton(sCustomText);
199 CRegDWORD regWhitespaceColor(_T("Software\\TortoiseMerge\\Colors\\Whitespace"), GetSysColor(COLOR_GRAYTEXT));
200 m_cFgWhitespaces.SetColor((COLORREF)(DWORD)regWhitespaceColor);
201 m_cFgWhitespaces.EnableAutomaticButton(sDefaultText, GetSysColor(COLOR_GRAYTEXT));
202 m_cFgWhitespaces.EnableOtherButton(sCustomText);
205 m_bInit = TRUE;
207 return TRUE; // return TRUE unless you set the focus to a control
208 // EXCEPTION: OCX Property Pages should return FALSE
211 BOOL CSetColorPage::OnApply()
213 UpdateData();
214 SaveData();
215 SetModified(FALSE);
216 return CPropertyPage::OnApply();
219 void CSetColorPage::OnBnClickedColor()
221 SetModified();