diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 4f8c7c4e1..522fa028e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2824,19 +2824,24 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) } /*current*/ - if (obj->flag_update_nozzle) { + /*update when extder position changed or the machine changed*/ + if (obj->flag_update_nozzle || (m_nozzle_btn_panel->GetClientData() != obj)) + { if (obj->m_extder_data.current_extder_id == 0xf) { m_extruderImage[select_index]->setExtruderUsed(""); m_nozzle_btn_panel->updateState(""); - } else if (obj->m_extder_data.current_extder_id == MAIN_NOZZLE_ID) { + } + else if (obj->m_extder_data.current_extder_id == MAIN_NOZZLE_ID) { m_extruderImage[select_index]->setExtruderUsed("right"); m_nozzle_btn_panel->updateState("right"); - } else if (obj->m_extder_data.current_extder_id == DEPUTY_NOZZLE_ID) { + } + else if (obj->m_extder_data.current_extder_id == DEPUTY_NOZZLE_ID) { m_extruderImage[select_index]->setExtruderUsed("left"); m_nozzle_btn_panel->updateState("left"); } obj->flag_update_nozzle = false; + m_nozzle_btn_panel->SetClientData(obj); } /*enable status*/ diff --git a/src/slic3r/GUI/Widgets/SwitchButton.hpp b/src/slic3r/GUI/Widgets/SwitchButton.hpp index 8e411a8dc..2e1730095 100644 --- a/src/slic3r/GUI/Widgets/SwitchButton.hpp +++ b/src/slic3r/GUI/Widgets/SwitchButton.hpp @@ -57,11 +57,16 @@ public: bool switch_right{false}; bool is_enable {true}; + void* client_data = nullptr;/*MachineObject* in StatusPanel*/ + public: void Enable(); void Disable(); bool IsEnabled(){return is_enable;}; + void SetClientData(void* data) { client_data = data; }; + void* GetClientData() { return client_data; }; + void SetAutoDisableWhenSwitch() { auto_disable_when_switch = true; }; protected: