ENH: support scroll while using AMS mapping

jira: [STUDIO-11895]
Change-Id: I5cefd4e0cc6f5b7d6d1e1eaccfd2035bdd1a948e
This commit is contained in:
xin.zhang 2025-05-14 17:21:04 +08:00 committed by lane.wei
parent 6c07f1b9a2
commit f2812461e3
3 changed files with 40 additions and 13 deletions

View File

@ -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<FilamentInfo>&
} 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();

View File

@ -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};

View File

@ -73,7 +73,7 @@ void SelectMachineDialog::init_machine_bed_types()
SelectMachineDialog::SelectMachineDialog(Plater *plater)
: DPIDialog(static_cast<wxWindow *>(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))
{