From 4547755221e0ccce8527d838a00a8dff3b3023ed Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 6 Mar 2018 09:44:53 +0100 Subject: [PATCH] Update UI for visualize changes: * Added changing of text color and inserted undo_button when some option is modified. * Call wxSetlocale(LC_NUMERIC, "C") when do language changing. --- resources/icons/action_undo.png | Bin 0 -> 616 bytes resources/icons/arrow_undo.png | Bin 0 -> 631 bytes resources/localization/uk/Slic3rPE_.mo | Bin 0 -> 140066 bytes slic3r.pl | 4 +-- xs/src/slic3r/GUI/Field.hpp | 12 +++++++- xs/src/slic3r/GUI/GUI.cpp | 8 +++-- xs/src/slic3r/GUI/GUI.hpp | 4 +-- xs/src/slic3r/GUI/OptionsGroup.cpp | 39 +++++++++++++------------ xs/src/slic3r/GUI/PresetHints.cpp | 7 +++-- xs/src/slic3r/GUI/Tab.cpp | 34 ++++++++++++++++++--- 10 files changed, 74 insertions(+), 34 deletions(-) create mode 100644 resources/icons/action_undo.png create mode 100644 resources/icons/arrow_undo.png create mode 100644 resources/localization/uk/Slic3rPE_.mo diff --git a/resources/icons/action_undo.png b/resources/icons/action_undo.png new file mode 100644 index 0000000000000000000000000000000000000000..866ae9773bf144069986bf74e5524fe7b387ff48 GIT binary patch literal 616 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 - setlocale(LC_NUMERIC, 'C'); + #setlocale(LC_NUMERIC, 'C'); $gui->{mainframe}->load_config_file($_) for @{$opt{load}}; $gui->{mainframe}->load_config($cli_config); my @input_files = @ARGV; diff --git a/xs/src/slic3r/GUI/Field.hpp b/xs/src/slic3r/GUI/Field.hpp index 0d8c237d2..56de333cf 100644 --- a/xs/src/slic3r/GUI/Field.hpp +++ b/xs/src/slic3r/GUI/Field.hpp @@ -18,6 +18,7 @@ //#include "slic3r_gui.hpp" #include "GUI.hpp" +#include "Utils.hpp" namespace Slic3r { namespace GUI { @@ -31,7 +32,15 @@ wxString double_to_string(double const value); class Field { protected: // factory function to defer and enforce creation of derived type. - virtual void PostInitialize() { BUILD(); } + virtual void PostInitialize(){ + m_Undo_btn = new wxButton(m_parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT|wxNO_BORDER); + // use bouth of temporary_icons till don't have "undo_icon" + m_Undo_btn->SetBitmap(wxBitmap(from_u8(__WXMSW__ ? var("action_undo.png") : var("arrow_undo.png")), wxBITMAP_TYPE_PNG)); + auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + m_Undo_btn->SetBackgroundColour(color); + m_Undo_btn->Hide(); + BUILD(); + } /// Finish constructing the Field's wxWidget-related properties, including setting its own sizer, etc. virtual void BUILD() = 0; @@ -73,6 +82,7 @@ public: virtual void disable() = 0; wxStaticText* m_Label = nullptr; + wxButton* m_Undo_btn = nullptr; /// Fires the enable or disable function, based on the input. inline void toggle(bool en) { en ? enable() : disable(); } diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index f9561d7b6..1ccf80365 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -240,6 +240,7 @@ bool select_language(wxArrayString & names, g_wxLocale->Init(identifiers[index]); g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + wxSetlocale(LC_NUMERIC, "C"); return true; } return false; @@ -268,6 +269,7 @@ bool load_language() g_wxLocale->Init(identifiers[i]); g_wxLocale->AddCatalogLookupPathPrefix(wxPathOnly(localization_dir())); g_wxLocale->AddCatalog(g_wxApp->GetAppName()); + wxSetlocale(LC_NUMERIC, "C"); return true; } } @@ -507,7 +509,7 @@ wxApp* get_app(){ wxColour* get_modified_label_clr() { - return new wxColour(254, 189, 101); + return new wxColour(253, 88, 0); } void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string items, bool initial_value) @@ -567,13 +569,13 @@ AppConfig* get_app_config() return g_AppConfig; } -wxString L_str(std::string str) +wxString L_str(const std::string &str) { //! Explicitly specify that the source string is already in UTF-8 encoding return wxGetTranslation(wxString(str.c_str(), wxConvUTF8)); } -wxString from_u8(std::string str) +wxString from_u8(const std::string &str) { return wxString::FromUTF8(str.c_str()); } diff --git a/xs/src/slic3r/GUI/GUI.hpp b/xs/src/slic3r/GUI/GUI.hpp index 7a8039e64..b7e67af92 100644 --- a/xs/src/slic3r/GUI/GUI.hpp +++ b/xs/src/slic3r/GUI/GUI.hpp @@ -119,9 +119,9 @@ void create_combochecklist(wxComboCtrl* comboCtrl, std::string text, std::string int combochecklist_get_flags(wxComboCtrl* comboCtrl); // Return translated std::string as a wxString -wxString L_str(std::string str); +wxString L_str(const std::string &str); // Return wxString from std::string in UTF8 -wxString from_u8(std::string str); +wxString from_u8(const std::string &str); } } diff --git a/xs/src/slic3r/GUI/OptionsGroup.cpp b/xs/src/slic3r/GUI/OptionsGroup.cpp index 14142d207..138496b2e 100644 --- a/xs/src/slic3r/GUI/OptionsGroup.cpp +++ b/xs/src/slic3r/GUI/OptionsGroup.cpp @@ -3,6 +3,7 @@ #include #include +#include "Utils.hpp" namespace Slic3r { namespace GUI { @@ -104,6 +105,7 @@ void OptionsGroup::append_line(const Line& line) { const auto& option = option_set.front(); const auto& field = build_field(option); + sizer->Add(field->m_Undo_btn); if (is_window_field(field)) sizer->Add(field->getWindow(), 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); if (is_sizer_field(field)) @@ -116,9 +118,8 @@ void OptionsGroup::append_line(const Line& line) { // Build a label if we have it wxStaticText* label=nullptr; if (label_width != 0) { - /*auto*/ label = new wxStaticText(parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ":"), + label = new wxStaticText(parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ":"), wxDefaultPosition, wxSize(label_width, -1)); -// label->SetBackgroundColour(*new wxColour(254, 189, 101)); label->SetFont(label_font); label->Wrap(label_width); // avoid a Linux/GTK bug grid_sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL,0); @@ -134,25 +135,24 @@ void OptionsGroup::append_line(const Line& line) { } // if we have a single option with no sidetext just add it directly to the grid sizer - if (option_set.size() == 1 && option_set.front().opt.sidetext.size() == 0 && - option_set.front().side_widget == nullptr && line.get_extra_widgets().size() == 0) { - const auto& option = option_set.front(); - const auto& field = build_field(option, label); -//! std::cerr << "single option, no sidetext.\n"; -//! std::cerr << "field parent is not null?: " << (field->parent != nullptr) << "\n"; + auto sizer = new wxBoxSizer(wxHORIZONTAL); + grid_sizer->Add(sizer, 0, wxEXPAND | wxALL, 0); + if (option_set.size() == 1 && option_set.front().opt.sidetext.size() == 0 && + option_set.front().side_widget == nullptr && line.get_extra_widgets().size() == 0) { + const auto& option = option_set.front(); + const auto& field = build_field(option, label); - if (is_window_field(field)) - grid_sizer->Add(field->getWindow(), 0, (option.opt.full_width ? wxEXPAND : 0) | + sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL); + if (is_window_field(field)) + sizer->Add(field->getWindow(), 0, (option.opt.full_width ? wxEXPAND : 0) | wxBOTTOM | wxTOP | wxALIGN_CENTER_VERTICAL, wxOSX ? 0 : 2); - if (is_sizer_field(field)) - grid_sizer->Add(field->getSizer(), 0, (option.opt.full_width ? wxEXPAND : 0) | wxALIGN_CENTER_VERTICAL, 0); - return; - } + if (is_sizer_field(field)) + sizer->Add(field->getSizer(), 0, (option.opt.full_width ? wxEXPAND : 0) | wxALIGN_CENTER_VERTICAL, 0); + return; + } // if we're here, we have more than one option or a single option with sidetext // so we need a horizontal sizer to arrange these things - auto sizer = new wxBoxSizer(wxHORIZONTAL); - grid_sizer->Add(sizer, 0, wxEXPAND | wxALL, 0); for (auto opt : option_set) { ConfigOptionDef option = opt.opt; // add label if any @@ -162,14 +162,15 @@ void OptionsGroup::append_line(const Line& line) { // wxString str_label = (option.label == "Top" || option.label == "Bottom") ? // wxGETTEXT_IN_CONTEXT("Layers", wxString(option.label.c_str()): // L_str(option.label); - /*auto field_*/label = new wxStaticText(parent(), wxID_ANY, str_label + ":", wxDefaultPosition, wxDefaultSize); - /*field_*/label->SetFont(label_font); - sizer->Add(/*field_*/label, 0, wxALIGN_CENTER_VERTICAL, 0); + label = new wxStaticText(parent(), wxID_ANY, str_label + ":", wxDefaultPosition, wxDefaultSize); + label->SetFont(label_font); + sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL, 0); } // add field const Option& opt_ref = opt; auto& field = build_field(opt_ref, label); + sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL, 0); is_sizer_field(field) ? sizer->Add(field->getSizer(), 0, wxALIGN_CENTER_VERTICAL, 0) : sizer->Add(field->getWindow(), 0, wxALIGN_CENTER_VERTICAL, 0); diff --git a/xs/src/slic3r/GUI/PresetHints.cpp b/xs/src/slic3r/GUI/PresetHints.cpp index 07c8e3b07..d4c929c1c 100644 --- a/xs/src/slic3r/GUI/PresetHints.cpp +++ b/xs/src/slic3r/GUI/PresetHints.cpp @@ -13,10 +13,11 @@ namespace Slic3r { +#define MIN_BUF_LENGTH 4096 std::string PresetHints::cooling_description(const Preset &preset) { std::string out; - char buf[4096]; + char buf[MIN_BUF_LENGTH/*4096*/]; if (preset.config.opt_bool("cooling", 0)) { int slowdown_below_layer_time = preset.config.opt_int("slowdown_below_layer_time", 0); int min_fan_speed = preset.config.opt_int("min_fan_speed", 0); @@ -220,7 +221,7 @@ std::string PresetHints::maximum_volumetric_flow_description(const PresetBundle + _CHB(L(" with a volumetric rate ")); if (limited_by_max_volumetric_speed) max_flow = max_volumetric_speed; - char buf[2048]; + char buf[MIN_BUF_LENGTH/*2048*/]; sprintf(buf, _CHB(L("%3.2f mm³/s")), max_flow); out += buf; sprintf(buf, _CHB(L(" at filament speed %3.2f mm/s.")), max_flow / filament_crossection); @@ -258,7 +259,7 @@ std::string PresetHints::recommended_thin_wall_thickness(const PresetBundle &pre if (num_perimeters > 0) { int num_lines = std::min(num_perimeters * 2, 10); - char buf[256]; + char buf[MIN_BUF_LENGTH/*256*/]; sprintf(buf, _CHB(L("Recommended object thin wall thickness for layer height %.2f and ")), layer_height); out += buf; // Start with the width of two closely spaced diff --git a/xs/src/slic3r/GUI/Tab.cpp b/xs/src/slic3r/GUI/Tab.cpp index 15fc5f006..aa30a655c 100644 --- a/xs/src/slic3r/GUI/Tab.cpp +++ b/xs/src/slic3r/GUI/Tab.cpp @@ -33,19 +33,23 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle) // preset chooser m_presets_choice = new wxBitmapComboBox(panel, wxID_ANY, "", wxDefaultPosition, wxSize(270, -1), 0, 0,wxCB_READONLY); - const wxBitmap* bmp = new wxBitmap(from_u8(Slic3r::var("flag-green-icon.png")), wxBITMAP_TYPE_PNG); + + auto color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); //buttons wxBitmap bmpMenu; bmpMenu = wxBitmap(from_u8(Slic3r::var("disk.png")), wxBITMAP_TYPE_PNG); m_btn_save_preset = new wxBitmapButton(panel, wxID_ANY, bmpMenu, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_btn_save_preset->SetBackgroundColour(color); bmpMenu = wxBitmap(from_u8(Slic3r::var("delete.png")), wxBITMAP_TYPE_PNG); m_btn_delete_preset = new wxBitmapButton(panel, wxID_ANY, bmpMenu, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_btn_delete_preset->SetBackgroundColour(color); m_show_incompatible_presets = false; m_bmp_show_incompatible_presets = new wxBitmap(from_u8(Slic3r::var("flag-red-icon.png")), wxBITMAP_TYPE_PNG); m_bmp_hide_incompatible_presets = new wxBitmap(from_u8(Slic3r::var("flag-green-icon.png")), wxBITMAP_TYPE_PNG); m_btn_hide_incompatible_presets = new wxBitmapButton(panel, wxID_ANY, *m_bmp_hide_incompatible_presets, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_btn_hide_incompatible_presets->SetBackgroundColour(color); m_btn_save_preset->SetToolTip(_(L("Save current ")) + m_title); m_btn_delete_preset->SetToolTip(_(L("Delete this preset"))); @@ -140,12 +144,34 @@ void Tab::update_dirty(){ m_presets->update_dirty_ui(m_presets_choice); on_presets_changed(); auto dirty_options = m_presets->current_dirty_options(); + // Add new dirty options to m_dirty_options for (auto opt_key : dirty_options){ - if (find(m_dirty_options.begin(), m_dirty_options.end(), opt_key) == m_dirty_options.end()){ - get_field(opt_key)->m_Label->SetBackgroundColour(*get_modified_label_clr()); + Field* field = get_field(opt_key/*, opt_index*/); + if (field != nullptr && find(m_dirty_options.begin(), m_dirty_options.end(), opt_key) == m_dirty_options.end()){ + field->m_Label->SetForegroundColour(*get_modified_label_clr()); + field->m_Undo_btn->Show(); + m_dirty_options.push_back(opt_key); } } + + // Delete undirty options from m_dirty_options + size_t cnt = m_dirty_options.size(); + for (auto i = 0; i < /*cnt*/m_dirty_options.size(); ++i) + { + const std::string &opt_key = m_dirty_options[i]; + Field* field = get_field(opt_key/*, opt_index*/); + if (field != nullptr && find(dirty_options.begin(), dirty_options.end(), opt_key) == dirty_options.end()) + { + field->m_Undo_btn->Hide(); + field->m_Label->SetForegroundColour(wxSYS_COLOUR_WINDOWTEXT); + std::vector::iterator itr = find(m_dirty_options.begin(), m_dirty_options.end(), opt_key); + if (itr != m_dirty_options.end()){ + m_dirty_options.erase(itr); + --i; + } + } + } } void Tab::update_tab_ui() @@ -947,7 +973,7 @@ void TabPrinter::build() Line line{ _(L("Bed shape")), "" }; line.widget = [this](wxWindow* parent){ - auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); + auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+"\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT); // btn->SetFont(Slic3r::GUI::small_font); btn->SetBitmap(wxBitmap(from_u8(Slic3r::var("printer_empty.png")), wxBITMAP_TYPE_PNG));