diff --git a/resources/images/bed_plate_cool_smooth.png b/resources/images/bed_plate_cool_smooth.png new file mode 100644 index 0000000000..625ebd6325 Binary files /dev/null and b/resources/images/bed_plate_cool_smooth.png differ diff --git a/resources/images/bed_plate_cool_supertack.png b/resources/images/bed_plate_cool_supertack.png new file mode 100644 index 0000000000..1c13570943 Binary files /dev/null and b/resources/images/bed_plate_cool_supertack.png differ diff --git a/resources/images/bed_plate_cool_textured.png b/resources/images/bed_plate_cool_textured.png new file mode 100644 index 0000000000..0514ec1f50 Binary files /dev/null and b/resources/images/bed_plate_cool_textured.png differ diff --git a/resources/images/bed_plate_engineering.png b/resources/images/bed_plate_engineering.png new file mode 100644 index 0000000000..62a3ad9093 Binary files /dev/null and b/resources/images/bed_plate_engineering.png differ diff --git a/resources/images/bed_plate_high_temp_smooth.png b/resources/images/bed_plate_high_temp_smooth.png new file mode 100644 index 0000000000..d7f80aee92 Binary files /dev/null and b/resources/images/bed_plate_high_temp_smooth.png differ diff --git a/resources/images/bed_plate_pei.png b/resources/images/bed_plate_pei.png new file mode 100644 index 0000000000..c942905304 Binary files /dev/null and b/resources/images/bed_plate_pei.png differ diff --git a/resources/images/big_bed_plate_cool_smooth.png b/resources/images/big_bed_plate_cool_smooth.png new file mode 100644 index 0000000000..66ea212bc3 Binary files /dev/null and b/resources/images/big_bed_plate_cool_smooth.png differ diff --git a/resources/images/big_bed_plate_cool_supertack.png b/resources/images/big_bed_plate_cool_supertack.png new file mode 100644 index 0000000000..bbd607e7a8 Binary files /dev/null and b/resources/images/big_bed_plate_cool_supertack.png differ diff --git a/resources/images/big_bed_plate_cool_textured.png b/resources/images/big_bed_plate_cool_textured.png new file mode 100644 index 0000000000..5aee15fc99 Binary files /dev/null and b/resources/images/big_bed_plate_cool_textured.png differ diff --git a/resources/images/big_bed_plate_engineering.png b/resources/images/big_bed_plate_engineering.png new file mode 100644 index 0000000000..2cd6e7fe08 Binary files /dev/null and b/resources/images/big_bed_plate_engineering.png differ diff --git a/resources/images/big_bed_plate_high_temp_smooth.png b/resources/images/big_bed_plate_high_temp_smooth.png new file mode 100644 index 0000000000..7b3bc41569 Binary files /dev/null and b/resources/images/big_bed_plate_high_temp_smooth.png differ diff --git a/resources/images/big_bed_plate_pei.png b/resources/images/big_bed_plate_pei.png new file mode 100644 index 0000000000..d76c16f13c Binary files /dev/null and b/resources/images/big_bed_plate_pei.png differ diff --git a/resources/images/printer_sync_not.svg b/resources/images/printer_sync_not.svg new file mode 100644 index 0000000000..225b67a5fc --- /dev/null +++ b/resources/images/printer_sync_not.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/printer_sync_ok.svg b/resources/images/printer_sync_ok.svg new file mode 100644 index 0000000000..4312185601 --- /dev/null +++ b/resources/images/printer_sync_ok.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/slic3r/GUI/ImageDPIFrame.cpp b/src/slic3r/GUI/ImageDPIFrame.cpp index b72a50f603..a893293553 100644 --- a/src/slic3r/GUI/ImageDPIFrame.cpp +++ b/src/slic3r/GUI/ImageDPIFrame.cpp @@ -20,23 +20,32 @@ namespace Slic3r { namespace GUI { ImageDPIFrame::ImageDPIFrame() : DPIFrame(static_cast(wxGetApp().mainframe), wxID_ANY, "", wxDefaultPosition, wxDefaultSize, !wxCAPTION | !wxCLOSE_BOX | wxBORDER_NONE) { - m_image_px = 280; + m_image_px = 240; int width = 270; //SetTransparent(0); SetMinSize(wxSize(FromDIP(width), -1)); SetMaxSize(wxSize(FromDIP(width), -1)); - SetBackgroundColour(wxColour(242, 242, 242, 255)); + SetBackgroundColour(wxColour(255, 255, 255, 255)); #ifdef __APPLE__ SetWindowStyleFlag(GetWindowStyleFlag() | wxSTAY_ON_TOP); #endif - + m_sizer_main = new wxBoxSizer(wxVERTICAL); + + m_title = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + m_title->SetFont(Label::Head_14); + m_title->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); + m_title->SetMaxSize(wxSize(FromDIP(width), -1)); + auto image_sizer = new wxBoxSizer(wxVERTICAL); auto imgsize = FromDIP(width); - m_bitmap = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("printer_preview_C13", this, m_image_px), wxDefaultPosition, wxSize(imgsize, imgsize * 0.94), 0); - image_sizer->Add(m_bitmap, 0, wxALIGN_CENTER | wxALL, FromDIP(0)); + m_bitmap = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("printer_preview_C13", this, m_image_px), wxDefaultPosition, FromDIP(wxSize(m_image_px, m_image_px)), 0); + image_sizer->Add(m_bitmap, 0, wxALIGN_CENTER | wxALL, FromDIP(10)); + m_sizer_main->Add(m_title, 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, FromDIP(10)); m_sizer_main->Add(image_sizer, FromDIP(0), wxALIGN_CENTER, FromDIP(0)); + wxGetApp().UpdateDarkUI(this); // ORCA fix white bg on dark mode + Bind(wxEVT_CLOSE_WINDOW, [this](auto &e) { on_hide(); }); @@ -60,12 +69,24 @@ void ImageDPIFrame::set_bitmap(const wxBitmap &bit_map) { m_bitmap->SetBitmap(bit_map); } +void ImageDPIFrame::set_title(const wxString& title) { + m_title->Show(!title.empty()); + if(!title.empty()) + m_title->SetLabel(title); + Layout(); +} + void ImageDPIFrame::on_dpi_changed(const wxRect &suggested_rect) { // m_image->Rescale(); //m_bitmap->Rescale(); } +void ImageDPIFrame::sys_color_changed() +{ + wxGetApp().UpdateDarkUI(this); +} + void ImageDPIFrame::init_timer() { m_refresh_timer = new wxTimer(); @@ -76,7 +97,7 @@ void ImageDPIFrame::init_timer() void ImageDPIFrame::on_timer(wxTimerEvent &event) { if (!IsShown()) {//after 1s to show Frame - if (m_timer_count >= 50) { + if (m_timer_count >= 20) { // ORCA show frame faster to maatch time with tooltips Show(); Raise(); } @@ -123,6 +144,7 @@ void ImageDPIFrame::on_hide() wxGetApp().mainframe->Raise(); } } + set_title(""); // reset title on hide } } // namespace GUI diff --git a/src/slic3r/GUI/ImageDPIFrame.hpp b/src/slic3r/GUI/ImageDPIFrame.hpp index 02ebb33bf8..817ef6be18 100644 --- a/src/slic3r/GUI/ImageDPIFrame.hpp +++ b/src/slic3r/GUI/ImageDPIFrame.hpp @@ -12,12 +12,14 @@ public: ImageDPIFrame(); ~ImageDPIFrame() override; void on_dpi_changed(const wxRect &suggested_rect) override; + void sys_color_changed(); void on_show(); void on_hide(); bool Show(bool show = true) override; void set_bitmap(const wxBitmap& bit_map); int get_image_px() { return m_image_px; } + void set_title(const wxString& title); private: void init_timer(); @@ -27,6 +29,8 @@ private: wxStaticBitmap *m_bitmap = nullptr; wxBoxSizer *m_sizer_main{nullptr}; int m_image_px; + wxString m_title_str; + wxStaticText* m_title; wxTimer * m_refresh_timer{nullptr}; float m_timer_count = 0; }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 76b42641c1..937c0e6fdf 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -212,8 +212,8 @@ wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); wxDEFINE_EVENT(EVT_NOTICE_CHILDE_SIZE_CHANGED, SimpleEvent); wxDEFINE_EVENT(EVT_NOTICE_FULL_SCREEN_CHANGED, IntEvent); -#define PRINTER_THUMBNAIL_SIZE (wxSize(FromDIP(48), FromDIP(48))) -#define PRINTER_PANEL_SIZE (wxSize(FromDIP(96), FromDIP(98))) +#define PRINTER_THUMBNAIL_SIZE (wxSize(40, 40)) // ORCA +#define PRINTER_PANEL_SIZE ( wxSize(70, 60)) // ORCA #define BTN_SYNC_SIZE (wxSize(FromDIP(96), FromDIP(98))) static string get_diameter_string(float diameter) @@ -245,12 +245,12 @@ void Plater::show_illegal_characters_warning(wxWindow* parent) } static std::map bed_type_thumbnails = { - {BedType::btPC, "bed_cool"}, - {BedType::btEP, "bed_engineering"}, - {BedType::btPEI, "bed_high_templ"}, - {BedType::btPTE, "bed_pei"}, - {BedType::btPCT, "bed_pei"}, // TODO: Orca hack - {BedType::btSuperTack, "bed_cool_supertack"} + {BedType::btPC, "bed_plate_cool_smooth" }, //"bed_cool"}, + {BedType::btEP, "bed_plate_engineering" }, //"bed_engineering"}, + {BedType::btPEI, "bed_plate_high_temp_smooth"}, //"bed_high_templ"}, + {BedType::btPTE, "bed_plate_pei" }, //"bed_pei"}, + {BedType::btPCT, "bed_plate_cool_textured" }, //"bed_pei"}, // TODO: Orca hack + {BedType::btSuperTack, "bed_plate_cool_supertack" } //"bed_cool_supertack"} }; // print_model_id @@ -425,12 +425,21 @@ struct Sidebar::priv // Printer wxSizer * vsizer_printer = nullptr; + wxBoxSizer * extruder_dual_sizer = nullptr; + wxBoxSizer * extruder_single_sizer = nullptr; // Printer - preset StaticBox * panel_printer_preset = nullptr; wxStaticBitmap * image_printer = nullptr; PlaterPresetComboBox *combo_printer = nullptr; ScalableButton * btn_edit_printer = nullptr; ScalableButton * btn_connect_printer = nullptr; + + // Nozzle diameter + StaticBox * panel_nozzle_dia = nullptr; + Label * label_nozzle_title= nullptr; + ComboBox * combo_nozzle_dia = nullptr; + Label * label_nozzle_type = nullptr; + // Printer - bed StaticBox * panel_printer_bed = nullptr; wxStaticBitmap *image_printer_bed = nullptr; @@ -438,7 +447,7 @@ struct Sidebar::priv ImageDPIFrame *big_bed_image_popup = nullptr; // Printer - sync - Button *btn_sync_printer; + //Button *btn_sync_printer; std::shared_ptr counter_sync_printer = std::make_shared(); wxTimer * timer_sync_printer = new wxTimer(); // Printer - ams @@ -484,6 +493,8 @@ struct Sidebar::priv // BBS printer config StaticBox* m_panel_printer_title = nullptr; ScalableButton* m_printer_icon = nullptr; + ScalableButton* m_printer_connect = nullptr; + ScalableButton* m_printer_bbl_sync = nullptr; ScalableButton* m_printer_setting = nullptr; wxStaticText * m_text_printer_settings = nullptr; wxPanel* m_panel_printer_content = nullptr; @@ -525,22 +536,15 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) // Printer - preset if (auto sizer = static_cast(panel_printer_preset->GetSizer()); sizer == nullptr /*|| isBBL != (sizer->GetOrientation() == wxVERTICAL)*/) { - wxBoxSizer *hsizer_printer_btn = new wxBoxSizer(wxHORIZONTAL); - hsizer_printer_btn->AddStretchSpacer(1); - hsizer_printer_btn->Add(btn_edit_printer, 0); - hsizer_printer_btn->Add(btn_connect_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4)); - combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | wxALIGN_CENTER_HORIZONTAL); + //if (isBBL) { - wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); - hsizer->AddStretchSpacer(1); - hsizer->Add(image_printer, 0, wxEXPAND | wxTOP, FromDIP(8)); - hsizer->Add(hsizer_printer_btn, 1, wxEXPAND, 0); - hsizer->AddSpacer(FromDIP(6)); - vsizer->AddSpacer(FromDIP(4)); - vsizer->Add(hsizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(8)); - vsizer->Add(combo_printer, 0, wxEXPAND | wxALL, FromDIP(4)); - panel_printer_preset->SetSizer(vsizer); + hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + hsizer->Add(combo_printer, 1, wxEXPAND | wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + hsizer->AddSpacer(FromDIP(2)); + hsizer->Add(btn_edit_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); + //hsizer->Add(btn_connect_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); + panel_printer_preset->SetSizer(hsizer); //} else { // wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); // hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_CENTER, FromDIP(4)); @@ -554,31 +558,45 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) if (vsizer_printer->GetItemCount() == 0) { wxBoxSizer *hsizer_printer = new wxBoxSizer(wxHORIZONTAL); hsizer_printer->Add(panel_printer_preset, 1, wxEXPAND, 0); - hsizer_printer->Add(panel_printer_bed, 0, wxLEFT | wxEXPAND, FromDIP(4)); - hsizer_printer->Add(btn_sync_printer, 0, wxLEFT | wxEXPAND, FromDIP(4)); - vsizer_printer->Add(hsizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, FromDIP(4)); - vsizer_printer->AddSpacer(FromDIP(4)); + hsizer_printer->Add(panel_nozzle_dia , 0, wxLEFT, FromDIP(4)); + hsizer_printer->Add(panel_printer_bed, 0, wxLEFT, FromDIP(4)); + //hsizer_printer->Add(btn_sync_printer , 0, wxLEFT, FromDIP(4)); + vsizer_printer->AddSpacer(FromDIP(8)); + vsizer_printer->Add(hsizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); + vsizer_printer->AddSpacer(FromDIP(8)); // Printer - extruder // double - auto hsizer_extruder = new wxBoxSizer(wxHORIZONTAL); - hsizer_extruder->Add(left_extruder->sizer, 1, wxEXPAND, 0); - hsizer_extruder->AddSpacer(FromDIP(4)); - hsizer_extruder->Add(right_extruder->sizer, 1, wxEXPAND, 0); + extruder_dual_sizer = new wxBoxSizer(wxHORIZONTAL); + extruder_dual_sizer->Add(left_extruder->sizer, 1, wxEXPAND, 0); + extruder_dual_sizer->AddSpacer(FromDIP(4)); + extruder_dual_sizer->Add(right_extruder->sizer, 1, wxEXPAND, 0); // single - vsizer_printer->Add(hsizer_extruder, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(4)); - vsizer_printer->Add(single_extruder->sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(4)); + extruder_single_sizer = single_extruder->sizer; + wxBoxSizer * extruder_sizer = new wxBoxSizer(wxVERTICAL); + extruder_sizer->Add(extruder_dual_sizer , 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); + extruder_sizer->Add(extruder_single_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); - vsizer_printer->AddSpacer(FromDIP(4)); + vsizer_printer->Add(extruder_sizer, 1, wxEXPAND | wxBOTTOM, FromDIP(8)); } - btn_connect_printer->Show(!isBBL); - btn_sync_printer->Show(isBBL); - panel_printer_bed->Show(true); // Orca: always show bed type selector - vsizer_printer->GetItem(2)->GetSizer()->GetItem(1)->Show(isDual); - vsizer_printer->GetItem(2)->Show(isDual); // Orca: always show diameter selection - vsizer_printer->GetItem(3)->Show(!isDual); + //btn_connect_printer->Show(!isBBL); + m_printer_connect->Show(!isBBL); + //btn_sync_printer->Show(isBBL); + m_printer_bbl_sync->Show(isBBL); + + // ORCA show plate type combo box only when its supported + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + auto cfg = preset_bundle.printers.get_edited_preset().config; + panel_printer_bed->Show(isBBL || cfg.opt_bool("support_multi_bed_types")); + + extruder_dual_sizer->Show(isDual); + + // NEEDFIX requires AMS check or any type of ??? + // Single nozzle & non ams + panel_nozzle_dia->Show(!isDual); + extruder_single_sizer->Show(false); } void Sidebar::priv::flush_printer_sync(bool restart) @@ -587,7 +605,8 @@ void Sidebar::priv::flush_printer_sync(bool restart) *counter_sync_printer = 6; timer_sync_printer->Start(500); } - btn_sync_printer->SetBackgroundColorNormal((*counter_sync_printer & 1) ? "#F8F8F8" :"#009688"); + //btn_sync_printer->SetBackgroundColorNormal((*counter_sync_printer & 1) ? "#F8F8F8" :"#009688"); + m_printer_bbl_sync->SetBitmap_((*counter_sync_printer & 1) ? "printer_sync_not" : "printer_sync_ok"); if (--*counter_sync_printer <= 0) timer_sync_printer->Stop(); } @@ -996,13 +1015,13 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title // Nozzle wxStaticText *label_diameter = new wxStaticText(this, wxID_ANY, _L("Diameter")); label_diameter->SetFont(Label::Body_14); - label_diameter->SetForegroundColour("#262E30"); + label_diameter->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); if (index >= 0) label_diameter->SetMinSize({FromDIP(80), -1}); auto combo_diameter = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); this->combo_diameter = combo_diameter; wxStaticText *label_flow = new wxStaticText(this, wxID_ANY, _L("Flow")); label_flow->SetFont(Label::Body_14); - label_flow->SetForegroundColour("#262E30"); + label_flow->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); if (index >= 0) label_flow->SetMinSize({FromDIP(80), -1}); auto combo_flow = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); combo_flow->GetDropDown().SetUseContentWidth(true); @@ -1017,7 +1036,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title // AMS wxStaticText *label_ams = new wxStaticText(this, wxID_ANY, _L("AMS")); label_ams->SetFont(Label::Body_14); - label_ams->SetForegroundColour("#262E30"); + label_ams->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); //label_ams->SetMinSize({FromDIP(70), -1}); if (index >= 0) { btn_edit = new ScalableButton(this, wxID_ANY, "dot"); @@ -1046,7 +1065,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title // AMS not installed message ams_not_installed_msg = new wxStaticText(this, wxID_ANY, _L("Not installed")); ams_not_installed_msg->SetFont(Label::Body_14); - ams_not_installed_msg->SetForegroundColour("#262E30"); + ams_not_installed_msg->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); // AMS group for (size_t i = 0; i < 4; ++i) { @@ -1365,8 +1384,9 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj) right_extruder->sync_ams(nullptr, {}, {}); single_extruder->ShowBadge(false); single_extruder->sync_ams(nullptr, {}, {}); - btn_sync_printer->SetBorderColor(not_synced_colour); - btn_sync_printer->SetIcon("printer_sync"); + //btn_sync_printer->SetBorderColor(not_synced_colour); + //btn_sync_printer->SetIcon("printer_sync"); + m_printer_bbl_sync->SetBitmap_("printer_sync_not"); }; if (!obj || !obj->is_info_ready()) { @@ -1518,12 +1538,14 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj) StateColor synced_colour(std::pair(wxColour("#CECECE"), StateColor::Normal)); bool all_extruder_synced = std::all_of(extruder_synced.begin(), extruder_synced.end(), [](bool value) { return value; }); if (printer_synced && all_extruder_synced) { - btn_sync_printer->SetBorderColor(synced_colour); - btn_sync_printer->SetIcon("ams_nozzle_sync"); + // btn_sync_printer->SetBorderColor(synced_colour); + // btn_sync_printer->SetIcon("ams_nozzle_sync"); + m_printer_bbl_sync->SetBitmap_("printer_sync_ok"); } else { - btn_sync_printer->SetBorderColor(not_synced_colour); - btn_sync_printer->SetIcon("printer_sync"); + // btn_sync_printer->SetBorderColor(not_synced_colour); + // btn_sync_printer->SetIcon("printer_sync"); + m_printer_bbl_sync->SetBitmap_("printer_sync_not"); } } @@ -1531,7 +1553,8 @@ void Sidebar::update_sync_ams_btn_enable(wxUpdateUIEvent &e) { if (m_last_slice_state != p->plater->is_background_process_slicing()) { m_last_slice_state = p->plater->is_background_process_slicing(); - btn_sync->Enable(!m_last_slice_state); + //btn_sync->Enable(!m_last_slice_state); + p->m_printer_bbl_sync->Enable(!m_last_slice_state); ams_btn->Enable(!m_last_slice_state); Refresh(); } @@ -1597,6 +1620,20 @@ Sidebar::Sidebar(Plater *parent) //wizard_t->run(ConfigWizard::RR_USER, ConfigWizard::SP_CUSTOM); }); + // ORCA use connect button on titlebar + p->m_printer_connect = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "monitor_signal_strong"); + p->m_printer_connect->SetToolTip(_L("Connection")); + p->m_printer_connect->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + PhysicalPrinterDialog dlg(this->GetParent()); + dlg.ShowModal(); + }); + + // ORCA use sync button on titlebar + p->m_printer_bbl_sync = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer_sync_not"); + p->m_printer_bbl_sync->SetToolTip(_L("Synchronize nozzle information and the number of AMS")); + p->m_printer_bbl_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + deal_btn_sync(); + }); p->m_printer_setting = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "settings"); p->m_printer_setting->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { @@ -1611,6 +1648,8 @@ Sidebar::Sidebar(Plater *parent) h_sizer_title->AddSpacer(FromDIP(SidebarProps::ElementSpacing())); h_sizer_title->Add(p->m_text_printer_settings, 0, wxALIGN_CENTER); h_sizer_title->AddStretchSpacer(); + h_sizer_title->Add(p->m_printer_connect , 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); // used larger margin to prevent accidental clicks + h_sizer_title->Add(p->m_printer_bbl_sync, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); // used larger margin to prevent accidental clicks h_sizer_title->Add(p->m_printer_setting, 0, wxALIGN_CENTER); h_sizer_title->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); h_sizer_title->SetMinSize(-1, 3 * em); @@ -1641,22 +1680,33 @@ Sidebar::Sidebar(Plater *parent) /*************************** 2. add printer content ************************/ + p->m_panel_printer_content = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); p->m_panel_printer_content->SetBackgroundColour(wxColour(255, 255, 255)); StateColor panel_bd_col(std::pair(wxColour("#009688"), StateColor::Pressed), std::pair(wxColour("#009688"), StateColor::Hovered), - std::pair(wxColour("#EEEEEE"), StateColor::Normal)); + std::pair(wxColour("#DBDBDB"), StateColor::Normal)); p->panel_printer_preset = new StaticBox(p->m_panel_printer_content); - p->panel_printer_preset->SetCornerRadius(8); + p->panel_printer_preset->SetCornerRadius(FromDIP(8)); p->panel_printer_preset->SetBorderColor(panel_bd_col); - p->panel_printer_preset->SetMinSize(PRINTER_PANEL_SIZE); + p->panel_printer_preset->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); p->panel_printer_preset->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { p->combo_printer->wxEvtHandler::ProcessEvent(evt); }); + // ORCA Hide Cover automatically if there is not enough space + p->panel_printer_preset->Bind(wxEVT_SIZE, [this](auto & e) { + bool is_narrow = e.GetSize().GetWidth() < p->scrolled->FromDIP(235); + if(is_narrow && p->image_printer->IsShown()) + p->image_printer->Hide(); + else if(!is_narrow && !p->image_printer->IsShown()) + p->image_printer->Show(); + e.Skip(); + }); - ScalableButton *edit_btn = new ScalableButton(p->panel_printer_preset, wxID_ANY, "dot"); + ScalableButton *edit_btn = new ScalableButton(p->panel_printer_preset, wxID_ANY, "edit"); edit_btn->SetToolTip(_L("Click to edit preset")); + edit_btn->Hide(); // hide for first launch edit_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent) { p->editing_filament = -1; @@ -1664,17 +1714,33 @@ Sidebar::Sidebar(Plater *parent) p->editing_filament = 0; }); p->btn_edit_printer = edit_btn; - ScalableBitmap bitmap_printer(p->panel_printer_preset, "printer_placeholder", 48); - p->image_printer = new wxStaticBitmap(p->panel_printer_preset, wxID_ANY, bitmap_printer.bmp(), wxDefaultPosition, PRINTER_THUMBNAIL_SIZE, 0); + ScalableBitmap bitmap_printer(p->panel_printer_preset, "printer_placeholder", PRINTER_THUMBNAIL_SIZE.GetHeight()); + p->image_printer = new wxStaticBitmap(p->panel_printer_preset, wxID_ANY, bitmap_printer.bmp(), wxDefaultPosition, FromDIP(PRINTER_THUMBNAIL_SIZE), 0); p->image_printer->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { p->combo_printer->wxEvtHandler::ProcessEvent(evt); }); PlaterPresetComboBox *combo_printer = new PlaterPresetComboBox(p->panel_printer_preset, Preset::TYPE_PRINTER); - combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | wxALIGN_CENTER_HORIZONTAL); + //combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | wxALIGN_CENTER_HORIZONTAL); combo_printer->SetBorderWidth(0); p->combo_printer = combo_printer; + // ORCA paint whole combobox on focus + auto printer_focus_bg = [this, panel_bd_col](bool focused){ + auto bg_color = StateColor::darkModeColorFor(wxColour(focused ? "#E5F0EE" : "#FFFFFF")); + auto panel = p->panel_printer_preset; + panel->SetBackgroundColor(bg_color); + if(focused) + panel->SetBorderColor(wxColour("#009688")); + else + panel->SetBorderColor(panel_bd_col); + p->btn_edit_printer->SetBackgroundColour(bg_color); + p->image_printer->SetBackgroundColour(bg_color); + p->combo_printer->SetBackgroundColour(bg_color); // paints margins instead combo background + }; + combo_printer->Bind(wxEVT_SET_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(true ); e.Skip();}); + combo_printer->Bind(wxEVT_KILL_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(false); e.Skip();}); + /* ORCA This part moved to titlebar p->btn_connect_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "monitor_signal_strong"); p->btn_connect_printer->SetBackgroundColour(wxColour(255, 255, 255)); p->btn_connect_printer->SetToolTip(_L("Connection")); @@ -1683,30 +1749,107 @@ Sidebar::Sidebar(Plater *parent) PhysicalPrinterDialog dlg(this->GetParent()); dlg.ShowModal(); }); - + */ { - auto hovered = std::make_shared(); - for (wxWindow *w : std::initializer_list{p->panel_printer_preset, edit_btn, p->image_printer, combo_printer}) { - w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, edit_btn](wxMouseEvent &evt) { *hovered = w; edit_btn->SetBitmap_("edit"); }); - w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, edit_btn](wxMouseEvent &evt) { if (*hovered == w) { edit_btn->SetBitmap_("dot"); *hovered = nullptr; } }); + // ORCA use Show/Hide to gain text area instead using blank icon + for (wxWindow *w : std::initializer_list{p->panel_printer_preset, p->btn_edit_printer, p->image_printer, p->combo_printer}) { + w->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent &e) { + if(!p->combo_printer->HasFocus()) + p->panel_printer_preset->SetBorderColor(wxColour("#009688")); + if(!p->btn_edit_printer->IsShown()){ + p->btn_edit_printer->Show(); + p->panel_printer_preset->Layout(); + } + e.Skip(); + }); + w->Bind(wxEVT_LEAVE_WINDOW, [this, panel_bd_col](wxMouseEvent &e) { + wxWindow* next_w = wxFindWindowAtPoint(wxGetMousePosition()); + if (!next_w || (next_w != p->panel_printer_preset && next_w != p->btn_edit_printer && next_w != p->image_printer && next_w != p->combo_printer)){ + if(!p->combo_printer->HasFocus()) + p->panel_printer_preset->SetBorderColor(panel_bd_col); + p->btn_edit_printer->Hide(); + p->panel_printer_preset->Layout(); + } + e.Skip(); + }); } } + // ORCA unified Nozzle diameter selection + p->panel_nozzle_dia = new StaticBox(p->m_panel_printer_content); + p->panel_nozzle_dia->SetCornerRadius(FromDIP(8)); + p->panel_nozzle_dia->SetBorderColor(panel_bd_col); + p->panel_nozzle_dia->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); + p->panel_nozzle_dia->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { + p->combo_nozzle_dia->wxEvtHandler::ProcessEvent(evt); + }); + + p->label_nozzle_title = new Label(p->panel_nozzle_dia, _L("Nozzle")); + p->label_nozzle_title->SetFont(Label::Body_10); + p->label_nozzle_title->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { + p->combo_nozzle_dia->wxEvtHandler::ProcessEvent(evt); + }); + + p->combo_nozzle_dia = new ComboBox(p->panel_nozzle_dia, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); + p->combo_nozzle_dia->SetBorderWidth(0); + p->combo_nozzle_dia->GetDropDown().SetUseContentWidth(true); + p->combo_nozzle_dia->SetMinSize(FromDIP(wxSize(PRINTER_PANEL_SIZE.GetWidth() - 4, 26))); // requires a static value in here + p->combo_nozzle_dia->SetMaxSize(FromDIP(wxSize(PRINTER_PANEL_SIZE.GetWidth() - 4, 26))); // using -1 with wxEXPAND has issues + p->combo_nozzle_dia->Bind(wxEVT_COMBOBOX, [this](auto &e) { + auto evt_combo = (*p->single_extruder).combo_diameter; + evt_combo->SetSelection(e.GetSelection()); + wxCommandEvent evt(wxEVT_COMBOBOX, evt_combo->GetId()); + evt.SetEventObject(evt_combo); + evt.SetInt(e.GetSelection()); + wxPostEvent(evt_combo, evt); + e.Skip(); + }); + // ORCA paint whole combobox on focus + auto nozzle_focus_bg = [this, panel_bd_col](bool focused){ + auto bg_color = StateColor::darkModeColorFor(wxColour(focused ? "#E5F0EE" : "#FFFFFF")); + auto panel = p->panel_nozzle_dia; + panel->SetBackgroundColor(bg_color); + if(focused) + panel->SetBorderColor(wxColour("#009688")); + else + panel->SetBorderColor(panel_bd_col); + p->label_nozzle_title->SetBackgroundColour(bg_color); + p->label_nozzle_type->SetBackgroundColour(bg_color); + p->combo_nozzle_dia->SetBackgroundColour(bg_color); // paints margins instead combo background + }; + p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); + p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); + + p->label_nozzle_type = new Label(p->panel_nozzle_dia, "Brass", wxST_ELLIPSIZE_END | wxALIGN_CENTRE_HORIZONTAL); + p->label_nozzle_type->SetFont(Label::Body_10); + p->label_nozzle_type->SetMinSize(FromDIP(wxSize(56, -1))); + p->label_nozzle_type->SetMaxSize(FromDIP(wxSize(56, -1))); + p->label_nozzle_type->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { + p->combo_nozzle_dia->wxEvtHandler::ProcessEvent(evt); + }); + + wxGridSizer *nozzle_dia_sizer = new wxGridSizer(3, 1, FromDIP(2), 0); + nozzle_dia_sizer->Add(p->label_nozzle_title, 0, wxALIGN_CENTER | wxTOP, FromDIP(4)); + nozzle_dia_sizer->Add(p->combo_nozzle_dia , 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(2)); + nozzle_dia_sizer->Add(p->label_nozzle_type , 0, wxALIGN_CENTER); + + p->panel_nozzle_dia->SetSizer(nozzle_dia_sizer); + // Bed type selection p->panel_printer_bed = new StaticBox(p->m_panel_printer_content); - p->panel_printer_bed->SetCornerRadius(8); + p->panel_printer_bed->SetCornerRadius(FromDIP(8)); p->panel_printer_bed->SetBorderColor(panel_bd_col); - p->panel_printer_bed->SetMinSize(PRINTER_PANEL_SIZE); + p->panel_printer_bed->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); p->panel_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { p->combo_printer_bed->wxEvtHandler::ProcessEvent(evt); }); - ScalableButton *wiki_bed = new ScalableButton(p->panel_printer_bed, wxID_ANY, "help"); - wiki_bed->Bind(wxEVT_BUTTON, [](wxCommandEvent) { - wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments"); - }); + //ScalableButton *wiki_bed = new ScalableButton(p->panel_printer_bed, wxID_ANY, "help"); + //wiki_bed->Bind(wxEVT_BUTTON, [](wxCommandEvent) { + // wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments"); + //}); - ScalableBitmap bitmap_bed(p->panel_printer_bed, "printer_placeholder", 32); + ScalableBitmap bitmap_bed(p->panel_printer_bed, "printer_placeholder", PRINTER_THUMBNAIL_SIZE.GetHeight()); p->image_printer_bed = new wxStaticBitmap(p->panel_printer_bed, wxID_ANY, bitmap_bed.bmp(), wxDefaultPosition, wxDefaultSize, 0); p->image_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { p->image_printer_bed->Unbind(wxEVT_LEAVE_WINDOW, &Sidebar::on_leave_image_printer_bed, this); @@ -1716,17 +1859,20 @@ Sidebar::Sidebar(Plater *parent) p->combo_printer_bed->wxEvtHandler::ProcessEvent(evt); }); - p->combo_printer_bed = new ComboBox(p->panel_printer_bed, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY | wxALIGN_CENTER_HORIZONTAL); + p->combo_printer_bed = new ComboBox(p->panel_printer_bed, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); p->combo_printer_bed->SetBorderWidth(0); p->combo_printer_bed->GetDropDown().SetUseContentWidth(true); + p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow + p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow reset_bed_type_combox_choices(true); p->combo_printer_bed->Bind(wxEVT_COMBOBOX, [this](auto &e) { bool isDual = static_cast(p->panel_printer_preset->GetSizer())->GetOrientation() == wxVERTICAL; auto image_path = get_cur_select_bed_image(); - p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, 48)); + p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); if (p->big_bed_image_popup) { p->big_bed_image_popup->set_bitmap(create_scaled_bitmap("big_" + image_path, p->big_bed_image_popup, p->big_bed_image_popup->get_image_px())); + p->big_bed_image_popup->set_title(p->combo_printer_bed->GetString(p->combo_printer_bed->GetSelection())); } e.Skip(); // fix bug:Event spreads to sidebar }); @@ -1737,17 +1883,26 @@ Sidebar::Sidebar(Plater *parent) }); p->image_printer_bed->Bind(wxEVT_ENTER_WINDOW, &Sidebar::on_enter_image_printer_bed, this); - wxBoxSizer *bed_type_vsizer = new wxBoxSizer(wxVERTICAL); - bed_type_vsizer->AddStretchSpacer(1); - wxBoxSizer *bed_type_hsizer = new wxBoxSizer(wxHORIZONTAL); - bed_type_hsizer->AddStretchSpacer(1); - bed_type_hsizer->Add(p->image_printer_bed, 1, wxEXPAND | wxTOP, FromDIP(8)); - bed_type_hsizer->Add(wiki_bed, 1, wxTOP, FromDIP(2)); - bed_type_vsizer->Add(bed_type_hsizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(8)); - bed_type_vsizer->Add(p->combo_printer_bed, 0, wxEXPAND | wxALL, FromDIP(2)); - bed_type_vsizer->AddStretchSpacer(1); + // ORCA paint whole combobox on focus + auto bed_focus_bg = [this, panel_bd_col](bool focused){ + auto bg_color = StateColor::darkModeColorFor(wxColour(focused ? "#E5F0EE" : "#FFFFFF")); + auto panel = p->panel_printer_bed; + panel->SetBackgroundColor(bg_color); + if(focused) + panel->SetBorderColor(wxColour("#009688")); + else + panel->SetBorderColor(panel_bd_col); + p->image_printer_bed->SetBackgroundColour(bg_color); + p->combo_printer_bed->SetBackgroundColour(bg_color); // paints margins instead combo background + }; + p->combo_printer_bed->Bind(wxEVT_SET_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(true ); e.Skip();}); + p->combo_printer_bed->Bind(wxEVT_KILL_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(false); e.Skip();}); - p->panel_printer_bed->SetSizer(bed_type_vsizer); + wxBoxSizer *bed_type_sizer = new wxBoxSizer(wxHORIZONTAL); + bed_type_sizer->Add(p->combo_printer_bed, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + bed_type_sizer->Add(p->image_printer_bed, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + + p->panel_printer_bed->SetSizer(bed_type_sizer); AppConfig *app_config = wxGetApp().app_config; std::string str_bed_type = app_config->get("curr_bed_type"); @@ -1771,6 +1926,7 @@ Sidebar::Sidebar(Plater *parent) BedType bed_type = (BedType)bed_type_value; project_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); + /* ORCA THIS PART MOVED TO TITLEBAR // Sync printer information btn_sync = new Button(p->m_panel_printer_content, _L("Sync info"), "printer_sync", 0, 32); //btn_sync->SetFont(Label::Body_8); @@ -1795,10 +1951,12 @@ Sidebar::Sidebar(Plater *parent) btn_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { deal_btn_sync(); }); + p->btn_sync_printer = btn_sync; + */ p->timer_sync_printer->Bind(wxEVT_TIMER, [this] (wxTimerEvent & e) { p->flush_printer_sync(); }); - p->btn_sync_printer = btn_sync; + p->left_extruder = new ExtruderGroup(p->m_panel_printer_content, 0, _L("Left Nozzle")); p->right_extruder = new ExtruderGroup(p->m_panel_printer_content, 1, _L("Right Nozzle")); @@ -2094,6 +2252,7 @@ void Sidebar::on_enter_image_printer_bed(wxMouseEvent &evt) { auto image_path = get_cur_select_bed_image(); p->big_bed_image_popup->set_bitmap(create_scaled_bitmap("big_" + image_path, p->big_bed_image_popup, p->big_bed_image_popup->get_image_px())); } + p->big_bed_image_popup->set_title(p->combo_printer_bed->GetString(p->combo_printer_bed->GetSelection())); p->big_bed_image_popup->SetCanFocus(false); p->big_bed_image_popup->SetPosition(temp_pos); p->big_bed_image_popup->on_show(); @@ -2231,13 +2390,15 @@ void Sidebar::update_all_preset_comboboxes() if (preset_bundle.use_bbl_network()) { //only show connection button for not-BBL printer - p->btn_connect_printer->Hide(); + //p->btn_connect_printer->Hide(); + p->m_printer_connect->Hide(); //only show sync-ams button for BBL printer p->m_bpButton_ams_filament->Show(); //update print button default value for bbl or third-party printer p_mainframe->set_print_button_to_default(MainFrame::PrintSelectType::ePrintPlate); } else { - p->btn_connect_printer->Show(); + //p->btn_connect_printer->Show(); + p->m_printer_connect->Show(); p->m_bpButton_ams_filament->Hide(); auto print_btn_type = MainFrame::PrintSelectType::eExportGcode; wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui"); @@ -2303,6 +2464,9 @@ void Sidebar::update_all_preset_comboboxes() p->combo_printer_bed->Disable(); } + // ORCA Hide plate selector if not supported by printer + p->panel_printer_bed->Show(is_bbl_vendor || cfg.opt_bool("support_multi_bed_types")); + // Update the print choosers to only contain the compatible presets, update the dirty flags. //BBS @@ -2427,12 +2591,38 @@ void Sidebar::update_presets(Preset::Type preset_type) update_extruder_diameter(*p->left_extruder); update_extruder_diameter(*p->right_extruder); //} - p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, 48)); + p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); } else { AMSCountPopupWindow::UpdateAMSCount(0, p->single_extruder); //if (!p->is_switching_diameter) update_extruder_diameter(*p->single_extruder); - p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, 48)); + + // ORCA sync unified nozzle combo box + p->combo_nozzle_dia->Clear(); + for (size_t i = 0; i < diameters.size(); ++i) + p->combo_nozzle_dia->Append(diameters[i], {}); + p->combo_nozzle_dia->SetSelection((*p->single_extruder).combo_diameter->GetSelection()); + + // ORCA update nozzle type + const auto& full_config = wxGetApp().preset_bundle->full_config(); + wxString nozzle_type = "-"; + const ConfigOptionEnumsGenericNullable* cfg_nozzle_type = full_config.option("nozzle_type"); + if(cfg_nozzle_type != nullptr){ + std::vector nozzle_types(cfg_nozzle_type->size()); + for (size_t idx = 0; idx < cfg_nozzle_type->size(); ++idx) + nozzle_types[idx] = NozzleType(cfg_nozzle_type->values[idx]); + nozzle_type = _L( // NEEDFIX this part can be replaced with shorter names + nozzle_types[0] == ntHardenedSteel ? "Hardened Steel" : + nozzle_types[0] == ntStainlessSteel ? "Stainless Steel" : + nozzle_types[0] == ntTungstenCarbide ? "Tungsten Carbide" : + nozzle_types[0] == ntBrass ? "Brass" + : "-" // Undefined + ); + } + p->label_nozzle_type->SetLabel(nozzle_type); + p->label_nozzle_type->SetToolTip(nozzle_type == "-" ? "" : nozzle_type); + + p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); } if (GUI::wxGetApp().plater()) @@ -2496,8 +2686,8 @@ BedType Sidebar::get_cur_select_bed_type() { std::string Sidebar::get_cur_select_bed_image() { auto select_bed_type = get_cur_select_bed_type(); - auto series_suffix_str = m_cur_image_bed_type.empty() ? "" : ("_" + m_cur_image_bed_type); - auto image_path = bed_type_thumbnails[select_bed_type] + series_suffix_str; + //auto series_suffix_str = m_cur_image_bed_type.empty() ? "" : ("_" + m_cur_image_bed_type); + auto image_path = bed_type_thumbnails[select_bed_type];// + series_suffix_str; return image_path; } @@ -2576,12 +2766,36 @@ void Sidebar::msw_rescale() p->m_panel_filament_title->GetSizer() ->SetMinSize(-1, 3 * wxGetApp().em_unit()); p->m_printer_icon->msw_rescale(); + p->m_printer_connect->msw_rescale(); + p->m_printer_bbl_sync->msw_rescale(); + p->m_printer_icon->msw_rescale(); p->m_printer_setting->msw_rescale(); + + p->panel_printer_preset->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); + p->panel_printer_preset->SetCornerRadius(FromDIP(8)); + p->image_printer->SetSize(FromDIP(PRINTER_THUMBNAIL_SIZE)); + update_printer_thumbnail(); + p->combo_printer->Rescale(); p->btn_edit_printer->msw_rescale(); - p->image_printer->SetSize(PRINTER_THUMBNAIL_SIZE); + + p->panel_nozzle_dia->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); + p->panel_nozzle_dia->SetCornerRadius(FromDIP(8)); + p->combo_nozzle_dia->Rescale(); + + p->panel_printer_bed->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); + p->panel_printer_bed->SetCornerRadius(FromDIP(8)); + p->combo_printer_bed->Rescale(); + p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow + p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow bool isDual = static_cast(p->panel_printer_preset->GetSizer())->GetOrientation() == wxVERTICAL; auto image_path = get_cur_select_bed_image(); - p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, 48)); + p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); + if (p->big_bed_image_popup){ // ORCA force rebuild frame. current wxwidget version not supports wxBITMAP_SCALE_FILL flag on wxStaticBitmap + // also wxImage scaledImage = bit_map.ConvertToImage(); scaledImage.Rescale(FromDIP(m_image_px), FromDIP(m_image_px), wxIMAGE_QUALITY_HIGH); + // didnt worked as expected and it requires use on set_bitmap. so that will try to scale everytime + p->big_bed_image_popup->Destroy(); + p->big_bed_image_popup = nullptr; + } p->m_filament_icon->msw_rescale(); p->m_bpButton_add_filament->msw_rescale(); @@ -2590,16 +2804,13 @@ void Sidebar::msw_rescale() p->m_bpButton_set_filament->msw_rescale(); p->m_flushing_volume_btn->Rescale(); //BBS - p->combo_printer_bed->Rescale(); - p->combo_printer_bed->SetMinSize({-1, 3 * wxGetApp().em_unit()}); p->left_extruder->Rescale(); p->right_extruder->Rescale(); p->single_extruder->Rescale(); - p->btn_sync_printer->SetPaddingSize({FromDIP(6), FromDIP(12)}); - p->btn_sync_printer->SetMinSize(BTN_SYNC_SIZE); - p->panel_printer_bed->SetMinSize(PRINTER_PANEL_SIZE); - p->btn_sync_printer->Rescale(); + //p->btn_sync_printer->SetPaddingSize({FromDIP(6), FromDIP(12)}); + //p->btn_sync_printer->SetMinSize(BTN_SYNC_SIZE); + //p->btn_sync_printer->Rescale(); #if 0 if (p->mode_sizer) p->mode_sizer->msw_rescale(); @@ -2611,7 +2822,7 @@ void Sidebar::msw_rescale() // //p->combo_printer // } ) // combo->msw_rescale(); - p->combo_printer->msw_rescale(); + for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); @@ -2658,7 +2869,9 @@ void Sidebar::sys_color_changed() for (wxWindow* win : std::vector{ p->scrolled, p->presets_panel }) wxGetApp().UpdateAllStaticTextDarkUI(win); #endif - p->btn_sync_printer->SetIcon("printer_sync"); + //p->btn_sync_printer->SetIcon("printer_sync"); + p->m_printer_bbl_sync->msw_rescale(); + p->m_printer_connect->msw_rescale(); // for (wxWindow* btn : std::vector{ p->btn_reslice, p->btn_export_gcode }) // wxGetApp().UpdateDarkUI(btn, true); p->m_printer_icon->msw_rescale(); @@ -2691,6 +2904,13 @@ void Sidebar::sys_color_changed() for (PlaterPresetComboBox* combo : p->combos_filament) combo->sys_color_changed(); + if (p->big_bed_image_popup) // ORCA + p->big_bed_image_popup->sys_color_changed(); + + p->btn_edit_printer->msw_rescale(); + p->image_printer->SetSize(FromDIP(PRINTER_THUMBNAIL_SIZE)); + p->image_printer_bed->SetSize(FromDIP(PRINTER_THUMBNAIL_SIZE)); + // BBS obj_list()->sys_color_changed(); obj_layers()->sys_color_changed(); @@ -3603,7 +3823,7 @@ void Sidebar::update_printer_thumbnail() Preset & selected_preset = preset_bundle->printers.get_edited_preset(); std::string printer_type = selected_preset.get_current_printer_type(preset_bundle); if (printer_thumbnails.find(printer_type) != printer_thumbnails.end()) - p->image_printer->SetBitmap(create_scaled_bitmap(printer_thumbnails[printer_type], this, 48)); + p->image_printer->SetBitmap(create_scaled_bitmap(printer_thumbnails[printer_type], this, PRINTER_THUMBNAIL_SIZE.GetHeight())); else { // Orca: try to use the printer model cover as the thumbnail const auto model_name = selected_preset.config.opt_string("printer_model"); @@ -3617,7 +3837,7 @@ void Sidebar::update_printer_thumbnail() .make_preferred(); if (boost::filesystem::exists(cover_path)) { try { - p->image_printer->SetBitmap(create_scaled_bitmap(cover_path.string(), this, 48)); + p->image_printer->SetBitmap(create_scaled_bitmap(cover_path.string(), this, PRINTER_THUMBNAIL_SIZE.GetHeight())); printer_thumbnails[printer_type] = cover_path.string(); // Cache the path so we don't look up again return; } catch (...) {} @@ -3625,7 +3845,7 @@ void Sidebar::update_printer_thumbnail() } } } - p->image_printer->SetBitmap(create_scaled_bitmap("printer_placeholder", this, 48)); + p->image_printer->SetBitmap(create_scaled_bitmap("printer_placeholder", this, PRINTER_THUMBNAIL_SIZE.GetHeight())); printer_thumbnails[printer_type] = "printer_placeholder"; // Avoid unnecessary try } }