1 /*
2 * This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3
3 * http://www.gnu.org/licenses/gpl-3.0.html
4 *
5 * $Revision: 11356 $
6 * $Id: occurrenceshighlightingconfigurationpanel.cpp 11356 2018-03-31 21:50:19Z fuscated $
7 * $HeadURL: svn://svn.code.sf.net/p/codeblocks/code/branches/release-20.xx/src/plugins/occurrenceshighlighting/occurrenceshighlightingconfigurationpanel.cpp $
8 */
9
10 #include <sdk.h>
11 #include "occurrenceshighlightingconfigurationpanel.h"
12
13 #ifndef CB_PRECOMP
14 #include <algorithm>
15 #include <wx/xrc/xmlres.h>
16 #include <wx/button.h>
17 #include <wx/checkbox.h>
18 #include <wx/colordlg.h>
19 #include <wx/stattext.h>
20 #include <wx/spinctrl.h>
21
22 #include <configmanager.h>
23 #include <editormanager.h>
24 #include <logmanager.h>
25 #endif
26
27 #include "cbcolourmanager.h"
28
BEGIN_EVENT_TABLE(OccurrencesHighlightingConfigurationPanel,cbConfigurationPanel)29 BEGIN_EVENT_TABLE(OccurrencesHighlightingConfigurationPanel, cbConfigurationPanel)
30 EVT_BUTTON(XRCID("btnHighlightColour"), OccurrencesHighlightingConfigurationPanel::OnChooseColour)
31 EVT_BUTTON(XRCID("btnHighlightTextColour"), OccurrencesHighlightingConfigurationPanel::OnChooseColour)
32 EVT_BUTTON(XRCID("btnHighlightPermanentlyColour"), OccurrencesHighlightingConfigurationPanel::OnChooseColour)
33 EVT_BUTTON(XRCID("btnHighlightPermanentlyTextColour"), OccurrencesHighlightingConfigurationPanel::OnChooseColour)
34 EVT_CHECKBOX(XRCID("chkHighlightOccurrences"), OccurrencesHighlightingConfigurationPanel::OnCheck)
35 EVT_CHECKBOX(XRCID("chkHighlightOccurrencesOverrideText"), OccurrencesHighlightingConfigurationPanel::OnCheck)
36 EVT_CHECKBOX(XRCID("chkHighlightPermanentlyOccurrencesOverrideText"), OccurrencesHighlightingConfigurationPanel::OnCheck)
37 END_EVENT_TABLE()
38
39 OccurrencesHighlightingConfigurationPanel::OccurrencesHighlightingConfigurationPanel(wxWindow* parent)
40 {
41 ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("editor"));
42 if (!cfg)
43 return;
44
45 if (!wxXmlResource::Get()->LoadObject(this, parent, _T("OccurrencesHighlightingConfigurationPanel"), _T("wxPanel")))
46 {
47 Manager::Get()->GetLogManager()->DebugLog(_T("Could not load occurrences highlighting config panel!"));
48 return;
49 }
50
51 ColourManager *colourManager = Manager::Get()->GetColourManager();
52
53 // Highlight Occurrence
54 bool highlightEnabled = cfg->ReadBool(_T("/highlight_occurrence/enabled"), true);
55 XRCCTRL(*this, "chkHighlightOccurrences", wxCheckBox)->SetValue(highlightEnabled);
56 XRCCTRL(*this, "chkHighlightOccurrencesCaseSensitive", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/case_sensitive"), true));
57 XRCCTRL(*this, "chkHighlightOccurrencesWholeWord", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/whole_word"), true));
58 XRCCTRL(*this, "chkHighlightOccurrencesOverrideText", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/override_text"), false));
59
60 wxColour highlightColour = colourManager->GetColour(wxT("editor_highlight_occurrence"));
61 XRCCTRL(*this, "btnHighlightColour", wxButton)->SetBackgroundColour(highlightColour);
62
63 XRCCTRL(*this, "spnHighlightAlpha", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/highlight_occurrence/alpha"), 100));
64 XRCCTRL(*this, "spnHighlightBorderAlpha", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/highlight_occurrence/border_alpha"), 255));
65
66 highlightColour = colourManager->GetColour(wxT("editor_highlight_occurrence_text"));
67 XRCCTRL(*this, "btnHighlightTextColour", wxButton)->SetBackgroundColour(highlightColour);
68
69 wxSpinCtrl *minLength = XRCCTRL(*this, "spnHighlightLength", wxSpinCtrl);
70 minLength->SetValue(cfg->ReadInt(_T("/highlight_occurrence/min_length"), 3));
71 minLength->Enable(highlightEnabled);
72
73 XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyCaseSensitive", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/case_sensitive_permanently"), true));
74 //XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyCaseSensitive", wxCheckBox)->Enable(true);
75 XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyWholeWord", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/whole_word_permanently"), true));
76 XRCCTRL(*this, "chkHighlightPermanentlyOccurrencesOverrideText", wxCheckBox)->SetValue(cfg->ReadBool(_T("/highlight_occurrence/override_text_permanently"), false));
77
78 //XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyWholeWord", wxCheckBox)->Enable(true);
79 highlightColour = colourManager->GetColour(wxT("editor_highlight_occurrence_permanently"));
80 XRCCTRL(*this, "btnHighlightPermanentlyColour", wxButton)->SetBackgroundColour(highlightColour);
81 XRCCTRL(*this, "spnHighlightPermanentlyAlpha", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/highlight_occurrence/alpha_permanently"), 100));
82 XRCCTRL(*this, "spnHighlightPermanentlyBorderAlpha", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/highlight_occurrence/border_alpha_permanently"), 255));
83
84 highlightColour = colourManager->GetColour(wxT("editor_highlight_occurrence_permanently_text"));
85 XRCCTRL(*this, "btnHighlightPermanentlyTextColour", wxButton)->SetBackgroundColour(highlightColour);
86 //XRCCTRL(*this, "stHighlightPermanentlyColour", wxStaticText)->Enable(permanentlyHighlightEnabled);
87 //XRCCTRL(*this, "btnHighlightPermanentlyColour", wxButton)->Enable(permanentlyHighlightEnabled);
88
89 UpdateUI();
90 }
91
~OccurrencesHighlightingConfigurationPanel()92 OccurrencesHighlightingConfigurationPanel::~OccurrencesHighlightingConfigurationPanel()
93 {
94 }
95
OnApply()96 void OccurrencesHighlightingConfigurationPanel::OnApply()
97 {
98 // save any changes
99 ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("editor"));
100 ColourManager *colourManager = Manager::Get()->GetColourManager();
101
102 cfg->Write(_T("/highlight_occurrence/enabled"), XRCCTRL(*this, "chkHighlightOccurrences", wxCheckBox)->GetValue());
103 cfg->Write(_T("/highlight_occurrence/case_sensitive"), XRCCTRL(*this, "chkHighlightOccurrencesCaseSensitive", wxCheckBox)->GetValue());
104 cfg->Write(_T("/highlight_occurrence/whole_word"), XRCCTRL(*this, "chkHighlightOccurrencesWholeWord", wxCheckBox)->GetValue());
105 cfg->Write(_T("/highlight_occurrence/override_text"), XRCCTRL(*this, "chkHighlightOccurrencesOverrideText", wxCheckBox)->GetValue());
106 wxColour highlightColour = XRCCTRL(*this, "btnHighlightColour", wxButton)->GetBackgroundColour();
107 colourManager->SetColour(wxT("editor_highlight_occurrence"), highlightColour);
108 cfg->Write(_T("/highlight_occurrence/min_length"), XRCCTRL(*this, "spnHighlightLength", wxSpinCtrl)->GetValue());
109
110 cfg->Write(_T("/highlight_occurrence/alpha"), XRCCTRL(*this, "spnHighlightAlpha", wxSpinCtrl)->GetValue());
111 cfg->Write(_T("/highlight_occurrence/border_alpha"), XRCCTRL(*this, "spnHighlightBorderAlpha", wxSpinCtrl)->GetValue());
112
113 highlightColour = XRCCTRL(*this, "btnHighlightTextColour", wxButton)->GetBackgroundColour();
114 colourManager->SetColour(wxT("editor_highlight_occurrence_text"), highlightColour);
115
116 cfg->Write(_T("/highlight_occurrence/case_sensitive_permanently"), XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyCaseSensitive", wxCheckBox)->GetValue());
117 cfg->Write(_T("/highlight_occurrence/whole_word_permanently"), XRCCTRL(*this, "chkHighlightOccurrencesPermanentlyWholeWord", wxCheckBox)->GetValue());
118 cfg->Write(_T("/highlight_occurrence/override_text_permanently"), XRCCTRL(*this, "chkHighlightPermanentlyOccurrencesOverrideText", wxCheckBox)->GetValue());
119 highlightColour = XRCCTRL(*this, "btnHighlightPermanentlyColour", wxButton)->GetBackgroundColour();
120 colourManager->SetColour(wxT("editor_highlight_occurrence_permanently"), highlightColour);
121
122 cfg->Write(_T("/highlight_occurrence/alpha_permanently"), XRCCTRL(*this, "spnHighlightPermanentlyAlpha", wxSpinCtrl)->GetValue());
123 cfg->Write(_T("/highlight_occurrence/border_alpha_permanently"), XRCCTRL(*this, "spnHighlightPermanentlyBorderAlpha", wxSpinCtrl)->GetValue());
124
125 highlightColour = XRCCTRL(*this, "btnHighlightPermanentlyTextColour", wxButton)->GetBackgroundColour();
126 colourManager->SetColour(wxT("editor_highlight_occurrence_permanently_text"), highlightColour);
127 }
128
OnCancel()129 void OccurrencesHighlightingConfigurationPanel::OnCancel()
130 {
131 }
132
GetTitle() const133 wxString OccurrencesHighlightingConfigurationPanel::GetTitle() const
134 {
135 return _("Occurrences Highlighting");
136 }
137
GetBitmapBaseName() const138 wxString OccurrencesHighlightingConfigurationPanel::GetBitmapBaseName() const
139 {
140 return _T("occurrenceshighlighting");
141 }
142
OnChooseColour(wxCommandEvent & event)143 void OccurrencesHighlightingConfigurationPanel::OnChooseColour(wxCommandEvent& event)
144 {
145 wxColourData data;
146 wxWindow* sender = FindWindowById(event.GetId());
147 data.SetColour(sender->GetBackgroundColour());
148
149 wxColourDialog dlg(this, &data);
150 PlaceWindow(&dlg);
151 if (dlg.ShowModal() == wxID_OK)
152 {
153 wxColour colour = dlg.GetColourData().GetColour();
154 sender->SetBackgroundColour(colour);
155 sender->SetLabel(wxEmptyString);
156 }
157 }
158
OnCheck(cb_unused wxCommandEvent & event)159 void OccurrencesHighlightingConfigurationPanel::OnCheck(cb_unused wxCommandEvent& event)
160 {
161 UpdateUI();
162 }
163
UpdateUI()164 void OccurrencesHighlightingConfigurationPanel::UpdateUI()
165 {
166 const bool enabled = XRCCTRL(*this, "chkHighlightOccurrences", wxCheckBox)->GetValue();
167 wxCheckBox *overrideTextColour = XRCCTRL(*this, "chkHighlightOccurrencesOverrideText", wxCheckBox);
168 const bool overrideText = overrideTextColour->GetValue();
169
170 XRCCTRL(*this, "chkHighlightOccurrencesCaseSensitive", wxCheckBox)->Enable(enabled);
171 XRCCTRL(*this, "chkHighlightOccurrencesWholeWord", wxCheckBox)->Enable(enabled);
172 overrideTextColour->Enable(enabled);
173 XRCCTRL(*this, "stHighlightColour", wxStaticText)->Enable(enabled);
174 XRCCTRL(*this, "btnHighlightColour", wxButton)->Enable(enabled);
175 XRCCTRL(*this, "stHighlightAlpha", wxStaticText)->Enable(enabled);
176 XRCCTRL(*this, "spnHighlightAlpha", wxSpinCtrl)->Enable(enabled);
177 XRCCTRL(*this, "stHighlightBorderAlpha", wxStaticText)->Enable(enabled);
178 XRCCTRL(*this, "spnHighlightBorderAlpha", wxSpinCtrl)->Enable(enabled);
179 XRCCTRL(*this, "stHighlightColourText", wxStaticText)->Enable(enabled && overrideText);
180 XRCCTRL(*this, "btnHighlightTextColour", wxButton)->Enable(enabled && overrideText);
181 XRCCTRL(*this, "spnHighlightLength", wxSpinCtrl)->Enable(enabled);
182 XRCCTRL(*this, "stHighlightLength", wxStaticText)->Enable(enabled);
183
184 wxCheckBox *permOverrideTextColour = XRCCTRL(*this, "chkHighlightPermanentlyOccurrencesOverrideText", wxCheckBox);
185 const bool permOverrideText = permOverrideTextColour->GetValue();
186
187 XRCCTRL(*this, "stHighlightPermanentlyColourText", wxStaticText)->Enable(permOverrideText);
188 XRCCTRL(*this, "btnHighlightPermanentlyTextColour", wxButton)->Enable(permOverrideText);
189 }
190
191