diff --git a/resources/images/inputbox_x.svg b/resources/images/inputbox_x.svg new file mode 100644 index 000000000..e3553fc30 --- /dev/null +++ b/resources/images/inputbox_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/inputbox_y.svg b/resources/images/inputbox_y.svg new file mode 100644 index 000000000..6ff78e242 --- /dev/null +++ b/resources/images/inputbox_y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 772d13f88..d861b7dde 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -816,6 +816,7 @@ void PrintConfigDef::init_fff_params() def = this->add("bottom_shell_layers", coInt); def->label = L("Bottom shell layers"); def->category = L("Strength"); + def->sidetext = L("layers"); // ORCA add side text def->tooltip = L("This is the number of solid layers of bottom shell, including the bottom " "surface layer. When the thickness calculated by this value is thinner " "than bottom shell thickness, the bottom shell layers will be increased"); @@ -1619,6 +1620,7 @@ void PrintConfigDef::init_fff_params() "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " "points. This information can usually be obtained from your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed."); + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(-99999, -99999))); @@ -1630,6 +1632,7 @@ void PrintConfigDef::init_fff_params() "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max " "points. This information can usually be obtained from your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed."); + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(99999, 99999))); @@ -1638,12 +1641,14 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("This option sets the preferred distance between probe points (grid size) for the X and Y directions, with the " "default being 50mm for both X and Y."); def->min = 0; + def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionPoint(Vec2d(50, 50))); def = this->add("adaptive_bed_mesh_margin", coFloat); def->label = L("Mesh margin"); def->tooltip = L("This option determines the additional distance by which the adaptive bed mesh area should be expanded in the XY directions."); + def->sidetext = L("mm"); // ORCA add side text def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -1982,6 +1987,7 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("temperature_vitrification", coInts); def->label = L("Softening temperature"); def->tooltip = L("The material softens at this temperature, so when the bed temperature is equal to or greater than it, it's highly recommended to open the front door and/or remove the upper glass to avoid cloggings."); + def->sidetext = L("°C"); // ORCA add side text def->mode = comSimple; def->set_default_value(new ConfigOptionInts{ 100 }); @@ -2344,6 +2350,7 @@ def = this->add("filament_loading_speed", coFloats); def->tooltip = L("The first few layers are printed slower than normal. " "The speed is gradually increased in a linear fashion over the specified number of layers."); def->category = L("Speed"); + def->sidetext = L("layers"); // ORCA add side text def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(0)); @@ -2363,6 +2370,7 @@ def = this->add("filament_loading_speed", coFloats); "to maximum at layer \"full_fan_speed_layer\". " "\"full_fan_speed_layer\" will be ignored if lower than \"close_fan_the_first_x_layers\", in which case " "the fan will be running at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."); + def->sidetext = L("layer"); // ORCA add side text def->min = 0; def->max = 1000; def->mode = comAdvanced; @@ -4637,6 +4645,7 @@ def = this->add("filament_loading_speed", coFloats); def = this->add("top_shell_layers", coInt); def->label = L("Top shell layers"); def->category = L("Strength"); + def->sidetext = L("layers"); // ORCA add side text def->tooltip = L("This is the number of solid layers of top shell, including the top " "surface layer. When the thickness calculated by this value is thinner " "than top shell thickness, the top shell layers will be increased"); @@ -5013,7 +5022,7 @@ def = this->add("filament_loading_speed", coFloats); "NOTE: Bottom and top surfaces will not be affected by this value to prevent visual gaps on the ouside of the model. " "Adjust 'One wall threshold' in the Advanced settings below to adjust the sensitivity of what is considered a top-surface. " "'One wall threshold' is only visibile if this setting is set above the default value of 0.5, or if single-wall top surfaces is enabled."); - def->sidetext = ""; + def->sidetext = L("mm"); // ORCA add side text def->mode = comAdvanced; def->min = 0.0; def->max = 25.0; diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index b3672381d..2d229a3e3 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -45,6 +45,7 @@ void BedShape::append_option_line(ConfigOptionsGroupShp optgroup, Parameter para def.set_default_value(new ConfigOptionPoints{ Vec2d(200, 200) }); def.min = 0; def.max = 214700; + def.width = 7; def.label = get_option_label(param); def.tooltip = L("Size in X and Y of the rectangular plate."); key = "rect_size"; @@ -54,6 +55,7 @@ void BedShape::append_option_line(ConfigOptionsGroupShp optgroup, Parameter para def.set_default_value(new ConfigOptionPoints{ Vec2d(0, 0) }); def.min = -107350; def.max = 107350; + def.width = 7; def.label = get_option_label(param); def.tooltip = L("Distance of the 0,0 G-code coordinate from the front left corner of the rectangle."); key = "rect_origin"; diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 1af6a76cc..adfb9c229 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -24,7 +24,7 @@ #define FILAMENT_LIST_SIZE wxSize(FromDIP(560), FromDIP(100)) #define FILAMENT_OPTION_SIZE wxSize(FromDIP(-1), FromDIP(30)) #define PRESET_TEMPLATE_SIZE wxSize(FromDIP(-1), FromDIP(100)) -#define PRINTER_SPACE_SIZE wxSize(FromDIP(80), FromDIP(24)) +#define PRINTER_SPACE_SIZE wxSize(FromDIP(100), FromDIP(24)) // ORCA Match size with other components #define ORIGIN_TEXT_SIZE wxSize(FromDIP(10), FromDIP(24)) #define PRINTER_PRESET_VENDOR_SIZE wxSize(FromDIP(150), FromDIP(24)) #define PRINTER_PRESET_MODEL_SIZE wxSize(FromDIP(280), FromDIP(24)) @@ -1793,26 +1793,20 @@ wxBoxSizer *CreatePrinterPresetDialog::create_bed_size_item(wxWindow *parent) horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_length_text = new wxStaticText(parent, wxID_ANY, _L("X"), wxDefaultPosition, wxDefaultSize); - static_length_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_length_text->SetSize(ORIGIN_TEXT_SIZE); - length_sizer->Add(static_length_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_size_x_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_size_x_input = new TextInput(parent, "200", "mm", "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_size_x_input->GetTextCtrl()->SetValidator(validator); - length_input_sizer->Add(m_bed_size_x_input, 0, wxEXPAND | wxALL, 0); + length_input_sizer->Add(m_bed_size_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_width_text = new wxStaticText(parent, wxID_ANY, _L("Y"), wxDefaultPosition, wxDefaultSize); - static_width_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_width_text->SetSize(ORIGIN_TEXT_SIZE); - width_sizer->Add(static_width_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_size_y_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_size_y_input = new TextInput(parent, "200", "mm", "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_size_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_size_y_input, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -1832,26 +1826,20 @@ wxBoxSizer *CreatePrinterPresetDialog::create_origin_item(wxWindow *parent) horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_origin_x_text = new wxStaticText(parent, wxID_ANY, _L("X"), wxDefaultPosition, wxDefaultSize); - static_origin_x_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_origin_x_text->SetSize(ORIGIN_TEXT_SIZE); - length_sizer->Add(static_origin_x_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_origin_x_input = new TextInput(parent, "0", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_origin_x_input = new TextInput(parent, "0", "mm", "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_origin_x_input->GetTextCtrl()->SetValidator(validator); - length_input_sizer->Add(m_bed_origin_x_input, 0, wxEXPAND | wxALL, 0); + length_input_sizer->Add(m_bed_origin_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); // Align with other horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText *static_origin_y_text = new wxStaticText(parent, wxID_ANY, _L("Y"), wxDefaultPosition, wxDefaultSize); - static_origin_y_text->SetMinSize(ORIGIN_TEXT_SIZE); - static_origin_y_text->SetSize(ORIGIN_TEXT_SIZE); - width_sizer->Add(static_origin_y_text, 0, wxEXPAND | wxALL, 0); + // ORCA use icon on input box to match style with other Point fields horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); - m_bed_origin_y_input = new TextInput(parent, "0", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_bed_origin_y_input = new TextInput(parent, "0", "mm", "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_origin_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_origin_y_input, 0, wxEXPAND | wxALL, 0); horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); @@ -1944,7 +1932,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_max_print_height_item(wxWindow *pa horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); wxBoxSizer *hight_input_sizer = new wxBoxSizer(wxVERTICAL); - m_print_height_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_CENTRE | wxTE_PROCESS_ENTER); + m_print_height_input = new TextInput(parent, "200", "mm", wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); // Use same alignment with all other input boxes wxTextValidator validator(wxFILTER_DIGITS); m_print_height_input->GetTextCtrl()->SetValidator(validator); hight_input_sizer->Add(m_print_height_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index fc663c628..4979215dc 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1737,8 +1737,10 @@ void ColourPicker::save_colors_to_config() { void PointCtrl::BUILD() { auto temp = new wxBoxSizer(wxHORIZONTAL); + m_combine_side_text = true; // Prefer using side text in input box - const wxSize field_size(4 * m_em_unit, -1); + //const wxSize field_size(4 * m_em_unit, -1); + const wxSize field_size((m_opt.width >= 0 ? m_opt.width : def_width_wider()) * m_em_unit, -1); // ORCA match width with other components Slic3r::Vec2d default_pt; if(m_opt.type == coPoints) default_pt = m_opt.get_default_value()->values.at(0); @@ -1750,35 +1752,38 @@ void PointCtrl::BUILD() wxString Y = val - int(val) == 0 ? wxString::Format(_T("%i"), int(val)) : wxNumberFormatter::ToString(val, 2, wxNumberFormatter::Style_None); long style = wxTE_PROCESS_ENTER; -#ifdef _WIN32 - style |= wxBORDER_SIMPLE; -#endif - x_textctrl = new ::TextCtrl(m_parent, wxID_ANY, X, wxDefaultPosition, field_size, style); - y_textctrl = new ::TextCtrl(m_parent, wxID_ANY, Y, wxDefaultPosition, field_size, style); +//#ifdef _WIN32 +// style |= wxBORDER_SIMPLE; +//#endif + // ORCA add icons to point control boxes instead of using text for X / Y + x_input = new ::TextInput(m_parent, X, m_opt.sidetext, "inputbox_x", wxDefaultPosition, field_size, style); + y_input = new ::TextInput(m_parent, Y, m_opt.sidetext, "inputbox_y", wxDefaultPosition, field_size, style); + x_textctrl = x_input->GetTextCtrl(); + y_textctrl = y_input->GetTextCtrl(); if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double)x_textctrl->GetSize().GetHeight() / m_em_unit; - x_textctrl->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - x_textctrl->SetBackgroundStyle(wxBG_STYLE_PAINT); - y_textctrl->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - y_textctrl->SetBackgroundStyle(wxBG_STYLE_PAINT); + x_input->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + x_input->SetBackgroundStyle(wxBG_STYLE_PAINT); + y_input->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + y_input->SetBackgroundStyle(wxBG_STYLE_PAINT); - auto static_text_x = new wxStaticText(m_parent, wxID_ANY, "x : "); - auto static_text_y = new wxStaticText(m_parent, wxID_ANY, " y : "); - static_text_x->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - static_text_x->SetBackgroundStyle(wxBG_STYLE_PAINT); - static_text_y->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - static_text_y->SetBackgroundStyle(wxBG_STYLE_PAINT); + //auto static_text_x = new wxStaticText(m_parent, wxID_ANY, "x : "); + //auto static_text_y = new wxStaticText(m_parent, wxID_ANY, " y : "); + //static_text_x->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + //static_text_x->SetBackgroundStyle(wxBG_STYLE_PAINT); + //static_text_y->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + //static_text_y->SetBackgroundStyle(wxBG_STYLE_PAINT); - wxGetApp().UpdateDarkUI(x_textctrl); - wxGetApp().UpdateDarkUI(y_textctrl); - wxGetApp().UpdateDarkUI(static_text_x, false, true); - wxGetApp().UpdateDarkUI(static_text_y, false, true); + wxGetApp().UpdateDarkUI(x_input); + wxGetApp().UpdateDarkUI(y_input); + //wxGetApp().UpdateDarkUI(static_text_x, false, true); + //wxGetApp().UpdateDarkUI(static_text_y, false, true); - temp->Add(static_text_x, 0, wxALIGN_CENTER_VERTICAL, 0); - temp->Add(x_textctrl); - temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); - temp->Add(y_textctrl); + //temp->Add(static_text_x, 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(x_input); + //temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); + temp->Add(y_input); x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(x_textctrl); }), x_textctrl->GetId()); y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(y_textctrl); }), y_textctrl->GetId()); @@ -1797,16 +1802,17 @@ void PointCtrl::msw_rescale() { Field::msw_rescale(); - wxSize field_size(4 * m_em_unit, -1); + //wxSize field_size(4 * m_em_unit, -1); + wxSize field_size((m_opt.width >= 0 ? m_opt.width : def_width_wider()) * m_em_unit, -1); // ORCA match width with other components if (parent_is_custom_ctrl) { field_size.SetHeight(lround(opt_height * m_em_unit)); - x_textctrl->SetSize(field_size); - y_textctrl->SetSize(field_size); + x_input->SetSize(field_size); + y_input->SetSize(field_size); } else { - x_textctrl->SetMinSize(field_size); - y_textctrl->SetMinSize(field_size); + x_input->SetMinSize(field_size); + y_input->SetMinSize(field_size); } } diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 79e09ba50..ef1b6024b 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -23,6 +23,7 @@ #include "GUI.hpp" #include "wxExtensions.hpp" #include "Widgets/SpinInput.hpp" +#include "Widgets/TextInput.hpp" #ifdef __WXMSW__ #define wxMSW true @@ -502,6 +503,8 @@ public: wxSizer* sizer{ nullptr }; wxTextCtrl* x_textctrl{ nullptr }; wxTextCtrl* y_textctrl{ nullptr }; + TextInput* x_input{nullptr}; + TextInput* y_input{nullptr}; void BUILD() override; bool value_was_changed(wxTextCtrl* win); diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index ce9db292a..38471ddbe 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -57,7 +57,8 @@ ComboBox::ComboBox(wxWindow *parent, TextInput::SetBackgroundColor(StateColor(std::make_pair(0xF0F0F1, (int) StateColor::Disabled), std::make_pair(0xE5F0EE, (int) StateColor::Focused), // ORCA updated background color for focused item std::make_pair(*wxWHITE, (int) StateColor::Normal))); - TextInput::SetLabelColor(StateColor(std::make_pair(0x909090, (int) StateColor::Disabled), + TextInput::SetLabelColor(StateColor( + std::make_pair(wxColour("#ACACAC"), (int) StateColor::Disabled), // ORCA: Use same color for disabled text on combo boxes std::make_pair(0x262E30, (int) StateColor::Normal))); } if (auto scroll = GetScrollParent(this)) @@ -85,7 +86,7 @@ void ComboBox::SetSelection(int n) drop.SetSelection(n); SetLabel(drop.GetValue()); if (drop.selection >= 0 && drop.iconSize.y > 0) - SetIcon(icons[drop.selection]); + SetIcon(icons[drop.selection].IsNull() ? create_scaled_bitmap("drop_down", nullptr, 16): icons[drop.selection]); // ORCA fix combo boxes without arrows } void ComboBox::SelectAndNotify(int n) { SetSelection(n); @@ -108,7 +109,7 @@ void ComboBox::SetValue(const wxString &value) drop.SetValue(value); SetLabel(value); if (drop.selection >= 0 && drop.iconSize.y > 0) - SetIcon(icons[drop.selection]); + SetIcon(icons[drop.selection].IsNull() ? create_scaled_bitmap("drop_down", nullptr, 16): icons[drop.selection]); // ORCA fix combo boxes without arrows } void ComboBox::SetLabel(const wxString &value)