diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 8b0116e8b..2bb8954cb 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -232,6 +232,11 @@ void ExtruderImage::setExtruderUsed(std::string loc) current_nozzle_loc = loc; } +void ExtruderImage::update(ExtruderState single_state) +{ + m_single_ext_state = single_state; +} + void ExtruderImage::update(ExtruderState right_state, ExtruderState left_state) { m_left_ext_state = left_state; m_right_ext_state = right_state; @@ -330,16 +335,21 @@ void ExtruderImage::doRender(wxDC& dc) dc.DrawBitmap(right_nozzle_bmp->bmp(), pot.x, pot.y + right_pipe_bmp->GetBmpSize().y); } else{ + + ScalableBitmap* nozzle_bmp = nullptr; switch (m_single_ext_state) { - case Slic3r::GUI::FILLED_LOAD: m_extruder_single_nozzle_filled_load; break; - case Slic3r::GUI::FILLED_UNLOAD: m_extruder_single_nozzle_filled_unload; break; - case Slic3r::GUI::EMPTY_LOAD: m_extruder_single_nozzle_empty_load; break; - case Slic3r::GUI::EMPTY_UNLOAD: m_extruder_single_nozzle_empty_unload; break; - default: - break; + case Slic3r::GUI::FILLED_LOAD: nozzle_bmp = m_extruder_single_nozzle_filled_load; break; + case Slic3r::GUI::FILLED_UNLOAD: nozzle_bmp = m_extruder_single_nozzle_filled_unload; break; + case Slic3r::GUI::EMPTY_LOAD: nozzle_bmp = m_extruder_single_nozzle_empty_load; break; + case Slic3r::GUI::EMPTY_UNLOAD: nozzle_bmp = m_extruder_single_nozzle_empty_unload; break; + default: break; + } + + if (nozzle_bmp) + { + dc.DrawBitmap(nozzle_bmp->bmp(), pot.x - nozzle_bmp->GetBmpWidth() / 2, (size.y - nozzle_bmp->GetBmpHeight()) / 2); } - dc.DrawBitmap(m_extruder_single_nozzle_empty_load->bmp(), pot.x - m_extruder_single_nozzle_empty_load->GetBmpWidth() / 2, (size.y - m_extruder_single_nozzle_empty_load->GetBmpHeight()) / 2); } } @@ -2923,6 +2933,12 @@ void StatusPanel::update_temp_ctrl(MachineObject *obj) void StatusPanel::update_misc_ctrl(MachineObject *obj) { + auto get_extder_shown_state = [](bool ext_has_filament) -> ExtruderState + { + // no data to distinguish ExtruderState::UNLOAD or LOAD, use LOAD png as default + return ext_has_filament ? ExtruderState::FILLED_LOAD : ExtruderState::EMPTY_LOAD; + }; + if (!obj) return; /*extder*/ @@ -2936,7 +2952,15 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) m_nozzle_btn_panel->Show(); m_extruderImage[select_index]->setExtruderCount(m_nozzle_num); - m_extruderImage[select_index]->update(ExtruderState::FILLED_LOAD, ExtruderState::FILLED_UNLOAD); + + assert(obj->m_extder_data.extders.size() > 1); + if (obj->m_extder_data.extders.size() > 1) + { + const Extder& left_extder = obj->m_extder_data.extders[0]; + const Extder& right_extder = obj->m_extder_data.extders[1]; + m_extruderImage[select_index]->update(get_extder_shown_state(left_extder.ext_has_filament), + get_extder_shown_state(right_extder.ext_has_filament)); + } /*current*/ if (obj->flag_update_nozzle) { @@ -2955,6 +2979,14 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) m_nozzle_btn_panel->Hide(); m_extruder_book->SetSelection(m_nozzle_num); m_extruderImage[select_index]->setExtruderCount(m_nozzle_num); + + assert(!obj->m_extder_data.extders.empty()); + if (!obj->m_extder_data.extders.empty()) + { + const Extder& extder = obj->m_extder_data.extders[0]; + ExtruderState shown_state = get_extder_shown_state(extder.ext_has_filament); + m_extruderImage[select_index]->update(shown_state); + } } /*switch extder*/ diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 1280ab288..dce5d8786 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -117,7 +117,9 @@ class ExtruderImage : public wxWindow public: void update(int nozzle_num, int nozzle_id); + void update(ExtruderState single_state); void update(ExtruderState right_state, ExtruderState left_state); + void msw_rescale(); void setExtruderCount(int nozzle_num); void setExtruderUsed(std::string loc);