From a3f995ac45e92f0987a5c7714316f1dbc1034bbb Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 18 Aug 2021 15:02:36 +0200 Subject: [PATCH] Add "Revert" buttons for text colors Settings --- src/slic3r/GUI/ButtonsDescription.cpp | 81 ++++++++++++++++----------- src/slic3r/GUI/ButtonsDescription.hpp | 4 ++ src/slic3r/GUI/GUI_App.cpp | 21 ++++--- src/slic3r/GUI/GUI_App.hpp | 2 + src/slic3r/GUI/Preferences.cpp | 31 ++-------- 5 files changed, 70 insertions(+), 69 deletions(-) diff --git a/src/slic3r/GUI/ButtonsDescription.cpp b/src/slic3r/GUI/ButtonsDescription.cpp index cadb7ac24..2f8c2b681 100644 --- a/src/slic3r/GUI/ButtonsDescription.cpp +++ b/src/slic3r/GUI/ButtonsDescription.cpp @@ -12,6 +12,46 @@ namespace Slic3r { namespace GUI { +void ButtonsDescription::FillSizerWithTextColorDescriptions(wxSizer* sizer, wxWindow* parent, wxColourPickerCtrl** sys_colour, wxColourPickerCtrl** mod_colour) +{ + wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(3, 5, 5); + sizer->Add(grid_sizer, 0, wxEXPAND); + + ScalableBitmap bmp_delete = ScalableBitmap(parent, "cross"); + ScalableBitmap bmp_delete_focus = ScalableBitmap(parent, "cross_focus"); + + auto add_color = [grid_sizer, parent](wxColourPickerCtrl** color_picker, const wxColour& color, const wxColour& def_color, wxString label_text) { + // + auto sys_label = new wxStaticText(parent, wxID_ANY, label_text); + sys_label->SetForegroundColour(color); + + *color_picker = new wxColourPickerCtrl(parent, wxID_ANY, color); + wxGetApp().UpdateDarkUI((*color_picker)->GetPickerCtrl(), true); + (*color_picker)->Bind(wxEVT_COLOURPICKER_CHANGED, [color_picker, sys_label](wxCommandEvent&) { + sys_label->SetForegroundColour((*color_picker)->GetColour()); + sys_label->Refresh(); + }); + + auto btn = new ScalableButton(parent, wxID_ANY, "undo"); + btn->SetToolTip(_L("Revert color to default")); + btn->Bind(wxEVT_BUTTON, [sys_label, color_picker, def_color](wxEvent& event) { + (*color_picker)->SetColour(def_color); + sys_label->SetForegroundColour(def_color); + sys_label->Refresh(); + }); + parent->Bind(wxEVT_UPDATE_UI, [color_picker, def_color](wxUpdateUIEvent& evt) { + evt.Enable((*color_picker)->GetColour() != def_color); + }, btn->GetId()); + + grid_sizer->Add(*color_picker, 0, wxALIGN_CENTRE_VERTICAL); + grid_sizer->Add(btn, 0, wxALIGN_CENTRE_VERTICAL); + grid_sizer->Add(sys_label, 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); + }; + + add_color(sys_colour, wxGetApp().get_label_clr_sys(), wxGetApp().get_label_default_clr_system(), _L("Value is the same as the system value")); + add_color(mod_colour, wxGetApp().get_label_clr_modified(),wxGetApp().get_label_default_clr_modified(), _L("Value was changed and is not equal to the system value or the last saved preset")); +} + ButtonsDescription::ButtonsDescription(wxWindow* parent, const std::vector &entries) : wxDialog(parent, wxID_ANY, _(L("Buttons And Text Colors Description")), wxDefaultPosition, wxDefaultSize), m_entries(entries) @@ -35,50 +75,23 @@ ButtonsDescription::ButtonsDescription(wxWindow* parent, const std::vectorSetForegroundColour(wxGetApp().get_label_clr_sys()); - auto sys_colour = new wxColourPickerCtrl(this, wxID_ANY, wxGetApp().get_label_clr_sys()); - wxGetApp().UpdateDarkUI(sys_colour->GetPickerCtrl(), true); - sys_colour->Bind(wxEVT_COLOURPICKER_CHANGED, ([sys_colour, sys_label](wxCommandEvent e) - { - sys_label->SetForegroundColour(sys_colour->GetColour()); - sys_label->Refresh(); - })); - size_t t= 0; - while (t < 3) { - grid_sizer->Add(new wxStaticText(this, wxID_ANY, ""), -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND); - ++t; - } - grid_sizer->Add(0, -1, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(sys_colour, -1, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(sys_label, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND); - - auto mod_label = new wxStaticText(this, wxID_ANY, _(L("Value was changed and is not equal to the system value or the last saved preset"))); - mod_label->SetForegroundColour(wxGetApp().get_label_clr_modified()); - auto mod_colour = new wxColourPickerCtrl(this, wxID_ANY, wxGetApp().get_label_clr_modified()); - wxGetApp().UpdateDarkUI(mod_colour->GetPickerCtrl(), true); - mod_colour->Bind(wxEVT_COLOURPICKER_CHANGED, ([mod_colour, mod_label](wxCommandEvent e) - { - mod_label->SetForegroundColour(mod_colour->GetColour()); - mod_label->Refresh(); - })); - grid_sizer->Add(0, -1, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(mod_colour, -1, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(mod_label, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND); - + wxSizer* sizer = new wxBoxSizer(wxVERTICAL); + FillSizerWithTextColorDescriptions(sizer, this, &sys_colour, &mod_colour); + main_sizer->Add(sizer, 0, wxEXPAND | wxALL, 20); auto buttons = CreateStdDialogButtonSizer(wxOK|wxCANCEL); main_sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10); - wxGetApp().UpdateDlgDarkUI(this, true); - wxButton* btn = static_cast(FindWindowById(wxID_OK, this)); - btn->Bind(wxEVT_BUTTON, [sys_colour, mod_colour, this](wxCommandEvent&) { + btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { wxGetApp().set_label_clr_sys(sys_colour->GetColour()); wxGetApp().set_label_clr_modified(mod_colour->GetColour()); EndModal(wxID_OK); }); + wxGetApp().UpdateDarkUI(btn); + wxGetApp().UpdateDarkUI(static_cast(FindWindowById(wxID_CANCEL, this))); + SetSizer(main_sizer); main_sizer->SetSizeHints(this); } diff --git a/src/slic3r/GUI/ButtonsDescription.hpp b/src/slic3r/GUI/ButtonsDescription.hpp index 5ca74290a..921ce796e 100644 --- a/src/slic3r/GUI/ButtonsDescription.hpp +++ b/src/slic3r/GUI/ButtonsDescription.hpp @@ -11,6 +11,8 @@ namespace GUI { class ButtonsDescription : public wxDialog { + wxColourPickerCtrl* sys_colour{ nullptr }; + wxColourPickerCtrl* mod_colour{ nullptr }; public: struct Entry { Entry(ScalableBitmap *bitmap, const std::string &symbol, const std::string &explanation) : bitmap(bitmap), symbol(symbol), explanation(explanation) {} @@ -23,6 +25,8 @@ public: ButtonsDescription(wxWindow* parent, const std::vector &entries); ~ButtonsDescription() {} + static void FillSizerWithTextColorDescriptions(wxSizer* sizer, wxWindow* parent, wxColourPickerCtrl** sys_colour, wxColourPickerCtrl** mod_colour); + private: std::vector m_entries; }; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ec1dce508..91d16c602 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1030,17 +1030,22 @@ bool GUI_App::dark_mode() #endif } +const wxColour GUI_App::get_label_default_clr_system() +{ + return dark_mode() ? wxColour(115, 220, 103) : wxColour(26, 132, 57); +} + +const wxColour GUI_App::get_label_default_clr_modified() +{ + return dark_mode() ? wxColour(253, 111, 40) : wxColour(252, 77, 1); +} + void GUI_App::init_label_colours() { + m_color_label_modified = get_label_default_clr_modified(); + m_color_label_sys = get_label_default_clr_system(); + bool is_dark_mode = dark_mode(); - if (is_dark_mode) { - m_color_label_modified = wxColour(253, 111, 40); - m_color_label_sys = wxColour(115, 220, 103); - } - else { - m_color_label_modified = wxColour(252, 77, 1); - m_color_label_sys = wxColour(26, 132, 57); - } #ifdef _WIN32 m_color_label_default = is_dark_mode ? wxColour(250, 250, 250): wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index f6699e82b..a140247e0 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -179,6 +179,8 @@ public: static unsigned get_colour_approx_luma(const wxColour &colour); static bool dark_mode(); + const wxColour get_label_default_clr_system(); + const wxColour get_label_default_clr_modified(); void init_label_colours(); void update_label_colours_from_appconfig(); void update_label_colours(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 50a5993a9..53c93b6b0 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -7,6 +7,7 @@ #include "libslic3r/AppConfig.hpp" #include #include "Notebook.hpp" +#include "ButtonsDescription.hpp" namespace Slic3r { namespace GUI { @@ -395,7 +396,8 @@ void PreferencesDialog::build(size_t selected_tab) auto buttons = CreateStdDialogButtonSizer(wxOK | wxCANCEL); this->Bind(wxEVT_BUTTON, &PreferencesDialog::accept, this, wxID_OK); - wxGetApp().UpdateDlgDarkUI(this, true); + for (int id : {wxID_OK, wxID_CANCEL}) + wxGetApp().UpdateDarkUI(static_cast(FindWindowById(id, this))); sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM | wxTOP, 10); @@ -638,32 +640,7 @@ void PreferencesDialog::create_settings_text_color_widget() if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); wxSizer* sizer = new wxStaticBoxSizer(stb, wxVERTICAL); - wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 5, 5); - sizer->Add(grid_sizer, 0, wxEXPAND); - - auto sys_label = new wxStaticText(parent, wxID_ANY, _L("Value is the same as the system value")); - sys_label->SetForegroundColour(wxGetApp().get_label_clr_sys()); - m_sys_colour = new wxColourPickerCtrl(parent, wxID_ANY, wxGetApp().get_label_clr_sys()); - wxGetApp().UpdateDarkUI(m_sys_colour->GetPickerCtrl(), true); - m_sys_colour->Bind(wxEVT_COLOURPICKER_CHANGED, [this, sys_label](wxCommandEvent&) { - sys_label->SetForegroundColour(m_sys_colour->GetColour()); - sys_label->Refresh(); - }); - - grid_sizer->Add(m_sys_colour, 0, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(sys_label, 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); - - auto mod_label = new wxStaticText(parent, wxID_ANY, _L("Value was changed and is not equal to the system value or the last saved preset")); - mod_label->SetForegroundColour(wxGetApp().get_label_clr_modified()); - m_mod_colour = new wxColourPickerCtrl(parent, wxID_ANY, wxGetApp().get_label_clr_modified()); - wxGetApp().UpdateDarkUI(m_mod_colour->GetPickerCtrl(), true); - m_mod_colour->Bind(wxEVT_COLOURPICKER_CHANGED, [this, mod_label](wxCommandEvent&) { - mod_label->SetForegroundColour(m_mod_colour->GetColour()); - mod_label->Refresh(); - }); - - grid_sizer->Add(m_mod_colour, 0, wxALIGN_CENTRE_VERTICAL); - grid_sizer->Add(mod_label, 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); + ButtonsDescription::FillSizerWithTextColorDescriptions(sizer, parent, &m_sys_colour, &m_mod_colour); m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND | wxTOP, em_unit()); }