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.
This commit is contained in:
Noisyfox
2026-07-07 14:36:52 +08:00
parent 08b08e09fc
commit b2827cb9fa
2 changed files with 38 additions and 0 deletions

View File

@@ -6,6 +6,7 @@
#include "slic3r/GUI/MsgDialog.hpp" #include "slic3r/GUI/MsgDialog.hpp"
#include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" #include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h"
#include "slic3r/GUI/AMSDryControl.hpp"
#include "slic3r/GUI/DeviceCore/DevManager.h" #include "slic3r/GUI/DeviceCore/DevManager.h"
#include "slic3r/GUI/DeviceCore/DevFilaSystem.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); } if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); }
m_Humidity_tip_popup.Popup(); 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<DevFilaSystem> fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){});
m_dry_ctr_win->update(fila_ptr, obj);
}
}
m_dry_ctr_win->ShowModal();
}
else else
{ {
m_percent_humidity_dry_popup->Update(info); m_percent_humidity_dry_popup->Update(info);
@@ -493,6 +512,10 @@ void AMSControl::msw_rescale()
m_percent_humidity_dry_popup->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(); m_Humidity_tip_popup.msw_rescale();
Layout(); 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<DevFilaSystem> fila_ptr(obj->GetFilaSystem(), [](DevFilaSystem*){});
m_dry_ctr_win->update(fila_ptr, obj);
}
}
}
/*update ams extruder*/ /*update ams extruder*/
if (m_extruder->updateNozzleNum(m_total_ext_count, series_name)) if (m_extruder->updateNozzleNum(m_total_ext_count, series_name))
{ {

View File

@@ -21,6 +21,7 @@ namespace Slic3r { namespace GUI {
//Previous definitions //Previous definitions
class uiAmsPercentHumidityDryPopup; class uiAmsPercentHumidityDryPopup;
class AMSDryCtrWin;
class AMSControl : public wxSimplebook class AMSControl : public wxSimplebook
{ {
@@ -118,6 +119,7 @@ protected:
AmsHumidityTipPopup m_Humidity_tip_popup; AmsHumidityTipPopup m_Humidity_tip_popup;
uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup; uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup;
AMSDryCtrWin* m_dry_ctr_win{nullptr};
std::string m_last_ams_id = ""; std::string m_last_ams_id = "";
std::string m_last_tray_id = ""; std::string m_last_tray_id = "";