From fabc6814424b38983434584413c5ddec4be80613 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Tue, 23 Sep 2025 16:29:58 +0800 Subject: [PATCH] ENH: update how to load_ams_list JIRA: [STUDIO-14255] Change-Id: I204f881b72185ee16f8ff204feb6469504f9f86b (cherry picked from commit 4150ff5c178de02dfa67e6bd90765e35c6a64e99) --- src/slic3r/GUI/CalibrationPanel.cpp | 4 ---- src/slic3r/GUI/DeviceCore/DevManager.cpp | 18 +++++++++++++++++- src/slic3r/GUI/DeviceCore/DevManager.h | 1 + src/slic3r/GUI/GUI_App.cpp | 10 ++-------- src/slic3r/GUI/Monitor.cpp | 14 -------------- src/slic3r/GUI/Plater.cpp | 6 ++++-- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 8 +++++++- 8 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp index 9b9aa2bfbd..055cbe905d 100644 --- a/src/slic3r/GUI/CalibrationPanel.cpp +++ b/src/slic3r/GUI/CalibrationPanel.cpp @@ -642,9 +642,6 @@ bool CalibrationPanel::Show(bool show) { obj = dev->get_selected_machine(); if (obj == nullptr) { dev->load_last_machine(); - obj = dev->get_selected_machine(); - if (obj) - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); } else { obj->reset_update_time(); @@ -682,7 +679,6 @@ void CalibrationPanel::set_default() { obj = nullptr; last_conn_type = "undefined"; - wxGetApp().sidebar().load_ams_list({}, {}); } void CalibrationPanel::msw_rescale() diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index ed3977d64a..6e55c8414c 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -430,6 +430,8 @@ namespace Slic3r selected_machine = ""; local_selected_machine = ""; + OnSelectedMachineChanged(selected_machine, ""); + // clean user list for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { @@ -533,6 +535,11 @@ namespace Slic3r data.second.checked_filament.clear(); } } + + if (selected_machine != dev_id) { + OnSelectedMachineChanged(selected_machine, dev_id); + } + selected_machine = dev_id; return true; } @@ -825,7 +832,16 @@ namespace Slic3r void DeviceManager::OnSelectedMachineLost() { GUI::wxGetApp().sidebar().update_sync_status(nullptr); - GUI::wxGetApp().sidebar().load_ams_list(string(), nullptr); + GUI::wxGetApp().sidebar().load_ams_list(nullptr); + } + + void DeviceManager::OnSelectedMachineChanged(const std::string& /*pre_dev_id*/, + const std::string& /*new_dev_id*/) + { + if (MachineObject* obj_ = get_selected_machine()) { + GUI::wxGetApp().sidebar().update_sync_status(obj_); + GUI::wxGetApp().sidebar().load_ams_list(obj_); + }; } void DeviceManager::reload_printer_settings() diff --git a/src/slic3r/GUI/DeviceCore/DevManager.h b/src/slic3r/GUI/DeviceCore/DevManager.h index 2b37702775..fbc30c0050 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.h +++ b/src/slic3r/GUI/DeviceCore/DevManager.h @@ -101,6 +101,7 @@ private: void OnMachineBindStateChanged(MachineObject* obj, const std::string& new_state); void OnSelectedMachineLost(); + void OnSelectedMachineChanged(const std::string& pre_dev_id, const std::string& new_dev_id); /*TODO*/ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index cc25280901..8d62421ceb 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1726,7 +1726,6 @@ void GUI_App::init_networking_callbacks() obj->command_get_access_code(); if (m_agent) m_agent->install_device_cert(obj->get_dev_id(), obj->is_lan_mode_printer()); - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); } }); }); @@ -1765,7 +1764,6 @@ void GUI_App::init_networking_callbacks() obj->command_get_version(); event.SetInt(0); event.SetString(obj->get_dev_id()); - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); } else if (state == ConnectStatus::ConnectStatusFailed) { // Orca: only update status if same device id if (m_device_manager->selected_machine != dev_id) return; @@ -1831,13 +1829,10 @@ void GUI_App::init_networking_callbacks() auto sel = this->m_device_manager->get_selected_machine(); if (sel && sel->get_dev_id() == dev_id) { obj->parse_json("cloud", msg); + GUI::wxGetApp().sidebar().load_ams_list(obj); } else { obj->parse_json("cloud", msg, true); } - - if (sel == obj || sel == nullptr) { - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); - } } if (GUI::wxGetApp().plater()) @@ -1881,7 +1876,7 @@ void GUI_App::init_networking_callbacks() if (MachineObject* obj = m_device_manager->get_my_machine(dev_id)) { obj->parse_json("lan", msg); if (this->m_device_manager->get_selected_machine() == obj) { - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); + GUI::wxGetApp().sidebar().load_ams_list(obj); } } @@ -3942,7 +3937,6 @@ void GUI_App::request_user_logout() wxGetApp().check_and_keep_current_preset_changes(_L("User logged out"), header, ActionButtons::KEEP | ActionButtons::SAVE, &transfer_preset_changes); m_device_manager->clean_user_info(); - GUI::wxGetApp().sidebar().load_ams_list({}, {}); remove_user_presets(); enable_user_preset_folder(false); preset_bundle->load_user_presets(DEFAULT_USER_FOLDER_NAME, ForwardCompatibilitySubstitutionRule::Enable); diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 59f8ec1267..7ef380bf8e 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -161,12 +161,6 @@ void MonitorPanel::init_timer() m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); wxPostEvent(this, wxTimerEvent()); - - Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return; - MachineObject *obj_ = dev->get_selected_machine(); - if (obj_) - GUI::wxGetApp().sidebar().load_ams_list(obj_->get_dev_id(), obj_); } void MonitorPanel::init_tabpanel() @@ -215,9 +209,6 @@ void MonitorPanel::set_default() /* reset side tool*/ //m_bitmap_wifi_signal->SetBitmap(wxNullBitmap); - - wxGetApp().sidebar().load_ams_list({}, {}); - wxGetApp().sidebar().update_sync_status(nullptr); } wxWindow* MonitorPanel::create_side_tools() @@ -295,7 +286,6 @@ void MonitorPanel::on_select_printer(wxCommandEvent& event) obj_->reset_pa_cali_history_result(); obj_->reset_pa_cali_result(); Sidebar &sidebar = GUI::wxGetApp().sidebar(); - sidebar.load_ams_list(obj_->get_dev_id(), obj_); sidebar.update_sync_status(obj_); sidebar.set_need_auto_sync_after_connect_printer(sidebar.need_auto_sync_extruder_list_after_connect_priner(obj_)); } @@ -428,12 +418,8 @@ bool MonitorPanel::Show(bool show) obj = dev->get_selected_machine(); if (obj == nullptr) { dev->load_last_machine(); - obj = dev->get_selected_machine(); - if (obj && obj->is_info_ready(false)) - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); } else { obj->reset_update_time(); - //select_machine(obj->get_dev_id()); } } } else { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6512911ec0..6657657a50 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3024,10 +3024,12 @@ void Sidebar::get_small_btn_sync_pos_size(wxPoint &pt, wxSize &size) { pt = ams_btn->GetScreenPosition(); } -void Sidebar::load_ams_list(std::string const &device, MachineObject* obj) +void Sidebar::load_ams_list(MachineObject* obj) { std::map filament_ams_list = build_filament_ams_list(obj); + bool device_change = false; + const std::string& device = obj ? obj->get_dev_id() : ""; if (p->ams_list_device != device) { p->ams_list_device = device; device_change = true; @@ -3055,7 +3057,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) // Force load ams list auto obj = wxGetApp().getDeviceManager()->get_selected_machine(); if (obj) - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); + GUI::wxGetApp().sidebar().load_ams_list(obj); auto & list = wxGetApp().preset_bundle->filament_ams_list; if (list.empty()) { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index b8787e85df..724cbffcd1 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -187,7 +187,7 @@ public: bool is_new_project_in_gcode3mf(); // BBS void on_bed_type_change(BedType bed_type); - void load_ams_list(std::string const & device, MachineObject* obj); + void load_ams_list(MachineObject* obj); std::map build_filament_ams_list(MachineObject* obj); void sync_ams_list(bool is_from_big_sync_btn = false); bool sync_extruder_list(); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 2759cf5e20..2c41fe31eb 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3031,7 +3031,6 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) } // Has changed machine unrecoverably - GUI::wxGetApp().sidebar().load_ams_list(obj->get_dev_id(), obj); m_check_flag = false; } else { BOOST_LOG_TRIVIAL(error) << "on_selection_changed dev_id not found"; @@ -4522,6 +4521,13 @@ bool SelectMachineDialog::Show(bool show) EnableEditing(true); m_options_other->Show(); m_refresh_timer->Start(LIST_REFRESH_INTERVAL); + + //set a default machine when obj is null + if (DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager()) { + if (!dev->get_selected_machine()) { + dev->load_last_machine(); + } + }; } else { m_refresh_timer->Stop(); return DPIDialog::Show(false);