From b2827cb9fa21dff9904525d53ce4ed7926c1b5d1 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Tue, 7 Jul 2026 14:36:52 +0800 Subject: [PATCH] feat: wire AMS humidity click to open AMSDryControl dialog For N3F and N3S AMS types, clicking the humidity indicator now opens the full drying control dialog instead of the popup. --- src/slic3r/GUI/Widgets/AMSControl.cpp | 36 +++++++++++++++++++++++++++ src/slic3r/GUI/Widgets/AMSControl.hpp | 2 ++ 2 files changed, 38 insertions(+) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index a3913dc4e4..ea62d18d92 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -6,6 +6,7 @@ #include "slic3r/GUI/MsgDialog.hpp" #include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" +#include "slic3r/GUI/AMSDryControl.hpp" #include "slic3r/GUI/DeviceCore/DevManager.h" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h" @@ -254,6 +255,24 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); } m_Humidity_tip_popup.Popup(); } + else if (info->ams_type == AMSModel::N3F_AMS || info->ams_type == AMSModel::N3S_AMS) + { + // Open full drying control dialog for N3F/N3S AMS + if (!m_dry_ctr_win) { + m_dry_ctr_win = new AMSDryCtrWin(this); + } + m_dry_ctr_win->set_ams_id(info->ams_id); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + MachineObject *obj = dev->get_selected_machine(); + if (obj && obj->GetFilaSystem()) { + std::shared_ptr fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){}); + m_dry_ctr_win->update(fila_ptr, obj); + } + } + m_dry_ctr_win->ShowModal(); + } else { m_percent_humidity_dry_popup->Update(info); @@ -493,6 +512,10 @@ void AMSControl::msw_rescale() m_percent_humidity_dry_popup->msw_rescale(); } + if (m_dry_ctr_win){ + m_dry_ctr_win->msw_rescale(); + } + m_Humidity_tip_popup.msw_rescale(); Layout(); @@ -970,6 +993,19 @@ void AMSControl::UpdateAms(const std::string &series_name, } } + /*update AMS dry control dialog*/ + if (m_dry_ctr_win && m_dry_ctr_win->IsShown()) + { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + MachineObject *obj = dev->get_selected_machine(); + if (obj && obj->GetFilaSystem()) { + std::shared_ptr fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){}); + m_dry_ctr_win->update(fila_ptr, obj); + } + } + } + /*update ams extruder*/ if (m_extruder->updateNozzleNum(m_total_ext_count, series_name)) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 31c6b86feb..93d9acee67 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -21,6 +21,7 @@ namespace Slic3r { namespace GUI { //Previous definitions class uiAmsPercentHumidityDryPopup; +class AMSDryCtrWin; class AMSControl : public wxSimplebook { @@ -118,6 +119,7 @@ protected: AmsHumidityTipPopup m_Humidity_tip_popup; uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup; + AMSDryCtrWin* m_dry_ctr_win{nullptr}; std::string m_last_ams_id = ""; std::string m_last_tray_id = "";