From 0ea824d1677fe83dae42eeb7f0706f8dd0b7b1f6 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 15 Aug 2022 11:21:55 +0800 Subject: [PATCH] FIX:fixed the ams item cannot be adjusted layout Change-Id: I8e187bb6f50883d7a607c045cf643eab4ba71ea2 --- src/slic3r/GUI/StatusPanel.cpp | 2 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 81 ++++++++++++++++----------- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 + 3 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index e93e2d7b5..711d2d162 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -882,7 +882,7 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent) auto sizer = new wxBoxSizer(wxVERTICAL); auto sizer_box = new wxBoxSizer(wxVERTICAL); m_ams_control_box = new RoundedRectangle(parent, wxColour(0xEE, 0xEE, 0xEE), wxDefaultPosition, wxDefaultSize, 5, 1); - m_ams_control_box->SetMinSize(wxSize(FromDIP(530), FromDIP(310))); + m_ams_control_box->SetMinSize(wxSize(FromDIP(530), -1)); m_ams_control_box->SetBackgroundColour(*wxWHITE); #if !BBL_RELEASE_TO_PUBLIC m_ams_debug = new wxStaticText(m_ams_control_box, wxID_ANY, _L("Debug Info"), wxDefaultPosition, wxDefaultSize, 0); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 8fc6df022..52e6d0805 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1311,18 +1311,17 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons // normal mode //Freeze(); wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); - auto amswin = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); - amswin->SetBackgroundColour(*wxWHITE); + m_amswin = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); + m_amswin->SetBackgroundColour(*wxWHITE); // top - ams tag - m_simplebook_amsitems = new wxSimplebook(amswin, wxID_ANY); + m_simplebook_amsitems = new wxSimplebook(m_amswin, wxID_ANY); m_simplebook_amsitems->SetSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); m_simplebook_amsitems->SetMinSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); auto m_sizer_amsitems = new wxBoxSizer(wxHORIZONTAL); m_simplebook_amsitems->SetSizer(m_sizer_amsitems); m_simplebook_amsitems->Layout(); m_sizer_amsitems->Fit(m_simplebook_amsitems); - m_sizer_body->Add(m_simplebook_amsitems, 0, wxEXPAND, 0); - + m_panel_top = new wxPanel(m_simplebook_amsitems, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); m_sizer_top = new wxBoxSizer(wxHORIZONTAL); m_panel_top->SetSizer(m_sizer_top); @@ -1338,12 +1337,11 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_simplebook_amsitems->AddPage(m_panel_top, wxEmptyString, false); m_simplebook_amsitems->AddPage(m_panel_top_empty, wxEmptyString, false); - m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, 18); wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *m_sizer_left = new wxBoxSizer(wxVERTICAL); - m_panel_can = new StaticBox(amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_SIZE, wxBORDER_NONE); + m_panel_can = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_SIZE, wxBORDER_NONE); m_panel_can->SetMinSize(AMS_CANS_SIZE); m_panel_can->SetCornerRadius(FromDIP(10)); m_panel_can->SetBackgroundColor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); @@ -1389,7 +1387,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxBoxSizer *m_sizer_left_bottom = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *sizer_sextruder = new wxBoxSizer(wxVERTICAL); - auto extruder_pane = new wxPanel(amswin, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); + auto extruder_pane = new wxPanel(m_amswin, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); extruder_pane->SetSizer(sizer_sextruder); extruder_pane->Layout(); @@ -1413,14 +1411,13 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); StateColor btn_text_green(std::pair(*wxBLACK, StateColor::Disabled), std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Enabled)); m_sizer_left_bottom->AddStretchSpacer(); - m_button_extruder_feed = new Button(amswin, _L("Load Filament")); + m_button_extruder_feed = new Button(m_amswin, _L("Load Filament")); m_button_extruder_feed->SetBackgroundColor(btn_bg_green); m_button_extruder_feed->SetBorderColor(btn_bd_green); m_button_extruder_feed->SetTextColor(btn_text_green); m_button_extruder_feed->SetFont(Label::Body_13); - - m_button_extruder_back = new Button(amswin, _L("Unload Filament")); + m_button_extruder_back = new Button(m_amswin, _L("Unload Filament")); m_button_extruder_back->SetBackgroundColor(btn_bg_white); m_button_extruder_back->SetBorderColor(btn_bd_white); m_button_extruder_back->SetFont(Label::Body_13); @@ -1434,7 +1431,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_bottom->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(43)); wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); - m_simplebook_right = new wxSimplebook(amswin, wxID_ANY); + m_simplebook_right = new wxSimplebook(m_amswin, wxID_ANY); m_simplebook_right->SetMinSize(AMS_STEP_SIZE); m_simplebook_right->SetSize(AMS_STEP_SIZE); m_simplebook_right->SetBackgroundColour(*wxWHITE); @@ -1447,7 +1444,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_tip_right_top->SetForegroundColour(AMS_CONTROL_BRAND_COLOUR); m_tip_right_top->Wrap(AMS_STEP_SIZE.x); m_sizer_right_tip->Add(m_tip_right_top, 0, 0, 0); - m_sizer_right_tip->Add(0, 0, 0, wxTOP, 10); + m_sizer_right_tip->Add(0, 0, 0, wxTOP, FromDIP(10)); m_tip_load_info = new wxStaticText(tip_right, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_tip_load_info->SetFont(::Label::Body_13); m_tip_load_info->SetForegroundColour(AMS_CONTROL_GRAY700); @@ -1470,31 +1467,34 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_simplebook_right->AddPage(m_filament_unload_step, wxEmptyString, false); wxBoxSizer *m_sizer_right_bottom = new wxBoxSizer(wxHORIZONTAL); - m_sizer_right_bottom->Add(0, 0, 1, wxEXPAND, 5); - m_button_ams_setting = new Button(amswin, _L("AMS Settings")); + m_sizer_right_bottom->Add(0, 0, 1, wxEXPAND, FromDIP(5)); + m_button_ams_setting = new Button(m_amswin, _L("AMS Settings")); m_button_ams_setting->SetBackgroundColor(btn_bg_white); m_button_ams_setting->SetBorderColor(btn_bd_white); m_button_ams_setting->SetFont(Label::Body_13); m_button_ams_setting->Hide(); - m_sizer_right_bottom->Add(m_button_ams_setting, 0, wxTOP, 20); - m_sizer_right->Add(m_sizer_right_bottom, 0, wxEXPAND, 5); - m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, 5); - m_sizer_body->Add(m_sizer_bottom, 0, wxEXPAND | wxLEFT, 11); + m_sizer_right_bottom->Add(m_button_ams_setting, 0, wxTOP, FromDIP(20)); + m_sizer_right->Add(m_sizer_right_bottom, 0, wxEXPAND, FromDIP(5)); + m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, FromDIP(5)); + + m_sizer_body->Add(m_simplebook_amsitems, 0, wxEXPAND, 0); + m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(18)); + m_sizer_body->Add(m_sizer_bottom, 0, wxEXPAND | wxLEFT, FromDIP(11)); init_scaled_buttons(); - amswin->SetSizer(m_sizer_body); - amswin->Layout(); - amswin->Fit(); + m_amswin->SetSizer(m_sizer_body); + m_amswin->Layout(); + m_amswin->Fit(); //Thaw(); - SetSize(amswin->GetSize()); - SetMinSize(amswin->GetSize()); + SetSize(m_amswin->GetSize()); + SetMinSize(m_amswin->GetSize()); // calibration mode - m_simplebook_calibration = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, amswin->GetSize(), wxTAB_TRAVERSAL); + m_simplebook_calibration = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); - auto m_in_calibration_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, amswin->GetSize(), wxTAB_TRAVERSAL); + auto m_in_calibration_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); m_in_calibration_panel->SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); wxBoxSizer *sizer_calibration_h = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *sizer_calibration_v = new wxBoxSizer(wxVERTICAL); @@ -1506,15 +1506,15 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_text_calibration_tip->SetFont(::Label::Body_14); m_text_calibration_tip->SetForegroundColour(AMS_CONTROL_GRAY700); sizer_calibration_v->Add(thumbnail, 0, wxALIGN_CENTER, 0); - sizer_calibration_v->Add(0, 0, 0, wxTOP, 16); + sizer_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(16)); sizer_calibration_v->Add(m_text_calibration_percent, 0, wxALIGN_CENTER, 0); - sizer_calibration_v->Add(0, 0, 0, wxTOP, 8); + sizer_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(8)); sizer_calibration_v->Add(m_text_calibration_tip, 0, wxALIGN_CENTER, 0); sizer_calibration_h->Add(sizer_calibration_v, 1, wxALIGN_CENTER, 0); m_in_calibration_panel->SetSizer(sizer_calibration_h); m_in_calibration_panel->Layout(); - auto m_calibration_err_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, amswin->GetSize(), wxTAB_TRAVERSAL); + auto m_calibration_err_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); m_calibration_err_panel->SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); wxBoxSizer *sizer_err_calibration_h = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *sizer_err_calibration_v = new wxBoxSizer(wxVERTICAL); @@ -1547,10 +1547,10 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons sizer_button->Add(m_button_calibration_cancel, 0, wxALL, 5); sizer_err_calibration_v->Add(m_hyperlink, 0, wxALIGN_CENTER, 0); - sizer_err_calibration_v->Add(0, 0, 0, wxTOP, 6); + sizer_err_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(6)); sizer_err_calibration_v->Add(m_tip_calibration_err, 0, wxALIGN_CENTER, 0); - sizer_err_calibration_v->Add(0, 0, 0, wxTOP, 8); - sizer_err_calibration_v->Add(sizer_button, 0, wxALIGN_CENTER | wxTOP, 18); + sizer_err_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(8)); + sizer_err_calibration_v->Add(sizer_button, 0, wxALIGN_CENTER | wxTOP, FromDIP(18)); sizer_err_calibration_h->Add(sizer_err_calibration_v, 1, wxALIGN_CENTER, 0); m_calibration_err_panel->SetSizer(sizer_err_calibration_h); m_calibration_err_panel->Layout(); @@ -1558,7 +1558,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_simplebook_calibration->AddPage(m_in_calibration_panel, wxEmptyString, false); m_simplebook_calibration->AddPage(m_calibration_err_panel, wxEmptyString, false); - AddPage(amswin, wxEmptyString, false); + AddPage(m_amswin, wxEmptyString, false); AddPage(m_simplebook_calibration, wxEmptyString, false); UpdateStepCtrl(); @@ -1778,8 +1778,23 @@ void AMSControl::UpdateAms(std::vector info, bool keep_selection) if (i < info.size() && info.size() > 1) { item->amsItem->Update(m_ams_info[i]); item->amsItem->Open(); + + if (!m_simplebook_amsitems->IsShown()) { + m_simplebook_amsitems->Show(); + m_amswin->Layout(); + m_amswin->Fit(); + SetSize(m_amswin->GetSize()); + SetMinSize(m_amswin->GetSize()); + } } else { item->amsItem->Close(); + if (m_simplebook_amsitems->IsShown()) { + m_simplebook_amsitems->Hide(); + m_amswin->Layout(); + m_amswin->Fit(); + SetSize(m_amswin->GetSize()); + SetMinSize(m_amswin->GetSize()); + } } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 32a6f4d8b..45f4670c9 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -449,6 +449,7 @@ protected: wxStaticText *m_text_calibration_percent = {nullptr}; wxWindow * m_none_ams_panel = {nullptr}; wxWindow * m_panel_top = {nullptr}; + wxWindow * m_amswin = {nullptr}; StaticBox * m_panel_can = {nullptr}; wxBoxSizer *m_sizer_top = {nullptr};