From c49243622814635abee6ebdfcafe245baf2aa4f4 Mon Sep 17 00:00:00 2001 From: peachismomo Date: Wed, 23 Sep 2026 03:06:15 +0800 Subject: [PATCH] refactor: centralize printer compatibility checks --- .../GUI/CalibrationWizardPresetPage.cpp | 18 ------------- .../GUI/CalibrationWizardPresetPage.hpp | 1 - src/slic3r/GUI/GUI_App.cpp | 26 ++++++++++--------- src/slic3r/GUI/GUI_App.hpp | 1 + src/slic3r/GUI/MultiMachine.cpp | 15 +---------- src/slic3r/GUI/MultiMachine.hpp | 1 - src/slic3r/GUI/SelectMachine.cpp | 22 +++++----------- src/slic3r/GUI/SendMultiMachinePage.cpp | 2 +- src/slic3r/GUI/SendToPrinter.cpp | 12 +-------- src/slic3r/GUI/SendToPrinter.hpp | 1 - src/slic3r/GUI/SyncAmsInfoDialog.cpp | 18 +++++-------- 11 files changed, 30 insertions(+), 87 deletions(-) diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index 20ac05c39f..84554dcfb0 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1640,19 +1640,6 @@ void CalibrationPresetPage::update_combobox_filaments(MachineObject* obj) select_default_compatible_filament(); } -bool CalibrationPresetPage::is_blocking_printing() -{ - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - - MachineObject* obj_ = dev->get_selected_machine(); - if (obj_ == nullptr) return true; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const auto source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); -} - bool CalibrationPresetPage::is_nozzle_info_synced() const { if (!curr_obj || !curr_obj->is_info_ready()) @@ -1741,11 +1728,6 @@ void CalibrationPresetPage::update_show_status() preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle)); } - //if (is_blocking_printing()) { - // show_status(CaliPresetPageStatus::CaliPresetStatusUnsupportedPrinter); - // return; - //} - //else if (obj_->is_connecting() || !obj_->is_connected()) { show_status(CaliPresetPageStatus::CaliPresetStatusInConnecting); return; diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp index 8cdcde8cbc..4d1adb1004 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp @@ -269,7 +269,6 @@ protected: bool is_nozzle_info_synced() const; void show_status(CaliPresetPageStatus status); void Enable_Send_Button(bool enable); - bool is_blocking_printing(); bool need_check_sdcard(MachineObject* obj); CaliPresetPageStatus get_status() { return m_page_status; } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 08d5fbc5f7..7493672b0f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2383,19 +2383,21 @@ GUI_App::~GUI_App() bool GUI_App::is_blocking_printing(MachineObject *obj_) { - DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - if (obj_ == nullptr) { - obj_ = dev->get_selected_machine(); - } - - if (!obj_) - { - return false; - } - PresetBundle *preset_bundle = wxGetApp().preset_bundle; - std::string source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + const std::string source_model = preset_bundle + ? preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) + : std::string(); + return is_blocking_printing(obj_, source_model); +} + +bool GUI_App::is_blocking_printing(MachineObject *obj_, const std::string& source_model) +{ + DeviceManager *dev = getDeviceManager(); + if (!dev) return true; + if (obj_ == nullptr) + obj_ = dev->get_selected_machine(); + if (!obj_) + return false; return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); } diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index ac05f1dba4..2dc2970623 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -368,6 +368,7 @@ public: EAppMode get_app_mode() const { return m_app_mode; } Slic3r::DeviceManager* getDeviceManager() { return m_device_manager; } bool is_blocking_printing(MachineObject *obj_ = nullptr); + bool is_blocking_printing(MachineObject *obj_, const std::string& source_model); Slic3r::TaskManager* getTaskManager() { return m_task_manager; } HMSQuery* get_hms_query() { return hms_query; } NetworkAgent* getAgent() { return m_agent; } diff --git a/src/slic3r/GUI/MultiMachine.cpp b/src/slic3r/GUI/MultiMachine.cpp index eac1c939bf..df6ccc1298 100644 --- a/src/slic3r/GUI/MultiMachine.cpp +++ b/src/slic3r/GUI/MultiMachine.cpp @@ -3,7 +3,6 @@ #include "GUI_App.hpp" #include "MainFrame.hpp" -#include "DeviceCore/DevConfigUtil.h" namespace Slic3r { namespace GUI { @@ -52,7 +51,7 @@ void DeviceItem::sync_state() state_printable = 6; } - if (is_blocking_printing(obj_)) { + if (wxGetApp().is_blocking_printing(obj_)) { state_printable = 5; } @@ -105,18 +104,6 @@ void DeviceItem::unselected() } } -bool DeviceItem::is_blocking_printing(MachineObject* obj_) -{ - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - std::string source_model = ""; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - - return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); -} - void DeviceItem::update_item(const DeviceItem* item) { // Except for the selected status, everything else is updated diff --git a/src/slic3r/GUI/MultiMachine.hpp b/src/slic3r/GUI/MultiMachine.hpp index 51f70b9d96..b38918225c 100644 --- a/src/slic3r/GUI/MultiMachine.hpp +++ b/src/slic3r/GUI/MultiMachine.hpp @@ -59,7 +59,6 @@ public: void selected(); void unselected(); - bool is_blocking_printing(MachineObject* obj_); void update_item(const DeviceItem* item); }; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index e4c2625efb..350cfe9ffc 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2518,23 +2518,13 @@ void SelectMachineDialog::on_cancel(wxCloseEvent &event) bool SelectMachineDialog::is_blocking_printing(MachineObject* obj_) { - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - auto target_model = obj_->printer_type; - std::string source_model = ""; + if (m_print_type == PrintFromType::FROM_NORMAL) + return wxGetApp().is_blocking_printing(obj_); - if (m_print_type == PrintFromType::FROM_NORMAL) { - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - - - }else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { - if (m_required_data_plate_data_list.size() > 0) { - source_model = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; - } - } - - return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); + std::string source_model; + if (m_print_type == PrintFromType::FROM_SDCARD_VIEW && !m_required_data_plate_data_list.empty()) + source_model = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; + return wxGetApp().is_blocking_printing(obj_, source_model); } static std::unordered_set _get_used_nozzle_idxes() diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index cafbb360e6..7e65c2c530 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -738,7 +738,7 @@ void SendMultiMachinePage::on_send(wxCommandEvent& event) if (obj && obj->is_online() && !obj->can_abort() && !obj->is_in_upgrading() && it->second->get_state_selected() == 1 && it->second->state_printable <= 2) { - if (!it->second->is_blocking_printing(obj)) { + if (!wxGetApp().is_blocking_printing(obj)) { PrintParams params = request_params(obj); print_params.push_back(params); } diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 977b7ddfec..a0489a4819 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -1277,7 +1277,7 @@ void SendToPrinterDialog::update_show_status() reset_timeout(); // reading done - if (is_blocking_printing(obj_)) { + if (wxGetApp().is_blocking_printing(obj_)) { show_status(PrintDialogStatus::PrintStatusUnsupportedPrinter); return; } @@ -1342,16 +1342,6 @@ void SendToPrinterDialog::update_show_status() } } -bool SendToPrinterDialog::is_blocking_printing(MachineObject* obj_) -{ - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - auto source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); -} - void SendToPrinterDialog::Enable_Refresh_Button(bool en) { if (!en) { diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index 24e483ae33..ddfb017552 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -181,7 +181,6 @@ public: void reset_timeout(); void update_user_printer(); void update_show_status(); - bool is_blocking_printing(MachineObject* obj_); void prepare(int print_plate_idx); void check_focus(wxWindow* window); void check_fcous_state(wxWindow* window); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 036d58527c..1c42735b0b 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -1863,19 +1863,13 @@ void SyncAmsInfoDialog::on_cancel(wxCloseEvent &event) bool SyncAmsInfoDialog::is_blocking_printing(MachineObject *obj_) { - DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) return true; - std::string source_model = ""; + if (m_print_type == PrintFromType::FROM_NORMAL) + return wxGetApp().is_blocking_printing(obj_); - if (m_print_type == PrintFromType::FROM_NORMAL) { - PresetBundle *preset_bundle = wxGetApp().preset_bundle; - source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - - } else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW) { - if (m_required_data_plate_data_list.size() > 0) { source_model = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; } - } - - return !DevPrinterConfigUtil::is_printer_model_compatible(source_model, *obj_); + std::string source_model; + if (m_print_type == PrintFromType::FROM_SDCARD_VIEW && !m_required_data_plate_data_list.empty()) + source_model = m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id; + return wxGetApp().is_blocking_printing(obj_, source_model); } bool SyncAmsInfoDialog::is_same_nozzle_type(std::string &filament_type, NozzleType &tag_nozzle_type)