diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 625426c6f..f671253ce 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -756,7 +756,7 @@ void AMSMaterialsSetting::on_clr_picker(wxMouseEvent &event) bool AMSMaterialsSetting::is_virtual_tray() { - if (tray_id == VIRTUAL_TRAY_MAIN_ID) + if (ams_id == VIRTUAL_TRAY_MAIN_ID || ams_id == VIRTUAL_TRAY_DEPUTY_ID) return true; return false; } diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 31e4c72e7..271a60bc4 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2591,7 +2591,6 @@ void StatusPanel::update_ams(MachineObject *obj) if (obj) { if (obj->get_printer_ams_type() == "f1") { ams_mode = AMSModel::AMS_LITE; } - else if(obj->get_printer_ams_type() == "generic") { ams_mode = AMSModel::GENERIC_AMS; } } if (obj->is_enable_np && obj->amsList.size() > 0){ ams_mode = AMSModel(obj->amsList.begin()->second->type); @@ -2644,6 +2643,7 @@ void StatusPanel::update_ams(MachineObject *obj) for (auto slot : obj->vt_slot) { AMSinfo info; info.ReadExtInfo(slot); + if (ams_mode == AMSModel::AMS_LITE) info.ext_type = AMSModelOriginType::LITE_EXT; ext_info.push_back(info); } std::string dev_id = obj->dev_id; @@ -3840,7 +3840,11 @@ void StatusPanel::on_ams_refresh_rfid(wxCommandEvent &event) return; } - std::string curr_ams_id = m_ams_control->GetCurentAms(); + //std::string curr_ams_id = m_ams_control->GetCurentAms(); + if (event.GetInt() < 0 || event.GetInt() > VIRTUAL_TRAY_MAIN_ID){ + return; + } + std::string curr_ams_id = std::to_string(event.GetInt()); // do not support refresh rfid for VIRTUAL_TRAY_MAIN_ID if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_MAIN_ID)) == 0) { return; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index a3e707955..1635ab8cc 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2600,7 +2600,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons // m_img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); // m_img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); // m_img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); - m_sizer_option_left->Add(m_button_auto_refill, 0, wxALIGN_CENTER, 0); + m_sizer_option_left->Add(m_button_auto_refill, 0, wxALIGN_CENTER_VERTICAL, 0); m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24); m_button_ams_setting_hover = ScalableBitmap(this, "ams_setting_hover", 24); @@ -2608,7 +2608,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_button_ams_setting = new wxStaticBitmap(m_amswin, wxID_ANY, m_button_ams_setting_normal.bmp(), wxDefaultPosition, wxSize(FromDIP(24), FromDIP(24))); m_button_ams_setting->SetBackgroundColour(m_amswin->GetBackgroundColour()); - m_sizer_option_left->Add(m_button_ams_setting, 0, wxALIGN_CENTER|wxLEFT, FromDIP(5)); + m_sizer_option_left->Add(m_button_ams_setting, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20)); /*option mid*/ @@ -2659,14 +2659,14 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons //m_sizer_option_right->Add(0, 0, 1, wxEXPAND, 0); m_sizer_option_right->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(0)); - m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(5)); + m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(20)); - m_sizer_ams_option->Add(m_sizer_option_left, 0, wxLEFT, 0); + m_sizer_ams_option->Add(m_sizer_option_left, 0, wxALIGN_LEFT, 0); //m_sizer_ams_option->Add(m_sizer_option_mid, 1, wxEXPAND, 0); - m_sizer_ams_option->Add(m_sizer_option_mid, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, FromDIP(60)); + m_sizer_ams_option->Add(m_sizer_option_mid, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, FromDIP(90)); //m_sizer_ams_option->Add(m_sizer_option_right, 0, wxEXPAND, 0); - m_sizer_ams_option->Add(m_sizer_option_right, 0, wxALIGN_CENTER, 0); + m_sizer_ams_option->Add(m_sizer_option_right, 0, wxALIGN_RIGHT, 0); @@ -2987,6 +2987,9 @@ std::string AMSControl::GetCurrentCan(std::string amsid) std::string current_can; for (auto ams_item : m_ams_item_list) { AmsItem* item = ams_item.second; + if (item == nullptr){ + continue; + } if (item->m_info.ams_id == amsid) { current_can = item->GetCurrentCan(); return current_can; @@ -3019,7 +3022,7 @@ void AMSControl::AmsSelectedSwitch(wxCommandEvent& event) { if (m_current_ams != ams_id_selected){ m_current_ams = ams_id_selected; } - if (m_current_show_ams_left != ams_id_selected){ + if (m_current_show_ams_left != ams_id_selected && m_current_show_ams_left != "") { auto item = m_ams_item_list[m_current_show_ams_left]; if (!item) return; try{ @@ -3031,7 +3034,7 @@ void AMSControl::AmsSelectedSwitch(wxCommandEvent& event) { ; } } - else if (m_current_show_ams_right != ams_id_selected){ + else if (m_current_show_ams_right != ams_id_selected && m_current_show_ams_right != "") { auto item = m_ams_item_list[m_current_show_ams_right]; if (!item) return; try { @@ -3269,42 +3272,7 @@ void AMSControl::UpdateStepCtrl(bool is_extrusion) }*/ } -void AMSControl::UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step) { - bool left = false; - int len = -1; - for (auto id : m_item_ids[0]){ - if (ams_id == id){ - left = true; - break; - } - } - if (m_ams_item_list[ams_id]->m_info.cans.size() == 4){ - len = 133; - } - else{ - for (auto pairId : pair_id){ - if (pairId.first == ams_id) { - len = 72; - break; - } - if (pairId.second == ams_id){ - len = 188; - break; - } - } - } - if (len == -1){ - if (left){ - len = 213; - } - else{ - len = 72; - } - } - //std::vector m_item_nums = { 0, 0 }; - //std::vector> m_item_ids = { {},{} }; -} void AMSControl::CreateAms() @@ -3493,14 +3461,14 @@ void AMSControl::CreateAmsNew() m_extruder->update(2); auto it = m_ams_item_list.begin(); - m_current_show_ams_left = "-1"; - m_current_show_ams_right = "-1"; + m_current_show_ams_left = ""; + m_current_show_ams_right = ""; for (auto it = m_ams_item_list.begin(); it != m_ams_item_list.end(); it++) { - if (it->second->m_info.nozzle_id == 1 && m_current_show_ams_left == "-1"){ + if (it->second->m_info.nozzle_id == 1 && m_current_show_ams_left == ""){ m_current_show_ams_left = it->second->m_info.ams_id; } - if (it->second->m_info.nozzle_id == 0 && m_current_show_ams_right == "-1"){ + if (it->second->m_info.nozzle_id == 0 && m_current_show_ams_right == ""){ m_current_show_ams_right = it->second->m_info.ams_id; } } @@ -3646,14 +3614,14 @@ void AMSControl::CreateAmsSingleNozzle() m_down_road->UpdateRight(1, right_init_mode); } - m_current_show_ams_left = "-1"; - m_current_show_ams_right = "-1"; + m_current_show_ams_left = ""; + m_current_show_ams_right = ""; for (auto it = m_ams_item_list.begin(); it != m_ams_item_list.end(); it++) { - if (!IsAmsInRightPanel(it->second->m_info.ams_id) && m_current_show_ams_left == "-1"){ + if (!IsAmsInRightPanel(it->second->m_info.ams_id) && m_current_show_ams_left == ""){ m_current_show_ams_left = it->second->m_info.ams_id; } - if (IsAmsInRightPanel(it->second->m_info.ams_id) && m_current_show_ams_right == "-1"){ + if (IsAmsInRightPanel(it->second->m_info.ams_id) && m_current_show_ams_right == ""){ m_current_show_ams_right = it->second->m_info.ams_id; } } @@ -3835,6 +3803,7 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex else{ fresh = true; } + m_ams_item_list; m_ams_info.clear(); m_ams_info = ams_info; m_ext_info.clear(); @@ -3852,24 +3821,29 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex m_right_page_index = 0; if (m_nozzle_num >= 2){ CreateAmsNew(); + m_ams_item_list; }else{ /*m_panel_items_right->ClearBackground(); m_panel_items_left->ClearBackground();*/ m_item_ids = { {}, {} }; pair_id.clear(); CreateAmsSingleNozzle(); + } /*m_amswin->Layout(); m_amswin->Fit(); */ SetSize(wxSize(FromDIP(578), -1)); SetMinSize(wxSize(FromDIP(578), -1)); - + m_ams_item_list; } // update cans for (auto ams_item : m_ams_item_list) { + if (ams_item.second == nullptr){ + continue; + } std::string ams_id = ams_item.second->m_info.ams_id; AmsItem* cans = ams_item.second; if (cans->m_info.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->m_info.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)){ @@ -4143,7 +4117,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { if (single_info[0].nozzle_id == 0) { wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams_item = new AmsItem(book_panel, single_info[0], mode, AMSPanelPos::RIGHT_PANEL); sizer->Add(ams_item, 0, wxLEFT, FromDIP(30)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); @@ -4159,7 +4133,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { else if (single_info[0].nozzle_id == 1) { wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams_item = new AmsItem(book_panel, single_info[0], mode, AMSPanelPos::LEFT_PANEL); sizer->Add(ams_item, 0, wxLEFT, FromDIP(30)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); @@ -4176,7 +4150,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { else if (m_nozzle_num == 1){ if (!left){ wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams_item = new AmsItem(book_panel, single_info[0], mode, AMSPanelPos::RIGHT_PANEL); sizer->Add(ams_item, 0, wxLEFT, FromDIP(30)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); @@ -4192,7 +4166,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { else { wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams_item = new AmsItem(book_panel, single_info[0], mode, AMSPanelPos::LEFT_PANEL); sizer->Add(ams_item, 0, wxLEFT, FromDIP(30)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); @@ -4207,7 +4181,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { } } - ams_item->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + //ams_item->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); m_ams_item_list[single_info[0].ams_id] = ams_item; } else if (single_info.size() == 2) @@ -4227,7 +4201,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { if (single_info[1].nozzle_id == 0) { wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); ams_item = new AmsItem(book_panel, single_info[0], AMSModel::N3S_AMS, AMSPanelPos::RIGHT_PANEL); @@ -4246,7 +4220,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { else if (single_info[1].nozzle_id == 1) { wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); ams_item = new AmsItem(book_panel, single_info[0], AMSModel::N3S_AMS, AMSPanelPos::LEFT_PANEL); @@ -4265,7 +4239,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { if (!left) { wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); ams_item = new AmsItem(book_panel, single_info[0], AMSModel::N3S_AMS, AMSPanelPos::RIGHT_PANEL); @@ -4284,7 +4258,7 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { else { wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150))); book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); ams_item = new AmsItem(book_panel, single_info[0], AMSModel::N3S_AMS, AMSPanelPos::LEFT_PANEL); @@ -4843,7 +4817,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy AMSinfo info; - if (m_ams_item_list[ams_id] != nullptr) { + if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { info = m_ams_item_list[ams_id]->m_info; } else diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index 90522b060..122d41ed3 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -122,6 +122,7 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo void AMSinfo::ReadExtInfo(AmsTray tray) { this->ams_id = tray.id; + this->ams_type = AMSModel::EXT_AMS; Caninfo can; can.can_id = std::to_string(0); can.material_name = tray.filament_setting_id; @@ -145,7 +146,7 @@ Description:AMSExtText AMSExtText::AMSExtText(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, AMS_REFRESH_SIZE); - SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Bind(wxEVT_PAINT, &AMSExtText::paintEvent, this); SetSize(AMS_REFRESH_SIZE); @@ -156,6 +157,8 @@ AMSExtText::~AMSExtText() {} void AMSExtText::msw_rescale() { + Layout(); + Fit(); Refresh(); } @@ -190,10 +193,10 @@ void AMSExtText::doRender(wxDC& dc) { auto size = GetSize(); - dc.SetPen(wxPen(AMS_CONTROL_GRAY800, 2, wxSOLID)); + dc.SetPen(wxPen(StateColor::darkModeColorFor(AMS_CONTROL_GRAY800), 2, wxSOLID)); auto tsize = dc.GetMultiLineTextExtent(_L("Ext")); dc.SetFont(Label::Body_13); - dc.SetTextForeground(AMS_CONTROL_GRAY800); + dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_GRAY800)); wxPoint pot(FromDIP((size.x - tsize.x) / 2), FromDIP((size.y - tsize.y) / 2)); dc.DrawText(_L("Ext"), pot); } @@ -231,7 +234,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(wxColour(240, 240, 240)); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR)); Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this); Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this); @@ -317,6 +320,7 @@ void AMSrefresh::post_event(wxCommandEvent &&event) if (m_disable_mode) return; event.SetString(m_info.can_id); + event.SetInt(atoi(m_ams_id.c_str())); event.SetEventObject(m_parent); wxPostEvent(m_parent, event); event.Skip(); @@ -328,7 +332,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); @@ -353,10 +357,9 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) } } - dc.SetPen(wxPen(colour)); - dc.SetBrush(wxBrush(colour)); dc.SetFont(Label::Body_11); - //dc.SetTextForeground(colour); + //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); dc.DrawText(m_refresh_id, pot); @@ -397,6 +400,9 @@ void AMSrefresh::msw_rescale() { m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_5); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_6); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_7); + + Layout(); + Refresh(); } void AMSrefresh::DoSetSize(int x, int y, int width, int height, int sizeFlags) @@ -425,6 +431,7 @@ void AMSextruderImage::msw_rescale() //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE); //auto image = m_ams_extruder.ConvertToImage(); m_ams_extruder = ScalableBitmap(this, m_file_name, 36); + Layout(); Refresh(); } @@ -465,6 +472,11 @@ void AMSextruderImage::doRender(wxDC &dc) dc.SetBrush(m_colour); dc.DrawRectangle(FromDIP(3), FromDIP(10), size.x - FromDIP(6), size.y - FromDIP(20)); } + else{ + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(*wxWHITE); + dc.DrawRectangle(FromDIP(3), FromDIP(10), size.x - FromDIP(6), size.y - FromDIP(20)); + } dc.DrawBitmap(m_ams_extruder.bmp(), wxPoint((size.x - m_ams_extruder.GetBmpSize().x) / 2, (size.y - m_ams_extruder.GetBmpSize().y) / 2)); } } @@ -497,7 +509,7 @@ Description:AMSExtImage upon ext lib AMSExtImage::AMSExtImage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE); - SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); /*SetSize(wxSize(FromDIP(78), FromDIP(50))); @@ -514,6 +526,8 @@ void AMSExtImage::msw_rescale() //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE); //auto image = m_ams_extruder.ConvertToImage(); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); + Layout(); + Fit(); Refresh(); } @@ -807,7 +821,7 @@ AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info, AMSModelOrig m_border_color = (wxColour(130, 130, 128)); m_road_def_color = AMS_CONTROL_GRAY500; m_ext_type = ext_type; - 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); @@ -837,8 +851,8 @@ void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const w m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14); m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14); m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68); - m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 68); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76); + m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76); m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72); m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72); @@ -1166,9 +1180,9 @@ void AMSLib::render_extra_lib(wxDC& dc) { wxSize size = GetSize(); auto libsize = AMS_LITE_CAN_LIB_SIZE; - ScalableBitmap tray_bitmap = (m_can_index % 2 == 0) ? m_bitmap_extra_tray_left : m_bitmap_extra_tray_right; - ScalableBitmap tray_bitmap_hover = (m_can_index % 2 == 0) ? m_bitmap_extra_tray_left_hover : m_bitmap_extra_tray_right_hover; - ScalableBitmap tray_bitmap_selected = (m_can_index % 2 == 0) ? m_bitmap_extra_tray_left_selected : m_bitmap_extra_tray_right_selected; + ScalableBitmap tray_bitmap = (m_can_index <= 1) ? m_bitmap_extra_tray_left : m_bitmap_extra_tray_right; + ScalableBitmap tray_bitmap_hover = (m_can_index <= 1) ? m_bitmap_extra_tray_left_hover : m_bitmap_extra_tray_right_hover; + ScalableBitmap tray_bitmap_selected = (m_can_index <= 1) ? m_bitmap_extra_tray_left_selected : m_bitmap_extra_tray_right_selected; auto tmp_lib_colour = m_info.material_colour; change_the_opacity(tmp_lib_colour); @@ -1186,7 +1200,7 @@ void AMSLib::render_extra_lib(wxDC& dc) dc.SetPen(wxPen(m_info.material_colour, 4, wxSOLID)); } - if (m_can_index == 0 || m_can_index == 1) { + if (m_can_index == 0 || m_can_index == 3) { dc.DrawLine(size.x / 2, size.y / 2, size.x / 2, size.y); } else { @@ -1195,7 +1209,11 @@ void AMSLib::render_extra_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))); + if (m_ams_model == AMSModel::EXT_AMS) + { + dc.DrawRoundedRectangle(FromDIP(10), FromDIP(6), libsize.x - FromDIP(20), libsize.y - FromDIP(12), 0); + } dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), libsize.x - FromDIP(20), libsize.y - FromDIP(20), 0); if (tmp_lib_colour.GetLuminance() < 0.6) { @@ -1331,6 +1349,15 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.DrawBitmap(temp_bitmap_brand.bmp(), (size.x - temp_bitmap_brand.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_brand.GetBmpSize().y)); } } + if (alpha == 0) { + dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2)); + } + else if (alpha != 255 && alpha != 254) { + if (transparent_changed) { + transparent_changed = false; + } + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2)); + } dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -1379,7 +1406,7 @@ void AMSLib::render_generic_lib(wxDC &dc) //transparent if (alpha == 0) { - dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(4), FromDIP(4)); + dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2)); } else if (alpha != 255 && alpha != 254) { if (transparent_changed) { @@ -1393,11 +1420,11 @@ void AMSLib::render_generic_lib(wxDC &dc) replace.push_back(rgb); std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f); replace.push_back(fill_replace); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68, false, false, true, replace); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76, false, false, true, replace); transparent_changed = false; } - dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2)); } //gradient if (m_info.material_cols.size() > 1) { @@ -1647,8 +1674,8 @@ void AMSLib::msw_rescale() m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14); m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14); m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68); - m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 68); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76); + m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76); m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72); m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72); @@ -1972,13 +1999,13 @@ AMSRoadUpPart::AMSRoadUpPart(wxWindow* parent, wxWindowID id, AMSinfo info, AMSM Bind(wxEVT_PAINT, &AMSRoadUpPart::paintEvent, this); - wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); } void AMSRoadUpPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, size); - SetSize(size); + //SetSize(size); SetMinSize(size); SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); Layout(); @@ -2036,7 +2063,6 @@ void AMSRoadUpPart::render(wxDC& dc) void AMSRoadUpPart::doRender(wxDC& dc) { - wxSize size = GetSize(); //dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); @@ -2087,7 +2113,7 @@ void AMSRoadUpPart::doRender(wxDC& dc) //width = 0.11 * size.x, height = 0.294 * size.y; //dc.DrawRectangle((size.x - width) / 2, (16), (28), (10)); //dc.DrawRectangle((size.x - width) / 2, (size.y * 0.62 - height / 2), (width), (height)); - dc.DrawRectangle(size.x / 2 - FromDIP(14), FromDIP(16), FromDIP(28), FromDIP(10)); + dc.DrawRectangle(size.x / 2 - FromDIP(14), height - FromDIP(5), FromDIP(28), FromDIP(10)); } // left mode } @@ -2136,7 +2162,7 @@ AMSRoadDownPart::AMSRoadDownPart(wxWindow* parent, wxWindowID id, const wxPoint& this->SetSize(AMS_DOWN_ROAD_SIZE); Bind(wxEVT_PAINT, &AMSRoadDownPart::paintEvent, this); - wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + wxWindow::SetBackgroundColour(*wxWHITE); } @@ -2247,8 +2273,8 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine(left_nozzle_pos.x - FromDIP(223), 0, left_nozzle_pos.x - FromDIP(223), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE: - dc.DrawLine(left_nozzle_pos.x - FromDIP(198), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); - dc.DrawLine(left_nozzle_pos.x - FromDIP(198), 0, left_nozzle_pos.x - FromDIP(198), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(197), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(197), 0, left_nozzle_pos.x - FromDIP(197), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS: dc.DrawLine(left_nozzle_pos.x - FromDIP(3), 0, left_nozzle_pos.x - FromDIP(3), size.y / 2); @@ -2335,8 +2361,8 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.SetPen(wxPen(m_road_color[1], 4, wxSOLID)); if (m_left_road_length > 0) { if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS){ - dc.DrawLine(left_nozzle_pos.x - FromDIP(4), 0, (left_nozzle_pos.x - FromDIP(4)), size.y / 2); - dc.DrawLine(left_nozzle_pos.x - FromDIP(4), size.y / 2, (left_nozzle_pos.x), size.y / 2); + dc.DrawLine(left_nozzle_pos.x - FromDIP(3), 0, (left_nozzle_pos.x - FromDIP(3)), size.y / 2); + dc.DrawLine(left_nozzle_pos.x - FromDIP(3), size.y / 2, (left_nozzle_pos.x), size.y / 2); dc.DrawLine(left_nozzle_pos.x, size.y / 2, left_nozzle_pos.x, size.y); } else{ @@ -2426,7 +2452,7 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con wxWindow::Create(parent, id, pos, size); SetMinSize(size); SetMaxSize(size); - SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); + //SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); Refresh(); } @@ -2487,13 +2513,13 @@ void AMSPreview::render(wxDC &dc) void AMSPreview::doRender(wxDC &dc) { wxSize size = GetSize(); - dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); + /*dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); dc.SetBrush(wxBrush(StateColor::darkModeColorFor(m_background_colour))); - dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3);*/ //auto left = m_padding; auto left = size.x * 0.09; - m_space = size.x * 0.2136; + m_space = size.x * 0.21; auto color = *wxWHITE; //four slot if (m_ams_item_type != AMSModel::EXT_AMS && m_ams_item_type != AMSModel::N3S_AMS){ @@ -2592,20 +2618,22 @@ void AMSPreview::doRender(wxDC &dc) dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); if (iter.material_colour != ""){ dc.SetBrush(iter.material_colour); + //dc.SetBrush(*wxGREEN); + auto rect = wxRect(((size.x - AMS_ITEM_CUBE_SIZE.x) / 2), ((size.y - AMS_ITEM_CUBE_SIZE.y) / 2), (AMS_ITEM_CUBE_SIZE.x - FromDIP(1)), (AMS_ITEM_CUBE_SIZE.y)); + dc.DrawRoundedRectangle(rect, 3); + } + if (iter.material_colour.Red() >= 238 && iter.material_colour.Green() >= 238 && iter.material_colour.Blue() >= 238) { + dc.SetPen(wxPen(AMS_CONTROL_GRAY500)); + auto rect = wxRect((size.x - FromDIP(6)) / 2 - FromDIP(1), (size.y - FromDIP(12)) / 2 - FromDIP(1), AMS_ITEM_CUBE_SIZE.x - FromDIP(1), AMS_ITEM_CUBE_SIZE.y - FromDIP(1)); + dc.DrawRoundedRectangle(rect, 3); } - auto rect = wxRect(((size.x - AMS_ITEM_CUBE_SIZE.x) / 2), ((size.y - AMS_ITEM_CUBE_SIZE.y) / 2), (AMS_ITEM_CUBE_SIZE.x - FromDIP(1)), (AMS_ITEM_CUBE_SIZE.y)); - dc.DrawRoundedRectangle(rect, 3); } if (m_ams_item_type == AMSModel::N3S_AMS) { auto pot = wxPoint(((size.x - m_single_slot_bitmap.GetBmpSize().x) / 2), ((size.y - m_single_slot_bitmap.GetBmpSize().y) / 2)); dc.DrawBitmap(m_single_slot_bitmap.bmp(), pot); } else { - if ((color == *wxWHITE || color.Alpha() == 0) && iter.material_cols.size() <= 1) { - dc.SetPen(wxPen(AMS_CONTROL_GRAY500)); - auto rect = wxRect((size.x - FromDIP(6)) / 2 - FromDIP(1), (size.y - FromDIP(12)) / 2 - FromDIP(1), AMS_ITEM_CUBE_SIZE.x - FromDIP(1), AMS_ITEM_CUBE_SIZE.y - FromDIP(1)); - dc.DrawRoundedRectangle(rect, 3); - } + auto pot = wxPoint((size.x - m_ext_bitmap.GetBmpSize().x) / 2, (size.y - m_ext_bitmap.GetBmpSize().y) / 2); dc.DrawBitmap(m_ext_bitmap.bmp(), pot); @@ -2641,6 +2669,9 @@ void AMSPreview::msw_rescale() { m_four_slot_bitmap = ScalableBitmap(this, "four_slot_ams_item", 26); m_single_slot_bitmap = ScalableBitmap(this, "single_slot_ams_item", 26); m_ext_bitmap = ScalableBitmap(this, "ext_ams_item", 24); + + Layout(); + Refresh(); } @@ -2692,7 +2723,7 @@ void AMSHumidity::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, co wxWindow::Create(parent, id, pos, size); SetSize(size); SetMinSize(size); - SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Refresh(); } @@ -2736,14 +2767,14 @@ void AMSHumidity::doRender(wxDC& dc) wxSize size = GetSize(); dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetBrush(wxBrush(AMS_CONTROL_DEF_BLOCK_BK_COLOUR)); + dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR))); // left mode if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { m_show_humidity = true; } else { m_show_humidity = false; } if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { //background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetBrush(wxBrush(AMS_CONTROL_DEF_HUMIDITY_BK_COLOUR)); + dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR))); dc.DrawRoundedRectangle(0, 0, (size.x), (size.y), (size.y / 2)); //hum image @@ -2760,7 +2791,7 @@ void AMSHumidity::doRender(wxDC& dc) auto tsize = dc.GetMultiLineTextExtent(hum_percentage); dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetFont(Label::Body_14); - dc.SetTextForeground(AMS_CONTROL_BLACK_COLOUR); + dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR)); //pot = wxPoint(FromDIP(size.x * 0.3), FromDIP((size.y - tsize.y) / 2)); pot.x = pot.x + hum_img.GetBmpSize().x + FromDIP(3); dc.DrawText(hum_percentage, pot); @@ -2793,14 +2824,18 @@ void AMSHumidity::doRender(wxDC& dc) } void AMSHumidity::msw_rescale() { - for (int i = 1; i < ams_humidity_img.size(); i++) { - ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string(i) + "_light", 16); - } - - for (int i = 1; i < ams_humidity_img.size(); i++) { - ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", 16); + for (int i = 0; i < ams_humidity_img.size(); i++) { + if (i < ams_humidity_img.size() / 2){ + ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string(i + 1) + "_light", 16); + } + else{ + ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string((i - ams_humidity_img.size() / 2 + 1)) + "_dark", 16); + } } ams_sun_img = ScalableBitmap(this, "ams_drying", 16); + + Layout(); + Refresh(); } @@ -2812,7 +2847,7 @@ AmsItem::AmsItem() {} AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model, AMSPanelPos pos) : AmsItem() { - m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 136); + m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 134); SetDoubleBuffered(true); m_ams_model = model; @@ -2821,13 +2856,20 @@ AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model, AMSPanelPos pos if (m_ams_model == AMSModel::GENERIC_AMS){ wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE); + SetSize(AMS_CANS_WINDOW_SIZE); + SetMinSize(AMS_CANS_WINDOW_SIZE); + SetMaxSize(AMS_CANS_WINDOW_SIZE); } else{ wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_SINGLE_CAN_SIZE); + SetSize(AMS_SINGLE_CAN_SIZE); + SetMinSize(AMS_SINGLE_CAN_SIZE); + SetMaxSize(AMS_SINGLE_CAN_SIZE); } create(parent); - SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Bind(wxEVT_PAINT, &AmsItem::paintEvent, this); } @@ -2858,37 +2900,31 @@ void AmsItem::create(wxWindow *parent) } else{ if (m_ams_model == EXT_AMS){ - auto ams_ext_image = new AMSExtImage(this, wxID_ANY); - sizer_item->Add(ams_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_ext_image = new AMSExtImage(this, wxID_ANY); + sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); } } m_panel_road = new AMSRoadUpPart(this, wxID_ANY, m_info, m_ams_model); sizer_item->Add(sizer_can, 0, wxALIGN_CENTER_HORIZONTAL, 0); //sizer_item->Add(m_panel_road, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_item->Add(m_panel_road, 0, wxALL | wxEXPAND, 0); + sizer_item->Add(m_panel_road, 1, wxEXPAND); SetSizer(sizer_item); } else{ sizer_can_extra = new wxGridSizer(2, 2, FromDIP(20), FromDIP(20)); sizer_item = new wxBoxSizer(wxVERTICAL); - auto it = m_info.cans.begin(); - for (; it != m_info.cans.end(); it++) { - AddExtraCan(*it, m_can_count, m_info.cans.size(), sizer_can_extra); - m_can_count++; + if (m_info.cans.size() == 4){ + AddLiteCan(m_info.cans[0], 0, sizer_can_extra); + AddLiteCan(m_info.cans[3], 3, sizer_can_extra); + AddLiteCan(m_info.cans[1], 1, sizer_can_extra); + AddLiteCan(m_info.cans[2], 2, sizer_can_extra); + m_can_count = 4; } - it = m_info.cans.begin(); - //auto road_panel = new wxWindow(this, wxID_ANY); - //auto road_panel = new wxPanel(this, wxID_ANY); - //road_panel->SetSize(AMS_CAN_ROAD_SIZE); - //road_panel->SetMinSize(AMS_CAN_ROAD_SIZE); - //m_panel_road = new AMSRoadUpPart(this, wxID_ANY, m_info, m_ams_model); sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP, 0); - //sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0); - //sizer_item->Add(m_panel_road, 0, wxALIGN_CENTER_HORIZONTAL, 0); - + //sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER); SetSizer(sizer_item); } @@ -2907,19 +2943,19 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size amscan->SetSize(wxSize(FromDIP(52), FromDIP(109))); amscan->SetMinSize(wxSize(FromDIP(52), FromDIP(109))); - amscan->SetBackgroundColour(wxColour(240, 240, 240)); + amscan->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + //amscan->SetBackgroundColour(wxTRANSPARENT); wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL); AMSrefresh* m_panel_refresh; - AMSExtText* m_panel_text; if (m_ams_model != AMSModel::EXT_AMS) { m_panel_refresh = new AMSrefresh(amscan, m_can_count, caninfo); m_can_refresh_list[caninfo.can_id] = m_panel_refresh; } else if (m_ams_model == AMSModel::EXT_AMS){ - m_panel_text = new AMSExtText(amscan, wxID_ANY); + m_ext_text = new AMSExtText(amscan, wxID_ANY); } AMSLib* m_panel_lib = nullptr; @@ -2950,7 +2986,6 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size ev.Skip(); }); - m_panel_lib->m_ams_model = m_ams_model; m_panel_lib->m_ams_id = m_info.ams_id; m_panel_lib->m_slot_id = caninfo.can_id; @@ -2974,7 +3009,7 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size if (m_ams_model == AMSModel::EXT_AMS){ m_sizer_ams->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL, 0); //m_sizer_ams->Add(m_panel_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 4); - m_sizer_ams->Add(m_panel_text, 0, wxALIGN_CENTER_HORIZONTAL | wxDOWN, FromDIP(4)); + m_sizer_ams->Add(m_ext_text, 0, wxALIGN_CENTER_HORIZONTAL | wxDOWN, FromDIP(4)); m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER_HORIZONTAL, 0); } } @@ -2985,31 +3020,19 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size amscan->Fit(); sizer->Add(amscan, 0, wxUP | wxLEFT | wxRIGHT, FromDIP(5)); - /*if (m_ams_model == AMSModel::GENERIC_AMS) { - sizer->Add(amscan, 0, wxALL, 0); - } - else if (m_ams_model == AMSModel::EXTRA_AMS) - { - if (canindex > 1) { - sizer->Prepend(amscan, 0, wxALL, 0); - } - else { - sizer->Add(amscan, 0, wxALL, 0); - } - }*/ m_can_lib_list[caninfo.can_id] = m_panel_lib; //m_can_road_list[caninfo.can_id] = m_panel_road; } -void AmsItem::AddExtraCan(Caninfo caninfo, int canindex, int maxcan, wxGridSizer* sizer) +void AmsItem::AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer) { auto amscan = new wxWindow(this, wxID_ANY); amscan->SetSize(wxSize(FromDIP(49), FromDIP(72))); amscan->SetMinSize(wxSize(FromDIP(49), FromDIP(72))); amscan->SetMaxSize(wxSize(FromDIP(49), FromDIP(72))); - 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); @@ -3034,7 +3057,6 @@ void AmsItem::AddExtraCan(Caninfo caninfo, int canindex, int maxcan, wxGridSizer ev.Skip(); }); - m_panel_lib->m_ams_model = m_ams_model; m_panel_lib->m_ams_id = m_info.ams_id; m_panel_lib->m_slot_id = caninfo.can_id; @@ -3042,36 +3064,28 @@ void AmsItem::AddExtraCan(Caninfo caninfo, int canindex, int maxcan, wxGridSizer m_panel_lib->m_can_index = canindex; //auto m_panel_road = new AMSRoad(amscan, wxID_ANY, caninfo, canindex, maxcan, wxDefaultPosition, AMS_CAN_ROAD_SIZE); - if (canindex == 0){ + switch (canindex){ + case 0: m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_RIGHT | wxALIGN_BOTTOM, 0); - } - else if (canindex == 1){ - m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - } - else if (canindex == 2){ + break; + case 1: m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_RIGHT | wxALIGN_TOP, 0); - } - else if (canindex == 3){ + break; + case 2: m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_LEFT | wxALIGN_TOP, 0); + break; + case 3: + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_LEFT | wxALIGN_BOTTOM, 0); + break; + default: + break; } amscan->SetSizer(m_sizer_ams); amscan->Layout(); amscan->Fit(); - sizer->Add(amscan, canindex, wxUP | wxLEFT | wxRIGHT, FromDIP(5)); - /*if (m_ams_model == AMSModel::GENERIC_AMS) { - sizer->Add(amscan, 0, wxALL, 0); - } - else if (m_ams_model == AMSModel::EXTRA_AMS) - { - if (canindex > 1) { - sizer->Prepend(amscan, 0, wxALL, 0); - } - else { - sizer->Add(amscan, 0, wxALL, 0); - } - }*/ + sizer->Add(amscan, 0, wxUP | wxLEFT | wxRIGHT, FromDIP(5)); m_can_lib_list[caninfo.can_id] = m_panel_lib; //m_can_road_list[caninfo.can_id] = m_panel_road; @@ -3095,6 +3109,17 @@ void AmsItem::Update(AMSinfo info) i++; } + for (int i = 0; i < m_can_count; i++) { + auto it = m_can_refresh_list.find(std::to_string(i)); + if (it == m_can_refresh_list.end()) break; + + auto refresh = it->second; + if (refresh != nullptr){ + refresh->Update(info.ams_id, info.cans[i]); + refresh->Show(); + } + } + for (int i = 0; i < m_can_lib_list.size(); i++) { AMSLib* lib = m_can_lib_list[std::to_string(i)]; if (lib != nullptr){ @@ -3313,8 +3338,6 @@ void AmsItem::paintEvent(wxPaintEvent& evt) void AmsItem::render(wxDC& dc) { - /*this->SetSize(AMS_CANS_WINDOW_SIZE); - this->SetMinSize(AMS_CANS_WINDOW_SIZE);*/ #ifdef __WXMSW__ wxSize size = GetSize(); wxMemoryDC memdc; @@ -3336,37 +3359,12 @@ void AmsItem::render(wxDC& dc) void AmsItem::doRender(wxDC& dc) { - /*if (m_ams_model == AMSModel::GENERIC_AMS) - { - - this->SetSize(AMS_CANS_WINDOW_SIZE); - this->SetMinSize(AMS_CANS_WINDOW_SIZE); - } - else - { - this->SetSize(AMS_SINGLE_CAN_SIZE); - this->SetMinSize(AMS_SINGLE_CAN_SIZE); - }*/ wxSize size = GetSize(); //road for extra if (m_ams_model == AMSModel::AMS_LITE) { dc.DrawBitmap(m_bitmap_extra_framework.bmp(), (size.x - m_bitmap_extra_framework.GetBmpSize().x) / 2, (size.y - m_bitmap_extra_framework.GetBmpSize().y) / 2 - FromDIP(3)); - /*for (auto lib_it : m_can_lib_list) { - AMSLib* lib = lib_it.second; - - if (m_road_canid.empty()) { - lib->on_pass_road(false); - } - else { - if (lib->m_info.can_id == m_road_canid) { - m_road_colour = lib->m_info.material_colour; - lib->on_pass_road(true); - } - } - }*/ - // A1 dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -3394,14 +3392,14 @@ void AmsItem::RenderExtraRoad(wxDC& dc, wxSize size) { dc.DrawLine(a1_left, a1_top, end_top, a1_top); // A2 - auto a2_left = m_can_lib_list["1"]->GetScreenPosition().x + m_can_lib_list["1"]->GetSize().x / 2; + auto a2_left = m_can_lib_list["3"]->GetScreenPosition().x + m_can_lib_list["3"]->GetSize().x / 2; auto local_pos2 = GetScreenPosition().x + GetSize().x / 2; a2_left = size.x / 2 + (a2_left - local_pos2); dc.DrawLine(a2_left, FromDIP(30), a2_left, a2_top); dc.DrawLine(a2_left, a2_top, end_top, a2_top); // A3 - auto a3_left = m_can_lib_list["2"]->GetScreenPosition().x + m_can_lib_list["2"]->GetSize().x / 2; + auto a3_left = m_can_lib_list["1"]->GetScreenPosition().x + m_can_lib_list["1"]->GetSize().x / 2; auto local_pos3 = GetScreenPosition().x + GetSize().x / 2; a3_left = size.x / 2 + (a3_left - local_pos3); dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); @@ -3409,7 +3407,7 @@ void AmsItem::RenderExtraRoad(wxDC& dc, wxSize size) { //// A4 - auto a4_left = m_can_lib_list["3"]->GetScreenPosition().x + m_can_lib_list["3"]->GetSize().x / 2; + auto a4_left = m_can_lib_list["2"]->GetScreenPosition().x + m_can_lib_list["2"]->GetSize().x / 2; auto local_pos4 = GetScreenPosition().x + GetSize().x / 2; a4_left = size.x / 2 + (a4_left - local_pos4); dc.DrawLine(a4_left, FromDIP(160), a4_left, a4_top); @@ -3432,48 +3430,27 @@ void AmsItem::RenderExtraRoad(wxDC& dc, wxSize size) { if (m_road_canid == "0") { dc.DrawLine(a1_left, FromDIP(30), a1_left, a1_top); dc.DrawLine(a1_left, a1_top, end_top, a1_top); - dc.DrawLine(end_top - FromDIP(passroad_width - 2), a1_top, end_top - FromDIP(passroad_width - 2), size.y); - } - - if (m_road_canid == "1") { - dc.DrawLine(a2_left, FromDIP(30), a2_left, a2_top); - dc.DrawLine(a2_left, a2_top, end_top, a2_top); - dc.DrawLine(end_top - FromDIP(passroad_width - 2), a2_top, end_top - FromDIP(passroad_width - 2), size.y); - } - - if (m_road_canid == "2") { - dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); - dc.DrawLine(a3_left, a3_top, end_top, a3_top); - dc.DrawLine(end_top - FromDIP(passroad_width - 2), a3_top, end_top - FromDIP(passroad_width - 2), size.y); + dc.DrawLine(end_top - FromDIP(passroad_width - 3), a1_top, end_top - FromDIP(passroad_width - 3), size.y); } if (m_road_canid == "3") { + dc.DrawLine(a2_left, FromDIP(30), a2_left, a2_top); + dc.DrawLine(a2_left, a2_top, end_top, a2_top); + dc.DrawLine(end_top - FromDIP(passroad_width - 3), a2_top, end_top - FromDIP(passroad_width - 3), size.y); + } + + if (m_road_canid == "1") { + dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); + dc.DrawLine(a3_left, a3_top, end_top, a3_top); + dc.DrawLine(end_top - FromDIP(passroad_width - 3), a3_top, end_top - FromDIP(passroad_width - 3), size.y); + } + + if (m_road_canid == "2") { dc.DrawLine(a4_left, FromDIP(160), a4_left, a4_top); dc.DrawLine(a4_left, a4_top, end_top, a4_top); - dc.DrawLine(end_top - FromDIP(passroad_width - 2), a4_top, end_top - FromDIP(passroad_width - 2), size.y); + dc.DrawLine(end_top - FromDIP(passroad_width - 3), a4_top, end_top - FromDIP(passroad_width - 3), size.y); } } - - /*if (!m_road_canid.empty()) { - if (!m_road_canid.empty()) { - if (m_road_canid == "0") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); - dc.DrawLine(end_top, a1_top, end_top, size.y); - } - else if (m_road_canid == "1") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); - dc.DrawLine(end_top, a2_top, end_top, size.y); - } - else if (m_road_canid == "2") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); - dc.DrawLine(end_top, a3_top, end_top, size.y); - } - else if (m_road_canid == "3") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); - dc.DrawLine(end_top, a4_top, end_top, size.y); - } - } - }*/ } catch (...) {} } @@ -3497,7 +3474,14 @@ void AmsItem::msw_rescale() AMSLib* lib = lib_it.second; if (lib) lib->msw_rescale(); } - m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 136); + if (m_humidity != nullptr) m_humidity->msw_rescale(); + if (m_ext_text != nullptr) m_ext_text->msw_rescale(); + if (m_ext_image != nullptr) m_ext_image->msw_rescale(); //ext image upon the lib + + m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 134); + + Layout(); + Refresh(); } void AmsItem::show_sn_value(bool show) diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index c8fb22275..696ac0274 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -667,7 +667,7 @@ public: void Update(AMSinfo info); void create(wxWindow *parent); void AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer); - void AddExtraCan(Caninfo caninfo, int canindex, int maxcan, wxGridSizer* sizer); + void AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer); void SetDefSelectCan(); void SelectCan(std::string canid); void PlayRridLoading(wxString canid); @@ -701,7 +701,7 @@ public: //std::map m_can_road_list; AMSRoadUpPart* m_panel_road = { nullptr }; std::map m_can_refresh_list; - AMSHumidity* m_humidity; + AMSHumidity* m_humidity = { nullptr }; AMSinfo m_info; wxBoxSizer * sizer_can = {nullptr}; @@ -711,7 +711,8 @@ public: wxBoxSizer * sizer_can_middle = {nullptr}; wxBoxSizer * sizer_can_left = {nullptr}; wxBoxSizer * sizer_can_right = {nullptr}; - AMSPassRoadSTEP m_step = {AMSPassRoadSTEP ::AMS_ROAD_STEP_NONE}; + AMSExtImage* m_ext_image = { nullptr }; //the ext image upon the ext ams + AMSExtText* m_ext_text = { nullptr }; //the ext text upon the ext ams }; wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);