1
// TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
4 // Copyright (C) 2011-2013, 2016-2017, 2020 - 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 "TortoiseProc.h"
22 #include "SettingsColors.h"
24 #include "DarkModeHelper.h"
25 #include "Settings\Settings.h"
27 IMPLEMENT_DYNAMIC(CSettingsColors
, ISettingsPropPage
)
28 CSettingsColors::CSettingsColors()
29 : ISettingsPropPage(CSettingsColors::IDD
)
31 m_regRevGraphUseLocalForCur
= CRegDWORD(L
"Software\\TortoiseGit\\TortoiseProc\\Graph\\RevGraphUseLocalForCur");
34 CSettingsColors::~CSettingsColors()
38 void CSettingsColors::DoDataExchange(CDataExchange
* pDX
)
40 ISettingsPropPage::DoDataExchange(pDX
);
41 DDX_Control(pDX
, IDC_CONFLICTCOLOR
, m_cConflict
);
42 DDX_Control(pDX
, IDC_ADDEDCOLOR
, m_cAdded
);
43 DDX_Control(pDX
, IDC_DELETEDCOLOR
, m_cDeleted
);
44 DDX_Control(pDX
, IDC_MERGEDCOLOR
, m_cMerged
);
45 DDX_Control(pDX
, IDC_MODIFIEDCOLOR
, m_cModified
);
46 DDX_Control(pDX
, IDC_NOTENODECOLOR
, m_cNoteNode
);
47 DDX_Control(pDX
, IDC_OTHERREFSCOLOR
, m_cOtherRefs
);
48 DDX_Control(pDX
, IDC_RENAMEDCOLOR
, m_cRenamed
);
49 DDX_Control(pDX
, IDC_REVGRAPHUSELOCALFORCUR
, m_RevGraphUseLocalForCur
);
50 DDX_Control(pDX
, IDC_DARKTHEME
, m_chkUseDarkMode
);
54 BEGIN_MESSAGE_MAP(CSettingsColors
, ISettingsPropPage
)
55 ON_BN_CLICKED(IDC_RESTORE
, OnBnClickedRestore
)
56 ON_BN_CLICKED(IDC_CONFLICTCOLOR
, &CSettingsColors::OnBnClickedColor
)
57 ON_BN_CLICKED(IDC_ADDEDCOLOR
, &CSettingsColors::OnBnClickedColor
)
58 ON_BN_CLICKED(IDC_DELETEDCOLOR
, &CSettingsColors::OnBnClickedColor
)
59 ON_BN_CLICKED(IDC_MERGEDCOLOR
, &CSettingsColors::OnBnClickedColor
)
60 ON_BN_CLICKED(IDC_MODIFIEDCOLOR
, &CSettingsColors::OnBnClickedColor
)
61 ON_BN_CLICKED(IDC_NOTENODECOLOR
, &CSettingsColors::OnBnClickedColor
)
62 ON_BN_CLICKED(IDC_RENAMEDCOLOR
, &CSettingsColors::OnBnClickedColor
)
63 ON_BN_CLICKED(IDC_REVGRAPHUSELOCALFORCUR
, &CSettingsColors::OnBnClickedColor
)
64 ON_BN_CLICKED(IDC_DARKTHEME
, &CSettingsColors::OnBnClickedTheme
)
67 BOOL
CSettingsColors::OnInitDialog()
69 ISettingsPropPage::OnInitDialog();
71 m_chkUseDarkMode
.EnableWindow(CTheme::Instance().IsDarkModeAllowed());
72 m_chkUseDarkMode
.SetCheck(DWORD(m_regUseDarkMode
) != 0 ? BST_CHECKED
: BST_UNCHECKED
);
73 m_tooltips
.AddTool(IDC_DARKTHEME
, IDS_DARKTHEME_TT
);
75 m_cAdded
.SetColor(m_Colors
.GetColor(CColors::Added
));
76 m_cDeleted
.SetColor(m_Colors
.GetColor(CColors::Deleted
));
77 m_cMerged
.SetColor(m_Colors
.GetColor(CColors::Merged
));
78 m_cModified
.SetColor(m_Colors
.GetColor(CColors::Modified
));
79 m_cConflict
.SetColor(m_Colors
.GetColor(CColors::Conflict
));
80 m_cNoteNode
.SetColor(m_Colors
.GetColor(CColors::NoteNode
));
81 m_cOtherRefs
.SetColor(m_Colors
.GetColor(CColors::OtherRef
));
82 m_cRenamed
.SetColor(m_Colors
.GetColor(CColors::Renamed
));
83 DWORD revGraphUseLocalForCur
= m_regRevGraphUseLocalForCur
;
84 m_RevGraphUseLocalForCur
.SetCheck(!!revGraphUseLocalForCur
);
86 CString sDefaultText
, sCustomText
;
87 sDefaultText
.LoadString(IDS_COLOURPICKER_DEFAULTTEXT
);
88 sCustomText
.LoadString(IDS_COLOURPICKER_CUSTOMTEXT
);
89 m_cAdded
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Added
, true));
90 m_cAdded
.EnableOtherButton(sCustomText
);
91 m_cDeleted
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Deleted
, true));
92 m_cDeleted
.EnableOtherButton(sCustomText
);
93 m_cMerged
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Merged
, true));
94 m_cMerged
.EnableOtherButton(sCustomText
);
95 m_cModified
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Modified
, true));
96 m_cModified
.EnableOtherButton(sCustomText
);
97 m_cConflict
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Conflict
, true));
98 m_cConflict
.EnableOtherButton(sCustomText
);
99 m_cNoteNode
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::NoteNode
, true));
100 m_cNoteNode
.EnableOtherButton(sCustomText
);
101 m_cOtherRefs
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::OtherRef
, true));
102 m_cOtherRefs
.EnableOtherButton(sCustomText
);
103 m_cRenamed
.EnableAutomaticButton(sDefaultText
, m_Colors
.GetColor(CColors::Renamed
, true));
104 m_cRenamed
.EnableOtherButton(sCustomText
);
109 void CSettingsColors::OnBnClickedRestore()
111 m_cAdded
.SetColor(m_Colors
.GetColor(CColors::Added
, true));
112 m_cDeleted
.SetColor(m_Colors
.GetColor(CColors::Deleted
, true));
113 m_cMerged
.SetColor(m_Colors
.GetColor(CColors::Merged
, true));
114 m_cModified
.SetColor(m_Colors
.GetColor(CColors::Modified
, true));
115 m_cConflict
.SetColor(m_Colors
.GetColor(CColors::Conflict
, true));
116 m_cNoteNode
.SetColor(m_Colors
.GetColor(CColors::NoteNode
, true));
117 m_cOtherRefs
.SetColor(m_Colors
.GetColor(CColors::OtherRef
, true));
118 m_cRenamed
.SetColor(m_Colors
.GetColor(CColors::Renamed
, true));
119 m_RevGraphUseLocalForCur
.SetCheck(FALSE
);
123 BOOL
CSettingsColors::OnApply()
125 m_Colors
.SetColor(CColors::Added
, m_cAdded
.GetColor() == -1 ? m_cAdded
.GetAutomaticColor() : m_cAdded
.GetColor());
126 m_Colors
.SetColor(CColors::Deleted
, m_cDeleted
.GetColor() == -1 ? m_cDeleted
.GetAutomaticColor() : m_cDeleted
.GetColor());
127 m_Colors
.SetColor(CColors::Merged
, m_cMerged
.GetColor() == -1 ? m_cMerged
.GetAutomaticColor() : m_cMerged
.GetColor());
128 m_Colors
.SetColor(CColors::Modified
, m_cModified
.GetColor() == -1 ? m_cModified
.GetAutomaticColor() : m_cModified
.GetColor());
129 m_Colors
.SetColor(CColors::Conflict
, m_cConflict
.GetColor() == -1 ? m_cConflict
.GetAutomaticColor() : m_cConflict
.GetColor());
130 m_Colors
.SetColor(CColors::NoteNode
, m_cNoteNode
.GetColor() == -1 ? m_cNoteNode
.GetAutomaticColor() : m_cNoteNode
.GetColor());
131 m_Colors
.SetColor(CColors::OtherRef
, m_cOtherRefs
.GetColor() == -1 ? m_cOtherRefs
.GetAutomaticColor() : m_cOtherRefs
.GetColor());
132 m_Colors
.SetColor(CColors::Renamed
, m_cRenamed
.GetColor() == -1 ? m_cRenamed
.GetAutomaticColor() : m_cRenamed
.GetColor());
133 m_Colors
.SetColor(CColors::PropertyChanged
, m_cModified
.GetColor() == -1 ? m_cModified
.GetAutomaticColor() : m_cModified
.GetColor());
134 DWORD revGraphUseLocalForCur
= m_RevGraphUseLocalForCur
.GetCheck();
135 m_regRevGraphUseLocalForCur
= revGraphUseLocalForCur
;
137 m_regUseDarkMode
= ((m_chkUseDarkMode
.GetCheck() == BST_CHECKED
) && CTheme::Instance().IsDarkModeAllowed()) ? 1 : 0;
139 return ISettingsPropPage::OnApply();
142 void CSettingsColors::OnBnClickedColor()
147 void CSettingsColors::OnBnClickedTheme()
149 CTheme::Instance().SetDarkTheme(m_chkUseDarkMode
.GetCheck() == BST_CHECKED
);
150 m_chkUseDarkMode
.SetCheck(CTheme::Instance().IsDarkTheme() ? BST_CHECKED
: BST_UNCHECKED
);
152 auto parentSheet
= dynamic_cast<CSettings
*>(GetParentSheet());
155 DarkModeHelper::Instance().AllowDarkModeForApp(CTheme::Instance().IsDarkTheme());
156 parentSheet
->SetTheme(CTheme::Instance().IsDarkTheme());
157 CTheme::Instance().SetThemeForDialog(parentSheet
->GetSafeHwnd(), CTheme::Instance().IsDarkTheme());