diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index bb40df996..2296a7842 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -598,8 +598,8 @@ void MaterialSyncItem::set_material_index_str(std::string str) { m_material_index = str; } -AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : - PopupWindow(parent, wxBORDER_NONE), m_use_in_sync_dialog(use_in_sync_dialog) +AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog, bool enable_vscroll) : + PopupWindow(parent, wxBORDER_NONE), m_use_in_sync_dialog(use_in_sync_dialog), m_enable_vscroll(enable_vscroll) { Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this); @@ -610,7 +610,12 @@ AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : SetBackgroundColour(*wxWHITE); - m_sizer_main = new wxBoxSizer(wxVERTICAL); + + m_scroll_area = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_sizer_scroll_main = new wxBoxSizer(wxVERTICAL); + m_scroll_area->SetSizer(m_sizer_scroll_main); + if(m_enable_vscroll) { m_scroll_area->SetScrollRate(0, 20); } + m_sizer_ams = new wxBoxSizer(wxHORIZONTAL); m_sizer_ams_left = new wxBoxSizer(wxVERTICAL); m_sizer_ams_right = new wxBoxSizer(wxVERTICAL); @@ -620,7 +625,7 @@ AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : m_sizer_ams_basket_right = new wxBoxSizer(wxVERTICAL); - auto title_panel = new wxPanel(this, wxID_ANY); + auto title_panel = new wxPanel(m_scroll_area, wxID_ANY); title_panel->SetBackgroundColour(StateColor::darkModeColorFor("#F1F1F1")); title_panel->SetSize(wxSize(-1, FromDIP(30))); title_panel->SetMinSize(wxSize(-1, FromDIP(30))); @@ -638,9 +643,9 @@ AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : title_panel->Layout(); title_panel->Fit(); - m_left_marea_panel = new wxPanel(this); + m_left_marea_panel = new wxPanel(m_scroll_area); m_left_marea_panel->SetName("left"); - m_right_marea_panel = new wxPanel(this); + m_right_marea_panel = new wxPanel(m_scroll_area); m_right_marea_panel->SetName("right"); m_left_first_text_panel = new wxPanel(m_left_marea_panel); m_right_first_text_panel = new wxPanel(m_right_marea_panel); @@ -728,11 +733,14 @@ AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : m_sizer_ams->Add(0, 0, 0, wxEXPAND, FromDIP(15)); m_sizer_ams->Add(m_right_marea_panel, 1, wxEXPAND, FromDIP(0)); - m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); - m_sizer_main->Add(m_sizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14)); - m_sizer_main->Add( 0, 0, 0, wxTOP, FromDIP(14)); + m_sizer_scroll_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); + m_sizer_scroll_main->Add(m_sizer_ams, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(14)); + m_sizer_scroll_main->Add( 0, 0, 0, wxTOP, FromDIP(14)); - SetSizer(m_sizer_main); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(m_scroll_area, 1, wxEXPAND | wxALL, FromDIP(0)); + SetSizer(main_sizer); Layout(); Fit(); @@ -1231,6 +1239,22 @@ void AmsMapingPopup::update(MachineObject* obj, const std::vector& } else { m_right_split_ams_sizer->Show(false); } + + if (m_enable_vscroll) { + wxSize new_size = m_scroll_area->GetSizer()->CalcMin(); + new_size.SetWidth(-1); + if (new_size.GetHeight() > FromDIP(400)) + { + new_size.SetHeight(FromDIP(400)); + } + + if (m_scroll_area->GetSize() != new_size) + { + m_scroll_area->SetMaxSize(new_size); + m_scroll_area->SetMinSize(new_size); + } + } + Layout(); Fit(); Refresh(); diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index 1ab284134..983908d8c 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -210,8 +210,11 @@ class AmsMapingPopup : public PopupWindow bool m_ext_mapping_filatype_check = true; wxStaticText* m_title_text{ nullptr }; + bool m_enable_vscroll = false;/*STUDIO-11895*/ + wxScrolledWindow* m_scroll_area{ nullptr }; + public: - AmsMapingPopup(wxWindow *parent,bool use_in_sync_dialog = false); + AmsMapingPopup(wxWindow *parent,bool use_in_sync_dialog = false, bool enable_vscroll = false); ~AmsMapingPopup() {}; MaterialItem* m_parent_item{ nullptr }; @@ -227,7 +230,7 @@ public: int m_current_filament_id; ShowType m_show_type{ShowType::RIGHT}; std::string m_tag_material; - wxBoxSizer *m_sizer_main{nullptr}; + wxBoxSizer *m_sizer_scroll_main{nullptr}; wxBoxSizer *m_sizer_ams{nullptr}; wxBoxSizer *m_sizer_ams_left{nullptr}; wxBoxSizer *m_sizer_ams_right{nullptr}; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 865794bce..0df56eb3d 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -73,7 +73,7 @@ void SelectMachineDialog::init_machine_bed_types() SelectMachineDialog::SelectMachineDialog(Plater *plater) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Send print job"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_plater(plater), m_export_3mf_cancel(false) - , m_mapping_popup(AmsMapingPopup(this)) + , m_mapping_popup(AmsMapingPopup(this, false, true)) , m_mapping_tip_popup(AmsMapingTipPopup(this)) , m_mapping_tutorial_popup(AmsTutorialPopup(this)) {