diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 9132f5541d..880d1cd9a2 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -123,8 +123,8 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_cans->Add(m_simplebook_ams, 0, wxLEFT | wxLEFT, FromDIP(10)); // ams mode - m_simplebook_generic_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_simplebook_generic_cans->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + m_simplebook_generic_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); + m_simplebook_generic_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); // none ams mode m_none_ams_panel = new wxPanel(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); @@ -145,12 +145,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_none_ams_panel->Layout(); //extra ams mode - m_simplebook_extra_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_simplebook_extra_cans->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + m_simplebook_extra_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); + m_simplebook_extra_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false); - m_simplebook_ams->AddPage(m_simplebook_generic_cans, wxEmptyString, false); - m_simplebook_ams->AddPage(m_simplebook_extra_cans, wxEmptyString, false); + m_simplebook_ams->AddPage(m_simplebook_generic_ams, wxEmptyString, false); + m_simplebook_ams->AddPage(m_simplebook_extra_ams, wxEmptyString, false); m_panel_can->SetSizer(m_sizer_cans); m_panel_can->Layout(); @@ -594,8 +594,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons post_event(wxCommandEvent(EVT_AMS_RETRY)); }); - CreateAms(); - SetSelection(0); EnterNoneAMSMode(); } @@ -905,24 +903,52 @@ void AMSControl::CreateAms() Thaw(); } + +void AMSControl::ClearAms() { + m_simplebook_generic_ams->DeleteAllPages(); + m_simplebook_extra_ams->DeleteAllPages(); + m_simplebook_generic_ams->DestroyChildren(); + m_simplebook_extra_ams->DestroyChildren(); + m_simplebook_generic_ams->Layout(); + m_simplebook_extra_ams->Layout(); + m_simplebook_generic_ams->Refresh(); + m_simplebook_extra_ams->Refresh(); + + for (auto it : m_ams_preview_list) { + delete it.second; + } + m_ams_preview_list.clear(); + + m_current_show_ams = ""; + m_current_ams = ""; + m_current_select = ""; + + m_ams_item_list.clear(); + m_sizer_prv->Clear(); +} + +void AMSControl::CreateAmsSingleNozzle() +{ + //add ams data + for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) { + if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM) { + AddAmsPreview(*ams_info); + AddAms(*ams_info); + AddExtraAms(*ams_info); + } + else if (ams_info->cans.size() == 1) { + AddAmsPreview(*ams_info); + AddAms(*ams_info); + } + } +} + void AMSControl::Reset() { - auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_1 = Caninfo{"1", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_2 = Caninfo{"2", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_3 = Caninfo{"3", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + m_ams_info.clear(); + ClearAms(); - AMSinfo ams1 = AMSinfo{"0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams2 = AMSinfo{"1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams3 = AMSinfo{"2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - - std::vector ams_info{ams1, ams2, ams3, ams4}; - std::vector::iterator it; - UpdateAms(ams_info, true); - m_current_show_ams = ""; - m_current_ams = ""; - m_current_select = ""; + Layout(); } void AMSControl::show_noams_mode() @@ -1007,79 +1033,102 @@ void AMSControl::reset_vams() } -void AMSControl::UpdateAms(std::vector info, bool is_reset) +void AMSControl::UpdateAms(std::vector ams_info, bool is_reset) { - std::string curr_ams_id = GetCurentAms(); - std::string curr_can_id = GetCurrentCan(curr_ams_id); - m_button_area->Layout(); - m_button_area->Fit(); + m_button_area->Fit(); - // update item - m_ams_info = info; - if (m_ams_model == AMSModel::GENERIC_AMS){ - m_ams_item_list = m_ams_generic_item_list; - } - else if (m_ams_model == AMSModel::AMS_LITE) { - m_ams_item_list = m_ams_extra_item_list; - } + /*if (!test)*/{ + // update item + bool fresh = false; - if (info.size() > 1) { - m_simplebook_amsprvs->Show(); - m_amswin->Layout(); - m_amswin->Fit(); - SetSize(m_amswin->GetSize()); - SetMinSize(m_amswin->GetSize()); - } else { - m_simplebook_amsprvs->Hide(); - m_amswin->Layout(); - m_amswin->Fit(); - SetSize(m_amswin->GetSize()); - SetMinSize(m_amswin->GetSize()); - } - - size_t i = 0; - for (auto prv_it : m_ams_preview_list) { - AMSPreview* prv = prv_it.second; - if (i < info.size() && info.size() > 1) { - prv->Update(m_ams_info[i]); - prv->Open(); - } else { - prv->Close(); - } - i++; - } - - // update cans - for (auto ams_item : m_ams_item_list) { - if (ams_item.second == nullptr) { - continue; - } - std::string ams_id = ams_item.second->get_ams_id(); - AmsItem* cans = ams_item.second; - for (auto ifo : m_ams_info) { - if (ifo.ams_id == ams_id) { - cans->Update(ifo); - cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true); + // basic check + if (m_ams_info.size() == ams_info.size() ) { + for (int i = 0; i < m_ams_info.size(); i++){ + if (m_ams_info[i].ams_id != ams_info[i].ams_id){ + fresh = true; + } } } - } - - if ( m_current_show_ams.empty() && !is_reset ) { - if (info.size() > 0) { - SwitchAms(info[0].ams_id); + else{ + fresh = true; } - } - if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) { - m_vams_lib->OnSelected(); + m_ams_info.clear(); + m_ams_info = ams_info; + if (fresh){ + ClearAms(); + //if (m_extder_data.total_extder_count >= 2){ + // CreateAmsDoubleNozzle(series_name, printer_type); + //}else{ + CreateAmsSingleNozzle(); + //} + SetSize(wxSize(FromDIP(578), -1)); + SetMinSize(wxSize(FromDIP(578), -1)); + Layout(); + } + + if (m_ams_model == AMSModel::GENERIC_AMS){ + m_ams_item_list = m_ams_generic_item_list; + } + else if (m_ams_model == AMSModel::AMS_LITE) { + m_ams_item_list = m_ams_extra_item_list; + } + + if (ams_info.size() > 1) { + m_simplebook_amsprvs->Show(); + m_amswin->Layout(); + m_amswin->Fit(); + SetSize(m_amswin->GetSize()); + SetMinSize(m_amswin->GetSize()); + } else { + m_simplebook_amsprvs->Hide(); + m_amswin->Layout(); + m_amswin->Fit(); + SetSize(m_amswin->GetSize()); + SetMinSize(m_amswin->GetSize()); + } + + // update cans + + for (auto ams_item : m_ams_item_list) { + if (ams_item.second == nullptr){ + continue; + } + std::string ams_id = ams_item.second->get_ams_id(); + AmsItem* cans = ams_item.second; + for (auto ifo : m_ams_info) { + if (ifo.ams_id == ams_id) { + cans->Update(ifo); + cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true); + } + } + } + + for (auto ams_prv : m_ams_preview_list) { + std::string id = ams_prv.second->get_ams_id(); + auto item = m_ams_item_list.find(id); + if (item != m_ams_item_list.end()) + { ams_prv.second->Update(item->second->get_ams_info()); + } + } + + if ( m_current_show_ams.empty() && !is_reset ) { + if (ams_info.size() > 0) { + SwitchAms(ams_info[0].ams_id); + } + } + + if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) { + m_vams_lib->OnSelected(); + } } /*update humidity popup*/ if (m_percent_humidity_dry_popup->IsShown()) { string target_id = m_percent_humidity_dry_popup->get_owner_ams_id(); - for (const auto& the_info : info) + for (const auto& the_info : ams_info) { if (target_id == the_info.ams_id) { @@ -1110,18 +1159,18 @@ void AMSControl::AddAmsPreview(AMSinfo info) void AMSControl::AddAms(AMSinfo info) { - auto ams_item = new AmsItem(m_simplebook_generic_cans, info, AMSModel::GENERIC_AMS); - m_simplebook_generic_cans->AddPage(ams_item, wxEmptyString, false); - ams_item->set_selection(m_simplebook_generic_cans->GetPageCount() - 1); + auto ams_item = new AmsItem(m_simplebook_generic_ams, info, AMSModel::GENERIC_AMS); + m_simplebook_generic_ams->AddPage(ams_item, wxEmptyString, false); + ams_item->set_selection(m_simplebook_generic_ams->GetPageCount() - 1); m_ams_generic_item_list[info.ams_id] = ams_item; } void AMSControl::AddExtraAms(AMSinfo info) { - auto ams_item = new AmsItem(m_simplebook_extra_cans, info, AMSModel::AMS_LITE); - m_simplebook_extra_cans->AddPage(ams_item, wxEmptyString, false); - ams_item->set_selection(m_simplebook_extra_cans->GetPageCount() - 1); + auto ams_item = new AmsItem(m_simplebook_extra_ams, info, AMSModel::AMS_LITE); + m_simplebook_extra_ams->AddPage(ams_item, wxEmptyString, false); + ams_item->set_selection(m_simplebook_extra_ams->GetPageCount() - 1); m_ams_extra_item_list[info.ams_id] = ams_item; } @@ -1177,10 +1226,10 @@ void AMSControl::SwitchAms(std::string ams_id) if (item->get_ams_id() == ams_id) { if (m_ams_model == AMSModel::GENERIC_AMS) { - m_simplebook_generic_cans->SetSelection(item->get_selection()); + m_simplebook_generic_ams->SetSelection(item->get_selection()); } else if (m_ams_model == AMSModel::AMS_LITE) { - m_simplebook_extra_cans->SetSelection(item->get_selection()); + m_simplebook_extra_ams->SetSelection(item->get_selection()); } } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 3cee1520e8..67158afe88 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -48,9 +48,8 @@ protected: wxSimplebook *m_simplebook_calibration = {nullptr}; wxSimplebook *m_simplebook_amsprvs = {nullptr}; wxSimplebook *m_simplebook_ams = {nullptr}; - - wxSimplebook *m_simplebook_generic_cans= {nullptr}; - wxSimplebook *m_simplebook_extra_cans = {nullptr}; + wxSimplebook* m_simplebook_generic_ams = {nullptr}; + wxSimplebook* m_simplebook_extra_ams = {nullptr}; wxSimplebook *m_simplebook_bottom = {nullptr}; @@ -133,6 +132,8 @@ public: void UpdateStepCtrl(bool is_extrusion_exist); void CreateAms(); + void CreateAmsSingleNozzle(); + void ClearAms(); void UpdateAms(std::vector info, bool is_reset = true); void AddAms(AMSinfo info); void AddAmsPreview(AMSinfo info); diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index 1ce7080159..c2b2b998b2 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -151,7 +151,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size, wxBORDER_NONE); - SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this); Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this); @@ -249,7 +249,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) wxPaintDC dc(this); auto colour = StateColor::darkModeColorFor(AMS_CONTROL_GRAY700); - if (!wxWindow::IsEnabled()) { colour = AMS_CONTROL_GRAY500; } + if (!wxWindow::IsEnabled()) { colour = StateColor::darkModeColorFor(AMS_CONTROL_GRAY500); } auto pot = wxPoint((size.x - m_bitmap_selected.GetBmpSize().x) / 2, (size.y - m_bitmap_selected.GetBmpSize().y) / 2); @@ -277,6 +277,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) dc.SetPen(wxPen(colour)); dc.SetBrush(wxBrush(colour)); dc.SetFont(Label::Body_11); + //dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR)); dc.SetTextForeground(colour); auto tsize = dc.GetTextExtent(m_refresh_id); pot = wxPoint((size.x - tsize.x) / 2, (size.y - tsize.y) / 2); @@ -388,7 +389,7 @@ void AMSextruderImage::doRender(wxDC &dc) AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, AMS_EXTRUDER_BITMAP_SIZE); - SetBackgroundColour(*wxWHITE); + SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); m_ams_extruder = ScalableBitmap(this, "monitor_ams_extruder",55); SetSize(AMS_EXTRUDER_BITMAP_SIZE); @@ -568,7 +569,7 @@ void AMSVirtualRoad::OnVamsLoading(bool load, wxColour col) void AMSVirtualRoad::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, wxDefaultSize, wxBORDER_NONE); - SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR)); Layout(); Bind(wxEVT_PAINT, &AMSVirtualRoad::paintEvent, this); } @@ -638,7 +639,7 @@ AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info) { m_border_color = (wxColour(130, 130, 128)); m_road_def_color = AMS_CONTROL_GRAY500; - wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); create(parent); Bind(wxEVT_PAINT, &AMSLib::paintEvent, this); @@ -1024,7 +1025,7 @@ void AMSLib::render_lite_lib(wxDC& dc) //draw def background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR))); dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0); if (tmp_lib_colour.GetLuminance() < 0.6) { @@ -1421,7 +1422,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in } Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this); - wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); } void AMSRoad::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size); } @@ -1659,7 +1660,7 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con wxWindow::Create(parent, id, pos, size); SetMinSize(AMS_ITEM_SIZE); SetMaxSize(AMS_ITEM_SIZE); - SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR)); Refresh(); } @@ -2042,14 +2043,13 @@ AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model) : AmsItem() create(parent); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Bind(wxEVT_PAINT, &AmsItem::paintEvent, this); } void AmsItem::create(wxWindow *parent) { Freeze(); - SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); - if (m_ams_model == AMSModel::GENERIC_AMS || m_ams_model == AMSModel::N3F_AMS || m_ams_model == AMSModel::N3S_AMS) { sizer_can = new wxBoxSizer(wxHORIZONTAL); sizer_item = new wxBoxSizer(wxVERTICAL); @@ -2106,7 +2106,7 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size { auto amscan = new wxWindow(this, wxID_ANY); - amscan->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + amscan->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 8eb7c3812a..2cb771440e 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -137,6 +137,7 @@ enum FilamentStepType { #define AMS_HUMIDITY_NO_PERCENT_SIZE wxSize(FromDIP(60), FromDIP(26)) #define AMS_HUMIDITY_DRY_WIDTH FromDIP(35) +#define GENERIC_AMS_SLOT_NUM 4 struct Caninfo { @@ -575,6 +576,8 @@ public: std::string GetCurrentCan(); public: + AMSinfo get_ams_info() const { return m_info; }; + std::string get_ams_id() const { return m_info.ams_id; }; std::map get_can_lib_list() const { return m_can_lib_list; };