From f1410c8cac19fe3c9a5807df517f8ace0e13b8e9 Mon Sep 17 00:00:00 2001 From: peachismomo Date: Wed, 23 Sep 2026 02:49:27 +0800 Subject: [PATCH] feat: extend optional printer model warnings to calibration & ams workflows --- src/slic3r/GUI/CalibrationWizardPresetPage.cpp | 16 +++++++++++++++- src/slic3r/GUI/CalibrationWizardPresetPage.hpp | 3 ++- src/slic3r/GUI/PrePrintChecker.hpp | 2 +- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index da40fb4f19..20ac05c39f 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -6,6 +6,7 @@ #include "Widgets/Label.hpp" #include "MsgDialog.hpp" #include "libslic3r/Print.hpp" +#include "PrePrintChecker.hpp" #include "DeviceCore/DevConfig.h" #include "DeviceCore/DevConfigUtil.h" @@ -1733,6 +1734,13 @@ void CalibrationPresetPage::update_show_status() } } + bool has_optional_printer_model = DevPrinterConfigUtil::is_optional_printer_model_id(obj_->printer_type); + if (PresetBundle *preset_bundle = wxGetApp().preset_bundle) { + has_optional_printer_model = has_optional_printer_model || + DevPrinterConfigUtil::is_optional_printer_model_id( + preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle)); + } + //if (is_blocking_printing()) { // show_status(CaliPresetPageStatus::CaliPresetStatusUnsupportedPrinter); // return; @@ -1789,7 +1797,9 @@ void CalibrationPresetPage::update_show_status() return; } - show_status(CaliPresetPageStatus::CaliPresetStatusNormal); + show_status(has_optional_printer_model ? + CaliPresetPageStatus::CaliPresetStatusOptionalPrinterModel : + CaliPresetPageStatus::CaliPresetStatusNormal); } @@ -1843,6 +1853,10 @@ void CalibrationPresetPage::show_status(CaliPresetPageStatus status) Layout(); Fit(); } + else if (status == CaliPresetPageStatus::CaliPresetStatusOptionalPrinterModel) { + update_print_status_msg(PrePrintChecker::get_pre_state_msg(PrintDialogStatus::PrintStatusOptionalPrinterModel), true); + Enable_Send_Button(true); + } else if (status == CaliPresetPageStatus::CaliPresetStatusNoUserLogin) { wxString msg_text = _L("No login account, only printers in LAN mode are displayed."); update_print_status_msg(msg_text, false); diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp index adb4ce52ab..8cdcde8cbc 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp @@ -152,7 +152,8 @@ enum CaliPresetPageStatus CaliPresetStatusInConnecting, CaliPresetStatusFilamentIncompatible, CaliPresetStatusLanModeSDcardNotAvailable, - CaliPresetStatusDifferentNozzleDiameters + CaliPresetStatusDifferentNozzleDiameters, + CaliPresetStatusOptionalPrinterModel }; class CalibrationPresetPage : public CalibrationWizardPage diff --git a/src/slic3r/GUI/PrePrintChecker.hpp b/src/slic3r/GUI/PrePrintChecker.hpp index bab608348d..5dea00a88f 100644 --- a/src/slic3r/GUI/PrePrintChecker.hpp +++ b/src/slic3r/GUI/PrePrintChecker.hpp @@ -171,7 +171,7 @@ public: void add_with_checkbox(PrintDialogStatus state, wxString msg, wxString checkbox_label, bool checked, std::function checkbox_callback); static ::std::string get_print_status_info(PrintDialogStatus status); - wxString get_pre_state_msg(PrintDialogStatus status); + static wxString get_pre_state_msg(PrintDialogStatus status); static bool is_error(PrintDialogStatus status) { return (PrintStatusErrorBegin < status) && (PrintStatusErrorEnd > status); }; static bool is_error_printer(PrintDialogStatus status) { return (PrintStatusPrinterErrorBegin < status) && (PrintStatusPrinterErrorEnd > status); }; static bool is_error_filament(PrintDialogStatus status) { return (PrintStatusFilamentErrorBegin < status) && (PrintStatusFilamentErrorEnd > status); }; diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 11a7176af0..036d58527c 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -1742,6 +1742,8 @@ void SyncAmsInfoDialog::show_status(PrintDialogStatus status, std::vectorprinter_type); + if (m_print_type == PrintFromType::FROM_NORMAL) { + if (PresetBundle *preset_bundle = wxGetApp().preset_bundle) { + has_optional_printer_model = has_optional_printer_model || + DevPrinterConfigUtil::is_optional_printer_model_id( + preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle)); + } + } else if (m_print_type == PrintFromType::FROM_SDCARD_VIEW && !m_required_data_plate_data_list.empty()) { + has_optional_printer_model = has_optional_printer_model || + DevPrinterConfigUtil::is_optional_printer_model_id(m_required_data_plate_data_list[m_print_plate_idx]->printer_model_id); + } + if (!obj_->GetConfig()->SupportPrintAllPlates() && m_print_plate_idx == PLATE_ALL_IDX) { show_status(PrintDialogStatus::PrintStatusNotSupportedPrintAll); return; @@ -2356,6 +2370,9 @@ void SyncAmsInfoDialog::update_show_status() } } } + + if (has_optional_printer_model) + show_status(PrintDialogStatus::PrintStatusOptionalPrinterModel); } bool SyncAmsInfoDialog::has_timelapse_warning()