mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-12 01:07:57 -06:00
Added ability to change color of the labels of the system or modified values
This commit is contained in:
parent
dd10ccfcef
commit
2d4cac0018
6 changed files with 158 additions and 18 deletions
|
@ -2,6 +2,7 @@
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/statbmp.h>
|
#include <wx/statbmp.h>
|
||||||
|
#include <wx/clrpicker.h>
|
||||||
|
|
||||||
#include "GUI.hpp"
|
#include "GUI.hpp"
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
ButtonsDescription::ButtonsDescription(wxWindow* parent, t_icon_descriptions* icon_descriptions) :
|
ButtonsDescription::ButtonsDescription(wxWindow* parent, t_icon_descriptions* icon_descriptions) :
|
||||||
wxDialog(parent, wxID_ANY, "Buttons Description", wxDefaultPosition, wxDefaultSize),
|
wxDialog(parent, wxID_ANY, "Buttons And Text Colors Description", wxDefaultPosition, wxDefaultSize),
|
||||||
m_icon_descriptions(icon_descriptions)
|
m_icon_descriptions(icon_descriptions)
|
||||||
{
|
{
|
||||||
auto grid_sizer = new wxFlexGridSizer(3, 20, 20);
|
auto grid_sizer = new wxFlexGridSizer(3, 20, 20);
|
||||||
|
@ -17,6 +18,7 @@ ButtonsDescription::ButtonsDescription(wxWindow* parent, t_icon_descriptions* ic
|
||||||
auto main_sizer = new wxBoxSizer(wxVERTICAL);
|
auto main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
main_sizer->Add(grid_sizer, 0, wxEXPAND | wxALL, 20);
|
main_sizer->Add(grid_sizer, 0, wxEXPAND | wxALL, 20);
|
||||||
|
|
||||||
|
// Icon description
|
||||||
for (auto pair : *m_icon_descriptions)
|
for (auto pair : *m_icon_descriptions)
|
||||||
{
|
{
|
||||||
auto icon = new wxStaticBitmap(this, wxID_ANY, *pair.first);
|
auto icon = new wxStaticBitmap(this, wxID_ANY, *pair.first);
|
||||||
|
@ -32,8 +34,46 @@ ButtonsDescription::ButtonsDescription(wxWindow* parent, t_icon_descriptions* ic
|
||||||
grid_sizer->Add(description, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
|
grid_sizer->Add(description, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto button = CreateStdDialogButtonSizer(wxOK);
|
// Text color description
|
||||||
main_sizer->Add(button, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10);
|
auto sys_label = new wxStaticText(this, wxID_ANY, _(L("Value is the same as the system value")));
|
||||||
|
sys_label->SetForegroundColour(get_label_clr_sys());
|
||||||
|
auto sys_colour = new wxColourPickerCtrl(this, wxID_ANY, get_label_clr_sys());
|
||||||
|
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(get_label_clr_modified());
|
||||||
|
auto mod_colour = new wxColourPickerCtrl(this, wxID_ANY, get_label_clr_modified());
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
||||||
|
auto buttons = CreateStdDialogButtonSizer(wxOK|wxCANCEL);
|
||||||
|
main_sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10);
|
||||||
|
|
||||||
|
wxButton* btn = static_cast<wxButton*>(FindWindowById(wxID_OK, this));
|
||||||
|
btn->Bind(wxEVT_BUTTON, [sys_colour, mod_colour, this](wxCommandEvent&) {
|
||||||
|
set_label_clr_sys(sys_colour->GetColour());
|
||||||
|
set_label_clr_modified(mod_colour->GetColour());
|
||||||
|
EndModal(wxID_OK);
|
||||||
|
});
|
||||||
|
|
||||||
SetSizer(main_sizer);
|
SetSizer(main_sizer);
|
||||||
main_sizer->SetSizeHints(this);
|
main_sizer->SetSizeHints(this);
|
||||||
|
|
|
@ -164,6 +164,13 @@ public:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool set_label_colour_force(const wxColour *clr) {
|
||||||
|
if (m_Label == nullptr) return false;
|
||||||
|
m_Label->SetForegroundColour(*clr);
|
||||||
|
m_Label->Refresh(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool set_undo_tooltip(const wxString *tip) {
|
bool set_undo_tooltip(const wxString *tip) {
|
||||||
if (m_undo_tooltip != tip) {
|
if (m_undo_tooltip != tip) {
|
||||||
m_undo_tooltip = tip;
|
m_undo_tooltip = tip;
|
||||||
|
@ -194,7 +201,7 @@ protected:
|
||||||
|
|
||||||
wxStaticText* m_Label = nullptr;
|
wxStaticText* m_Label = nullptr;
|
||||||
// Color for Label. The wxColour will be updated only if the new wxColour pointer differs from the currently rendered one.
|
// Color for Label. The wxColour will be updated only if the new wxColour pointer differs from the currently rendered one.
|
||||||
const wxColour* m_label_color;
|
const wxColour* m_label_color = nullptr;
|
||||||
|
|
||||||
// current value
|
// current value
|
||||||
boost::any m_value;
|
boost::any m_value;
|
||||||
|
|
|
@ -202,8 +202,8 @@ static void init_label_colours()
|
||||||
{
|
{
|
||||||
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||||
if (luma >= 128) {
|
if (luma >= 128) {
|
||||||
g_color_label_modified = wxColour(255, 108, 30);//wxColour(253, 88, 0);
|
g_color_label_modified = wxColour(253, 88, 0);
|
||||||
g_color_label_sys = wxColour(19, 100, 44); //wxColour(26, 132, 57);
|
g_color_label_sys = wxColour(26, 132, 57);
|
||||||
} else {
|
} else {
|
||||||
g_color_label_modified = wxColour(253, 111, 40);
|
g_color_label_modified = wxColour(253, 111, 40);
|
||||||
g_color_label_sys = wxColour(115, 220, 103);
|
g_color_label_sys = wxColour(115, 220, 103);
|
||||||
|
@ -211,6 +211,21 @@ static void init_label_colours()
|
||||||
g_color_label_default = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
|
g_color_label_default = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_label_colours_from_appconfig()
|
||||||
|
{
|
||||||
|
if (g_AppConfig->has("label_clr_sys")){
|
||||||
|
auto str = g_AppConfig->get("label_clr_sys");
|
||||||
|
if (str != "")
|
||||||
|
g_color_label_sys = wxColour(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_AppConfig->has("label_clr_modified")){
|
||||||
|
auto str = g_AppConfig->get("label_clr_modified");
|
||||||
|
if (str != "")
|
||||||
|
g_color_label_modified = wxColour(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void set_wxapp(wxApp *app)
|
void set_wxapp(wxApp *app)
|
||||||
{
|
{
|
||||||
g_wxApp = app;
|
g_wxApp = app;
|
||||||
|
@ -512,6 +527,7 @@ void open_preferences_dialog(int event_preferences)
|
||||||
|
|
||||||
void create_preset_tabs(bool no_controller, int event_value_change, int event_presets_changed)
|
void create_preset_tabs(bool no_controller, int event_value_change, int event_presets_changed)
|
||||||
{
|
{
|
||||||
|
update_label_colours_from_appconfig();
|
||||||
add_created_tab(new TabPrint (g_wxTabPanel, no_controller));
|
add_created_tab(new TabPrint (g_wxTabPanel, no_controller));
|
||||||
add_created_tab(new TabFilament (g_wxTabPanel, no_controller));
|
add_created_tab(new TabFilament (g_wxTabPanel, no_controller));
|
||||||
add_created_tab(new TabPrinter (g_wxTabPanel, no_controller));
|
add_created_tab(new TabPrinter (g_wxTabPanel, no_controller));
|
||||||
|
@ -678,15 +694,31 @@ PresetBundle* get_preset_bundle()
|
||||||
return g_PresetBundle;
|
return g_PresetBundle;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxColour& get_modified_label_clr() {
|
const wxColour& get_label_clr_modified() {
|
||||||
return g_color_label_modified;
|
return g_color_label_modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxColour& get_sys_label_clr() {
|
const wxColour& get_label_clr_sys() {
|
||||||
return g_color_label_sys;
|
return g_color_label_sys;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxColour& get_default_label_clr() {
|
void set_label_clr_modified(const wxColour& clr) {
|
||||||
|
g_color_label_modified = clr;
|
||||||
|
auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), clr.Red(), clr.Green(), clr.Blue());
|
||||||
|
std::string str = clr_str.ToStdString();
|
||||||
|
g_AppConfig->set("label_clr_modified", str);
|
||||||
|
g_AppConfig->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_label_clr_sys(const wxColour& clr) {
|
||||||
|
g_color_label_sys = clr;
|
||||||
|
auto clr_str = wxString::Format(wxT("#%02X%02X%02X"), clr.Red(), clr.Green(), clr.Blue());
|
||||||
|
std::string str = clr_str.ToStdString();
|
||||||
|
g_AppConfig->set("label_clr_sys", str);
|
||||||
|
g_AppConfig->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxColour& get_label_clr_default() {
|
||||||
return g_color_label_default;
|
return g_color_label_default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,10 +84,12 @@ AppConfig* get_app_config();
|
||||||
wxApp* get_app();
|
wxApp* get_app();
|
||||||
PresetBundle* get_preset_bundle();
|
PresetBundle* get_preset_bundle();
|
||||||
|
|
||||||
const wxColour& get_modified_label_clr();
|
const wxColour& get_label_clr_modified();
|
||||||
const wxColour& get_sys_label_clr();
|
const wxColour& get_label_clr_sys();
|
||||||
const wxColour& get_default_label_clr();
|
const wxColour& get_label_clr_default();
|
||||||
unsigned get_colour_approx_luma(const wxColour &colour);
|
unsigned get_colour_approx_luma(const wxColour &colour);
|
||||||
|
void set_label_clr_modified(const wxColour& clr);
|
||||||
|
void set_label_clr_sys(const wxColour& clr);
|
||||||
|
|
||||||
extern void add_config_menu(wxMenuBar *menu, int event_preferences_changed, int event_language_change);
|
extern void add_config_menu(wxMenuBar *menu, int event_preferences_changed, int event_language_change);
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,8 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle)
|
||||||
m_question_btn->SetBackgroundColour(color);
|
m_question_btn->SetBackgroundColour(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_question_btn->SetToolTip(_(L("Hover the cursor over buttons to find more information.")));
|
m_question_btn->SetToolTip(_(L("Hover the cursor over buttons to find more information \n"
|
||||||
|
"or click this button.")));
|
||||||
|
|
||||||
// Determine the theme color of OS (dark or light)
|
// Determine the theme color of OS (dark or light)
|
||||||
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||||
|
@ -134,13 +135,20 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle)
|
||||||
m_question_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent)
|
m_question_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent)
|
||||||
{
|
{
|
||||||
auto dlg = new ButtonsDescription(this, &m_icon_descriptions);
|
auto dlg = new ButtonsDescription(this, &m_icon_descriptions);
|
||||||
dlg->ShowModal();
|
if (dlg->ShowModal() == wxID_OK){
|
||||||
|
// Colors for ui "decoration"
|
||||||
|
for (Tab *tab : get_tabs_list()){
|
||||||
|
tab->m_sys_label_clr = get_label_clr_sys();
|
||||||
|
tab->m_modified_label_clr = get_label_clr_modified();
|
||||||
|
tab->update_labels_colour();
|
||||||
|
}
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Colors for ui "decoration"
|
// Colors for ui "decoration"
|
||||||
m_sys_label_clr = get_sys_label_clr();
|
m_sys_label_clr = get_label_clr_sys();
|
||||||
m_modified_label_clr = get_modified_label_clr();
|
m_modified_label_clr = get_label_clr_modified();
|
||||||
m_default_text_clr = get_default_label_clr();
|
m_default_text_clr = get_label_clr_default();
|
||||||
|
|
||||||
m_hsizer = new wxBoxSizer(wxHORIZONTAL);
|
m_hsizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
sizer->Add(m_hsizer, 0, wxBOTTOM, 3);
|
sizer->Add(m_hsizer, 0, wxBOTTOM, 3);
|
||||||
|
@ -278,6 +286,56 @@ PageShp Tab::add_options_page(const wxString& title, const std::string& icon, bo
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tab::update_labels_colour()
|
||||||
|
{
|
||||||
|
Freeze();
|
||||||
|
//update options "decoration"
|
||||||
|
for (const auto opt : m_options_list)
|
||||||
|
{
|
||||||
|
const wxColour *color = &m_sys_label_clr;
|
||||||
|
|
||||||
|
// value isn't equal to system value
|
||||||
|
if ((opt.second & osSystemValue) == 0){
|
||||||
|
// value is equal to last saved
|
||||||
|
if ((opt.second & osInitValue) != 0)
|
||||||
|
color = &m_default_text_clr;
|
||||||
|
// value is modified
|
||||||
|
else
|
||||||
|
color = &m_modified_label_clr;
|
||||||
|
}
|
||||||
|
if (opt.first == "bed_shape" || opt.first == "compatible_printers") {
|
||||||
|
if (m_colored_Label != nullptr) {
|
||||||
|
m_colored_Label->SetForegroundColour(*color);
|
||||||
|
m_colored_Label->Refresh(true);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Field* field = get_field(opt.first);
|
||||||
|
if (field == nullptr) continue;
|
||||||
|
field->set_label_colour_force(color);
|
||||||
|
}
|
||||||
|
Thaw();
|
||||||
|
|
||||||
|
auto cur_item = m_treectrl->GetFirstVisibleItem();
|
||||||
|
while (cur_item){
|
||||||
|
auto title = m_treectrl->GetItemText(cur_item);
|
||||||
|
for (auto page : m_pages)
|
||||||
|
{
|
||||||
|
if (page->title() != title)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const wxColor *clr = !page->m_is_nonsys_values ? &m_sys_label_clr :
|
||||||
|
page->m_is_modified_values ? &m_modified_label_clr :
|
||||||
|
&m_default_text_clr;
|
||||||
|
|
||||||
|
m_treectrl->SetItemTextColour(cur_item, *clr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cur_item = m_treectrl->GetNextVisible(cur_item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update UI according to changes
|
// Update UI according to changes
|
||||||
void Tab::update_changed_ui()
|
void Tab::update_changed_ui()
|
||||||
{
|
{
|
||||||
|
|
|
@ -57,7 +57,7 @@ public:
|
||||||
{
|
{
|
||||||
Create(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
Create(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||||
m_vsizer = new wxBoxSizer(wxVERTICAL);
|
m_vsizer = new wxBoxSizer(wxVERTICAL);
|
||||||
m_item_color = &get_default_label_clr();
|
m_item_color = &get_label_clr_default();
|
||||||
SetSizer(m_vsizer);
|
SetSizer(m_vsizer);
|
||||||
}
|
}
|
||||||
~Page(){}
|
~Page(){}
|
||||||
|
@ -232,6 +232,7 @@ public:
|
||||||
void toggle_show_hide_incompatible();
|
void toggle_show_hide_incompatible();
|
||||||
void update_show_hide_incompatible_button();
|
void update_show_hide_incompatible_button();
|
||||||
void update_ui_from_settings();
|
void update_ui_from_settings();
|
||||||
|
void update_labels_colour();
|
||||||
void update_changed_ui();
|
void update_changed_ui();
|
||||||
void get_sys_and_mod_flags(const std::string& opt_key, bool& sys_page, bool& modified_page);
|
void get_sys_and_mod_flags(const std::string& opt_key, bool& sys_page, bool& modified_page);
|
||||||
void update_changed_tree_ui();
|
void update_changed_tree_ui();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue