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