From ac1a1d69a1a340b3b5dbcd35c766ed8cc4d61a93 Mon Sep 17 00:00:00 2001 From: "hang.xu" Date: Fri, 2 Aug 2024 19:27:10 +0800 Subject: [PATCH] FIX: N3S AMS display jira: none Change-Id: Ib6f4bdd0ada9df2d1aacc33568507471e29897c1 --- .../{ext_image.svg => ext_image_left.svg} | 0 resources/images/extra_ams_tray_mid.svg | 7 + resources/images/extra_ams_tray_mid_hover.svg | 7 + .../images/extra_ams_tray_mid_selected.svg | 7 + src/slic3r/GUI/GUI_App.cpp | 3 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 1099 +++++++---------- src/slic3r/GUI/Widgets/AMSControl.hpp | 27 +- src/slic3r/GUI/Widgets/AMSItem.cpp | 437 ++++--- src/slic3r/GUI/Widgets/AMSItem.hpp | 57 +- 9 files changed, 738 insertions(+), 906 deletions(-) rename resources/images/{ext_image.svg => ext_image_left.svg} (100%) create mode 100644 resources/images/extra_ams_tray_mid.svg create mode 100644 resources/images/extra_ams_tray_mid_hover.svg create mode 100644 resources/images/extra_ams_tray_mid_selected.svg diff --git a/resources/images/ext_image.svg b/resources/images/ext_image_left.svg similarity index 100% rename from resources/images/ext_image.svg rename to resources/images/ext_image_left.svg diff --git a/resources/images/extra_ams_tray_mid.svg b/resources/images/extra_ams_tray_mid.svg new file mode 100644 index 000000000..77e2e562e --- /dev/null +++ b/resources/images/extra_ams_tray_mid.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/extra_ams_tray_mid_hover.svg b/resources/images/extra_ams_tray_mid_hover.svg new file mode 100644 index 000000000..1d836ac97 --- /dev/null +++ b/resources/images/extra_ams_tray_mid_hover.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/extra_ams_tray_mid_selected.svg b/resources/images/extra_ams_tray_mid_selected.svg new file mode 100644 index 000000000..9002cb54a --- /dev/null +++ b/resources/images/extra_ams_tray_mid_selected.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index af9120109..08f5e6822 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3941,7 +3941,8 @@ void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const wxString GUI_App::transition_tridid(int trid_id) { - wxString maping_dict[8] = { "A", "B", "C", "D", "E", "F", "G" }; + //wxString maping_dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + wxString maping_dict[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}; int id_index = ceil(trid_id / 4); int id_suffix = (trid_id + 1) % 4 == 0 ? 4 : (trid_id + 1) % 4; return wxString::Format("%s%d", maping_dict[id_index], id_suffix); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 8e0949681..072130630 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2412,7 +2412,7 @@ Description:AMSControl // WX_DEFINE_OBJARRAY(AmsItemsHash); #define AMS_CANS_SIZE wxSize(FromDIP(284), -1) #define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), -1) -#define SINGLE_SLOT_AMS_PANEL_SIZE wxSize(FromDIP(264), (160)) +#define SINGLE_SLOT_AMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(160)) AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) : wxSimplebook(parent, wxID_ANY, pos, size) , m_Humidity_tip_popup(AmsHumidityTipPopup(this)) @@ -2438,33 +2438,33 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_ams_items = new wxBoxSizer(wxHORIZONTAL); /*right items*/ - m_panel_items_left = new wxPanel(m_amswin, wxID_ANY); - m_panel_items_left->SetSize(AMS_ITEMS_PANEL_SIZE); - m_panel_items_left->SetMinSize(AMS_ITEMS_PANEL_SIZE); - //m_panel_items_left->SetBackgroundColour(0x4169E1); - m_panel_items_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - m_sizer_items_left = new wxBoxSizer(wxHORIZONTAL); - m_panel_items_left->SetSizer(m_sizer_items_left); - m_panel_items_left->Layout(); - //m_sizer_items_left->Fit(m_panel_items_left); + m_panel_prv_left = new wxPanel(m_amswin, wxID_ANY); + m_panel_prv_left->SetSize(AMS_ITEMS_PANEL_SIZE); + m_panel_prv_left->SetMinSize(AMS_ITEMS_PANEL_SIZE); + //m_panel_prv_left->SetBackgroundColour(0x4169E1); + m_panel_prv_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); + m_sizer_prv_left = new wxBoxSizer(wxHORIZONTAL); + m_panel_prv_left->SetSizer(m_sizer_prv_left); + m_panel_prv_left->Layout(); + //m_sizer_items_left->Fit(m_panel_prv_left); /*right items*/ - m_panel_items_right = new wxPanel(m_amswin, wxID_ANY); - m_panel_items_right->SetSize(AMS_ITEMS_PANEL_SIZE); - m_panel_items_right->SetMinSize(AMS_ITEMS_PANEL_SIZE); - //m_panel_items_right->SetBackgroundColour(0x4169E1); - m_panel_items_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - m_sizer_items_right = new wxBoxSizer(wxHORIZONTAL); - m_panel_items_right->SetSizer(m_sizer_items_right); - m_panel_items_right->Layout(); - //m_sizer_items_right->Fit(m_panel_items_right); + m_panel_prv_right = new wxPanel(m_amswin, wxID_ANY); + m_panel_prv_right->SetSize(AMS_ITEMS_PANEL_SIZE); + m_panel_prv_right->SetMinSize(AMS_ITEMS_PANEL_SIZE); + //m_panel_prv_right->SetBackgroundColour(0x4169E1); + m_panel_prv_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); + m_sizer_prv_right = new wxBoxSizer(wxHORIZONTAL); + m_panel_prv_right->SetSizer(m_sizer_prv_right); + m_panel_prv_right->Layout(); + //m_sizer_items_right->Fit(m_panel_prv_right); - /*m_sizer_ams_items->Add(m_panel_items_left, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5)); - m_sizer_ams_items->Add(m_panel_items_right, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));*/ - m_sizer_ams_items->Add(m_panel_items_left, 0, wxLEFT, FromDIP(5)); - m_sizer_ams_items->Add(m_panel_items_right, 0, wxLEFT, FromDIP(5)); + /*m_sizer_ams_items->Add(m_panel_prv_left, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5)); + m_sizer_ams_items->Add(m_panel_prv_right, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));*/ + m_sizer_ams_items->Add(m_panel_prv_left, 0, wxLEFT | wxRIGHT, FromDIP(5)); + m_sizer_ams_items->Add(m_panel_prv_right, 0, wxLEFT | wxRIGHT, FromDIP(5)); - //m_panel_items_right->Hide(); + //m_panel_prv_right->Hide(); //m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL); @@ -2501,17 +2501,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons //ams area - /*m_panel_left_ams_area = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_panel_left_ams_area->SetMaxSize(AMS_CANS_SIZE); - m_panel_left_ams_area->SetMinSize(AMS_CANS_SIZE); - m_panel_left_ams_area->SetCornerRadius(FromDIP(10)); - m_panel_left_ams_area->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Normal))); - - m_panel_right_ams_area = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_panel_right_ams_area->SetMaxSize(AMS_CANS_SIZE); - m_panel_right_ams_area->SetMinSize(AMS_CANS_SIZE); - m_panel_right_ams_area->SetCornerRadius(FromDIP(10)); - m_panel_right_ams_area->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Normal)));*/ m_sizer_ams_area_left = new wxBoxSizer(wxHORIZONTAL); m_sizer_ams_area_right = new wxBoxSizer(wxHORIZONTAL); @@ -2519,11 +2508,13 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_simplebook_ams_left = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); m_simplebook_ams_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxLEFT | wxRIGHT, FromDIP(10)); + //m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxLEFT | wxRIGHT, FromDIP(5)); + m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxALIGN_CENTER, 0); m_simplebook_ams_right = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxLEFT | wxRIGHT, FromDIP(10)); + //m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxLEFT | wxRIGHT, FromDIP(5)); + m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxALIGN_CENTER, 0); m_panel_down_road = new wxPanel(m_amswin, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE, 0); m_panel_down_road->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); @@ -2532,23 +2523,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_down_road->Add(m_panel_down_road, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 0); // ams mode - //m_simplebook_ams_left = new wxSimplebook(m_simplebook_ams_left, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - //m_simplebook_ams_left->SetBackgroundColour(*wxGREEN); - //m_simplebook_ams_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - //m_simplebook_ams_right = new wxSimplebook(m_simplebook_ams_right, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); + // m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); //extra ams mode - //m_simplebook_extra_cans_left = new wxSimplebook(m_simplebook_ams_left, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - //m_simplebook_extra_cans_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - // m_simplebook_extra_cans_right = new wxSimplebook(m_simplebook_ams_right, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - //m_simplebook_extra_cans_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - - //m_simplebook_ams_left->AddPage(m_simplebook_ams_left, wxEmptyString, false); - //m_simplebook_ams_left->AddPage(m_simplebook_extra_cans_left, wxEmptyString, false); - //m_simplebook_ams_right->AddPage(m_simplebook_ams_right, wxEmptyString, false); - //m_simplebook_ams_right->AddPage(m_simplebook_extra_cans_right, wxEmptyString, false); + // m_sizer_ams_area_left->Layout(); m_sizer_ams_area_right->Layout(); @@ -2612,7 +2592,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons /*option mid*/ - m_extruder = new AMSextruder(m_amswin, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); + m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_nozzle_num, wxDefaultPosition, AMS_EXTRUDER_SIZE); m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 ); @@ -2882,9 +2862,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons addaddaddaddaddaaddaddaddadd */ - m_sizer_ams_body->Add(m_sizer_ams_area_left, wxLEFT|wxRIGHT, FromDIP(5)); - //m_sizer_ams_body->Add(0, 0, 0, wxLEFT, FromDIP(15)); - m_sizer_ams_body->Add(m_sizer_ams_area_right, wxLEFT|wxRIGHT, FromDIP(5)); + m_sizer_ams_body->Add(m_sizer_ams_area_left, wxALIGN_CENTER, 0); + m_sizer_ams_body->AddSpacer(FromDIP(10)); + m_sizer_ams_body->Add(m_sizer_ams_area_right, wxALIGN_CENTER, 0); //m_sizer_ams_body->Add(m_sizer_right, 0, wxEXPAND, FromDIP(0)); @@ -2973,8 +2953,8 @@ AMSControl::~AMSControl() { std::string AMSControl::GetCurentAms() { return m_current_ams; } -std::string AMSControl::GetCurentShowAms(bool right_panel) { - if (right_panel){ +std::string AMSControl::GetCurentShowAms(AMSPanelPos pos) { + if (pos == AMSPanelPos::RIGHT_PANEL){ return m_current_show_ams_right; } else{ @@ -3000,7 +2980,7 @@ std::string AMSControl::GetCurrentCan(std::string amsid) bool AMSControl::IsAmsInRightPanel(std::string ams_id) { if (m_nozzle_num == 2){ - if (m_ams_item_list[ams_id]->m_info.nozzle_id == 0){ + if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->m_info.nozzle_id == MAIN_NOZZLE_ID){ return true; } else{ @@ -3008,7 +2988,7 @@ bool AMSControl::IsAmsInRightPanel(std::string ams_id) { } } else{ - for (auto id : m_item_ids[1]){ + for (auto id : m_item_ids[MAIN_NOZZLE_ID]){ if (id == ams_id){ return true; } @@ -3076,7 +3056,7 @@ void AMSControl::EnterNoneAMSMode() { //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::EXT_AMS) return; - m_panel_items_left->Hide(); + m_panel_prv_left->Hide(); m_simplebook_ams_left->SetSelection(0); m_extruder->no_ams_mode(true); @@ -3123,7 +3103,7 @@ void AMSControl::EnterExtraAMSMode() { //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::AMS_LITE) return; - m_panel_items_left->Hide(); + m_panel_prv_left->Hide(); //m_vams_lib->m_ams_model = AMSModel::EXTRA_AMS; @@ -3199,6 +3179,11 @@ void AMSControl::msw_rescale() ams_prv.second->msw_rescale(); } } + for (auto ext_img : m_ext_image_list) { + if (ext_img.second) { + ext_img.second->msw_rescale(); + } + } if (m_down_road){ m_down_road->msw_rescale(); } @@ -3310,8 +3295,8 @@ void AMSControl::CreateAms() m_simplebook_ams_left->Hide(); } else { - m_sizer_items_left->Layout(); - m_sizer_items_right->Layout(); + m_sizer_prv_left->Layout(); + m_sizer_prv_right->Layout(); } Thaw(); } @@ -3327,74 +3312,58 @@ void AMSControl::ClearAms() { m_simplebook_ams_right->Refresh(); m_simplebook_ams_left->Refresh(); - m_ams_item_list.clear(); - m_sizer_items_right->Clear(); - m_sizer_items_left->Clear(); + for (auto it : m_ams_preview_list) { + delete it.second; + } + m_ams_preview_list.clear(); + m_ext_image_list.clear(); + m_left_page_index = 0; m_right_page_index = 0; + m_ams_item_list.clear(); + m_sizer_prv_right->Clear(); + m_sizer_prv_left->Clear(); m_item_ids = { {}, {} }; + pair_id.clear(); } -void AMSControl::CreateAmsNew() +void AMSControl::CreateAmsDoubleNozzle() { /*m_ams_item_list.clear(); m_ams_generic_item_list.clear(); m_ams_extra_item_list.clear();*/ - AMSRoadShowMode left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - AMSRoadShowMode right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - bool first_left_page = true, first_right_page = true; std::vector single_info_left; std::vector single_info_right; Freeze(); - for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) - { - if (first_left_page && ams_info->nozzle_id == 1) { - first_left_page = false; - left_init_mode = ams_info->cans.size() == 4 ? AMSRoadShowMode::AMS_ROAD_MODE_FOUR : AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - } - if (ams_info->cans.size() == 4) - { - if (first_right_page && ams_info->nozzle_id == 0) { - first_right_page = false; - right_init_mode = ams_info->ams_type == AMSModel::AMS_LITE ? AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS : AMSRoadShowMode::AMS_ROAD_MODE_FOUR; - } - if (first_left_page && ams_info->nozzle_id == 1) { - first_left_page = false; - left_init_mode = ams_info->ams_type == AMSModel::AMS_LITE ? AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS : AMSRoadShowMode::AMS_ROAD_MODE_FOUR; - } + 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){ + ams_info->nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(ams_info->ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); AddAmsPreview(*ams_info, ams_info->ams_type); AddAms(*ams_info); } - else if (ams_info->cans.size() == 1) - { - AddAmsPreview(*ams_info, ams_info->ams_type); - if (ams_info->nozzle_id == 0) - { + else if (ams_info->cans.size() == 1){ + + if (ams_info->nozzle_id == MAIN_NOZZLE_ID){ single_info_right.push_back(*ams_info); - if (single_info_right.size() == 2) - { - if (first_right_page) { - first_right_page = false; - right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } + if (single_info_right.size() == 2){ + single_info_right[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[0].ams_id); + single_info_right[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[1].ams_id); AddAms(single_info_right); + AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL); pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id)); single_info_right.clear(); } } - else if (ams_info->nozzle_id == 1) - { + else if (ams_info->nozzle_id == 1){ single_info_left.push_back(*ams_info); - if (single_info_left.size() == 2) - { - if (first_left_page) { - first_left_page = false; - left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } + if (single_info_left.size() == 2){ + single_info_left[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[0].ams_id); + single_info_left[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[1].ams_id); AddAms(single_info_left); + AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL); pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id)); single_info_left.clear(); } @@ -3409,81 +3378,72 @@ void AMSControl::CreateAmsNew() for (auto info : m_ext_info){ if (info.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){ ext_info = info; + single_info_right.push_back(ext_info); + break; } } - single_info_right.push_back(ext_info); //wait add - if (single_info_right.size() == 2) - { - if (first_right_page) { - first_right_page = false; - right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } + + + single_info_right[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[0].ams_id); + if (single_info_right.size() == 2){ + single_info_right[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[1].ams_id); pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id)); } - AddAmsPreview(ext_info, AMSModel::EXT_AMS); AddAms(single_info_right); + AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL); single_info_right.clear(); for (auto info : m_ext_info) { if (info.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { ext_info = info; + single_info_left.push_back(ext_info); + break; } } - single_info_left.push_back(ext_info); //wait add - if (single_info_left.size() == 2) - { - if (first_left_page) { - first_left_page = false; - left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } + single_info_left[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[0].ams_id); + if (single_info_left.size() == 2){ + single_info_left[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[1].ams_id); pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id)); } - AddAmsPreview(ext_info, AMSModel::EXT_AMS); + AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL); AddAms(single_info_left); single_info_left.clear(); - if (m_nozzle_num <= 1) - { - m_simplebook_ams_left->Hide(); - m_panel_items_left->Hide(); + m_sizer_prv_left->Layout(); + m_sizer_prv_right->Layout(); + m_simplebook_ams_left->Show(); + m_simplebook_ams_right->Show(); + if (m_ams_info.size() > 0){ + m_panel_prv_left->Show(); + m_panel_prv_right->Show(); } - - else if(m_nozzle_num > 1) { - m_sizer_items_left->Layout(); - m_sizer_items_right->Layout(); - m_simplebook_ams_left->Show(); - m_panel_items_left->Show(); - m_simplebook_ams_right->Show(); - m_panel_items_right->Show(); - m_simplebook_ams_left->SetSelection(0); - m_simplebook_ams_right->SetSelection(0); - m_down_road->UpdateLeft(2, left_init_mode); - m_down_road->UpdateRight(2, right_init_mode); + else{ + m_panel_prv_left->Hide(); + m_panel_prv_right->Hide(); } - m_extruder->update(2); - auto it = m_ams_item_list.begin(); + m_simplebook_ams_left->SetSelection(0); + m_simplebook_ams_right->SetSelection(0); - 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 == ""){ - m_current_show_ams_left = it->second->m_info.ams_id; - } - if (it->second->m_info.nozzle_id == 0 && m_current_show_ams_right == ""){ - m_current_show_ams_right = it->second->m_info.ams_id; - } - } - m_current_ams = "-1"; - m_down_road->UpdatePassRoad("0", true, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false, 1); - m_down_road->UpdatePassRoad("0", false, -1, (++it)->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false); + auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL); + auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); + + + m_down_road->UpdateLeft(2, left_init_mode); + m_down_road->UpdateRight(2, right_init_mode); + + m_extruder->updateNozzleNum(2); + + m_current_show_ams_left = m_item_ids[DEPUTY_NOZZLE_ID].size() > 0 ? m_item_ids[DEPUTY_NOZZLE_ID][0] : ""; + m_current_show_ams_right = m_item_ids[MAIN_NOZZLE_ID].size() > 0 ? m_item_ids[MAIN_NOZZLE_ID][0] : ""; + + m_current_ams = ""; + m_down_road->UpdatePassRoad("0", AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, DEPUTY_NOZZLE_ID); + m_down_road->UpdatePassRoad("0", AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, MAIN_NOZZLE_ID); - //Refresh(); - //Freeze(); Thaw(); } @@ -3494,157 +3454,85 @@ void AMSControl::CreateAmsSingleNozzle() Freeze(); - bool left = true; - AMSRoadShowMode left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE; - AMSRoadShowMode right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE; - for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++){ - if (ams_info->cans.size() == 4){ - if (m_item_nums[0] <= m_item_nums[1]){ - if (m_item_nums[0] == 0) left_init_mode = ams_info->ams_type == AMSModel::AMS_LITE ? AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS : AMSRoadShowMode::AMS_ROAD_MODE_FOUR; - left = true; - m_item_ids[0].push_back(ams_info->ams_id); - m_item_nums[0]++; - } - else{ - if (m_item_nums[1] == 0) right_init_mode = ams_info->ams_type == AMSModel::AMS_LITE ? AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS : AMSRoadShowMode::AMS_ROAD_MODE_FOUR; - left = false; - m_item_ids[1].push_back(ams_info->ams_id); - m_item_nums[1]++; - } + //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) { + m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); AddAmsPreview(*ams_info, ams_info->ams_type); - AddAms(*ams_info, left); + AddAms(*ams_info, AMSPanelPos::LEFT_PANEL); //AddExtraAms(*ams_info); } - else if (ams_info->cans.size() == 1){ - AddAmsPreview(*ams_info, ams_info->ams_type); + else if (ams_info->cans.size() == 1) { single_info.push_back(*ams_info); - if (single_info.size() == 2){ - if (m_item_nums[0] <= m_item_nums[1]){ - if (m_item_nums[0] == 0) left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - left = true; - m_item_ids[0].push_back(single_info[0].ams_id); - m_item_ids[0].push_back(single_info[1].ams_id); - m_item_nums[0]++; - } - else{ - if (m_item_nums[1] == 0) right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - left = false; - m_item_ids[1].push_back(single_info[0].ams_id); - m_item_ids[1].push_back(single_info[1].ams_id); - m_item_nums[1]++; - } + if (single_info.size() == 2) { + m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id); + m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[1].ams_id); + m_item_nums[DEPUTY_NOZZLE_ID]++; pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id)); - AddAms(single_info, left); + AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL); + AddAms(single_info, AMSPanelPos::LEFT_PANEL); single_info.clear(); } } } - //ext_info.cans[0].material_colour = + if (single_info.size() > 0){ + m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id); + m_item_nums[DEPUTY_NOZZLE_ID]++; + AddAms(single_info, AMSPanelPos::LEFT_PANEL); + AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL); + single_info.clear(); + } + + // data ext data if (m_ext_info.size() <= 0){ BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!"; return; } - if (m_ams_info.size() > 0 && m_ams_info[0].ams_type == AMSModel::AMS_LITE){ - for (auto ext = m_ext_info.begin(); ext != m_ext_info.end(); ext++){ - ext->ext_type = AMSModelOriginType::LITE_EXT; - } - } + single_info.push_back(m_ext_info[0]); - if (m_item_nums[0] <= m_item_nums[1]){ - if (m_item_nums[0] == 0){ - if (single_info.size() == 2){ - left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } - else{ - left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - } - } - left = true; - for (auto it : single_info){ - m_item_ids[0].push_back(it.ams_id); - } - m_item_nums[0]++; - } - else{ - if (m_item_nums[1] == 0){ - if (single_info.size() == 2){ - right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - } - else{ - right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - } - } - left = false; - for (auto it : single_info){ - m_item_ids[1].push_back(it.ams_id); - } - m_item_nums[1]++; - } - //wait add - if (single_info.size() == 2){ - pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id)); - } - AddAmsPreview(m_ext_info[0], AMSModel::EXT_AMS); - AddAms(single_info, left); + m_item_ids[MAIN_NOZZLE_ID].push_back(single_info[0].ams_id); + AddAms(single_info, AMSPanelPos::RIGHT_PANEL); + auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL); + auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); - m_panel_items_left->Hide(); - if (!m_item_nums[0] || !m_item_nums[1]){ - /*m_simplebook_ams_right->Hide(); - m_panel_items_right->Hide();*/ - //m_simplebook_ams_left->Hide(); - - m_simplebook_ams_right->Hide(); - m_panel_items_right->Hide(); + m_panel_prv_right->Hide(); + m_panel_prv_left->Hide(); + if (m_ams_info.size() > 0){ + m_simplebook_ams_left->Show(); + m_simplebook_ams_right->Show(); m_simplebook_ams_left->SetSelection(0); + m_simplebook_ams_right->SetSelection(0); + + if (m_ams_info.size() > 1){ + m_sizer_prv_right->Layout(); + m_panel_prv_right->Show(); + } m_down_road->UpdateLeft(1, left_init_mode); m_down_road->UpdateRight(1, right_init_mode); } else { - m_sizer_items_left->Layout(); - if (m_item_nums[0] <= 1 && m_item_nums[1] <= 1){ - m_panel_items_right->Hide(); - } - else{ - m_panel_items_right->Show(); - } - /*m_simplebook_ams_left->Show(); - m_simplebook_ams_right->Show();*/ - m_simplebook_ams_left->Show(); + m_panel_prv_left->Hide(); + m_panel_prv_right->Hide(); + m_simplebook_ams_left->Hide(); m_simplebook_ams_right->Show(); - m_simplebook_ams_left->SetSelection(0); m_simplebook_ams_right->SetSelection(0); m_down_road->UpdateLeft(1, left_init_mode); m_down_road->UpdateRight(1, right_init_mode); } + m_current_show_ams_left = m_item_ids[DEPUTY_NOZZLE_ID].size() > 0 ? m_item_ids[DEPUTY_NOZZLE_ID][0] : ""; + m_current_show_ams_right = m_item_ids[MAIN_NOZZLE_ID].size() > 0 ? m_item_ids[MAIN_NOZZLE_ID][0] : ""; + m_current_ams = ""; - 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 == ""){ - m_current_show_ams_left = it->second->m_info.ams_id; - } - if (IsAmsInRightPanel(it->second->m_info.ams_id) && m_current_show_ams_right == ""){ - m_current_show_ams_right = it->second->m_info.ams_id; - } - } - m_current_ams = "-1"; - m_extruder->update(1); - auto it = m_ams_item_list.begin(); - if (it != m_ams_item_list.end()){ - m_down_road->UpdatePassRoad("0", true, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - - if ((++it) != m_ams_item_list.end()) { - m_down_road->UpdatePassRoad("0", false, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } + m_down_road->UpdatePassRoad("0", AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad("0", AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->updateNozzleNum(1); + m_extruder->OnAmsLoading(false, MAIN_NOZZLE_ID); //Refresh(); Thaw(); } - void AMSControl::Reset() { /*auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; @@ -3773,10 +3661,10 @@ void AMSControl::ReadExtInfo(MachineObject* obj) { can.material_name = slot.filament_setting_id; ext_info.cans.push_back(can); if (slot.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){ - ext_info.nozzle_id = 0; + ext_info.nozzle_id = MAIN_NOZZLE_ID; } else{ - ext_info.nozzle_id = 1; + ext_info.nozzle_id = DEPUTY_NOZZLE_ID; } ext_info.cans[0].material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; ext_info.cans[0].material_colour = slot.decode_color(slot.color); @@ -3787,6 +3675,58 @@ void AMSControl::ReadExtInfo(MachineObject* obj) { } } +std::vector AMSControl::GenerateSimulateData() { + auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo0_1 = Caninfo{ "1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo0_2 = Caninfo{ "2", (""), *wxBLUE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo0_3 = Caninfo{ "3", (""), *wxYELLOW, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + + auto caninfo1_0 = Caninfo{ "0", (""), wxColour(255, 255, 0), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_1 = Caninfo{ "1", (""), wxColour(255, 0, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_2 = Caninfo{ "2", (""), wxColour(0, 255, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_3 = Caninfo{ "3", (""), wxColour(200, 80, 150), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + + AMSinfo ams1 = AMSinfo{ "0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; + AMSinfo ams2 = AMSinfo{ "1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; + AMSinfo ams3 = AMSinfo{ "2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; + AMSinfo ams4 = AMSinfo{ "3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; + + AMSinfo singleams1 = AMSinfo{ "0", std::vector{caninfo0_0}, 0 }; + AMSinfo singleams2 = AMSinfo{ "1", std::vector{caninfo0_0}, 0 }; + AMSinfo singleams3 = AMSinfo{ "2", std::vector{caninfo0_0}, 0 }; + AMSinfo singleams4 = AMSinfo{ "3", std::vector{caninfo0_0}, 0 }; + singleams1.ams_type = AMSModel::N3S_AMS; + singleams2.ams_type = AMSModel::N3S_AMS; + singleams3.ams_type = AMSModel::N3S_AMS; + singleams4.ams_type = AMSModel::N3S_AMS; + + AMSinfo ams5 = AMSinfo{ "4", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; + AMSinfo ams6 = AMSinfo{ "5", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; + AMSinfo ams7 = AMSinfo{ "6", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; + AMSinfo ams8 = AMSinfo{ "7", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; + + AMSinfo singleams5 = AMSinfo{ "4", std::vector{caninfo1_0}, 1 }; + AMSinfo singleams6 = AMSinfo{ "5", std::vector{caninfo1_0}, 1 }; + AMSinfo singleams7 = AMSinfo{ "6", std::vector{caninfo1_0}, 1 }; + AMSinfo singleams8 = AMSinfo{ "7", std::vector{caninfo1_0}, 1 }; + AMSinfo singleams9 = AMSinfo{ "8", std::vector{caninfo1_0}, 1 }; + singleams5.ams_type = AMSModel::N3S_AMS; + singleams6.ams_type = AMSModel::N3S_AMS; + singleams7.ams_type = AMSModel::N3S_AMS; + singleams8.ams_type = AMSModel::N3S_AMS; + singleams9.ams_type = AMSModel::N3S_AMS; + + ams3.current_can_id = "2"; + ams3.current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2; + ams5.current_can_id = "2"; + ams5.current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2; + std::vectorgeneric_ams = { ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 }; + std::vectorsingle_ams = { singleams1, singleams2, singleams3, singleams4, singleams5, singleams6, singleams7, singleams8, singleams9 }; + std::vectorams_info = { ams1, singleams2, ams3, singleams4, ams5, singleams6, ams7, singleams8, singleams9 }; + return ams_info; +} + + void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, int nozzle_num, std::string dev_id, bool is_reset, bool test) { if (!test){ @@ -3802,7 +3742,6 @@ 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(); @@ -3810,26 +3749,14 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex m_nozzle_num = nozzle_num; m_dev_id = dev_id; if (fresh){ - //m_ams_generic_item_list.clear(); - for (auto it : m_ams_preview_list){ - delete it.second; - } - m_ams_preview_list.clear(); ClearAms(); if (m_nozzle_num >= 2){ - CreateAmsNew(); + CreateAmsDoubleNozzle(); }else{ - 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 @@ -3881,40 +3808,8 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex static bool first_time = true; static std::vectorams_info; int nozzle_num = 2; - if (first_time) - { - auto caninfo0_0 = Caninfo{ "def_can_0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo0_1 = Caninfo{ "def_can_1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo0_2 = Caninfo{ "def_can_2", (""), *wxBLUE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo0_3 = Caninfo{ "def_can_3", (""), *wxYELLOW, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - - auto caninfo1_0 = Caninfo{ "def_can_0", (""), wxColour(255, 255, 0), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo1_1 = Caninfo{ "def_can_1", (""), wxColour(255, 0, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo1_2 = Caninfo{ "def_can_2", (""), wxColour(0, 255, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - auto caninfo1_3 = Caninfo{ "def_can_3", (""), wxColour(200, 80, 150), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - - AMSinfo ams1 = AMSinfo{ "0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; - AMSinfo ams2 = AMSinfo{ "1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; - AMSinfo ams3 = AMSinfo{ "2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; - AMSinfo ams4 = AMSinfo{ "3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; - - AMSinfo singleams1 = AMSinfo{ "0", std::vector{caninfo0_0}, 0 }; - AMSinfo singleams2 = AMSinfo{ "1", std::vector{caninfo0_1}, 0 }; - AMSinfo singleams3 = AMSinfo{ "2", std::vector{caninfo0_2}, 0 }; - AMSinfo singleams4 = AMSinfo{ "3", std::vector{caninfo0_3}, 0 }; - - AMSinfo ams5 = AMSinfo{ "4", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; - AMSinfo ams6 = AMSinfo{ "5", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; - AMSinfo ams7 = AMSinfo{ "6", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; - AMSinfo ams8 = AMSinfo{ "7", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; - - AMSinfo singleams5 = AMSinfo{ "4", std::vector{caninfo1_0}, 1 }; - AMSinfo singleams6 = AMSinfo{ "5", std::vector{caninfo1_1}, 1 }; - AMSinfo singleams7 = AMSinfo{ "6", std::vector{caninfo1_2}, 1 }; - AMSinfo singleams8 = AMSinfo{ "7", std::vector{caninfo1_3}, 1 }; - std::vectorgeneric_ams = { ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 }; - std::vectorsingle_ams = { singleams1, singleams2, singleams3, singleams4, singleams5, singleams6, singleams7, singleams8 }; - ams_info = { ams1, singleams1, ams3, singleams3, ams5, singleams5, ams7, singleams7 }; + if (first_time){ + ams_info = GenerateSimulateData(); first_time = false; } @@ -3939,30 +3834,18 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex m_ext_info.push_back(ext_info[0]); m_ext_info.push_back(ext_info[0]); m_ext_info[0].ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); + m_ext_info[0].nozzle_id = MAIN_NOZZLE_ID; m_ext_info[1].ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID); + m_ext_info[1].nozzle_id = DEPUTY_NOZZLE_ID; m_nozzle_num = nozzle_num; if (fresh){ - - for (auto it : m_ams_preview_list) { - delete it.second; - } - m_ams_preview_list.clear(); ClearAms(); - m_left_page_index = 0; - m_right_page_index = 0; if (m_nozzle_num >= 2) { - CreateAmsNew(); + CreateAmsDoubleNozzle(); } 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)); } @@ -4007,15 +3890,15 @@ void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type) { AMSPreview *ams_prv = nullptr; - if (info.nozzle_id == 0) + if (info.nozzle_id == MAIN_NOZZLE_ID) { - ams_prv = new AMSPreview(m_panel_items_right, wxID_ANY, info, type); - m_sizer_items_right->Add(ams_prv, 0, wxALIGN_CENTER | wxRIGHT, 6); + ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, info, type); + m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); } - else if (info.nozzle_id == 1) + else if (info.nozzle_id == DEPUTY_NOZZLE_ID) { - ams_prv = new AMSPreview(m_panel_items_left, wxID_ANY, info, type); - m_sizer_items_left->Add(ams_prv, 0, wxALIGN_CENTER | wxRIGHT, 6); + ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, info, type); + m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); } if (ams_prv){ @@ -4027,48 +3910,107 @@ void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type) } } -void AMSControl::AddAms(AMSinfo info, bool left) -{ - AmsItem* ams_item; - if (m_nozzle_num > 1) - { - if (info.nozzle_id == 0) - { - ams_item = new AmsItem(m_simplebook_ams_right, info, info.ams_type, AMSPanelPos::RIGHT_PANEL); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, ams_item, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - m_right_page_index++; - } - else if (info.nozzle_id == 1) - { - ams_item = new AmsItem(m_simplebook_ams_left, info, info.ams_type, AMSPanelPos::LEFT_PANEL); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, ams_item, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - m_left_page_index++; - } +void AMSControl::createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPanelPos pos) { + auto ams_item = new AmsItem(parent, info, info.ams_type, pos); + parent->InsertPage(idx, ams_item, wxEmptyString, true); + ams_item->m_selection = idx; + idx++; + + m_ams_item_list[info.ams_id] = ams_item; +} + +AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { + auto init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE; + std::string ams_id = "-1"; + if (pos == AMSPanelPos::LEFT_PANEL && m_item_ids[DEPUTY_NOZZLE_ID].size() > 0){ + ams_id = m_item_ids[DEPUTY_NOZZLE_ID][0]; } - else if (m_nozzle_num == 1) - { - if (left) - { - ams_item = new AmsItem(m_simplebook_ams_left, info, info.ams_type, AMSPanelPos::LEFT_PANEL); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, ams_item, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - m_left_page_index++; + else if (pos == AMSPanelPos::RIGHT_PANEL && m_item_ids[MAIN_NOZZLE_ID].size() > 0){ + ams_id = m_item_ids[MAIN_NOZZLE_ID][0]; + } + + auto item = m_ams_item_list.find(ams_id); + if (ams_id.empty() || item == m_ams_item_list.end()) return init_mode; + + if (item->second->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){ + if (item->second->m_info.ams_type == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; + return AMSRoadShowMode::AMS_ROAD_MODE_FOUR; + } + else{ + for (auto ids : pair_id){ + if (ids.first == ams_id || ids.second == ams_id){ + return AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; + } + } + return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; + } +} + +void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorinfos, AMSPanelPos pos) { + if (infos.size() <= 0) return; + + wxPanel* book_panel = new wxPanel(parent); + wxBoxSizer* book_sizer = new wxBoxSizer(wxHORIZONTAL); + book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + book_panel->SetSize(AMS_PANEL_SIZE); + book_panel->SetMinSize(AMS_PANEL_SIZE); + + AmsItem* ams1 = nullptr, * ams2 = nullptr; + ams1 = new AmsItem(book_panel, infos[0], infos[0].ams_type, pos); + if (infos.size() == 2) { //n3s and ? in a panel + ams2 = new AmsItem(book_panel, infos[1], infos[1].ams_type, pos); + if (pos == AMSPanelPos::LEFT_PANEL) { + book_sizer->Add(ams1, 0, wxLEFT, FromDIP(4)); + book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); } else { - ams_item = new AmsItem(m_simplebook_ams_right, info, info.ams_type, AMSPanelPos::RIGHT_PANEL); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, ams_item, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - m_right_page_index++; - //if (m_item_nums[1] == 1) m_simplebook_ams_right->SetSelection(m_simplebook_ams_left->GetSelection()); + book_sizer->Add(ams1, 0, wxLEFT, FromDIP(72)); + book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); } } - m_ams_item_list[info.ams_id] = ams_item; + else { //only an ext in a panel + if (ams1->m_ext_image) { + ams1->m_ext_image->setShowState(false); + } + if (ams1->m_info.ams_type == AMSModel::EXT_AMS) + { + auto ext_image = new AMSExtImage(book_panel, true, pos); + book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30)); + book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30)); + m_ext_image_list[infos[0].ams_id] = ext_image; + } + } + + book_panel->SetSizer(book_sizer); + book_panel->Layout(); + book_panel->Fit(); + + parent->InsertPage(idx, book_panel, wxEmptyString, true); + ams1->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + ams1->m_selection = idx; + m_ams_item_list[infos[0].ams_id] = ams1; + if (ams2) { + ams2->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + ams2->m_selection = idx; + m_ams_item_list[infos[1].ams_id] = ams2; + } + idx++; +} + +void AMSControl::AddAms(AMSinfo info, AMSPanelPos pos) +{ + AmsItem* ams_item; + if (m_nozzle_num > 1){ + if (info.nozzle_id == MAIN_NOZZLE_ID){ + createAms(m_simplebook_ams_right, m_right_page_index, info, AMSPanelPos::RIGHT_PANEL); + } + else if (info.nozzle_id == DEPUTY_NOZZLE_ID){ + createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); + } + } + else if (m_nozzle_num == 1){ + createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); + } m_simplebook_ams_left->Layout(); m_simplebook_ams_right->Layout(); m_simplebook_ams_left->Refresh(); @@ -4094,182 +4036,27 @@ void AMSControl::AddAms(AMSinfo info, bool left) // //} -void AMSControl::AddAms(std::vectorsingle_info, bool left) { - AmsItem* ams_item; - AMSModel mode; - wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); - - if (single_info.size() == 0){ +void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) { + if (single_info.size() <= 0){ return; } - else if (single_info.size() == 1){ - mode = AMSModel::EXT_AMS; - int w = 30; - if (m_nozzle_num == 2) - { - if (single_info[0].nozzle_id == 0) - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - 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))); - book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); - book_panel->SetSizer(sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - m_right_page_index++; - } - else if (single_info[0].nozzle_id == 1) - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - 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))); - book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); - book_panel->SetSizer(sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - m_left_page_index++; - } + if (m_nozzle_num == 2) { + if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) { + createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); } - else if (m_nozzle_num == 1){ - if (!left){ - wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - 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))); - book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); - book_panel->SetSizer(sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - m_right_page_index++; - } - else - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - 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))); - book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150))); - book_panel->SetSizer(sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - m_left_page_index++; - } + else if (single_info[0].nozzle_id == DEPUTY_NOZZLE_ID) { + createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); } - - //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) - { - AmsItem* ext_item; - wxBoxSizer* book_sizer = new wxBoxSizer(wxVERTICAL); - if (single_info[1].ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || single_info[1].ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) - { - mode = AMSModel::EXT_AMS; - } - else - { - mode = AMSModel::N3S_AMS; - } - if (m_nozzle_num == 2) - { - if (single_info[1].nozzle_id == 0) - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - 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); - ext_item = new AmsItem(book_panel, single_info[1], mode, AMSPanelPos::RIGHT_PANEL); - book_sizer->Add(ams_item); - book_sizer->Add(ext_item); - book_panel->SetSizer(book_sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - ext_item->m_selection = m_right_page_index; - m_right_page_index++; - } - else if (single_info[1].nozzle_id == 1) - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - 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); - ext_item = new AmsItem(book_panel, single_info[1], mode, AMSPanelPos::LEFT_PANEL); - book_sizer->Add(ams_item); - book_sizer->Add(ext_item); - book_panel->SetSizer(book_sizer); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - ext_item->m_selection = m_left_page_index; - m_left_page_index++; - } + else if (m_nozzle_num == 1) { + if (pos == AMSPanelPos::RIGHT_PANEL) { + createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); } else { - if (!left) - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_right); - 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); - ext_item = new AmsItem(book_panel, single_info[1], mode, AMSPanelPos::RIGHT_PANEL); - book_sizer->Add(ams_item); - book_sizer->Add(ext_item); - book_panel->SetSizer(book_sizer); - book_panel->Layout(); - book_panel->Fit(); - //m_simplebook_ams_right->RemovePage(m_right_page_index); - m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_right_page_index; - ext_item->m_selection = m_right_page_index; - m_right_page_index++; - } - else - { - wxPanel* book_panel = new wxPanel(m_simplebook_ams_left); - 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); - ext_item = new AmsItem(book_panel, single_info[1], mode, AMSPanelPos::LEFT_PANEL); - book_sizer->Add(ams_item); - book_sizer->Add(ext_item); - book_panel->SetSizer(book_sizer); - //m_simplebook_ams_left->RemovePage(m_left_page_index); - m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true); - ams_item->m_selection = m_left_page_index; - ext_item->m_selection = m_left_page_index; - m_left_page_index++; - } + createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); } - - m_ams_item_list[single_info[0].ams_id] = ams_item; - m_ams_item_list[single_info[1].ams_id] = ext_item; } + m_simplebook_ams_left->Layout(); m_simplebook_ams_right->Layout(); m_simplebook_ams_left->Refresh(); @@ -4303,8 +4090,45 @@ void AMSControl::AddAms(std::vectorsingle_info, bool left) { // } //} -void AMSControl::AddAmsPreview(std::vectorsingle_info) { +void AMSControl::AddAmsPreview(std::vectorsingle_info, AMSPanelPos pos) { + if (single_info.size() <= 0) return; + AMSPreview* ams_prv = nullptr; + AMSPreview* ams_prv2 = nullptr; + if (pos == AMSPanelPos::RIGHT_PANEL){ + ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[0], single_info[0].ams_type); + m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); + if (single_info.size() == 2) + { + ams_prv2 = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[1], single_info[1].ams_type); + m_sizer_prv_right->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0); + } + } + else + { + ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[0], single_info[0].ams_type); + m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); + if (single_info.size() == 2) + { + ams_prv2 = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[1], single_info[1].ams_type); + m_sizer_prv_left->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0); + } + } + + if (ams_prv) { + ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent& e) { + SwitchAms(ams_prv->m_amsinfo.ams_id); + e.Skip(); + }); + m_ams_preview_list[single_info[0].ams_id] = ams_prv; + } + if (ams_prv2) { + ams_prv2->Bind(wxEVT_LEFT_DOWN, [this, ams_prv2](wxMouseEvent& e) { + SwitchAms(ams_prv2->m_amsinfo.ams_id); + e.Skip(); + }); + m_ams_preview_list[single_info[1].ams_id] = ams_prv2; + } } void AMSControl::SwitchAms(std::string ams_id) @@ -4353,123 +4177,49 @@ void AMSControl::SwitchAms(std::string ams_id) } else { prv->UnSelected(); } - - if (prv->m_amsinfo.nozzle_id == 1) { - m_sizer_items_left->Layout(); - m_panel_items_left->Fit(); + if (prv->m_amsinfo.nozzle_id == DEPUTY_NOZZLE_ID) { + m_sizer_prv_left->Layout(); + m_panel_prv_left->Fit(); } - else if (prv->m_amsinfo.nozzle_id == 0) - { - m_sizer_items_right->Layout(); - m_panel_items_right->Fit(); + else if (prv->m_amsinfo.nozzle_id == MAIN_NOZZLE_ID){ + m_sizer_prv_right->Layout(); + m_panel_prv_right->Fit(); } - } for (auto ams_item : m_ams_item_list) { AmsItem* item = ams_item.second; if (item->m_info.ams_id == ams_id) { - if (m_nozzle_num == 2) { - if (item->m_info.nozzle_id == 1){ - m_simplebook_ams_left->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4){ - if (item->m_info.ams_type == AMSModel::AMS_LITE){ - m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS); + auto ids = item->m_panel_pos == AMSPanelPos::LEFT_PANEL ? m_item_ids[DEPUTY_NOZZLE_ID] : m_item_ids[MAIN_NOZZLE_ID]; + auto pos = item->m_panel_pos; + for (auto id : ids) { + if (id == item->m_info.ams_id) { + pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->m_selection) : m_simplebook_ams_right->SetSelection(item->m_selection); + if (item->m_info.cans.size() == GENERIC_AMS_SLOT_NUM) { + if (item->m_info.ams_type == AMSModel::AMS_LITE) { + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); } - else{ - m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); + else { + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } - } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id){ - if (it.first == ams_id || it.second == ams_id){ + for (auto it : pair_id) { + if (it.first == ams_id || it.second == ams_id) { mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } - m_down_road->UpdateLeft(m_nozzle_num, mode); - m_down_road->UpdatePassRoad(item->m_info.current_can_id, true, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } - else if (item->m_info.nozzle_id == 0){ - m_simplebook_ams_right->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4){ - if (item->m_info.ams_type == AMSModel::AMS_LITE){ - m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS); + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, mode) : m_down_road->UpdateRight(m_nozzle_num, mode); + if (pos == AMSPanelPos::LEFT_PANEL){ + m_down_road->UpdatePassRoad(item->m_info.current_can_id, AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } else{ - m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); + m_down_road->UpdatePassRoad(item->m_info.current_can_id, AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } } - else { - AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id){ - if (it.first == ams_id || it.second == ams_id){ - mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - break; - } - } - m_down_road->UpdateRight(m_nozzle_num, mode); - m_down_road->UpdatePassRoad(item->m_info.current_can_id, false, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } - - } - else if (m_nozzle_num == 1) { - for (auto id : m_item_ids[0]){ - if (id == item->m_info.ams_id){ - m_simplebook_ams_left->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4){ - if (item->m_info.ams_type == AMSModel::AMS_LITE){ - m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS); - } - else{ - m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); - } - - } - else { - AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id){ - if (it.first == ams_id || it.second == ams_id){ - mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - break; - } - } - m_down_road->UpdateLeft(m_nozzle_num, mode); - m_down_road->UpdatePassRoad(item->m_info.current_can_id, true, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } - } - for (auto id : m_item_ids[1]) - { - if (id == item->m_info.ams_id){ - m_simplebook_ams_right->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4){ - if (item->m_info.ams_type == AMSModel::AMS_LITE){ - m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS); - } - else{ - m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); - } - - } - else { - AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id) - { - if (it.first == ams_id || it.second == ams_id){ - mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; - break; - } - } - m_down_road->UpdateRight(m_nozzle_num, mode); - m_down_road->UpdatePassRoad(item->m_info.current_can_id, false, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } } } } @@ -4751,48 +4501,40 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy notfound = true; } - //if (ams_id != m_last_ams_id || m_last_tray_id != canid) { - // m_down_road->UpdatePassRoad(m_last_ams_id, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // m_down_road->UpdatePassRoad(m_last_ams_id, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // //m_down_road->UpdatePassRoad(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // //m_vams_extra_road->OnVamsLoading(false); - // m_extruder->OnVamsLoading(false); - // //m_vams_road->OnVamsLoading(false); - //} - if (notfound) return; if (ams == nullptr) return; m_last_ams_id = ams_id; m_last_tray_id = canid; int can_index = atoi(canid.c_str()); - std::string ams_id_left = GetCurentShowAms(false); - std::string ams_id_right = GetCurentShowAms(true); + std::string ams_id_left = GetCurentShowAms(AMSPanelPos::LEFT_PANEL); + std::string ams_id_right = GetCurentShowAms(AMSPanelPos::RIGHT_PANEL); auto model = AMSModel::AMS_LITE; bool left = !IsAmsInRightPanel(ams_id); int length = -1; - if (ams->m_info.cans.size() == 4){ - length = left ? 134 : 150; + if (ams->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){ + //length = left ? 129 : 145; + length = left ? 129 : 145; model = ams->m_info.ams_type; } else if (ams->m_info.cans.size() == 1){ for (auto it : pair_id){ if (it.first == ams_id){ - length = left ? 150 : 50; + length = left ? 145 : 45; break; } else if (it.second == ams_id){ - length = left ? 50 : 150; + length = left ? 45 : 145; break; } } model = AMSModel::N3S_AMS; } if (model == AMSModel::AMS_LITE){ - length = left ? 150 : 50; + length = left ? 145 : 45; } for (auto i = 0; i < m_ams_info.size(); i++) { @@ -4822,12 +4564,13 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy m_down_road->SetPassRoadColour(left, info.cans[can_index].material_colour); } + AMSPanelPos pos = left ? AMSPanelPos::LEFT_PANEL : AMSPanelPos::RIGHT_PANEL; if (model == AMSModel::GENERIC_AMS || model == AMSModel::N3F_AMS || model == AMSModel::AMS_LITE) { if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); if (ams_id_left == ams_id || ams_id_right == ams_id){ - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } } @@ -4835,36 +4578,36 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); if (ams_id_left == ams_id || ams_id_right == ams_id){ - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1); } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2); } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); } } } @@ -4873,48 +4616,48 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); m_extruder->OnAmsLoading(false); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1); } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); if (ams_id_left == ams_id || ams_id_right == ams_id) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2); } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } else { - m_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); } } } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index aef3aa72f..ed0128ee3 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -38,6 +38,7 @@ protected: std::vector m_ams_info; std::vector m_ext_info; std::map m_ams_item_list; + std::map m_ext_image_list; //std::map m_ams_generic_item_list; //std::map m_ams_extra_item_list; //std::map m_ams_list; @@ -52,10 +53,10 @@ protected: /*items*/ wxBoxSizer* m_sizer_ams_items{nullptr}; - wxWindow* m_panel_items_left {nullptr}; - wxWindow* m_panel_items_right{nullptr}; - wxBoxSizer* m_sizer_items_left{nullptr}; - wxBoxSizer* m_sizer_items_right{nullptr}; + wxWindow* m_panel_prv_left {nullptr}; + wxWindow* m_panel_prv_right{nullptr}; + wxBoxSizer* m_sizer_prv_left{nullptr}; + wxBoxSizer* m_sizer_prv_right{nullptr}; /*ams */ wxBoxSizer *m_sizer_ams_body{nullptr}; @@ -125,15 +126,18 @@ protected: AmsHumidityTipPopup m_Humidity_tip_popup; - std::string m_last_ams_id = "-1"; - std::string m_last_tray_id = "-1"; + std::string m_last_ams_id = ""; + std::string m_last_tray_id = ""; public: std::string GetCurentAms(); - std::string GetCurentShowAms(bool right_panel = true); + std::string GetCurentShowAms(AMSPanelPos pos = AMSPanelPos::RIGHT_PANEL); std::string GetCurrentCan(std::string amsid); bool IsAmsInRightPanel(std::string ams_id); wxColour GetCanColour(std::string amsid, std::string canid); + void createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPanelPos pos); + void createAmsPanel(wxSimplebook* parent, int& idx, std::vectorinfos, AMSPanelPos pos); + AMSRoadShowMode findFirstMode(AMSPanelPos pos); AMSModel m_ams_model{AMSModel::EXT_AMS}; AMSModel m_ext_model{AMSModel::EXT_AMS}; @@ -157,19 +161,20 @@ public: void UpdateStepCtrl(bool is_extrusion_exist); void UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step); void CreateAms(); - void CreateAmsNew(); + void CreateAmsDoubleNozzle(); void CreateAmsSingleNozzle(); void ClearAms(); void UpdateAms(std::vector ams_info, std::vector ext_info, int nozzle_num, std::string dev_id, bool is_reset = true, bool test = false); void ReadExtInfo(MachineObject* obj); + std::vector GenerateSimulateData(); - void AddAms(AMSinfo info, bool left = true); + void AddAms(AMSinfo info, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL); //void AddExtAms(int ams_id); void AddAmsPreview(AMSinfo info, AMSModel type); //void AddExtraAms(AMSinfo info); - void AddAms(std::vectorsingle_info, bool left = true); - void AddAmsPreview(std::vectorsingle_info); + void AddAms(std::vectorsingle_info, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL); + void AddAmsPreview(std::vectorsingle_info, AMSPanelPos pos); //void AddExtraAms(std::vectorsingle_info); void SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxColour col); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index 122d41ed3..c597d84fb 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -242,17 +242,17 @@ void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con Bind(wxEVT_LEAVE_WINDOW, &AMSrefresh::OnLeaveWindow, this); Bind(wxEVT_LEFT_DOWN, &AMSrefresh::OnClick, this); - m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 25); - m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 25); + m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 28); + m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 28); - m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 25); - m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 25); - m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 25); - m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 25); - m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 25); - m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 25); - m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 25); - m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 25); + m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 28); + m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 28); + m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 28); + m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 28); + m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 28); + m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 28); + m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 28); + m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 28); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_1); @@ -357,7 +357,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) } } - dc.SetFont(Label::Body_11); + dc.SetFont(Label::Body_10); //dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR)); dc.SetTextForeground(colour); auto tsize = dc.GetTextExtent(m_refresh_id); @@ -380,16 +380,16 @@ void AMSrefresh::Update(std::string ams_id, Caninfo info) } void AMSrefresh::msw_rescale() { - m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 25); - m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 25); - m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 25); - m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 25); - m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 25); - m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 25); - m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 25); - m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 25); - m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 25); - m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 25); + m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 28); + m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 28); + m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 28); + m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 28); + m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 28); + m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 28); + m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 28); + m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 28); + m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 28); + m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 28); m_rfid_bitmap_list.clear(); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0); @@ -477,21 +477,21 @@ void AMSextruderImage::doRender(wxDC &dc) 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)); + dc.DrawBitmap(m_ams_extruder.bmp(), wxPoint((size.x - m_ams_extruder.GetBmpSize().x) / 2, 0)); } } -AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxPoint &pos, const wxSize &size) +AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos) { - wxWindow::Create(parent, id, pos, AMS_EXTRUDER_BITMAP_SIZE); + wxWindow::Create(parent, id, pos, size); SetBackgroundColour(*wxWHITE); m_ams_extruder = ScalableBitmap(this, file_name,36); m_file_name = file_name; - SetSize(AMS_EXTRUDER_BITMAP_SIZE); - SetMinSize(AMS_EXTRUDER_BITMAP_SIZE); - SetMaxSize(AMS_EXTRUDER_BITMAP_SIZE); + SetSize(size); + SetMinSize(size); + SetMaxSize(size); Bind(wxEVT_PAINT, &AMSextruderImage::paintEvent, this); @@ -506,15 +506,33 @@ AMSextruderImage::~AMSextruderImage() {} Description:AMSExtImage upon ext lib **************************************************/ -AMSExtImage::AMSExtImage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) +AMSExtImage::AMSExtImage(wxWindow* parent, bool single_flag, AMSPanelPos ext_pos, wxWindowID id, const wxPoint& pos, const wxSize& size) { - wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE); + if (!single_flag){ + wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE); + } + else{ + wxWindow::Create(parent, id, pos, wxSize(FromDIP(98), FromDIP(99))); + } + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + m_single_flag = single_flag; + m_ext_pos = ext_pos; + /*if (single_flag){ + if (ext_pos == AMSPanelPos::LEFT_PANEL){ + m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); + } + else{ + m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); + } + } + else{ + m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); + }*/ + m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); + m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); - /*SetSize(wxSize(FromDIP(78), FromDIP(50))); - SetMinSize(wxSize(FromDIP(78), FromDIP(50))); - SetMaxSize(wxSize(FromDIP(78), FromDIP(50)));*/ Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this); } @@ -525,6 +543,8 @@ void AMSExtImage::msw_rescale() { //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE); //auto image = m_ams_extruder.ConvertToImage(); + m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); + m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); Layout(); Fit(); @@ -563,12 +583,30 @@ void AMSExtImage::doRender(wxDC& dc) auto size = GetSize(); dc.SetPen(*wxTRANSPARENT_PEN); //dc.DrawRectangle(0, FromDIP(5), size.x, size.y - FromDIP(5) - FromDIP(2)); - dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0)); + if (m_single_flag) { + if (m_ext_pos == AMSPanelPos::LEFT_PANEL) { + dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, (size.y - m_ams_ext_left.GetBmpSize().y) / 2)); + } + else { + dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2)); + } + } + else { + if (m_ext_show) { + dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0)); + } + } + + Layout(); } //Ams Extruder -AMSextruder::AMSextruder(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { create(parent, id, pos, size); } +AMSextruder::AMSextruder(wxWindow *parent, wxWindowID id, int nozzle_num, const wxPoint &pos, const wxSize &size) +{ + create(parent, id, pos, size); + m_nozzle_num = nozzle_num; +} AMSextruder::~AMSextruder() {} @@ -585,20 +623,31 @@ void AMSextruder::TurnOff() void AMSextruder::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { //wxWindow::Create(parent, id, pos, AMS_EXTRUDER_SIZE, wxBORDER_NONE); - wxWindow::Create(parent, id, pos, wxSize(FromDIP(29), FromDIP(37)), wxBORDER_NONE); + wxWindow::Create(parent, id, pos, wxSize(-1, FromDIP(36)), wxBORDER_NONE); //SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); SetBackgroundColour(*wxWHITE); + /*SetSize(wxSize(FromDIP(29), FromDIP(37))); + SetMinSize(wxSize(FromDIP(29), FromDIP(37)));*/ wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); m_bitmap_sizer = new wxBoxSizer(wxHORIZONTAL); - m_left_extruder = new AMSextruderImage(this, wxID_ANY, "left_nozzle"); - m_left_extruder->update(true); - m_right_extruder = new AMSextruderImage(this, wxID_ANY, "right_nozzle"); + m_right_extruder = new AMSextruderImage(this, wxID_ANY, "right_nozzle", AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE); + m_right_extruder->setShowState(false); - m_bitmap_sizer->Add(m_left_extruder, 0, wxLEFT, 0); - m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT, 2); + if (m_nozzle_num >= 2){ + m_left_extruder = new AMSextruderImage(this, wxID_ANY, "left_nozzle", AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE); + } + else { + m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE); + } + m_left_extruder->setShowState(true); + + /*m_bitmap_sizer->Add(m_left_extruder, 0, wxLEFT, 0); + m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT, 2);*/ + m_bitmap_sizer->Add(m_left_extruder, 0, wxLEFT | wxALIGN_TOP, 0); + m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT | wxALIGN_TOP, FromDIP(2)); SetSizer(m_bitmap_sizer); Bind(wxEVT_PAINT, &AMSextruder::paintEvent, this); @@ -629,10 +678,41 @@ void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CO if (load) m_current_colur_deputy = col; } } - Refresh(); } +void AMSextruder::updateNozzleNum(int nozzle_num) +{ + if (m_nozzle_num == nozzle_num) return; + m_nozzle_num = nozzle_num; + this->DestroyChildren(); + + m_right_extruder = new AMSextruderImage(this, wxID_ANY, "right_nozzle", AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE); + m_right_extruder->setShowState(false); + if (m_nozzle_num >= 2) { + m_left_extruder = new AMSextruderImage(this, wxID_ANY, "left_nozzle", AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE); + /*SetSize(wxSize(FromDIP(29), FromDIP(37))); + SetMinSize(wxSize(FromDIP(29), FromDIP(37)));*/ + } + else { + m_left_extruder = new AMSextruderImage(this, wxID_ANY, "single_nozzle", AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE); + /*SetSize(wxSize(FromDIP(48), FromDIP(37))); + SetMinSize(wxSize(FromDIP(48), FromDIP(37)));*/ + } + wxBoxSizer *m_bitmap_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_bitmap_sizer->Add(m_left_extruder, 0, wxALIGN_LEFT | wxALIGN_TOP, 0); + if (m_nozzle_num >= 2){ + m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT | wxALIGN_TOP, FromDIP(2)); + m_bitmap_sizer->AddSpacer(2); + } + else{ + m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT | wxALIGN_TOP, FromDIP(3)); + } + + SetSizer(m_bitmap_sizer); +} + void AMSextruder::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); @@ -652,12 +732,12 @@ void AMSextruder::render(wxDC& dc) wxGCDC dc2(memdc); //doRender(dc2); } - m_left_extruder->update(true); + m_left_extruder->setShowState(true); if (m_nozzle_num >= 2) { - m_right_extruder->update(true); + m_right_extruder->setShowState(true); } else { - m_right_extruder->update(false); + m_right_extruder->setShowState(false); } memdc.SelectObject(wxNullBitmap); dc.DrawBitmap(bmp, 0, 0); @@ -671,61 +751,14 @@ void AMSextruder::doRender(wxDC& dc) { //m_current_colur = wxSize size = GetSize(); - /*dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); - dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));*/ - - /*if (!m_none_ams_mode) { - dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); - }*/ - /*if (m_has_vams) { - dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); - - if (m_vams_loading) { - - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } - dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); - - if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); - dc.DrawRoundedRectangle(-size.x / 2 - FromDIP(3), size.y * 0.1 + FromDIP(3), size.x, size.y, 3); - dc.DrawRoundedRectangle(-size.x / 2 + FromDIP(3), size.y * 0.1 - FromDIP(3), size.x, size.y, 5); - } - } - - if (m_ams_loading && !m_none_ams_mode) { - if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID));} - else {dc.SetPen(wxPen(m_current_colur, 6, wxSOLID));} - dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); - - if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); - dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); - dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); - } - } - } - else { - if (m_ams_loading) { - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } - dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); - - if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); - dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); - dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); - } - } - }*/ } void AMSextruder::msw_rescale() { //m_amsSextruder->msw_rescale(); - m_left_extruder->msw_rescale(); - m_right_extruder->msw_rescale(); + if (m_left_extruder) m_left_extruder->msw_rescale(); + if (m_right_extruder) m_right_extruder->msw_rescale(); Layout(); Update(); Refresh(); @@ -856,12 +889,15 @@ void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const w m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72); m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72); + m_bitmap_extra_tray_mid = ScalableBitmap(this, "extra_ams_tray_mid", 72); m_bitmap_extra_tray_left_hover = ScalableBitmap(this, "extra_ams_tray_left_hover", 72); m_bitmap_extra_tray_right_hover = ScalableBitmap(this, "extra_ams_tray_right_hover", 72); + m_bitmap_extra_tray_mid_hover = ScalableBitmap(this, "extra_ams_tray_mid_hover", 72); m_bitmap_extra_tray_left_selected = ScalableBitmap(this, "extra_ams_tray_left_selected", 72); m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 72); + m_bitmap_extra_tray_mid_selected = ScalableBitmap(this, "extra_ams_tray_mid_selected", 72); m_sizer_body->Add(0, 0, 1, wxEXPAND, 0); @@ -950,14 +986,14 @@ void AMSLib::render(wxDC &dc) // text if (m_ams_model == AMSModel::AMS_LITE || (m_ams_model == AMSModel::EXT_AMS && m_ext_type == AMSModelOriginType::LITE_EXT)) { - render_extra_text(dc); + render_lite_text(dc); } else{ render_generic_text(dc); } } -void AMSLib::render_extra_text(wxDC& dc) +void AMSLib::render_lite_text(wxDC& dc) { auto tmp_lib_colour = m_info.material_colour; @@ -1006,7 +1042,6 @@ void AMSLib::render_extra_text(wxDC& dc) } } - if (has_split) { dc.SetFont(::Label::Body_10); auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char)); @@ -1168,7 +1203,7 @@ void AMSLib::render_generic_text(wxDC &dc) void AMSLib::doRender(wxDC &dc) { if (m_ams_model == AMSModel::AMS_LITE || m_ext_type == AMSModelOriginType::LITE_EXT) { - render_extra_lib(dc); + render_lite_lib(dc); } else { render_generic_lib(dc); @@ -1176,13 +1211,21 @@ void AMSLib::doRender(wxDC &dc) //render_extra_lib(dc); } -void AMSLib::render_extra_lib(wxDC& dc) +void AMSLib::render_lite_lib(wxDC& dc) { wxSize size = GetSize(); auto libsize = AMS_LITE_CAN_LIB_SIZE; - 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; + ScalableBitmap tray_bitmap, tray_bitmap_hover, tray_bitmap_selected; + if (m_ams_model == AMSModel::AMS_LITE){ + tray_bitmap = (m_can_index <= 1) ? m_bitmap_extra_tray_left : m_bitmap_extra_tray_right; + tray_bitmap_hover = (m_can_index <= 1) ? m_bitmap_extra_tray_left_hover : m_bitmap_extra_tray_right_hover; + tray_bitmap_selected = (m_can_index <= 1) ? m_bitmap_extra_tray_left_selected : m_bitmap_extra_tray_right_selected; + } + else{ + tray_bitmap = m_bitmap_extra_tray_mid; + tray_bitmap_hover = m_bitmap_extra_tray_mid_hover; + tray_bitmap_selected = m_bitmap_extra_tray_mid_selected; + } auto tmp_lib_colour = m_info.material_colour; change_the_opacity(tmp_lib_colour); @@ -1210,8 +1253,7 @@ void AMSLib::render_extra_lib(wxDC& dc) //draw def background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR))); - if (m_ams_model == AMSModel::EXT_AMS) - { + 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); @@ -1301,7 +1343,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR)); //dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(8), m_radius); //dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(8), size.y - FromDIP(m_radius - 2), m_radius); - dc.DrawRoundedRectangle(FromDIP(2), FromDIP(2), FromDIP(size.x - 4), FromDIP(size.y - 3), m_radius); + dc.DrawRoundedRectangle(FromDIP(2), FromDIP(2), size.x - FromDIP(4), size.y - FromDIP(3), m_radius); if (tmp_lib_colour.GetLuminance() < 0.6) { temp_bitmap_third = m_bitmap_editable_light; @@ -1428,7 +1470,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } //gradient if (m_info.material_cols.size() > 1) { - int left = FromDIP(2); + auto left = FromDIP(2); float total_width = size.x - FromDIP(4); int gwidth = std::round(total_width / (m_info.material_cols.size() - 1)); //gradient @@ -1679,12 +1721,15 @@ void AMSLib::msw_rescale() m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72); m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72); + m_bitmap_extra_tray_mid = ScalableBitmap(this, "extra_ams_tray_mid", 72); m_bitmap_extra_tray_left_hover = ScalableBitmap(this, "extra_ams_tray_left_hover", 72); m_bitmap_extra_tray_right_hover = ScalableBitmap(this, "extra_ams_tray_right_hover", 72); + m_bitmap_extra_tray_mid_hover = ScalableBitmap(this, "extra_ams_tray_mid_hover", 72); m_bitmap_extra_tray_left_selected = ScalableBitmap(this, "extra_ams_tray_left_selected", 72); m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 72); + m_bitmap_extra_tray_mid_selected = ScalableBitmap(this, "extra_ams_tray_mid_selected", 72); Layout(); Refresh(); @@ -2005,7 +2050,7 @@ AMSRoadUpPart::AMSRoadUpPart(wxWindow* parent, wxWindowID id, AMSinfo info, AMSM 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(); @@ -2069,19 +2114,18 @@ void AMSRoadUpPart::doRender(wxDC& dc) dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if ((m_ams_model == N3S_AMS || m_ams_model == EXT_AMS) && m_amsinfo.cans.size() != 4){ - dc.DrawLine((size.x / 2), (0), (size.x / 2), (size.y)); + dc.DrawLine(((float)size.x / 2), (0), ((float)size.x / 2), (size.y)); if (m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){ dc.SetPen(wxPen(m_amsinfo.cans[m_load_slot_index].material_colour, 4, wxSOLID)); dc.DrawLine((size.x / 2), (0), (size.x / 2), (size.y)); } } else{ - int x_start = 0.15 * size.x; - int x = x_start; - int width = 0.24 * size.x; - int height = size.y * 0.62; - for (int i = 0; i < 4; i++) - { + auto x_start = FromDIP(40); + auto x = x_start; + auto width = FromDIP(63); + auto height = FromDIP(21); + for (int i = 0; i < 4; i++){ dc.DrawLine((x), (0), (x), (height)); x += width; } @@ -2204,10 +2248,10 @@ void AMSRoadDownPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY void AMSRoadDownPart::SetPassRoadColour(bool left, wxColour col) { if (left){ - m_road_color[1] = col; + m_road_color[DEPUTY_NOZZLE_ID] = col; } else{ - m_road_color[0] = col; + m_road_color[MAIN_NOZZLE_ID] = col; } } @@ -2249,14 +2293,13 @@ void AMSRoadDownPart::render(wxDC& dc) void AMSRoadDownPart::doRender(wxDC& dc) { wxSize size = GetSize(); - wxPoint left_nozzle_pos = wxPoint((size.x / 2 - FromDIP(8)), FromDIP(258)); - wxPoint right_nozzle_pos = wxPoint((size.x / 2 + FromDIP(6)), FromDIP(258)); + wxPoint left_nozzle_pos = wxPoint(std::ceil((float)size.x / 2 - FromDIP(8)), FromDIP(258)); + wxPoint right_nozzle_pos = wxPoint(std::ceil((float)size.x / 2 + FromDIP(6)), FromDIP(258)); /*if (m_road_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxSOLID)); } else { dc.SetPen(wxPen(m_road_color, m_passroad_width, wxSOLID)); }*/ dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); auto xpos = left_nozzle_pos.x; - if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE || m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE) - { + if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE || m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE){ dc.DrawLine(left_nozzle_pos.x - FromDIP(55), (size.y / 2), (left_nozzle_pos.x), (size.y / 2)); dc.DrawLine(left_nozzle_pos.x - FromDIP(55), (0), left_nozzle_pos.x - FromDIP(55), (size.y / 2)); } @@ -2264,22 +2307,20 @@ void AMSRoadDownPart::doRender(wxDC& dc) switch (m_left_rode_mode) { case AMSRoadShowMode::AMS_ROAD_MODE_FOUR: - dc.DrawLine(left_nozzle_pos.x - FromDIP((134)), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); - dc.DrawLine(left_nozzle_pos.x - FromDIP((134)), 0, left_nozzle_pos.x - FromDIP((134)), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), 0, left_nozzle_pos.x - FromDIP((129)), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE: - dc.DrawLine(left_nozzle_pos.x - FromDIP(233), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); - dc.DrawLine(left_nozzle_pos.x - FromDIP(115), 0, left_nozzle_pos.x - FromDIP(115), (size.y / 2)); - dc.DrawLine(left_nozzle_pos.x - FromDIP(223), 0, left_nozzle_pos.x - FromDIP(223), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(218), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(110), 0, left_nozzle_pos.x - FromDIP(110), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(218), 0, left_nozzle_pos.x - FromDIP(218), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE: - 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)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(192), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(192), 0, left_nozzle_pos.x - FromDIP(192), (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); - 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); + case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE: + dc.DrawLine(left_nozzle_pos.x, 0, left_nozzle_pos.x, size.y); break; default: break; @@ -2288,22 +2329,22 @@ void AMSRoadDownPart::doRender(wxDC& dc) switch (m_right_rode_mode) { case AMSRoadShowMode::AMS_ROAD_MODE_FOUR: - dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(136), (size.y / 2)); - dc.DrawLine(right_nozzle_pos.x + FromDIP(136), 0, right_nozzle_pos.x + FromDIP(136), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(131), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x + FromDIP(131), 0, right_nozzle_pos.x + FromDIP(131), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE: - dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(223), (size.y / 2)); - dc.DrawLine(right_nozzle_pos.x + FromDIP(115), 0, right_nozzle_pos.x + FromDIP(115), (size.y / 2)); - dc.DrawLine(right_nozzle_pos.x + FromDIP(223), 0, right_nozzle_pos.x + FromDIP(223), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(218), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x + FromDIP(110), 0, right_nozzle_pos.x + FromDIP(110), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x + FromDIP(218), 0, right_nozzle_pos.x + FromDIP(218), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE: - dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(73), (size.y / 2)); - dc.DrawLine(right_nozzle_pos.x + FromDIP(73), 0, right_nozzle_pos.x + FromDIP(73), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(68), (size.y / 2)); + dc.DrawLine(right_nozzle_pos.x + FromDIP(68), 0, right_nozzle_pos.x + FromDIP(68), (size.y / 2)); break; - case AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS: - dc.DrawLine(right_nozzle_pos.x + FromDIP(4), 0, right_nozzle_pos.x + FromDIP(4), size.y / 2); + case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE: + dc.DrawLine(right_nozzle_pos.x, 0, right_nozzle_pos.x, size.y / 2); if (m_nozzle_num >= 2) xpos = right_nozzle_pos.x; - dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x + FromDIP(4), size.y / 2); + dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x, size.y / 2); dc.DrawLine(xpos, size.y / 2, xpos, size.y); break; default: @@ -2311,7 +2352,7 @@ void AMSRoadDownPart::doRender(wxDC& dc) } } - if (m_right_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS){ + if (m_right_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE){ if (m_nozzle_num == 2) { /*dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y)); dc.DrawLine(FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y));*/ @@ -2319,7 +2360,7 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine((right_nozzle_pos.x), (size.y / 2), (right_nozzle_pos.x), (size.y)); } else { - if (m_right_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_NONE) { + if (m_right_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_NONE && m_left_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_NONE) { dc.DrawLine((left_nozzle_pos.x), (size.y / 2), (right_nozzle_pos.x), (size.y / 2)); } dc.DrawLine((left_nozzle_pos.x), (size.y / 2), (left_nozzle_pos.x), (size.y)); @@ -2336,11 +2377,11 @@ void AMSRoadDownPart::doRender(wxDC& dc) if (m_pass_road_right_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_right_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { dc.SetPen(wxPen(m_road_color[0], 4, wxSOLID)); if (m_right_road_length > 0) { - if (m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_EXTRA_AMS){ - dc.DrawLine(right_nozzle_pos.x + FromDIP(4), 0, right_nozzle_pos.x + FromDIP(4), size.y / 2); + if (m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE){ + dc.DrawLine(right_nozzle_pos.x, 0, right_nozzle_pos.x, size.y / 2); xpos = left_nozzle_pos.x; if (m_nozzle_num >= 2) xpos = right_nozzle_pos.x; - dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x + FromDIP(4), size.y / 2); + dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x, size.y / 2); dc.DrawLine(xpos, size.y / 2, xpos, size.y); } else{ @@ -2360,10 +2401,8 @@ void AMSRoadDownPart::doRender(wxDC& dc) if (m_pass_road_left_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_left_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { 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(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); + if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE){ + dc.DrawLine(left_nozzle_pos.x, 0, left_nozzle_pos.x, size.y); } else{ dc.DrawLine((left_nozzle_pos.x - FromDIP(m_left_road_length)), (size.y / 2), (left_nozzle_pos.x), (size.y / 2)); @@ -2374,9 +2413,9 @@ void AMSRoadDownPart::doRender(wxDC& dc) } } -void AMSRoadDownPart::UpdatePassRoad(string can_id, bool left, int len, AMSinfo info, AMSPassRoadSTEP step) { +void AMSRoadDownPart::UpdatePassRoad(string can_id, AMSPanelPos pos, int len, AMSPassRoadSTEP step) { if (m_nozzle_num >= 2){ - if (left){ + if (pos == AMSPanelPos::LEFT_PANEL){ m_left_road_length = len;; m_pass_road_left_step = step; } @@ -2386,7 +2425,7 @@ void AMSRoadDownPart::UpdatePassRoad(string can_id, bool left, int len, AMSinfo } } else{ - if (left) { + if (pos == AMSPanelPos::LEFT_PANEL) { m_left_road_length = len; m_right_road_length = -1; m_pass_road_left_step = step; @@ -2448,11 +2487,11 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con m_ts_bitmap_cube = ScalableBitmap(this, "ts_bitmap_cube", 14); 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); + m_ext_bitmap = ScalableBitmap(this, "ext_ams_item", 26); wxWindow::Create(parent, id, pos, size); SetMinSize(size); SetMaxSize(size); - //SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); + SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); Refresh(); } @@ -2518,8 +2557,8 @@ void AMSPreview::doRender(wxDC &dc) dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3);*/ //auto left = m_padding; - auto left = size.x * 0.09; - m_space = size.x * 0.21; + auto left = FromDIP(8); + m_space = FromDIP(9); auto color = *wxWHITE; //four slot if (m_ams_item_type != AMSModel::EXT_AMS && m_ams_item_type != AMSModel::N3S_AMS){ @@ -2535,7 +2574,6 @@ void AMSPreview::doRender(wxDC &dc) else { dc.SetBrush(AMS_CONTROL_DISABLE_COLOUR); } - if (iter->material_cols.size() > 1) { int fleft = left; float total_width = AMS_ITEM_CUBE_SIZE.x; @@ -2586,6 +2624,10 @@ void AMSPreview::doRender(wxDC &dc) //single slot else { auto iter = m_amsinfo.cans[0]; + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR)); + wxSize rec_size = wxSize(FromDIP(16), FromDIP(24)); + dc.DrawRoundedRectangle((size.x - rec_size.x) / 2, (size.y - rec_size.y) / 2, rec_size.x, rec_size.y, FromDIP(2)); if (iter.material_cols.size() > 1) { int fleft = (size.x - AMS_ITEM_CUBE_SIZE.x) / 2; @@ -2616,17 +2658,10 @@ void AMSPreview::doRender(wxDC &dc) } else { 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); - } + 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 (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)); @@ -2634,18 +2669,23 @@ void AMSPreview::doRender(wxDC &dc) } else { - 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); + //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); - auto tsize = dc.GetMultiLineTextExtent(_L("Ext")); + /*auto tsize = dc.GetMultiLineTextExtent(_L("Ext")); dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetFont(Label::Body_8); dc.SetTextForeground(AMS_CONTROL_BLACK_COLOUR); pot = wxPoint((size.x - tsize.x) / 2 + FromDIP(2), (size.y + FromDIP(12)) / 2 - FromDIP(2)); - dc.DrawText(_L("Ext"), pot); + dc.DrawText(_L("Ext"), pot);*/ + } + if ((iter.material_colour.Red() >= 238 && iter.material_colour.Green() >= 238 && iter.material_colour.Blue() >= 238) || iter.material_colour.Alpha() == 0) { + dc.SetPen(wxPen(AMS_CONTROL_GRAY500)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + 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 border_colour = AMS_CONTROL_BRAND_COLOUR; if (!wxWindow::IsEnabled()) { border_colour = AMS_CONTROL_DISABLE_COLOUR; } @@ -2668,7 +2708,7 @@ void AMSPreview::msw_rescale() { m_ts_bitmap_cube = ScalableBitmap(this, "ts_bitmap_cube", 14); 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); + m_ext_bitmap = ScalableBitmap(this, "ext_ams_item", 26); Layout(); Refresh(); @@ -2782,6 +2822,9 @@ void AMSHumidity::doRender(wxDC& dc) if (wxGetApp().dark_mode()) { hum_idx += 5; } + if (hum_idx >= ams_humidity_img.size() || hum_idx < 0){ + BOOST_LOG_TRIVIAL(trace) << "humidity error"; + } auto hum_img = ams_humidity_img[hum_idx]; auto pot = wxPoint(FromDIP(5), ((size.y - hum_img.GetBmpSize().y) / 2)); dc.DrawBitmap(hum_img.bmp(), pot); @@ -2894,13 +2937,13 @@ void AmsItem::create(wxWindow *parent) //auto road_panel = new wxPanel(this, wxID_ANY); //road_panel->SetSize(AMS_CAN_ROAD_SIZE); //road_panel->SetMinSize(AMS_CAN_ROAD_SIZE); - if (m_ams_model == AMSModel::GENERIC_AMS || m_ams_model == AMSModel::N3F_AMS){ + if (m_ams_model == AMSModel::GENERIC_AMS || m_ams_model == AMSModel::N3F_AMS || m_ams_model == AMSModel::N3S_AMS){ m_humidity = new AMSHumidity(this, wxID_ANY, m_info); sizer_item->Add(m_humidity, 0, wxALIGN_CENTER_HORIZONTAL, 0); } else{ if (m_ams_model == EXT_AMS){ - m_ext_image = new AMSExtImage(this, wxID_ANY); + m_ext_image = new AMSExtImage(this, false, AMSPanelPos::RIGHT_PANEL); sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); } } @@ -2915,12 +2958,12 @@ void AmsItem::create(wxWindow *parent) else{ sizer_can_extra = new wxGridSizer(2, 2, FromDIP(20), FromDIP(20)); sizer_item = new wxBoxSizer(wxVERTICAL); - if (m_info.cans.size() == 4){ + if (m_info.cans.size() == GENERIC_AMS_SLOT_NUM){ 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; + m_can_count = GENERIC_AMS_SLOT_NUM; } sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP, 0); @@ -3097,17 +3140,17 @@ void AmsItem::Update(AMSinfo info) m_can_count = info.cans.size(); - for (auto refresh_it : m_can_refresh_list) { - int i = 0; - AMSrefresh *refresh = refresh_it.second; - if (i < m_can_count) { - refresh->Update(info.ams_id, info.cans[i]); - refresh->Show(); - } else { - refresh->Hide(); - } - i++; - } + // for (auto refresh_it : m_can_refresh_list) { + // int i = 0; + // AMSrefresh *refresh = refresh_it.second; + // if (i < m_can_count) { + // refresh->Update(info.ams_id, info.cans[i]); + // refresh->Show(); + // } else { + // refresh->Hide(); + // } + // i++; + // } for (int i = 0; i < m_can_count; i++) { auto it = m_can_refresh_list.find(std::to_string(i)); @@ -3368,12 +3411,12 @@ void AmsItem::doRender(wxDC& dc) // A1 dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - RenderExtraRoad(dc, size); + RenderLiteRoad(dc, size); } } -void AmsItem::RenderExtraRoad(wxDC& dc, wxSize size) { - auto end_top = size.x; +void AmsItem::RenderLiteRoad(wxDC& dc, wxSize size) { + auto end_top = size.x - FromDIP(3); if (m_panel_pos == AMSPanelPos::RIGHT_PANEL){ end_top = 0; } @@ -3417,7 +3460,7 @@ void AmsItem::RenderExtraRoad(wxDC& dc, wxSize size) { dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); auto top = std::min(a1_top, a2_top); - dc.DrawLine(end_top - FromDIP(1), top, end_top - FromDIP(1), size.y); + dc.DrawLine(end_top, top, end_top, size.y); if (!m_road_canid.empty()) { @@ -3430,25 +3473,25 @@ 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 - 3), a1_top, end_top - FromDIP(passroad_width - 3), size.y); + dc.DrawLine(end_top, a1_top, end_top, 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); + dc.DrawLine(end_top, a2_top, end_top, 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); + dc.DrawLine(end_top, a3_top, end_top, 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 - 3), a4_top, end_top - FromDIP(passroad_width - 3), size.y); + dc.DrawLine(end_top, a4_top, end_top, size.y); } } } diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 696ac0274..fb2062aa0 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -72,7 +72,7 @@ enum class AMSRoadShowMode : int { AMS_ROAD_MODE_FOUR, AMS_ROAD_MODE_DOUBLE, AMS_ROAD_MODE_SINGLE, - AMS_ROAD_MODE_EXTRA_AMS, + AMS_ROAD_MODE_AMS_LITE, AMS_ROAD_MODE_NONE }; @@ -143,22 +143,30 @@ enum FilamentStepType { #define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(8), FromDIP(14)) #define AMS_PREVIEW_SIZE wxSize(FromDIP(82), FromDIP(27)) #define AMS_ITEM_SIZE wxSize(FromDIP(78), FromDIP(184)) -#define AMS_ITEM_FOUR_SIZE wxSize(FromDIP(44), FromDIP(24)) -#define AMS_ITEM_SINGLE_SIZE wxSize(FromDIP(20), FromDIP(24)) +#define AMS_ITEM_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32)) +#define AMS_ITEM_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32)) #define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27)) #define AMS_CAN_LIB_SIZE wxSize(FromDIP(52), FromDIP(80)) #define AMS_LITE_CAN_LIB_SIZE wxSize(FromDIP(49), FromDIP(72)) #define AMS_CAN_ROAD_SIZE wxSize(FromDIP(264), FromDIP(50)) -#define AMS_ITEMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(27)) +#define AMS_ITEMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(44)) //#define AMS_CANS_SIZE wxSize(FromDIP(284), FromDIP(184)) //#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(196)) #define AMS_STEP_SIZE wxSize(FromDIP(172), FromDIP(196)) #define AMS_REFRESH_SIZE wxSize(FromDIP(25), FromDIP(25)) #define AMS_EXTRUDER_SIZE wxSize(FromDIP(29), FromDIP(37)) -#define AMS_EXTRUDER_BITMAP_SIZE wxSize(FromDIP(13), FromDIP(37)) +#define AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE wxSize(FromDIP(13), FromDIP(36)) +#define AMS_EXTRUDER_SINGLE_NOZZLE_BITMAP_SIZE wxSize(FromDIP(18), FromDIP(36)) #define AMS_BODY_SIZE wxSize(FromDIP(36), FromDIP(55)) #define AMS_DOWN_ROAD_SIZE wxSize(FromDIP(568), FromDIP(10)) #define AMS_HUMIDITY_SIZE wxSize(FromDIP(93), FromDIP(26)) +#define AMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(150)) + + + +#define MAIN_NOZZLE_ID 0 +#define DEPUTY_NOZZLE_ID 1 +#define GENERIC_AMS_SLOT_NUM 4 struct Caninfo { @@ -270,7 +278,7 @@ class AMSextruderImage: public wxWindow public: void OnAmsLoading(bool load, wxColour col); void TurnOff(); - void update(bool show_state) { m_show_state = show_state; }; + void setShowState(bool show_state) { m_show_state = show_state; }; void msw_rescale(); void paintEvent(wxPaintEvent &evt); @@ -281,27 +289,36 @@ public: string m_file_name; bool m_ams_loading{ false }; void doRender(wxDC &dc); - AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); + AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxSize& size, const wxPoint &pos = wxDefaultPosition); ~AMSextruderImage(); }; //AMSExtImage upon ext lib class AMSExtImage : public wxWindow { + private: + bool m_ext_show = true; + bool m_single_flag = false; + AMSPanelPos m_ext_pos; public: void msw_rescale(); void paintEvent(wxPaintEvent& evt); + void setShowState(bool show) { m_ext_show = show; }; void render(wxDC& dc); ScalableBitmap m_ams_ext; + ScalableBitmap m_ams_ext_left; + ScalableBitmap m_ams_ext_right; void doRender(wxDC& dc); - AMSExtImage(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + AMSExtImage(wxWindow* parent, bool single_flag = false, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); ~AMSExtImage(); }; class AMSextruder : public wxWindow { +private: + int m_nozzle_num{ 1 }; public: void TurnOn(wxColour col); void TurnOff(); @@ -314,7 +331,7 @@ public: void msw_rescale(); void has_ams(bool hams) {m_has_vams = hams; Refresh();}; void no_ams_mode(bool mode) {m_none_ams_mode = mode; Refresh();}; - void update(int nozzle_num) { m_nozzle_num = nozzle_num; }; + void updateNozzleNum(int nozzle_num); bool m_none_ams_mode{true}; bool m_has_vams{false}; @@ -322,14 +339,13 @@ public: bool m_ams_loading{false}; wxColour m_current_colur; wxColour m_current_colur_deputy; - int m_nozzle_num{ 1 }; wxBoxSizer * m_bitmap_sizer{nullptr}; wxPanel * m_bitmap_panel{nullptr}; //AMSextruderImage *m_amsSextruder{nullptr}; - AMSextruderImage* m_left_extruder; - AMSextruderImage* m_right_extruder; - AMSextruder(wxWindow *parent, wxWindowID id, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); + AMSextruderImage* m_left_extruder = nullptr; + AMSextruderImage* m_right_extruder = nullptr; + AMSextruder(wxWindow *parent, wxWindowID id, int nozzle_num, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); ~AMSextruder(); }; @@ -402,12 +418,15 @@ protected: ScalableBitmap m_bitmap_extra_tray_left; ScalableBitmap m_bitmap_extra_tray_right; + ScalableBitmap m_bitmap_extra_tray_mid; ScalableBitmap m_bitmap_extra_tray_left_hover; ScalableBitmap m_bitmap_extra_tray_right_hover; + ScalableBitmap m_bitmap_extra_tray_mid_hover; ScalableBitmap m_bitmap_extra_tray_left_selected; ScalableBitmap m_bitmap_extra_tray_right_selected; + ScalableBitmap m_bitmap_extra_tray_mid_selected; bool m_unable_selected = {false}; bool m_enable = {false}; @@ -429,10 +448,10 @@ protected: void on_left_down(wxMouseEvent &evt); void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); - void render_extra_text(wxDC& dc); + void render_lite_text(wxDC& dc); void render_generic_text(wxDC& dc); void doRender(wxDC& dc); - void render_extra_lib(wxDC& dc); + void render_lite_lib(wxDC& dc); void render_generic_lib(wxDC& dc); }; @@ -566,7 +585,7 @@ public: void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); void SetPassRoadColour(bool left, wxColour col); void SetShowMode(AMSRoadShowMode left_mode, AMSRoadShowMode right_mode); - void UpdatePassRoad(string can_id, bool left, int len, AMSinfo info, AMSPassRoadSTEP step); + void UpdatePassRoad(string can_id, AMSPanelPos pos, int len, AMSPassRoadSTEP step); void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); @@ -603,8 +622,8 @@ public: protected: wxSize m_cube_size; wxColour m_background_colour = { AMS_CONTROL_DEF_LIB_BK_COLOUR }; - float m_padding = { 4.0 }; - float m_space = { 9.4 }; + float m_padding; + float m_space; bool m_hover = {false}; bool m_selected = {false}; AMSModel m_ams_item_type = AMSModel::GENERIC_AMS; @@ -680,7 +699,7 @@ public: void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); void doRender(wxDC& dc); - void RenderExtraRoad(wxDC& dc, wxSize size); + void RenderLiteRoad(wxDC& dc, wxSize size); wxColour GetTagColr(wxString canid); std::string GetCurrentCan();