From 079dca6b07cd71698987f5d04c620a2342a2b2c8 Mon Sep 17 00:00:00 2001 From: tao wang Date: Sat, 14 Dec 2024 17:51:28 +0800 Subject: [PATCH] FIX:fixed the display issue of multiple AMS jira:[for ams] Change-Id: Icb8ce708b0e65870d627dfbe8932e012fc36c6f9 (cherry picked from commit 2cdfc21b93e37b92deabb3ab8e7b39de2578f0b2) (cherry picked from commit afbf3cf1976623c9a443f3471ec7ddcfb737d031) --- resources/images/ams_ext_image.svg | 5 + resources/images/ext_ams_item.svg | 3 + resources/images/ext_image_left.svg | 7 + resources/images/ext_image_right.svg | 7 + resources/images/ext_image_single_nozzle.svg | 5 + 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 + resources/images/four_slot_ams_item.svg | 5 + resources/images/left_nozzle.svg | 16 + resources/images/right_nozzle.svg | 16 + resources/images/single_nozzle.svg | 14 + resources/images/single_slot_ams_item.svg | 12 + src/slic3r/GUI/StatusPanel.cpp | 108 +- src/slic3r/GUI/StatusPanel.hpp | 1 + src/slic3r/GUI/Widgets/AMSControl.cpp | 2112 +++++++++------- src/slic3r/GUI/Widgets/AMSControl.hpp | 155 +- src/slic3r/GUI/Widgets/AMSItem.cpp | 2189 ++++++++++++----- src/slic3r/GUI/Widgets/AMSItem.hpp | 384 ++- 19 files changed, 3332 insertions(+), 1728 deletions(-) create mode 100644 resources/images/ams_ext_image.svg create mode 100644 resources/images/ext_ams_item.svg create mode 100644 resources/images/ext_image_left.svg create mode 100644 resources/images/ext_image_right.svg create mode 100644 resources/images/ext_image_single_nozzle.svg 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 create mode 100644 resources/images/four_slot_ams_item.svg create mode 100644 resources/images/left_nozzle.svg create mode 100644 resources/images/right_nozzle.svg create mode 100644 resources/images/single_nozzle.svg create mode 100644 resources/images/single_slot_ams_item.svg diff --git a/resources/images/ams_ext_image.svg b/resources/images/ams_ext_image.svg new file mode 100644 index 0000000000..299f4cb943 --- /dev/null +++ b/resources/images/ams_ext_image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/ext_ams_item.svg b/resources/images/ext_ams_item.svg new file mode 100644 index 0000000000..f05222c7f8 --- /dev/null +++ b/resources/images/ext_ams_item.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/ext_image_left.svg b/resources/images/ext_image_left.svg new file mode 100644 index 0000000000..e506134f1d --- /dev/null +++ b/resources/images/ext_image_left.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/ext_image_right.svg b/resources/images/ext_image_right.svg new file mode 100644 index 0000000000..0c9cfe3858 --- /dev/null +++ b/resources/images/ext_image_right.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/ext_image_single_nozzle.svg b/resources/images/ext_image_single_nozzle.svg new file mode 100644 index 0000000000..5cad887f9b --- /dev/null +++ b/resources/images/ext_image_single_nozzle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/extra_ams_tray_mid.svg b/resources/images/extra_ams_tray_mid.svg new file mode 100644 index 0000000000..77e2e562e9 --- /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 0000000000..1d836ac976 --- /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 0000000000..9002cb54a7 --- /dev/null +++ b/resources/images/extra_ams_tray_mid_selected.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/four_slot_ams_item.svg b/resources/images/four_slot_ams_item.svg new file mode 100644 index 0000000000..b42e94a6ca --- /dev/null +++ b/resources/images/four_slot_ams_item.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/left_nozzle.svg b/resources/images/left_nozzle.svg new file mode 100644 index 0000000000..e59b05124c --- /dev/null +++ b/resources/images/left_nozzle.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/resources/images/right_nozzle.svg b/resources/images/right_nozzle.svg new file mode 100644 index 0000000000..5fb901f9e9 --- /dev/null +++ b/resources/images/right_nozzle.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/resources/images/single_nozzle.svg b/resources/images/single_nozzle.svg new file mode 100644 index 0000000000..bca4c92c8f --- /dev/null +++ b/resources/images/single_nozzle.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/images/single_slot_ams_item.svg b/resources/images/single_slot_ams_item.svg new file mode 100644 index 0000000000..a1f94f84fc --- /dev/null +++ b/resources/images/single_slot_ams_item.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index a64cbef796..e2619eca85 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2256,6 +2256,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_AMS_EXTRUSION_CALI, &StatusPanel::on_filament_extrusion_cali, this); Bind(EVT_AMS_LOAD, &StatusPanel::on_ams_load, this); Bind(EVT_AMS_UNLOAD, &StatusPanel::on_ams_unload, this); + Bind(EVT_AMS_SWITCH, &StatusPanel::on_ams_switch, this); Bind(EVT_AMS_FILAMENT_BACKUP, &StatusPanel::on_ams_filament_backup, this); Bind(EVT_AMS_SETTINGS, &StatusPanel::on_ams_setting_click, this); Bind(EVT_AMS_REFRESH_RFID, &StatusPanel::on_ams_refresh_rfid, this); @@ -3025,23 +3026,6 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) void StatusPanel::update_extruder_status(MachineObject* obj) { if (!obj) return; - //wait add - - /*if (obj->is_filament_at_extruder()) { - if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) { - tmp = m_bitmap_extruder_filled_load; - } - else { - tmp = m_bitmap_extruder_filled_unload; - } - } - else { - if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) { - m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_empty_load); - } else { - m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_empty_unload); - } - }*/ } void StatusPanel::update_ams(MachineObject *obj) @@ -3125,14 +3109,14 @@ void StatusPanel::update_ams(MachineObject *obj) for (auto slot : obj->vt_slot) { AMSinfo info; info.parse_ext_info(obj, slot); - //if (ams_mode == AMSModel::AMS_LITE) info.ext_type = AMSModelOriginType::LITE_EXT; TODO: Orca hack + if (ams_mode == AMSModel::AMS_LITE) info.ext_type = AMSModelOriginType::LITE_EXT; ext_info.push_back(info); } std::string dev_id = obj->dev_id; ExtderData data = obj->m_extder_data; // must select a current can - m_ams_control->UpdateAms(ams_info, false); + m_ams_control->UpdateAms(ams_info, ext_info, data, dev_id, false); last_tray_exist_bits = obj->tray_exist_bits; last_ams_exist_bits = obj->ams_exist_bits; @@ -3147,57 +3131,57 @@ void StatusPanel::update_ams(MachineObject *obj) if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_MAIN_ID)) is_vt_tray = true; // set segment 1, 2 - if (!obj->is_enable_np) { - if (obj->m_tray_now == std::to_string(255) || obj->m_tray_now == std::to_string(254)) { - m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } else { - if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) { - m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); - } else if (obj->m_tray_now != "255") { - m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); - } else { - m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } + //if (!obj->is_enable_np) { + // if (obj->m_tray_now == std::to_string(255) || obj->m_tray_now == std::to_string(254)) { + // m_ams_control->SetAmsStep(obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id, obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + // } else { + // /*if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) { + // m_ams_control->SetAmsStep(obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id, obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id, + // AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); + // } else if (obj->m_tray_now != "255") { + // m_ams_control->SetAmsStep(obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id, obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id, + // AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); + // } else { + // m_ams_control->SetAmsStep(obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id, obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id, + // AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + // }*/ + // if () { - if (obj->m_tray_now == std::to_string(255) || obj->m_tray_now == std::to_string(254)) { - m_ams_control->SetExtruder(obj->is_filament_at_extruder(), true, obj->m_ams_id, obj->vt_slot[0].get_color()); - } else { - m_ams_control->SetExtruder(obj->is_filament_at_extruder(), false, obj->m_ams_id, m_ams_control->GetCanColour(obj->m_ams_id, obj->m_tray_id)); - } - } else { + // } + // } + + // m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id, obj->m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id); + //} else { /*right*/ if (obj->m_extder_data.extders.size() > 0) { auto ext = obj->m_extder_data.extders[MAIN_NOZZLE_ID]; if (ext.ext_has_filament) { - if (ext.snow.slot_id == std::to_string(MAIN_NOZZLE_ID) || ext.snow.slot_id == std::to_string(MAIN_NOZZLE_ID)) { - m_ams_control->SetAmsStep(ext.star.ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); + if (ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { + m_ams_control->SetAmsStep(ext.snow.ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); } - m_ams_control->SetExtruder(true, true, ext.snow.ams_id, m_ams_control->GetCanColour(ext.snow.ams_id, ext.snow.slot_id)); } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_ams_control->SetExtruder(false, true, ext.snow.ams_id, m_ams_control->GetCanColour(ext.snow.ams_id, ext.snow.slot_id)); } + m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); } /*left*/ if (obj->m_extder_data.extders.size() > 1) { auto ext = obj->m_extder_data.extders[DEPUTY_NOZZLE_ID]; if (ext.ext_has_filament) { - if (ext.snow.slot_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ext.snow.slot_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { + if (ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { m_ams_control->SetAmsStep(ext.snow.ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); } - m_ams_control->SetExtruder(true, true, ext.snow.ams_id, m_ams_control->GetCanColour(ext.snow.ams_id, ext.snow.slot_id)); } else { m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_ams_control->SetExtruder(false, true, ext.snow.ams_id, m_ams_control->GetCanColour(ext.snow.ams_id, ext.snow.slot_id)); } + m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); } - } + //} bool ams_loading_state = false; auto ams_status_sub = obj->ams_status_sub; @@ -4180,6 +4164,40 @@ void StatusPanel::on_ams_load_vams(wxCommandEvent& event) { } } +void StatusPanel::on_ams_switch(SimpleEvent &event) +{ + if(obj){ + if (obj->m_extder_data.extders.size() > 0) { + auto ext = obj->m_extder_data.extders[MAIN_NOZZLE_ID]; + if (ext.ext_has_filament) { + if (ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { + m_ams_control->SetAmsStep(ext.snow.ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); + } else { + m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); + } + } else { + m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + } + + /*left*/ + if (obj->m_extder_data.extders.size() > 1) { + auto ext = obj->m_extder_data.extders[DEPUTY_NOZZLE_ID]; + if (ext.ext_has_filament) { + if (ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || ext.snow.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { + m_ams_control->SetAmsStep(ext.snow.ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3); + } else { + m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); + } + } else { + m_ams_control->SetAmsStep(ext.snow.ams_id, ext.snow.slot_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + m_ams_control->SetExtruder(ext.ext_has_filament, ext.snow.ams_id, ext.snow.slot_id); + } + } +} + void StatusPanel::on_ams_unload(SimpleEvent &event) { if (obj) { diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 2216905c96..b0cddd6bb5 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -636,6 +636,7 @@ protected: void update_filament_step(); void on_ams_load_curr(); void on_ams_load_vams(wxCommandEvent& event); + void on_ams_switch(SimpleEvent &event); void on_ams_unload(SimpleEvent &event); void on_ams_filament_backup(SimpleEvent& event); void on_ams_setting_click(SimpleEvent& event); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index e55b73dd1c..dbce016a6b 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -4,8 +4,6 @@ #include "../I18N.hpp" #include "../GUI_App.hpp" -#include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" - #include #include @@ -15,202 +13,206 @@ namespace Slic3r { namespace GUI { -#define AMS_CANS_SIZE wxSize(FromDIP(284), FromDIP(196)) -#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(196)) +#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), FromDIP(160)) -#define IS_GENERIC_AMS(model) (model != AMSModel::AMS_LITE && model != AMSModel::EXT_AMS) AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) : wxSimplebook(parent, wxID_ANY, pos, size) , m_Humidity_tip_popup(AmsHumidityTipPopup(this)) - , m_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this)) , m_ams_introduce_popup(AmsIntroducePopup(this)) { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + MachineObject *obj = dev->get_selected_machine(); + parse_object(obj); + } + + m_extder_data.total_extder_count = 1; SetBackgroundColour(*wxWHITE); // normal mode - //Freeze(); + Freeze(); wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); - m_amswin = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); + m_amswin = new wxWindow(this, wxID_ANY); m_amswin->SetBackgroundColour(*wxWHITE); - - // top - ams tag - m_simplebook_amsprvs = new wxSimplebook(m_amswin, wxID_ANY); - m_simplebook_amsprvs->SetSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); - m_simplebook_amsprvs->SetMinSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); - auto m_sizer_amspreviews = new wxBoxSizer(wxHORIZONTAL); - m_simplebook_amsprvs->SetSizer(m_sizer_amspreviews); - m_simplebook_amsprvs->Layout(); - m_sizer_amspreviews->Fit(m_simplebook_amsprvs); - - m_panel_prv = new wxPanel(m_simplebook_amsprvs, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); - m_sizer_prv = new wxBoxSizer(wxHORIZONTAL); - m_panel_prv->SetSizer(m_sizer_prv); - m_panel_prv->Layout(); - m_sizer_prv->Fit(m_panel_prv); - - auto m_panel_top_empty = new wxPanel(m_simplebook_amsprvs, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); - auto m_sizer_top_empty = new wxBoxSizer(wxHORIZONTAL); - m_panel_top_empty->SetSizer(m_sizer_top_empty); - m_panel_top_empty->Layout(); - m_sizer_top_empty->Fit(m_panel_top_empty); - - m_simplebook_amsprvs->AddPage(m_panel_top_empty, wxEmptyString, false); - m_simplebook_amsprvs->AddPage(m_panel_prv, wxEmptyString, false); + //m_amswin->SetBackgroundColour(wxColour(0x00CED1)); + m_amswin->SetSize(wxSize(FromDIP(578), -1)); + m_amswin->SetMinSize(wxSize(FromDIP(578), -1)); - wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *m_sizer_left = new wxBoxSizer(wxVERTICAL); + m_sizer_ams_items = new wxBoxSizer(wxHORIZONTAL); + + /*right items*/ + 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_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_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_prv_right->Hide(); + + //m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL); + + m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL); //ams tip - m_sizer_ams_tips = new wxBoxSizer(wxHORIZONTAL); - m_ams_tip = new Label(m_amswin, _L("AMS")); - m_ams_tip->SetFont(::Label::Body_12); - m_ams_tip->SetBackgroundColour(*wxWHITE); - m_img_amsmapping_tip = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); - m_img_amsmapping_tip->SetBackgroundColour(*wxWHITE); - - m_sizer_ams_tips->Add(m_ams_tip, 0, wxTOP, FromDIP(5)); - m_sizer_ams_tips->Add(m_img_amsmapping_tip, 0, wxALL, FromDIP(3)); - - m_img_amsmapping_tip->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { - wxPoint img_pos = m_img_amsmapping_tip->ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x, img_pos.y + m_img_amsmapping_tip->GetRect().height); - m_ams_introduce_popup.set_mode(true); - m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); - m_ams_introduce_popup.Popup(); - -#ifdef __WXMSW__ - wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); - wxPostEvent(this, close_event); -#endif // __WXMSW__ - }); - m_img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { - m_ams_introduce_popup.Dismiss(); - }); +// m_sizer_ams_tips = new wxBoxSizer(wxHORIZONTAL); +// m_ams_tip = new Label(m_amswin, _L("AMS")); +// m_ams_tip->SetFont(::Label::Body_12); +// m_ams_tip->SetBackgroundColour(*wxWHITE); +// m_img_amsmapping_tip = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); +// m_img_amsmapping_tip->SetBackgroundColour(*wxWHITE); +// +// m_sizer_ams_tips->Add(m_ams_tip, 0, wxTOP, FromDIP(5)); +// m_sizer_ams_tips->Add(m_img_amsmapping_tip, 0, wxALL, FromDIP(3)); +// +// m_img_amsmapping_tip->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { +// wxPoint img_pos = m_img_amsmapping_tip->ClientToScreen(wxPoint(0, 0)); +// wxPoint popup_pos(img_pos.x, img_pos.y + m_img_amsmapping_tip->GetRect().height); +// m_ams_introduce_popup.set_mode(true); +// m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); +// m_ams_introduce_popup.Popup(); +// +//#ifdef __WXMSW__ +// wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); +// wxPostEvent(this, close_event); +//#endif // __WXMSW__ +// }); +// m_img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { +// m_ams_introduce_popup.Dismiss(); +// }); +// +// - //backup tips - m_ams_backup_tip = new Label(m_amswin, _L("Auto Refill")); - m_ams_backup_tip->SetFont(::Label::Head_12); - m_ams_backup_tip->SetForegroundColour(wxColour(0x009688)); - m_ams_backup_tip->SetBackgroundColour(*wxWHITE); - m_img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); - m_img_ams_backup->SetBackgroundColour(*wxWHITE); + //ams area - m_sizer_ams_tips->Add(0, 0, 1, wxEXPAND, 0); - m_sizer_ams_tips->Add(m_img_ams_backup, 0, wxALL, FromDIP(3)); - m_sizer_ams_tips->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); + m_sizer_ams_area_left = new wxBoxSizer(wxHORIZONTAL); + m_sizer_ams_area_right = new wxBoxSizer(wxHORIZONTAL); + m_sizer_down_road = new wxBoxSizer(wxHORIZONTAL); - m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); - m_img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + 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(5)); + m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxALIGN_CENTER, 0); - m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); - m_img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + 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(5)); + m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxALIGN_CENTER, 0); - m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); - m_img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); - + 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); - //ams cans - m_panel_can = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_SIZE, wxBORDER_NONE); - m_panel_can->SetMinSize(AMS_CANS_SIZE); - m_panel_can->SetCornerRadius(FromDIP(10)); - m_panel_can->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_LIB_BK_COLOUR, StateColor::Normal))); - - m_sizer_cans = new wxBoxSizer(wxHORIZONTAL); - - m_simplebook_ams = new wxSimplebook(m_panel_can, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_simplebook_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); - m_sizer_cans->Add(m_simplebook_ams, 0, wxLEFT | wxLEFT, FromDIP(10)); + m_down_road = new AMSRoadDownPart(m_panel_down_road, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE); + m_sizer_down_road->Add(m_panel_down_road, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 0); // ams mode - m_simplebook_generic_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_simplebook_generic_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + // + m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - // none ams mode - m_none_ams_panel = new wxPanel(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_none_ams_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); - - auto m_tip_none_ams = new wxStaticText(m_none_ams_panel, wxID_ANY, _L("AMS not connected"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL); - m_tip_none_ams->SetMinSize(wxSize(AMS_CANS_SIZE.x - FromDIP(20), -1)); - m_tip_none_ams->SetFont(::Label::Head_16); - m_tip_none_ams->SetForegroundColour(AMS_CONTROL_DISABLE_COLOUR); - - wxBoxSizer *sizer_ams_panel_v = new wxBoxSizer(wxVERTICAL); - wxBoxSizer *sizer_ams_panel_h = new wxBoxSizer(wxHORIZONTAL); - - sizer_ams_panel_v->Add(m_tip_none_ams, 0, wxALIGN_CENTER, 0); - sizer_ams_panel_h->Add(sizer_ams_panel_v, 0, wxALIGN_CENTER, 0); - - m_none_ams_panel->SetSizer(sizer_ams_panel_h); - m_none_ams_panel->Layout(); //extra ams mode - m_simplebook_extra_ams = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); - m_simplebook_extra_ams->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); + // - m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false); - m_simplebook_ams->AddPage(m_simplebook_generic_ams, wxEmptyString, false); - m_simplebook_ams->AddPage(m_simplebook_extra_ams, wxEmptyString, false); + m_sizer_ams_area_left->Layout(); + m_sizer_ams_area_right->Layout(); - m_panel_can->SetSizer(m_sizer_cans); - m_panel_can->Layout(); - m_sizer_cans->Fit(m_panel_can); - m_sizer_left->Add(m_sizer_ams_tips, 0, wxEXPAND, 0); - m_sizer_left->Add(m_panel_can, 1, wxEXPAND, 0); + m_sizer_ams_option = new wxBoxSizer(wxHORIZONTAL); + m_sizer_option_left = new wxBoxSizer(wxHORIZONTAL); + m_sizer_option_mid = new wxBoxSizer(wxHORIZONTAL); + m_sizer_option_right = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *m_sizer_left_bottom = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *sizer_sextruder = new wxBoxSizer(wxVERTICAL); - - auto extruder_pane = new wxPanel(m_amswin, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); - - extruder_pane->SetSizer(sizer_sextruder); - extruder_pane->Layout(); - - m_extruder = new AMSextruder(extruder_pane, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); - sizer_sextruder->Add(m_extruder, 0, wxALIGN_CENTER, 0); - - m_sizer_left_bottom->Add(extruder_pane, 0, wxALL,0); - - //m_sizer_left_bottom->Add(0, 0, 0, wxEXPAND, 0); + /*m_sizer_option_left->SetMinSize( wxSize( AMS_CANS_SIZE.x,-1 ) ); + m_sizer_option_right->SetMinSize( wxSize( AMS_CANS_SIZE.x,-1 ) );*/ + /*m_sizer_option_left->SetMinSize(wxSize(FromDIP(239), -1)); + m_sizer_option_right->SetMinSize(wxSize(FromDIP(239), -1));*/ + m_sizer_option_left->SetMinSize(wxSize(FromDIP(140), -1)); + m_sizer_option_right->SetMinSize(wxSize(FromDIP(140), -1)); StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); - StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), - std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), - std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), - std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); + StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), + std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), + std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), + std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); - StateColor btn_bd_green(std::pair(wxColour(255,255,254), StateColor::Disabled), - std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); + StateColor btn_bd_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); - StateColor btn_bd_white(std::pair(wxColour(255,255,254), StateColor::Disabled), - std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - StateColor btn_text_green(std::pair(wxColour(255,255,254), StateColor::Disabled), - std::pair(wxColour(255,255,254), StateColor::Enabled)); + StateColor btn_text_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(255, 255, 254), StateColor::Enabled)); StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), - std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - - m_button_area = new wxWindow(m_amswin, wxID_ANY); - m_button_area->SetBackgroundColour(m_amswin->GetBackgroundColour()); + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - wxBoxSizer *m_sizer_button = new wxBoxSizer(wxVERTICAL); - wxBoxSizer *m_sizer_button_area = new wxBoxSizer(wxHORIZONTAL); + /*option left*/ + m_button_auto_refill = new Button(m_amswin, _L("Auto-refill")); + m_button_auto_refill->SetBackgroundColor(btn_bg_white); + m_button_auto_refill->SetBorderColor(btn_bd_white); + m_button_auto_refill->SetTextColor(btn_text_white); + m_button_auto_refill->SetFont(Label::Body_13); + // m_img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); + // m_img_ams_backup->SetBackgroundColour(*wxWHITE); + // m_img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + // m_img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + // m_img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); + m_sizer_option_left->Add(m_button_auto_refill, 0, wxALIGN_CENTER_VERTICAL, 0); - m_button_extruder_feed = new Button(m_button_area, _L("Load")); + m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24); + m_button_ams_setting_hover = ScalableBitmap(this, "ams_setting_hover", 24); + m_button_ams_setting_press = ScalableBitmap(this, "ams_setting_press", 24); + + m_button_ams_setting = new wxStaticBitmap(m_amswin, wxID_ANY, m_button_ams_setting_normal.bmp(), wxDefaultPosition, wxSize(FromDIP(24), FromDIP(24))); + m_button_ams_setting->SetBackgroundColour(m_amswin->GetBackgroundColour()); + m_sizer_option_left->Add(m_button_ams_setting, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20)); + + + /*option mid*/ + m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_extder_data.total_extder_count, wxDefaultPosition, AMS_EXTRUDER_SIZE); + m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 ); + + + /*option right*/ + + + + m_button_extruder_feed = new Button(m_amswin, _L("Load")); m_button_extruder_feed->SetFont(Label::Body_13); m_button_extruder_feed->SetBackgroundColor(btn_bg_green); m_button_extruder_feed->SetBorderColor(btn_bd_green); m_button_extruder_feed->SetTextColor(btn_text_green); - + if (wxGetApp().app_config->get("language") == "de_DE") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "fr_FR") m_button_extruder_feed->SetFont(Label::Body_9); @@ -221,8 +223,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_feed->SetFont(Label::Body_9); + if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_feed->SetLabel("Load"); - m_button_extruder_back = new Button(m_button_area, _L("Unload")); + m_button_extruder_back = new Button(m_amswin, _L("Unload")); m_button_extruder_back->SetBackgroundColor(btn_bg_white); m_button_extruder_back->SetBorderColor(btn_bd_white); m_button_extruder_back->SetTextColor(btn_text_white); @@ -237,313 +240,45 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_back->SetFont(Label::Body_9); - - m_sizer_button_area->Add(0, 0, 1, wxEXPAND, 0); - m_sizer_button_area->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(6)); - m_sizer_button_area->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(6)); - - m_sizer_button->Add(m_sizer_button_area, 0, 1, wxEXPAND, 0); - - m_button_area->SetSizer(m_sizer_button); - m_button_area->Layout(); - m_button_area->Fit(); - - m_sizer_left_bottom->Add(0, 0, 1, wxEXPAND, 0); - m_sizer_left_bottom->Add(m_button_area, 0, wxEXPAND | wxTOP, FromDIP(18)); - m_sizer_left->Add(m_sizer_left_bottom, 0, wxEXPAND, 0); + if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_back->SetLabel("Unload"); - //virtual ams - m_panel_virtual = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - m_panel_virtual->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_LIB_BK_COLOUR, StateColor::Normal))); - m_panel_virtual->SetMinSize(wxSize(AMS_CAN_LIB_SIZE.x + FromDIP(16), AMS_CANS_SIZE.y)); - m_panel_virtual->SetMaxSize(wxSize(AMS_CAN_LIB_SIZE.x + FromDIP(16), AMS_CANS_SIZE.y)); - - m_vams_info.material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; - m_vams_info.can_id = wxString::Format("%d", VIRTUAL_TRAY_MAIN_ID).ToStdString(); - - auto vams_panel = new wxWindow(m_panel_virtual, wxID_ANY); - vams_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR); - - m_vams_lib = new AMSLib(vams_panel, m_vams_info.can_id, m_vams_info); - m_vams_lib->m_slot_id = "0"; // TODO: Orca hack - m_vams_road = new AMSRoad(vams_panel, wxID_ANY, m_vams_info, -1, -1, wxDefaultPosition, AMS_CAN_ROAD_SIZE); - - m_vams_lib->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { - //clear all selected - m_current_ams = m_vams_info.can_id; - m_vams_lib->OnSelected(); - - SwitchAms(m_current_ams); - for (auto ams_item : m_ams_item_list) { - AmsItem* item = ams_item.second; - item->SelectCan(m_current_ams); - } - - e.Skip(); - }); - - Bind(EVT_AMS_UNSELETED_VAMS, [this](wxCommandEvent& e) { - /*if (m_current_ams == e.GetString().ToStdString()) { - return; - }*/ - m_current_ams = e.GetString().ToStdString(); - SwitchAms(m_current_ams); - m_vams_lib->UnSelected(); - e.Skip(); - }); - - wxBoxSizer* m_vams_top_sizer = new wxBoxSizer(wxVERTICAL); - - m_vams_top_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14)); - m_vams_top_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, AMS_REFRESH_SIZE.y); - m_vams_top_sizer->Add(m_vams_lib, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(4)); - m_vams_top_sizer->Add(m_vams_road, 0, wxALL, 0); - - //extra road - - vams_panel->SetSizer(m_vams_top_sizer); - vams_panel->Layout(); - vams_panel->Fit(); - - wxBoxSizer* m_sizer_vams_panel = new wxBoxSizer(wxVERTICAL); - - m_sizer_vams_panel->Add(vams_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); - m_panel_virtual->SetSizer(m_sizer_vams_panel); - m_panel_virtual->Layout(); - m_panel_virtual->Fit(); - - m_vams_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer_vams_tips = new wxBoxSizer(wxHORIZONTAL); - - auto m_vams_tip = new wxStaticText(m_amswin, wxID_ANY, _L("Ext Spool"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - m_vams_tip->SetMaxSize(wxSize(FromDIP(66), -1)); - m_vams_tip->SetFont(::Label::Body_12); - m_vams_tip->SetBackgroundColour(*wxWHITE); - m_img_vams_tip = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); - m_img_vams_tip->SetBackgroundColour(*wxWHITE); - m_img_vams_tip->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { - wxPoint img_pos = m_img_vams_tip->ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x, img_pos.y + m_img_vams_tip->GetRect().height); - m_ams_introduce_popup.set_mode(false); - m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); - m_ams_introduce_popup.Popup(); - -#ifdef __WXMSW__ - wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); - wxPostEvent(this, close_event); -#endif // __WXMSW__ - }); - - m_img_vams_tip->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { - m_ams_introduce_popup.Dismiss(); - }); - - m_sizer_vams_tips->Add(m_vams_tip, 0, wxTOP, FromDIP(5)); - m_sizer_vams_tips->Add(m_img_vams_tip, 0, wxALL, FromDIP(3)); - - m_vams_extra_road = new AMSVirtualRoad(m_amswin, wxID_ANY); - m_vams_extra_road->SetMinSize(wxSize(m_panel_virtual->GetSize().x + FromDIP(16), -1)); - - m_vams_sizer->Add(m_sizer_vams_tips, 0, wxALIGN_CENTER, 0); - m_vams_sizer->Add(m_panel_virtual, 0, wxALIGN_CENTER, 0); - m_vams_sizer->Add(m_vams_extra_road, 1, wxEXPAND, 0); + //m_sizer_option_right->Add(0, 0, 1, wxEXPAND, 0); + m_sizer_option_right->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(0)); + m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(20)); - //Right - wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); - m_simplebook_right = new wxSimplebook(m_amswin, wxID_ANY); - m_simplebook_right->SetMinSize(wxSize(AMS_STEP_SIZE.x, AMS_STEP_SIZE.y + FromDIP(19))); - m_simplebook_right->SetMaxSize(wxSize(AMS_STEP_SIZE.x, AMS_STEP_SIZE.y + FromDIP(19))); - m_simplebook_right->SetBackgroundColour(*wxWHITE); - - m_sizer_right->Add(m_simplebook_right, 0, wxALL, 0); - - auto tip_right = new wxPanel(m_simplebook_right, wxID_ANY, wxDefaultPosition, AMS_STEP_SIZE, wxTAB_TRAVERSAL); - m_sizer_right_tip = new wxBoxSizer(wxVERTICAL); - - m_tip_right_top = new wxStaticText(tip_right, wxID_ANY, _L("Tips"), wxDefaultPosition, wxDefaultSize, 0); - m_tip_right_top->SetFont(::Label::Head_13); - m_tip_right_top->SetForegroundColour(AMS_CONTROL_BRAND_COLOUR); - m_tip_right_top->Wrap(AMS_STEP_SIZE.x); + m_sizer_ams_option->Add(m_sizer_option_left, 0, wxALIGN_LEFT, 0); + m_sizer_ams_option->Add(m_sizer_option_mid, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, FromDIP(90)); + m_sizer_ams_option->Add(m_sizer_option_right, 0, wxALIGN_RIGHT, 0); - m_tip_load_info = new ::Label(tip_right, wxEmptyString); - m_tip_load_info->SetFont(::Label::Body_13); - m_tip_load_info->SetBackgroundColour(*wxWHITE); - m_tip_load_info->SetForegroundColour(AMS_CONTROL_GRAY700); + 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_right_tip->Add(m_tip_right_top, 0, 0, 0); - m_sizer_right_tip->Add(0, 0, 0, wxEXPAND, FromDIP(10)); - m_sizer_right_tip->Add(m_tip_load_info, 0, 0, 0); + m_sizer_body->Add(m_sizer_ams_items, 0, wxALIGN_CENTER, 0); + m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(10)); + m_sizer_body->Add(m_sizer_ams_body, 0, wxALIGN_CENTER, 0); + m_sizer_body->Add(m_sizer_down_road, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 0); + m_sizer_body->Add(m_sizer_ams_option, 0, wxALIGN_CENTER, 0); - tip_right->SetSizer(m_sizer_right_tip); - tip_right->Layout(); - - m_filament_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); - m_filament_load_step->SetMinSize(AMS_STEP_SIZE); - m_filament_load_step->SetMaxSize(AMS_STEP_SIZE); - m_filament_load_step->SetBackgroundColour(*wxWHITE); - - m_filament_unload_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); - m_filament_unload_step->SetMinSize(AMS_STEP_SIZE); - m_filament_unload_step->SetMaxSize(AMS_STEP_SIZE); - m_filament_unload_step->SetBackgroundColour(*wxWHITE); - - m_filament_vt_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); - m_filament_vt_load_step->SetMinSize(AMS_STEP_SIZE); - m_filament_vt_load_step->SetMaxSize(AMS_STEP_SIZE); - m_filament_vt_load_step->SetBackgroundColour(*wxWHITE); - - m_simplebook_right->AddPage(tip_right, wxEmptyString, false); - m_simplebook_right->AddPage(m_filament_load_step, wxEmptyString, false); - m_simplebook_right->AddPage(m_filament_unload_step, wxEmptyString, false); - m_simplebook_right->AddPage(m_filament_vt_load_step, wxEmptyString, false); - - - m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24); - m_button_ams_setting_hover = ScalableBitmap(this, "ams_setting_hover", 24); - m_button_ams_setting_press = ScalableBitmap(this, "ams_setting_press", 24); - - wxBoxSizer *m_sizer_right_bottom = new wxBoxSizer(wxHORIZONTAL); - m_button_ams_setting = new wxStaticBitmap(m_amswin, wxID_ANY, m_button_ams_setting_normal.bmp(), wxDefaultPosition, wxSize(FromDIP(24), FromDIP(24))); - m_button_ams_setting->SetBackgroundColour(m_amswin->GetBackgroundColour()); - - m_button_guide = new Button(m_amswin, _L("Guide")); - m_button_guide->SetFont(Label::Body_13); - if (wxGetApp().app_config->get("language") == "de_DE") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "fr_FR") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "ru_RU") m_button_guide->SetLabel("Guide"); - if (wxGetApp().app_config->get("language") == "nl_NL") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "hu_HU") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "ja_JP") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "sv_SE") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_guide->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "uk_UA") m_button_guide->SetFont(Label::Body_9); - - m_button_guide->SetCornerRadius(FromDIP(12)); - m_button_guide->SetBorderColor(btn_bd_white); - m_button_guide->SetTextColor(btn_text_white); - m_button_guide->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_guide->SetBackgroundColor(btn_bg_white); - - m_button_retry = new Button(m_amswin, _L("Retry")); - m_button_retry->SetFont(Label::Body_13); - if (wxGetApp().app_config->get("language") == "de_DE") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "fr_FR") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "ru_RU") m_button_retry->SetLabel("Retry"); - if (wxGetApp().app_config->get("language") == "nl_NL") m_button_retry->SetLabel("Retry"); - if (wxGetApp().app_config->get("language") == "hu_HU") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "ja_JP") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "sv_SE") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_retry->SetFont(Label::Body_9); - if (wxGetApp().app_config->get("language") == "uk_UA") m_button_retry->SetFont(Label::Body_9); - - m_button_retry->SetCornerRadius(FromDIP(12)); - m_button_retry->SetBorderColor(btn_bd_white); - m_button_retry->SetTextColor(btn_text_white); - m_button_retry->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_retry->SetBackgroundColor(btn_bg_white); - - m_sizer_right_bottom->Add(m_button_ams_setting, 0); - m_sizer_right_bottom->Add(m_button_guide, 0, wxLEFT, FromDIP(10)); - m_sizer_right_bottom->Add(m_button_retry, 0, wxLEFT, FromDIP(10)); - m_sizer_right->Add(m_sizer_right_bottom, 0, wxEXPAND | wxTOP, FromDIP(20)); - - - m_sizer_bottom->Add(m_vams_sizer, 0, wxEXPAND, 0); - m_sizer_bottom->Add(m_sizer_left, 0, wxEXPAND, 0); - m_sizer_bottom->Add(0, 0, 0, wxLEFT, FromDIP(15)); - m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, FromDIP(0)); - - m_sizer_body->Add(m_simplebook_amsprvs, 0, wxEXPAND, 0); - m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(18)); - m_sizer_body->Add(m_sizer_bottom, 0, wxEXPAND | wxLEFT, FromDIP(6)); - - init_scaled_buttons(); m_amswin->SetSizer(m_sizer_body); m_amswin->Layout(); m_amswin->Fit(); - //Thaw(); + Thaw(); SetSize(m_amswin->GetSize()); SetMinSize(m_amswin->GetSize()); - // calibration mode - m_simplebook_calibration = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); - - auto m_in_calibration_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); - m_in_calibration_panel->SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); - wxBoxSizer *sizer_calibration_h = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *sizer_calibration_v = new wxBoxSizer(wxVERTICAL); - auto thumbnail = new wxStaticBitmap(m_in_calibration_panel, wxID_ANY, create_scaled_bitmap("ams_icon", nullptr, 126), wxDefaultPosition, wxDefaultSize); - m_text_calibration_percent = new wxStaticText(m_in_calibration_panel, wxID_ANY, wxT("0%"), wxDefaultPosition, wxDefaultSize, 0); - m_text_calibration_percent->SetFont(::Label::Head_16); - m_text_calibration_percent->SetForegroundColour(AMS_CONTROL_BRAND_COLOUR); - auto m_text_calibration_tip = new wxStaticText(m_in_calibration_panel, wxID_ANY, _L("Calibrating AMS..."), wxDefaultPosition, wxDefaultSize, 0); - m_text_calibration_tip->SetFont(::Label::Body_14); - m_text_calibration_tip->SetForegroundColour(AMS_CONTROL_GRAY700); - sizer_calibration_v->Add(thumbnail, 0, wxALIGN_CENTER, 0); - sizer_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(16)); - sizer_calibration_v->Add(m_text_calibration_percent, 0, wxALIGN_CENTER, 0); - sizer_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(8)); - sizer_calibration_v->Add(m_text_calibration_tip, 0, wxALIGN_CENTER, 0); - sizer_calibration_h->Add(sizer_calibration_v, 1, wxALIGN_CENTER, 0); - m_in_calibration_panel->SetSizer(sizer_calibration_h); - m_in_calibration_panel->Layout(); - - auto m_calibration_err_panel = new wxWindow(m_simplebook_calibration, wxID_ANY, wxDefaultPosition, m_amswin->GetSize(), wxTAB_TRAVERSAL); - m_calibration_err_panel->SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); - wxBoxSizer *sizer_err_calibration_h = new wxBoxSizer(wxHORIZONTAL); - wxBoxSizer *sizer_err_calibration_v = new wxBoxSizer(wxVERTICAL); - m_hyperlink = new wxHyperlinkCtrl(m_calibration_err_panel, wxID_ANY, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); - m_hyperlink->SetVisitedColour(wxColour(31, 142, 234)); - auto m_tip_calibration_err = new wxStaticText(m_calibration_err_panel, wxID_ANY, _L("A problem occurred during calibration. Click to view the solution."), wxDefaultPosition, - wxDefaultSize, 0); - m_tip_calibration_err->SetFont(::Label::Body_14); - m_tip_calibration_err->SetForegroundColour(AMS_CONTROL_GRAY700); - - wxBoxSizer *sizer_button = new wxBoxSizer(wxHORIZONTAL); - - auto m_button_calibration_again = new Button(m_calibration_err_panel, _L("Calibrate again")); - m_button_calibration_again->SetBackgroundColor(btn_bg_green); - m_button_calibration_again->SetBorderColor(AMS_CONTROL_BRAND_COLOUR); - m_button_calibration_again->SetTextColor(AMS_CONTROL_WHITE_COLOUR); - m_button_calibration_again->SetMinSize(AMS_CONTRO_CALIBRATION_BUTTON_SIZE); - m_button_calibration_again->SetCornerRadius(FromDIP(12)); - m_button_calibration_again->Bind(wxEVT_LEFT_DOWN, &AMSControl::on_clibration_again_click, this); - - sizer_button->Add(m_button_calibration_again, 0, wxALL, 5); - - auto m_button_calibration_cancel = new Button(m_calibration_err_panel, _L("Cancel calibration")); - m_button_calibration_cancel->SetBackgroundColor(btn_bg_white); - m_button_calibration_cancel->SetBorderColor(AMS_CONTROL_GRAY700); - m_button_calibration_cancel->SetTextColor(AMS_CONTROL_GRAY800); - m_button_calibration_cancel->SetMinSize(AMS_CONTRO_CALIBRATION_BUTTON_SIZE); - m_button_calibration_cancel->SetCornerRadius(FromDIP(12)); - m_button_calibration_cancel->Bind(wxEVT_LEFT_DOWN, &AMSControl::on_clibration_cancel_click, this); - sizer_button->Add(m_button_calibration_cancel, 0, wxALL, 5); - - sizer_err_calibration_v->Add(m_hyperlink, 0, wxALIGN_CENTER, 0); - sizer_err_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(6)); - sizer_err_calibration_v->Add(m_tip_calibration_err, 0, wxALIGN_CENTER, 0); - sizer_err_calibration_v->Add(0, 0, 0, wxTOP, FromDIP(8)); - sizer_err_calibration_v->Add(sizer_button, 0, wxALIGN_CENTER | wxTOP, FromDIP(18)); - sizer_err_calibration_h->Add(sizer_err_calibration_v, 1, wxALIGN_CENTER, 0); - m_calibration_err_panel->SetSizer(sizer_err_calibration_h); - m_calibration_err_panel->Layout(); - - m_simplebook_calibration->AddPage(m_in_calibration_panel, wxEmptyString, false); - m_simplebook_calibration->AddPage(m_calibration_err_panel, wxEmptyString, false); AddPage(m_amswin, wxEmptyString, false); - AddPage(m_simplebook_calibration, wxEmptyString, false); - UpdateStepCtrl(false); m_button_extruder_feed->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_load), NULL, this); m_button_extruder_back->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_unload), NULL, this); - + m_button_auto_refill->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::auto_refill), NULL, this); + m_button_ams_setting->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) { m_button_ams_setting->SetBitmap(m_button_ams_setting_hover.bmp()); e.Skip(); @@ -560,42 +295,17 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons }); Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this](wxCommandEvent& evt) { - uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData(); - if (info) - { - if (info->humidity_percent >= 0) - { - m_percent_humidity_dry_popup->Update(info); - wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x - m_percent_humidity_dry_popup->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); - m_percent_humidity_dry_popup->Position(popup_pos, wxSize(0, 0)); - m_percent_humidity_dry_popup->Popup(); - } - else - { - wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); - m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); - - int humidity_value = info->humidity_level; - if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); } - m_Humidity_tip_popup.Popup(); - } + wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); + wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); + m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); + int humidity_value = evt.GetInt(); + if (humidity_value > 0 && humidity_value <= 5) { + m_Humidity_tip_popup.set_humidity_level(humidity_value); } - - delete info; + m_Humidity_tip_popup.Popup(); }); Bind(EVT_AMS_ON_SELECTED, &AMSControl::AmsSelectedSwitch, this); - - m_button_guide->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { - post_event(wxCommandEvent(EVT_AMS_GUIDE_WIKI)); - }); - m_button_retry->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { - post_event(wxCommandEvent(EVT_AMS_RETRY)); - }); - - EnterNoneAMSMode(); } void AMSControl::on_retry() @@ -603,19 +313,18 @@ void AMSControl::on_retry() post_event(wxCommandEvent(EVT_AMS_RETRY)); } -void AMSControl::init_scaled_buttons() -{ - m_button_extruder_feed->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_extruder_feed->SetCornerRadius(FromDIP(12)); - m_button_extruder_back->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_extruder_back->SetCornerRadius(FromDIP(12)); -} +AMSControl::~AMSControl() {} std::string AMSControl::GetCurentAms() { return m_current_ams; } -std::string AMSControl::GetCurentShowAms() { - return m_current_show_ams; +std::string AMSControl::GetCurentShowAms(AMSPanelPos pos) { + if (pos == AMSPanelPos::RIGHT_PANEL){ + return m_current_show_ams_right; + } + else{ + return m_current_show_ams_left; + } } std::string AMSControl::GetCurrentCan(std::string amsid) @@ -634,16 +343,35 @@ std::string AMSControl::GetCurrentCan(std::string amsid) return current_can; } +bool AMSControl::IsAmsInRightPanel(std::string ams_id) { + if (m_extder_data.total_extder_count == 2){ + if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->get_nozzle_id() == MAIN_NOZZLE_ID) { + return true; + } + else{ + return false; + } + } + else{ + for (auto id : m_item_ids[MAIN_NOZZLE_ID]){ + if (id == ams_id){ + return true; + } + } + return false; + } +} + void AMSControl::AmsSelectedSwitch(wxCommandEvent& event) { std::string ams_id_selected = std::to_string(event.GetInt()); if (m_current_ams != ams_id_selected){ m_current_ams = ams_id_selected; } - if (m_current_show_ams != ams_id_selected && m_current_show_ams != "") { - auto iter = m_ams_item_list.find(m_current_show_ams); - if (iter == m_ams_item_list.end()) return; + if (m_current_show_ams_left != ams_id_selected && m_current_show_ams_left != "") { + auto item = m_ams_item_list[m_current_show_ams_left]; + if (!item) return; try{ - const auto& can_lib_list = iter->second->get_can_lib_list(); + const auto& can_lib_list = item->get_can_lib_list(); for (auto can : can_lib_list) { can.second->UnSelected(); } @@ -652,6 +380,19 @@ void AMSControl::AmsSelectedSwitch(wxCommandEvent& event) { ; } } + else if (m_current_show_ams_right != ams_id_selected && m_current_show_ams_right != "") { + auto item = m_ams_item_list[m_current_show_ams_right]; + if (!item) return; + try { + const auto &can_lib_list = item->get_can_lib_list(); + for (auto can : can_lib_list) { + can.second->UnSelected(); + } + } + catch (...) { + ; + } + } } wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) @@ -680,18 +421,16 @@ void AMSControl::SetActionState(bool button_status[]) void AMSControl::EnterNoneAMSMode() { - m_vams_lib->m_ams_model = m_ext_model; + //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::EXT_AMS) return; - m_panel_prv->Hide(); - m_simplebook_amsprvs->Hide(); - m_simplebook_amsprvs->SetSelection(0); + m_panel_prv_left->Hide(); - m_simplebook_ams->SetSelection(0); + m_simplebook_ams_left->SetSelection(0); m_extruder->no_ams_mode(true); - m_button_ams_setting->Hide(); - m_button_guide->Hide(); - m_button_extruder_feed->Show(); - m_button_extruder_back->Show(); + //m_button_ams_setting->Hide(); + //m_button_guide->Hide(); + //m_button_extruder_feed->Show(); + //m_button_extruder_back->Show(); ShowFilamentTip(false); m_amswin->Layout(); @@ -702,27 +441,25 @@ void AMSControl::EnterNoneAMSMode() void AMSControl::EnterGenericAMSMode() { - m_vams_lib->m_ams_model = m_ext_model; + //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::GENERIC_AMS) return; - m_panel_prv->Show(); - m_simplebook_amsprvs->Show(); - m_simplebook_amsprvs->SetSelection(1); + //m_panel_items_left->Show(); - m_vams_lib->m_ams_model = AMSModel::GENERIC_AMS; - m_ams_tip->SetLabel(_L("AMS")); - m_img_vams_tip->SetBitmap(create_scaled_bitmap("enable_ams", this, 16)); - m_img_vams_tip->Enable(); - m_img_amsmapping_tip->SetBitmap(create_scaled_bitmap("enable_ams", this, 16)); - m_img_amsmapping_tip->Enable(); + //m_vams_lib->m_ams_model = AMSModel::GENERIC_AMS; + //m_ams_tip->SetLabel(_L("AMS")); + //m_img_vams_tip->SetBitmap(create_scaled_bitmap("enable_ams", this, 16)); + //m_img_vams_tip->Enable(); + //m_img_amsmapping_tip->SetBitmap(create_scaled_bitmap("enable_ams", this, 16)); + //m_img_amsmapping_tip->Enable(); - m_simplebook_ams->SetSelection(1); + //m_simplebook_ams_left->SetSelection(0); m_extruder->no_ams_mode(false); - m_button_ams_setting->Show(); + /*m_button_ams_setting->Show(); m_button_guide->Show(); m_button_retry->Show(); m_button_extruder_feed->Show(); m_button_extruder_back->Show(); - ShowFilamentTip(true); + ShowFilamentTip(true);*/ m_amswin->Layout(); m_amswin->Fit(); Layout(); @@ -731,28 +468,26 @@ void AMSControl::EnterGenericAMSMode() void AMSControl::EnterExtraAMSMode() { - m_vams_lib->m_ams_model = m_ext_model; + //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::AMS_LITE) return; - m_panel_prv->Hide(); - m_simplebook_amsprvs->Show(); - m_simplebook_amsprvs->SetSelection(1); + m_panel_prv_left->Hide(); - - m_vams_lib->m_ams_model = AMSModel::AMS_LITE; - m_ams_tip->SetLabel(wxEmptyString); - m_img_vams_tip->SetBitmap(create_scaled_bitmap("enable_ams_disable", this, 16)); - m_img_vams_tip->Disable(); - m_img_amsmapping_tip->SetBitmap(create_scaled_bitmap("enable_ams_disable", this, 16)); - m_img_amsmapping_tip->Disable(); - m_simplebook_ams->SetSelection(2); + //m_vams_lib->m_ams_model = AMSModel::EXTRA_AMS; + //m_ams_tip->SetLabel(wxEmptyString); + //m_img_vams_tip->SetBitmap(create_scaled_bitmap("enable_ams_disable", this, 16)); + //m_img_vams_tip->Disable(); + //m_img_amsmapping_tip->SetBitmap(create_scaled_bitmap("enable_ams_disable", this, 16)); + //m_img_amsmapping_tip->Disable(); + + m_simplebook_ams_left->SetSelection(2); m_extruder->no_ams_mode(false); - m_button_ams_setting->Show(); + /*m_button_ams_setting->Show(); m_button_guide->Show(); m_button_retry->Show(); m_button_extruder_feed->Show(); m_button_extruder_back->Show(); - ShowFilamentTip(true); + ShowFilamentTip(true);*/ m_amswin->Layout(); m_amswin->Fit(); Layout(); @@ -761,27 +496,6 @@ void AMSControl::EnterExtraAMSMode() } -void AMSControl::EnterCalibrationMode(bool read_to_calibration) -{ - SetSelection(1); - if (read_to_calibration) - m_simplebook_calibration->SetSelection(0); - else - m_simplebook_calibration->SetSelection(1); -} - -void AMSControl::ExitcClibrationMode() { SetSelection(0); } - -void AMSControl::SetClibrationpercent(int percent) { m_text_calibration_percent->SetLabelText(wxString::Format("%d%%", percent)); } - -void AMSControl::SetClibrationLink(wxString link) -{ - m_hyperlink->SetLabel(link); - m_hyperlink->SetURL(link); - m_hyperlink->Refresh(); - m_hyperlink->Update(); -} - void AMSControl::PlayRridLoading(wxString amsid, wxString canid) { auto iter = m_ams_item_list.find(amsid.ToStdString()); @@ -810,188 +524,359 @@ void AMSControl::msw_rescale() m_button_ams_setting->SetBitmap(m_button_ams_setting_normal.bmp()); m_extruder->msw_rescale(); - m_vams_extra_road->msw_rescale(); + if (m_vams_extra_road) m_vams_extra_road->msw_rescale(); + + + if (m_button_extruder_feed) m_button_extruder_feed->SetMinSize(wxSize(-1, FromDIP(24))); + if (m_button_extruder_back) m_button_extruder_back->SetMinSize(wxSize(-1, FromDIP(24))); + if (m_button_auto_refill) m_button_auto_refill->SetMinSize(wxSize(-1, FromDIP(24))); + if (m_button_ams_setting) m_button_ams_setting->SetMinSize(wxSize(FromDIP(25), FromDIP(24))); + if (m_button_guide) m_button_guide->SetMinSize(wxSize(-1, FromDIP(24))); + if (m_button_retry) m_button_retry->SetMinSize(wxSize(-1, FromDIP(24))); + if (m_vams_lib) m_vams_lib->msw_rescale(); - m_button_extruder_feed->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_extruder_back->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_ams_setting->SetMinSize(wxSize(FromDIP(25), FromDIP(24))); - m_button_guide->SetMinSize(wxSize(-1, FromDIP(24))); - m_button_retry->SetMinSize(wxSize(-1, FromDIP(24))); - m_vams_lib->msw_rescale(); for (auto ams_item : m_ams_item_list) { if (ams_item.second){ ams_item.second->msw_rescale(); } } - - - if (m_percent_humidity_dry_popup){ - m_percent_humidity_dry_popup->msw_rescale(); + for (auto ams_prv : m_ams_preview_list) { + if (ams_prv.second){ + 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(); } Layout(); Refresh(); } -void AMSControl::UpdateStepCtrl(bool is_extrusion) -{ - wxString FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_COUNT] = { - _L("Idling..."), - _L("Heat the nozzle"), - _L("Cut filament"), - _L("Pull back current filament"), - _L("Push new filament into extruder"), - _L("Purge old filament"), - _L("Feed Filament"), - _L("Confirm extruded"), - _L("Check filament location") - }; - - m_filament_load_step->DeleteAllItems(); - m_filament_unload_step->DeleteAllItems(); - m_filament_vt_load_step->DeleteAllItems(); - - if (IS_GENERIC_AMS(m_ams_model) || IS_GENERIC_AMS(m_ext_model)) { - if (is_extrusion) { - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT]); - } - else { - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT]); - } - - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT]); - m_filament_vt_load_step->AppendItem(_L("Grab new filament")); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT]); - - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); - } - - - if (m_ams_model == AMSModel::AMS_LITE || m_ext_model == AMSModel::AMS_LITE) { - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CHECK_POSITION]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT]); - m_filament_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT]); - - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CHECK_POSITION]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PUSH_NEW_FILAMENT]); - m_filament_vt_load_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PURGE_OLD_FILAMENT]); - - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_HEAT_NOZZLE]); - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CHECK_POSITION]); - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); - m_filament_unload_step->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); - } -} - void AMSControl::CreateAms() { - auto caninfo0_0 = Caninfo{"def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_1 = Caninfo{"def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_2 = Caninfo{"def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_3 = Caninfo{"def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_0 = Caninfo{"def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL}; + auto caninfo0_1 = Caninfo{"def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo0_2 = Caninfo{"def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo0_3 = Caninfo{"def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; - AMSinfo ams1 = AMSinfo{"0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams2 = AMSinfo{"1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams3 = AMSinfo{"2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - std::vector ams_info{ams1, ams2, ams3, ams4}; + auto caninfo1_0 = Caninfo{ "def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_1 = Caninfo{ "def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_2 = Caninfo{ "def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; + auto caninfo1_3 = Caninfo{ "def_can_3", (""), *wxWHITE, 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 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 }; + std::vector ams_info{ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 }; std::vector::iterator it; Freeze(); - for (it = ams_info.begin(); it != ams_info.end(); it++) { - AddAmsPreview(*it); + for (it = ams_info.begin(); it != ams_info.end(); it++) { + AddAmsPreview(*it, AMSModel::GENERIC_AMS); AddAms(*it); - AddExtraAms(*it); + //AddExtraAms(*it); m_ams_info.push_back(*it); } - - m_sizer_prv->Layout(); + if (m_single_nozzle_no_ams) + { + m_simplebook_ams_left->Hide(); + } + else { + m_sizer_prv_left->Layout(); + m_sizer_prv_right->Layout(); + } Thaw(); } void AMSControl::ClearAms() { - m_simplebook_generic_ams->DeleteAllPages(); - m_simplebook_extra_ams->DeleteAllPages(); - m_simplebook_generic_ams->DestroyChildren(); - m_simplebook_extra_ams->DestroyChildren(); - m_simplebook_generic_ams->Layout(); - m_simplebook_extra_ams->Layout(); - m_simplebook_generic_ams->Refresh(); - m_simplebook_extra_ams->Refresh(); + m_simplebook_ams_right->DeleteAllPages(); + m_simplebook_ams_left->DeleteAllPages(); + m_simplebook_ams_right->DestroyChildren(); + m_simplebook_ams_left->DestroyChildren(); + m_simplebook_ams_right->Layout(); + m_simplebook_ams_left->Layout(); + m_simplebook_ams_right->Refresh(); + m_simplebook_ams_left->Refresh(); for (auto it : m_ams_preview_list) { delete it.second; } m_ams_preview_list.clear(); + m_ext_image_list.clear(); - m_current_show_ams = ""; - m_current_ams = ""; - m_current_select = ""; + m_left_page_index = 0; + m_right_page_index = 0; - m_ams_generic_item_list.clear(); - m_ams_extra_item_list.clear(); m_ams_item_list.clear(); - m_sizer_prv->Clear(); + m_sizer_prv_right->Clear(); + m_sizer_prv_left->Clear(); + m_item_ids = { {}, {} }; + pair_id.clear(); +} + +void AMSControl::CreateAmsDoubleNozzle() +{ + /*m_ams_item_list.clear(); + m_ams_generic_item_list.clear(); + m_ams_extra_item_list.clear();*/ + + 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 (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){ + + if (ams_info->nozzle_id == MAIN_NOZZLE_ID){ + single_info_right.push_back(*ams_info); + 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){ + single_info_left.push_back(*ams_info); + 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(); + } + } + } + } + if (m_ext_info.size() <= 1) { + BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!"; + return; + } + AMSinfo ext_info; + 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; + } + } + //wait add + + + 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)); + } + 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; + } + } + //wait add + 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(single_info_left, AMSPanelPos::LEFT_PANEL); + AddAms(single_info_left); + single_info_left.clear(); + + 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{ + m_panel_prv_left->Hide(); + m_panel_prv_right->Hide(); + } + m_simplebook_ams_left->SetSelection(0); + m_simplebook_ams_right->SetSelection(0); + + auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL); + auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); + + + m_down_road->UpdateLeft(m_extder_data.total_extder_count, left_init_mode); + m_down_road->UpdateRight(m_extder_data.total_extder_count, right_init_mode); + + m_extruder->updateNozzleNum(m_extder_data.total_extder_count); + + 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(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, DEPUTY_NOZZLE_ID); + m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, MAIN_NOZZLE_ID); + + Thaw(); } void AMSControl::CreateAmsSingleNozzle() { + std::vectorm_item_nums{0,0}; + std::vector single_info; + + Freeze(); + //add ams data for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) { if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM) { - AddAmsPreview(*ams_info); - AddAms(*ams_info); - AddExtraAms(*ams_info); + m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); + AddAmsPreview(*ams_info, ams_info->ams_type); + AddAms(*ams_info, AMSPanelPos::LEFT_PANEL); + //AddExtraAms(*ams_info); } else if (ams_info->cans.size() == 1) { - AddAmsPreview(*ams_info); - AddAms(*ams_info); + single_info.push_back(*ams_info); + if (single_info.size() == MAX_AMS_NUM_IN_PANEL) { + 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)); + AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL); + AddAms(single_info, AMSPanelPos::LEFT_PANEL); + single_info.clear(); + } } } + 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; + } + + single_info.push_back(m_ext_info[0]); + 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_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_panel_prv_left->Hide(); + m_panel_prv_right->Hide(); + m_simplebook_ams_left->Hide(); + m_simplebook_ams_right->Show(); + + 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_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad(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() +void AMSControl::Reset() { - m_ams_info.clear(); - ClearAms(); + /*auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_1 = Caninfo{"1", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_2 = Caninfo{"2", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_3 = Caninfo{"3", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - Layout(); + AMSinfo ams1 = AMSinfo{"0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams2 = AMSinfo{"1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams3 = AMSinfo{"2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + + std::vector ams_info{ams1, ams2, ams3, ams4}; + std::vector::iterator it;*/ + + /*Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + MachineObject* obj = dev->get_selected_machine(); + parse_object(obj); + } + + UpdateAms(m_ams_info, true); + m_current_show_ams = ""; + m_current_ams = ""; + m_current_select = "";*/ } void AMSControl::show_noams_mode() { show_vams(true); - m_sizer_ams_tips->Show(true); + //m_sizer_ams_tips->Show(true); - if (m_ams_model == AMSModel::EXT_AMS) { + /*if (m_ams_model == AMSModel::NO_AMS) { EnterNoneAMSMode(); - } else if (IS_GENERIC_AMS(m_ams_model)){ + } else if(m_ams_model == AMSModel::GENERIC_AMS){ EnterGenericAMSMode(); - } else if (m_ams_model == AMSModel::AMS_LITE) { + } else if (m_ams_model == AMSModel::EXTRA_AMS) { EnterExtraAMSMode(); - } + }*/ + EnterGenericAMSMode(); } void AMSControl::show_auto_refill(bool show) { - m_ams_backup_tip->Show(show); - m_img_ams_backup->Show(show); + //m_img_ams_backup->Show(show); m_amswin->Layout(); m_amswin->Fit(); } @@ -1003,10 +888,10 @@ void AMSControl::enable_ams_setting(bool en) void AMSControl::show_vams(bool show) { - m_panel_virtual->Show(show); - m_vams_sizer->Show(show); - m_vams_extra_road->Show(show); - m_extruder->has_ams(show); + //m_panel_virtual->Show(show); + //m_vams_sizer->Show(show); + //m_vams_extra_road->Show(show); + /*m_extruder->has_ams(show); show_vams_kn_value(show); Layout(); @@ -1016,62 +901,115 @@ void AMSControl::show_vams(bool show) event.SetEventObject(m_vams_lib); wxPostEvent(m_vams_lib, event); } - } + }*/ } void AMSControl::show_vams_kn_value(bool show) { - m_vams_lib->show_kn_value(show); + //m_vams_lib->show_kn_value(show); } void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj) { - m_vams_lib->m_obj = obj; - if (obj->cali_version >= 0) { - float k_value = 0; - float n_value = 0; - CalibUtils::get_pa_k_n_value_by_cali_idx(obj, tray.cali_idx, k_value, n_value); - m_vams_info.k = k_value; - m_vams_info.n = n_value; - m_vams_lib->m_info.k = k_value; - m_vams_lib->m_info.n = n_value; - } - else { // the remaining printer types - m_vams_info.k = tray.k; - m_vams_info.n = tray.n; - m_vams_lib->m_info.k = tray.k; - m_vams_lib->m_info.n = tray.n; - } - m_vams_info.material_name = tray.get_display_filament_type(); - m_vams_info.material_colour = tray.get_color(); - m_vams_lib->m_info.material_name = tray.get_display_filament_type(); - m_vams_lib->m_info.material_colour = tray.get_color(); - m_vams_lib->Refresh(); + //m_vams_lib->m_obj = obj; + //if (obj->cali_version >= 0) { + // float k_value = 0; + // float n_value = 0; + // CalibUtils::get_pa_k_n_value_by_cali_idx(obj, tray.cali_idx, k_value, n_value); + // m_vams_info.k = k_value; + // m_vams_info.n = n_value; + // m_vams_lib->m_info.k = k_value; + // m_vams_lib->m_info.n = n_value; + //} + //else { // the remaining printer types + // m_vams_info.k = tray.k; + // m_vams_info.n = tray.n; + // m_vams_lib->m_info.k = tray.k; + // m_vams_lib->m_info.n = tray.n; + //} + //m_vams_info.material_name = tray.get_display_filament_type(); + //m_vams_info.material_colour = tray.get_color(); + //m_vams_lib->m_info.material_name = tray.get_display_filament_type(); + //auto col= tray.get_color(); + //if (col.Alpha() != 0 && col.Alpha() != 255 && col.Alpha() != 254 && m_vams_lib->m_info.material_colour != col) { + // m_vams_lib->transparent_changed = true; + //} + //m_vams_lib->m_info.material_colour = tray.get_color(); + //m_vams_lib->Refresh(); } void AMSControl::reset_vams() { - m_vams_lib->m_info.k = 0; + /*m_vams_lib->m_info.k = 0; m_vams_lib->m_info.n = 0; m_vams_lib->m_info.material_name = wxEmptyString; m_vams_lib->m_info.material_colour = AMS_CONTROL_WHITE_COLOUR; + m_vams_lib->m_info.cali_idx = -1; + m_vams_lib->m_info.filament_id = ""; m_vams_info.material_name = wxEmptyString; m_vams_info.material_colour = AMS_CONTROL_WHITE_COLOUR; - m_vams_lib->Refresh(); + m_vams_lib->Refresh();*/ } -void AMSControl::UpdateAms(std::vector ams_info, bool is_reset) -{ - m_button_area->Layout(); - m_button_area->Fit(); +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 }; - /*if (!test)*/{ + 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, ExtderData data, std::string dev_id, bool is_reset, bool test) +{ + if (!test){ // update item bool fresh = false; - - // basic check - if (m_ams_info.size() == ams_info.size() ) { + if (m_ams_info.size() == ams_info.size() && m_extder_data.total_extder_count == data.total_extder_count && m_dev_id == dev_id){ for (int i = 0; i < m_ams_info.size(); i++){ if (m_ams_info[i].ams_id != ams_info[i].ams_id){ fresh = true; @@ -1084,39 +1022,21 @@ void AMSControl::UpdateAms(std::vector ams_info, bool is_reset) m_ams_info.clear(); m_ams_info = ams_info; + m_ext_info.clear(); + m_ext_info = ext_info; + m_extder_data = data; + m_dev_id = dev_id; if (fresh){ ClearAms(); - //if (m_extder_data.total_extder_count >= 2){ - // CreateAmsDoubleNozzle(series_name, printer_type); - //}else{ + if (m_extder_data.total_extder_count >= 2){ + CreateAmsDoubleNozzle(); + }else{ CreateAmsSingleNozzle(); - //} + } SetSize(wxSize(FromDIP(578), -1)); SetMinSize(wxSize(FromDIP(578), -1)); Layout(); } - - if (IS_GENERIC_AMS(m_ams_model)) { - m_ams_item_list = m_ams_generic_item_list; - } - else if (m_ams_model == AMSModel::AMS_LITE) { - m_ams_item_list = m_ams_extra_item_list; - } - - if (ams_info.size() > 1) { - m_simplebook_amsprvs->Show(); - m_amswin->Layout(); - m_amswin->Fit(); - SetSize(m_amswin->GetSize()); - SetMinSize(m_amswin->GetSize()); - } else { - m_simplebook_amsprvs->Hide(); - m_amswin->Layout(); - m_amswin->Fit(); - SetSize(m_amswin->GetSize()); - SetMinSize(m_amswin->GetSize()); - } - // update cans for (auto ams_item : m_ams_item_list) { @@ -1125,10 +1045,20 @@ void AMSControl::UpdateAms(std::vector ams_info, bool is_reset) } std::string ams_id = ams_item.second->get_ams_id(); AmsItem* cans = ams_item.second; - for (auto ifo : m_ams_info) { - if (ifo.ams_id == ams_id) { - cans->Update(ifo); - cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE?false:true); + if (cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { + for (auto ifo : m_ext_info) { + if (ifo.ams_id == ams_id) { + cans->Update(ifo); + cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); + } + } + } + else{ + for (auto ifo : m_ams_info) { + if (ifo.ams_id == ams_id) { + cans->Update(ifo); + cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); + } } } } @@ -1141,82 +1071,354 @@ void AMSControl::UpdateAms(std::vector ams_info, bool is_reset) } } - if ( m_current_show_ams.empty() && !is_reset ) { + /*if (m_current_show_ams.empty() && !is_reset) { + if (ext_info.size() > 0) { + SwitchAms(ext_info[0].ams_id); + } + }*/ + + //m_simplebook_ams_left->SetSelection(m_simplebook_ams_left->m_first); + } + else + { + static bool first_time = true; + bool fresh = false; + static std::vectorams_info; + int nozzle_num = 2; + if (first_time){ + ams_info = GenerateSimulateData(); + fresh = true; + first_time = false; + } + + Freeze(); + + // update item + m_ams_info.clear(); + m_ams_info = ams_info; + m_ext_info.clear(); + 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_extder_data = data; + if (fresh){ + ClearAms(); + if (m_extder_data.total_extder_count >= 2) { + CreateAmsDoubleNozzle(); + } + else { + CreateAmsSingleNozzle(); + } + SetSize(wxSize(FromDIP(578), -1)); + SetMinSize(wxSize(FromDIP(578), -1)); + } + Thaw(); + + // update cans + + for (auto ams_item : m_ams_item_list) { + std::string ams_id = ams_item.first; + AmsItem* cans = ams_item.second; + if (atoi(cans->get_ams_id().c_str()) >= VIRTUAL_TRAY_DEPUTY_ID) { + for (auto ifo : m_ext_info) { + if (ifo.ams_id == ams_id) { + cans->Update(ifo); + cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); + } + } + } + else { + for (auto ifo : m_ams_info) { + if (ifo.ams_id == ams_id) { + cans->Update(ifo); + cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); + } + } + } + } + + /*if (m_current_show_ams.empty() && !is_reset) { if (ams_info.size() > 0) { SwitchAms(ams_info[0].ams_id); } - } - - if (m_ams_model == AMSModel::EXT_AMS && !m_vams_lib->is_selected()) { - m_vams_lib->OnSelected(); - } + }*/ } - /*update humidity popup*/ - if (m_percent_humidity_dry_popup->IsShown()) + +} + +void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type) +{ + AMSPreview *ams_prv = nullptr; + + if (info.nozzle_id == MAIN_NOZZLE_ID) { - string target_id = m_percent_humidity_dry_popup->get_owner_ams_id(); - for (const auto& the_info : ams_info) - { - if (target_id == the_info.ams_id) - { - uiAmsHumidityInfo humidity_info; - humidity_info.ams_id = the_info.ams_id; - humidity_info.humidity_level = the_info.ams_humidity; - humidity_info.humidity_percent = the_info.humidity_raw; - humidity_info.left_dry_time = the_info.left_dray_time; - humidity_info.current_temperature = the_info.current_temperature; - m_percent_humidity_dry_popup->Update(&humidity_info); - break; + 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 == DEPUTY_NOZZLE_ID) + { + 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){ + ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent &e) { + SwitchAms(ams_prv->get_ams_id()); + e.Skip(); + }); + m_ams_preview_list[info.ams_id] = ams_prv; + } +} + +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->set_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 = ""; + if (pos == AMSPanelPos::LEFT_PANEL && m_item_ids[DEPUTY_NOZZLE_ID].size() > 0){ + ams_id = m_item_ids[DEPUTY_NOZZLE_ID][0]; + } + 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->get_can_count() == GENERIC_AMS_SLOT_NUM) { + if (item->second->get_ams_model() == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; + if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) 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; + } + } + if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; + 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() == MAX_AMS_NUM_IN_PANEL) { //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 { + book_sizer->Add(ams1, 0, wxLEFT, FromDIP(72)); + book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); + } + } + else { //only an ext in a panel + if (ams1->get_ext_image()) { + ams1->get_ext_image()->setShowState(false); + } + if (ams1->get_ams_model() == AMSModel::EXT_AMS) { + if (ams1->get_ext_type() == LITE_EXT) { + //book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0); + book_sizer->Add(ams1, 0, wxLEFT, (book_panel->GetSize().x - ams1->GetSize().x) / 2); + } + else{ + auto ext_image = new AMSExtImage(book_panel, pos, &m_extder_data); + 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->set_selection(idx); + m_ams_item_list[infos[0].ams_id] = ams1; + if (ams2) { + ams2->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + ams2->set_selection(idx); + m_ams_item_list[infos[1].ams_id] = ams2; + } + idx++; } -void AMSControl::AddAmsPreview(AMSinfo info) +void AMSControl::AddAms(AMSinfo info, AMSPanelPos pos) { - auto ams_prv = new AMSPreview(m_panel_prv, wxID_ANY, info); - m_sizer_prv->Add(ams_prv, 0, wxALIGN_CENTER | wxRIGHT, 6); + if (m_extder_data.total_extder_count > 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_extder_data.total_extder_count == 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(); + m_simplebook_ams_right->Refresh(); - ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent& e) { - SwitchAms(ams_prv->get_ams_id()); - e.Skip(); - }); - m_ams_preview_list[info.ams_id] = ams_prv; } -void AMSControl::AddAms(AMSinfo info) -{ - auto ams_item = new AmsItem(m_simplebook_generic_ams, info, AMSModel::GENERIC_AMS); - m_simplebook_generic_ams->AddPage(ams_item, wxEmptyString, false); - ams_item->set_selection(m_simplebook_generic_ams->GetPageCount() - 1); +//void AMSControl::AddExtraAms(AMSinfo info) +//{ +// auto ams_item = new AmsItem(m_simplebook_extra_cans_left, info, AMSModel::EXTRA_AMS); +// m_ams_item_list[info.ams_id] = ams_item; +// +// if (info.nozzle_id == 1) +// { +// m_simplebook_extra_cans_left->AddPage(ams_item, wxEmptyString, false); +// ams_item->m_selection = m_simplebook_extra_cans_left->GetPageCount() - 1; +// } +// else if (info.nozzle_id == 0) +// { +// m_simplebook_extra_cans_right->AddPage(ams_item, wxEmptyString, false); +// ams_item->m_selection = m_simplebook_extra_cans_right->GetPageCount() - 1; +// } +// +//} - m_ams_generic_item_list[info.ams_id] = ams_item; +void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) { + if (single_info.size() <= 0){ + return; + } + if (m_extder_data.total_extder_count == 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 (single_info[0].nozzle_id == DEPUTY_NOZZLE_ID) { + createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); + } + } + else if (m_extder_data.total_extder_count == 1) { + if (pos == AMSPanelPos::RIGHT_PANEL) { + createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); + } + else { + createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); + } + } + + m_simplebook_ams_left->Layout(); + m_simplebook_ams_right->Layout(); + m_simplebook_ams_left->Refresh(); + m_simplebook_ams_right->Refresh(); } -void AMSControl::AddExtraAms(AMSinfo info) -{ - auto ams_item = new AmsItem(m_simplebook_extra_ams, info, AMSModel::AMS_LITE); - m_simplebook_extra_ams->AddPage(ams_item, wxEmptyString, false); - ams_item->set_selection(m_simplebook_extra_ams->GetPageCount() - 1); +//void AMSControl::AddExtAms(int ams_id) { +// if (m_ams_item_list.find(std::to_string(ams_id)) != m_ams_item_list.end()) +// { +// //mode = AMSModel::EXTRA_AMS; +// AmsItem* ams_item; +// AMSinfo ext_info; +// +// if (ams_id == VIRTUAL_TRAY_MAIN_ID) +// { +// ext_info.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); +// ext_info.nozzle_id = 0; +// ams_item = new AmsItem(m_simplebook_ams_right, ext_info, AMSModel::EXTRA_AMS); +// m_simplebook_ams_right->AddPage(ams_item, wxEmptyString, false); +// ams_item->m_selection = m_simplebook_ams_right->GetPageCount() - 1; +// } +// else if (ams_id == VIRTUAL_TRAY_DEPUTY_ID) +// { +// ext_info.ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID); +// ext_info.nozzle_id = 1; +// ams_item = new AmsItem(m_simplebook_ams_left, ext_info, AMSModel::EXTRA_AMS); +// m_simplebook_ams_left->AddPage(ams_item, wxEmptyString, false); +// ams_item->m_selection = m_simplebook_ams_left->GetPageCount() - 1; +// } +// m_ams_generic_item_list[std::to_string(ams_id)] = ams_item; +// } +//} - m_ams_extra_item_list[info.ams_id] = ams_item; +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->get_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->get_ams_id()); + e.Skip(); + }); + m_ams_preview_list[single_info[1].ams_id] = ams_prv2; + } } void AMSControl::SwitchAms(std::string ams_id) { - if(ams_id == m_current_show_ams){return;} + if(ams_id == m_current_show_ams_left || ams_id == m_current_show_ams_right){return;} - if (ams_id != std::to_string(VIRTUAL_TRAY_MAIN_ID)) { - if (m_current_show_ams != ams_id) { - m_current_show_ams = ams_id; - m_extruder->OnAmsLoading(false); - } + bool is_in_right = IsAmsInRightPanel(ams_id); + if (is_in_right){ + m_current_show_ams_right = ams_id; + m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } + else{ + m_current_show_ams_left = ams_id; + m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + for (auto prv_it : m_ams_preview_list) { AMSPreview* prv = prv_it.second; - if (prv->get_ams_id() == m_current_show_ams) { + if (prv->get_ams_id() == m_current_show_ams_left || prv->get_ams_id() == m_current_show_ams_right) { prv->OnSelected(); m_current_select = ams_id; @@ -1232,56 +1434,76 @@ void AMSControl::SwitchAms(std::string ams_id) } } } - - if (!ready_selected) { - m_current_ams = std::to_string(VIRTUAL_TRAY_MAIN_ID); - m_vams_lib->OnSelected(); + if (is_in_right){ + m_current_show_ams_right = ams_id; } - else { - m_current_ams = ams_id; - m_vams_lib->UnSelected(); + else{ + m_current_show_ams_left = ams_id; } } else { prv->UnSelected(); } - m_sizer_prv->Layout(); - m_panel_prv->Fit(); + if (prv->get_nozzle_id() == DEPUTY_NOZZLE_ID) { + m_sizer_prv_left->Layout(); + m_panel_prv_left->Fit(); + } + else if (prv->get_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->get_ams_id() == ams_id) { - - if (IS_GENERIC_AMS(m_ams_model)) { - m_simplebook_generic_ams->SetSelection(item->get_selection()); - } - else if (m_ams_model == AMSModel::AMS_LITE) { - m_simplebook_extra_ams->SetSelection(item->get_selection()); + auto ids = item->get_panel_pos() == AMSPanelPos::LEFT_PANEL ? m_item_ids[DEPUTY_NOZZLE_ID] : m_item_ids[MAIN_NOZZLE_ID]; + auto pos = item->get_panel_pos(); + for (auto id : ids) { + if (id == item->get_ams_id()) { + pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->get_selection()) : m_simplebook_ams_right->SetSelection(item->get_selection()); + if (item->get_can_count() == GENERIC_AMS_SLOT_NUM) { + if (item->get_ams_model() == AMSModel::AMS_LITE) { + if (pos == AMSPanelPos::LEFT_PANEL) { + m_down_road->UpdateLeft(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); + } else { + m_down_road->UpdateRight(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); + } + } + else { + if (pos == AMSPanelPos::LEFT_PANEL) { + m_down_road->UpdateLeft(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); + } else { + m_down_road->UpdateRight(m_extder_data.total_extder_count, 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; + } + } + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_extder_data.total_extder_count, mode) + : m_down_road->UpdateRight(m_extder_data.total_extder_count, mode); + if (pos == AMSPanelPos::LEFT_PANEL) { + m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } else { + m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + } + } } } } - - // update extruder - //m_extruder->OnAmsLoading(false); - for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { - switch (m_ams_info[i].current_step) { - case AMSPassRoadSTEP::AMS_ROAD_STEP_NONE: m_extruder->TurnOff(); break; - - case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1: m_extruder->TurnOff(); break; - - case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2: m_extruder->TurnOn(GetCanColour(m_current_ams, m_ams_info[i].current_can_id)); break; - - case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3: m_extruder->TurnOn(GetCanColour(m_current_ams, m_ams_info[i].current_can_id)); break; - } - } - } + post_event(SimpleEvent(EVT_AMS_SWITCH)); } void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type) -{ +{/* wxString FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_COUNT] = { _L("Idling..."), _L("Heat the nozzle"), @@ -1349,12 +1571,12 @@ void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type) else { m_filament_load_step->Idle(); } - } + }*/ } void AMSControl::ShowFilamentTip(bool hasams) { - m_simplebook_right->SetSelection(0); + //m_simplebook_right->SetSelection(0); if (hasams) { m_tip_right_top->Show(); m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.")); @@ -1383,64 +1605,60 @@ bool AMSControl::Enable(bool enable) m_button_extruder_feed->Enable(enable); m_button_extruder_back->Enable(enable); + m_button_auto_refill->Enable(enable); m_button_ams_setting->Enable(enable); m_filament_load_step->Enable(enable); return wxWindow::Enable(enable); } -void AMSControl::SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxColour col) +void AMSControl::SetExtruder(bool on_off, std::string ams_id, std::string slot_id) { - if (IS_GENERIC_AMS(m_ams_model) || IS_GENERIC_AMS(m_ext_model)) { - if (!on_off) { - m_extruder->TurnOff(); - m_vams_extra_road->OnVamsLoading(false); - m_extruder->OnVamsLoading(false); - m_vams_road->OnVamsLoading(false); - } - else { - m_extruder->TurnOn(col); + AmsItem *item = nullptr; + if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { item = m_ams_item_list[ams_id]; } - if (ams_now != GetCurentShowAms()) { - m_extruder->OnAmsLoading(false, col); - } - else { - m_extruder->OnAmsLoading(true, col); - } - } + //if (m_ams_model == AMSModel::GENERIC_AMS || m_ext_model == AMSModel::GENERIC_AMS || is_vams ) { + // if (!on_off) { + // m_extruder->TurnOff(); + // m_vams_extra_road->OnVamsLoading(false); + // m_extruder->OnVamsLoading(false); + // m_vams_road->OnVamsLoading(false); + // } + // else { + // m_extruder->TurnOn(col); + // } + //} + //else if (m_ams_model == AMSModel::AMS_LITE || m_ext_model == AMSModel::AMS_LITE) { + // if (!on_off) { + // m_extruder->TurnOff(); + // m_extruder->OnAmsLoading(false); + // } + // else { + // if (item) { + // m_extruder->TurnOn(col); + // m_extruder->OnAmsLoading(true, item->m_info.nozzle_id, col); + // } + // } + //} else if (m_ams_model == AMSModel::N3F_AMS || m_ams_model == AMSModel::N3S_AMS) { + // if (!on_off) { + // m_extruder->TurnOff(); + // m_extruder->OnAmsLoading(false); + // } else { + // if (item) { + // m_extruder->TurnOn(col); + // m_extruder->OnAmsLoading(true, item->m_info.nozzle_id, col); + // } + // } + //} - if (is_vams && on_off) { - m_extruder->OnAmsLoading(false); - m_vams_extra_road->OnVamsLoading(true, col); - m_extruder->OnVamsLoading(true, col); - m_vams_road->OnVamsLoading(true, col); - } - else { - m_vams_extra_road->OnVamsLoading(false); - m_extruder->OnVamsLoading(false); - m_vams_road->OnVamsLoading(false); - } - } - else if (m_ams_model == AMSModel::AMS_LITE || m_ext_model == AMSModel::AMS_LITE) { - if (!is_vams && !on_off) { - m_extruder->TurnOff(); - m_extruder->OnVamsLoading(false); - m_vams_extra_road->OnVamsLoading(false); - m_vams_road->OnVamsLoading(false); - } - else { - m_extruder->TurnOn(col); - } - - if (is_vams && on_off) { - m_vams_extra_road->OnVamsLoading(true, col); - m_extruder->OnVamsLoading(true, col); - m_vams_road->OnVamsLoading(true, col); - } - else { - m_vams_extra_road->OnVamsLoading(false); - m_extruder->OnVamsLoading(false); - m_vams_road->OnVamsLoading(false); + if (!on_off) { + //m_extruder->TurnOff(); + m_extruder->OnAmsLoading(false); + } else { + if (item) { + auto col = item->GetTagColr(slot_id); + //m_extruder->TurnOn(col); + m_extruder->OnAmsLoading(true, item->get_nozzle_id(), col); } } } @@ -1449,13 +1667,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy { AmsItem* ams = nullptr; auto amsit = m_ams_item_list.find(ams_id); - - if (ams_id != m_last_ams_id || m_last_tray_id != canid) { - SetAmsStep(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); - } + bool in_same_page = false; if (amsit != m_ams_item_list.end()) {ams = amsit->second;} else {return;} @@ -1463,50 +1675,139 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy m_last_ams_id = ams_id; m_last_tray_id = canid; + int can_index = atoi(canid.c_str()); + std::vector cur_left_ams; + std::vector cur_right_ams; - if (IS_GENERIC_AMS(m_ams_model)) { - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false); + std::string ams_id_left = GetCurentShowAms(AMSPanelPos::LEFT_PANEL); + std::string ams_id_right = GetCurentShowAms(AMSPanelPos::RIGHT_PANEL); + + for (auto it : pair_id) { + if ((ams_id_left == it.first || ams_id_left == it.second)) { + cur_left_ams.push_back(it.first); + cur_left_ams.push_back(it.second); } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - m_extruder->OnAmsLoading(false); - } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (m_current_show_ams == ams_id) { - m_extruder->OnAmsLoading(true, ams->GetTagColr(canid)); - } - } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - ams->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - m_extruder->OnAmsLoading(true, ams->GetTagColr(canid)); + else if ((ams_id_right == it.first || ams_id_right == it.second)) { + cur_right_ams.push_back(it.first); + cur_right_ams.push_back(it.second); } } - else if (m_ams_model == AMSModel::AMS_LITE) { - ams->SetAmsStepExtra(canid, type, step); - if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - m_extruder->OnAmsLoading(true, ams->GetTagColr(canid)); - } - else { - m_extruder->OnAmsLoading(false); + + auto left = !IsAmsInRightPanel(ams_id); + auto length = -1; + auto model = AMSModel::AMS_LITE; + + if (std::find(cur_left_ams.begin(), cur_left_ams.end(), ams_id) != cur_left_ams.end()) { + in_same_page = true; + } + + if (std::find(cur_right_ams.begin(), cur_right_ams.end(), ams_id) != cur_right_ams.end()) { + in_same_page = true; + } + + //Set path length in different case + if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM){ + //length = left ? 129 : 145; + length = left ? 129 : 145; + model = ams->get_ams_model(); + } + else if (ams->get_can_count() == 1){ + for (auto it : pair_id){ + if (it.first == ams_id){ + length = left ? 145 : 124; + break; + } + else if (it.second == ams_id){ + length = left ? 124 : 232; + break; + } } + model = ams->get_ams_model(); + } + if (model == AMSModel::AMS_LITE){ + length = left ? 145 : 45; + } + if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::LITE_EXT){ + length = 145; + } + + if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::GENERIC_EXT){ + length = left ? 192 : 82; } for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == ams_id) { - m_ams_info[i].current_step = step; + m_ams_info[i].current_step = step; m_ams_info[i].current_can_id = canid; } } + for (auto i = 0; i < m_ext_info.size(); i++) { + if (m_ext_info[i].ams_id == ams_id) { + m_ext_info[i].current_step = step; + m_ext_info[i].current_can_id = canid; + } + } + + + AMSinfo info; + if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { + info = m_ams_item_list[ams_id]->get_ams_info(); + } + else{ + return; + } + if (can_index >= 0 && can_index < info.cans.size()) + { + m_down_road->SetPassRoadColour(left, info.cans[can_index].material_colour); + } + + AMSPanelPos pos = left ? AMSPanelPos::LEFT_PANEL : AMSPanelPos::RIGHT_PANEL; + + 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 || in_same_page) { + m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, ams->get_nozzle_id()); + } + } + + 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 || in_same_page) { + m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_extruder->OnAmsLoading(false, ams->get_nozzle_id()); + } + else + { + m_down_road->UpdatePassRoad(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 || in_same_page) { + m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid)); + } + else + { + m_down_road->UpdatePassRoad(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 || in_same_page) + { + m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid)); + } + else + { + m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + } + } } void AMSControl::on_filament_load(wxCommandEvent &event) @@ -1535,6 +1836,11 @@ void AMSControl::on_filament_unload(wxCommandEvent &event) post_event(SimpleEvent(EVT_AMS_UNLOAD)); } +void AMSControl::auto_refill(wxCommandEvent& event) +{ + post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); +} + void AMSControl::on_ams_setting_click(wxMouseEvent &event) { for (auto i = 0; i < m_ams_info.size(); i++) { @@ -1543,6 +1849,20 @@ void AMSControl::on_ams_setting_click(wxMouseEvent &event) post_event(SimpleEvent(EVT_AMS_SETTINGS)); } +void AMSControl::parse_object(MachineObject* obj) { + if (!obj || obj->amsList.size() == 0) + { + return; + } + m_ams_info.clear(); + for (auto ams : obj->amsList) + { + AMSinfo info; + info.parse_ams_info(obj, ams.second); + m_ams_info.push_back(info); + } +} + void AMSControl::on_clibration_again_click(wxMouseEvent &event) { post_event(SimpleEvent(EVT_AMS_CLIBRATION_AGAIN)); } void AMSControl::on_clibration_cancel_click(wxMouseEvent &event) { post_event(SimpleEvent(EVT_AMS_CLIBRATION_CANCEL)); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index e3cd444546..7ad3d971df 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -17,99 +17,124 @@ namespace Slic3r { namespace GUI { -//Previous definitions -class uiAmsPercentHumidityDryPopup; - class AMSControl : public wxSimplebook { public: AMSControl(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); + ~AMSControl(); void on_retry(); - void init_scaled_buttons(); protected: std::string m_current_ams; - std::string m_current_show_ams; + std::string m_current_slot_left; + std::string m_current_slot_right; + std::string m_current_show_ams_left; + std::string m_current_show_ams_right; std::map m_ams_selection; std::map m_ams_preview_list; std::vector m_ams_info; - std::map m_ams_item_list; - std::map m_ams_generic_item_list; - std::map m_ams_extra_item_list; + std::vector m_ext_info; + std::map m_ams_item_list; + std::map m_ext_image_list; + + ExtderData m_extder_data; + std::string m_dev_id; + std::vector> m_item_ids{ {}, {} }; + std::vector> pair_id; AMSextruder *m_extruder{nullptr}; + AMSRoadDownPart* m_down_road{ nullptr }; + + /*items*/ + wxBoxSizer* m_sizer_ams_items{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}; + wxBoxSizer* m_sizer_ams_area_left{nullptr}; + wxBoxSizer* m_sizer_ams_area_right{nullptr}; + wxBoxSizer* m_sizer_down_road{ nullptr }; + + /*option*/ + wxBoxSizer *m_sizer_ams_option{nullptr}; + wxBoxSizer* m_sizer_option_left{nullptr}; + wxBoxSizer* m_sizer_option_mid{nullptr}; + wxBoxSizer* m_sizer_option_right{nullptr}; + AmsIntroducePopup m_ams_introduce_popup; - wxSimplebook *m_simplebook_right = {nullptr}; - wxSimplebook *m_simplebook_calibration = {nullptr}; - wxSimplebook *m_simplebook_amsprvs = {nullptr}; - wxSimplebook *m_simplebook_ams = {nullptr}; - wxSimplebook* m_simplebook_generic_ams = {nullptr}; - wxSimplebook* m_simplebook_extra_ams = {nullptr}; + //wxSimplebook *m_simplebook_right{nullptr}; + wxSimplebook *m_simplebook_ams_left{nullptr}; + wxSimplebook *m_simplebook_ams_right{ nullptr }; + wxSimplebook *m_simplebook_bottom{nullptr}; + wxPanel *m_panel_down_road{ nullptr }; + int m_left_page_index = 0; + int m_right_page_index = 0; - wxSimplebook *m_simplebook_bottom = {nullptr}; - wxStaticText *m_tip_right_top = {nullptr}; - Label *m_tip_load_info = {nullptr}; - wxStaticText *m_text_calibration_percent = {nullptr}; - wxWindow * m_none_ams_panel = {nullptr}; - wxWindow* m_panel_prv = {nullptr}; - wxWindow * m_amswin = {nullptr}; - wxBoxSizer* m_vams_sizer = {nullptr}; - wxBoxSizer* m_sizer_vams_tips = {nullptr}; + wxStaticText *m_tip_right_top{nullptr}; + Label *m_tip_load_info{nullptr}; + wxWindow * m_amswin{nullptr}; + wxBoxSizer* m_vams_sizer{nullptr}; + wxBoxSizer* m_sizer_vams_tips{nullptr}; - Label* m_ams_backup_tip = {nullptr}; - Label* m_ams_tip = {nullptr}; + Label* m_ams_tip {nullptr}; Caninfo m_vams_info; - StaticBox* m_panel_virtual = {nullptr}; - AMSLib* m_vams_lib = {nullptr}; - AMSRoad* m_vams_road = {nullptr}; - AMSVirtualRoad* m_vams_extra_road = {nullptr}; + StaticBox* m_panel_virtual {nullptr}; + AMSLib* m_vams_lib {nullptr}; + AMSRoad* m_vams_road {nullptr}; + AMSVirtualRoad* m_vams_extra_road {nullptr}; - StaticBox * m_panel_can = {nullptr}; - wxBoxSizer* m_sizer_prv = {nullptr}; - wxBoxSizer *m_sizer_cans = {nullptr}; - wxBoxSizer *m_sizer_right_tip = {nullptr}; - wxBoxSizer* m_sizer_ams_tips = {nullptr}; - ::StepIndicator *m_filament_load_step = {nullptr}; - ::StepIndicator *m_filament_unload_step = {nullptr}; - ::StepIndicator *m_filament_vt_load_step = {nullptr}; - Button *m_button_extruder_feed = {nullptr}; - Button *m_button_extruder_back = {nullptr}; - wxStaticBitmap* m_button_ams_setting = {nullptr}; - wxStaticBitmap* m_img_ams_backup = {nullptr}; - wxStaticBitmap* m_img_amsmapping_tip = {nullptr}; - wxStaticBitmap* m_img_vams_tip = {nullptr}; + + wxBoxSizer *m_sizer_right_tip {nullptr}; + wxBoxSizer* m_sizer_ams_tips {nullptr}; + + ::StepIndicator *m_filament_load_step {nullptr}; + ::StepIndicator *m_filament_unload_step {nullptr}; + ::StepIndicator *m_filament_vt_load_step {nullptr}; + + Button *m_button_extruder_feed {nullptr}; + Button *m_button_extruder_back {nullptr}; + Button *m_button_auto_refill{ nullptr }; + wxStaticBitmap* m_button_ams_setting {nullptr}; + wxStaticBitmap* m_img_ams_backup {nullptr}; + wxStaticBitmap* m_img_amsmapping_tip {nullptr}; + wxStaticBitmap* m_img_vams_tip {nullptr}; ScalableBitmap m_button_ams_setting_normal; ScalableBitmap m_button_ams_setting_hover; ScalableBitmap m_button_ams_setting_press; - Button *m_button_guide = {nullptr}; - Button *m_button_retry = {nullptr}; - wxWindow* m_button_area = {nullptr}; + Button *m_button_guide {nullptr}; + Button *m_button_retry {nullptr}; - wxHyperlinkCtrl *m_hyperlink = {nullptr}; AmsHumidityTipPopup m_Humidity_tip_popup; - uiAmsPercentHumidityDryPopup* m_percent_humidity_dry_popup; - std::string m_last_ams_id; - std::string m_last_tray_id; + std::string m_last_ams_id = ""; + std::string m_last_tray_id = ""; public: std::string GetCurentAms(); - std::string GetCurentShowAms(); + 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}; AMSModel m_is_none_ams_mode{AMSModel::EXT_AMS}; + bool m_single_nozzle_no_ams = { true }; void SetAmsModel(AMSModel mode, AMSModel ext_mode) {m_ams_model = mode; m_ext_model = ext_mode;}; void AmsSelectedSwitch(wxCommandEvent& event); @@ -119,33 +144,36 @@ public: void EnterGenericAMSMode(); void EnterExtraAMSMode(); - void EnterCalibrationMode(bool read_to_calibration); - void ExitcClibrationMode(); - - void SetClibrationpercent(int percent); - void SetClibrationLink(wxString link); - void PlayRridLoading(wxString amsid, wxString canid); void StopRridLoading(wxString amsid, wxString canid); void SetFilamentStep(int item_idx, FilamentStepType f_type); void ShowFilamentTip(bool hasams = true); - void UpdateStepCtrl(bool is_extrusion_exist); + void UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step); void CreateAms(); + void CreateAmsDoubleNozzle(); void CreateAmsSingleNozzle(); void ClearAms(); - void UpdateAms(std::vector info, bool is_reset = true); - void AddAms(AMSinfo info); - void AddAmsPreview(AMSinfo info); - void AddExtraAms(AMSinfo info); - void SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxColour col); + void UpdateAms(std::vector ams_info, std::vector ext_info, ExtderData data, std::string dev_id, bool is_reset = true, bool test = false); + std::vector GenerateSimulateData(); + + 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, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL); + void AddAmsPreview(std::vectorsingle_info, AMSPanelPos pos); + //void AddExtraAms(std::vectorsingle_info); + void SetExtruder(bool on_off, std::string ams_id, std::string slot_id); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); void SwitchAms(std::string ams_id); void msw_rescale(); void on_filament_load(wxCommandEvent &event); void on_filament_unload(wxCommandEvent &event); + void auto_refill(wxCommandEvent& event); void on_ams_setting_click(wxMouseEvent &event); void on_extrusion_cali(wxCommandEvent &event); void on_ams_setting_click(wxCommandEvent &event); @@ -164,6 +192,7 @@ public: void post_event(wxEvent&& event); virtual bool Enable(bool enable = true); + void parse_object(MachineObject* obj); public: std::string m_current_select; diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index af5f02b07a..d7f420f404 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -3,9 +3,6 @@ #include "../BitmapCache.hpp" #include "../I18N.hpp" #include "../GUI_App.hpp" -#include "../Utils/WxFontUtils.hpp" - -#include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" #include #include @@ -35,24 +32,25 @@ namespace Slic3r { namespace GUI { wxDEFINE_EVENT(EVT_AMS_SHOW_HUMIDITY_TIPS, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_UNSELETED_VAMS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLEAR_SPEED_CONTROL, wxCommandEvent); + wxDEFINE_EVENT(EVT_AMS_SWITCH, SimpleEvent); -#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(196)) +#define AMS_CANS_SIZE wxSize(FromDIP(284), -1) +//#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), 144) +//#define AMS_SINGLE_CAN_SIZE wxSize(FromDIP(78), 144) +#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(174)) +#define AMS_SINGLE_CAN_SIZE wxSize(FromDIP(78), FromDIP(174)) bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, bool humidity_flag) { if (!ams) return false; this->ams_id = ams->id; - if (ams->type == 1 || ams->type == 3 || ams->type == N3S_AMS) { + if (ams->type == 1 || ams->type == 3){ this->ams_humidity = ams->humidity; } else{ this->ams_humidity = -1; } - - this->humidity_raw = ams->humidity_raw; - this->left_dray_time = ams->left_dry_time; - this->current_temperature = ams->current_temperature; this->ams_type = AMSModel(ams->type); nozzle_id = ams->nozzle; @@ -88,11 +86,8 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo if (!MachineObject::is_bbl_filament(it->second->tag_uid) || !remain_flag) { info.material_remain = 100; } else { - if(it->second->remain < 0 || it->second->remain > 100) { - info.material_remain = 100;/*ignore the invalid data*/ - } else { - info.material_remain = it->second->remain; - } + info.material_remain = it->second->remain < 0 ? 0 : it->second->remain; + info.material_remain = it->second->remain > 100 ? 100 : info.material_remain; } @@ -174,6 +169,69 @@ void AMSinfo::parse_ext_info(MachineObject* obj, AmsTray tray) { this->cans.push_back(info); } +/************************************************* +Description:AMSExtText +**************************************************/ + +AMSExtText::AMSExtText(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) +{ + wxWindow::Create(parent, id, pos, AMS_REFRESH_SIZE); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + + Bind(wxEVT_PAINT, &AMSExtText::paintEvent, this); + SetSize(AMS_REFRESH_SIZE); + SetMinSize(AMS_REFRESH_SIZE); +} + +AMSExtText::~AMSExtText() {} + +void AMSExtText::msw_rescale() +{ + Layout(); + Fit(); + Refresh(); +} + +void AMSExtText::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSExtText::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AMSExtText::doRender(wxDC& dc) +{ + auto size = GetSize(); + + dc.SetPen(wxPen(StateColor::darkModeColorFor(AMS_CONTROL_GRAY800), 2, wxSOLID)); + auto tsize = dc.GetMultiLineTextExtent(_L("Ext")); + dc.SetFont(Label::Body_13); + dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_GRAY800)); + wxPoint pot(FromDIP((size.x - tsize.x) / 2), FromDIP((size.y - tsize.y) / 2)); + dc.DrawText(_L("Ext"), pot); +} + + /************************************************* Description:AMSrefresh **************************************************/ @@ -214,17 +272,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", 30); - m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 30); + m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 32); + m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 32); - m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 30); - m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 30); - m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 30); - m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 30); - m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 30); - m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 30); - m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 30); - m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 30); + m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 32); + m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 32); + m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 32); + m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 32); + m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 32); + m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 32); + m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 32); + m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 32); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_1); @@ -256,17 +314,16 @@ void AMSrefresh::on_timer(wxTimerEvent &event) void AMSrefresh::PlayLoading() { - if (m_play_loading || m_disable_mode) return; - + if (m_play_loading | m_disable_mode) return; m_play_loading = true; + //m_rotation_angle = 0; m_playing_timer->Start(AMS_REFRESH_PLAY_LOADING_TIMER); Refresh(); } void AMSrefresh::StopLoading() { - if (!m_play_loading || m_disable_mode) return; - + if (!m_play_loading | m_disable_mode) return; m_playing_timer->Stop(); m_play_loading = false; Refresh(); @@ -293,6 +350,7 @@ void AMSrefresh::post_event(wxCommandEvent &&event) if (m_disable_mode) return; event.SetString(m_info.can_id); + event.SetInt(atoi(m_ams_id.c_str())); event.SetEventObject(m_parent); wxPostEvent(m_parent, event); event.Skip(); @@ -329,9 +387,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) } } - dc.SetPen(wxPen(colour)); - dc.SetBrush(wxBrush(colour)); - 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); @@ -354,16 +410,16 @@ void AMSrefresh::Update(std::string ams_id, Caninfo info) } void AMSrefresh::msw_rescale() { - m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 30); - m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 30); - m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 30); - m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 30); - m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 30); - m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 30); - m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 30); - m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 30); - m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 30); - m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 30); + m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 32); + m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 32); + m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 32); + m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 32); + m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 32); + m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 32); + m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 32); + m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 32); + m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 32); + m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 32); m_rfid_bitmap_list.clear(); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0); @@ -374,6 +430,9 @@ void AMSrefresh::msw_rescale() { m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_5); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_6); m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_7); + + Layout(); + Refresh(); } void AMSrefresh::DoSetSize(int x, int y, int width, int height, int sizeFlags) @@ -384,10 +443,13 @@ void AMSrefresh::DoSetSize(int x, int y, int width, int height, int sizeFlags) /************************************************* Description:AMSextruder **************************************************/ -void AMSextruderImage::TurnOn(wxColour col) +void AMSextruderImage::OnAmsLoading(bool load, wxColour col) { - m_colour = col; - Refresh(); + if (m_ams_loading != load || m_colour != col) { + m_ams_loading = load; + m_colour = col; + Refresh(); + } } void AMSextruderImage::TurnOff() @@ -400,7 +462,8 @@ void AMSextruderImage::msw_rescale() { //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE); //auto image = m_ams_extruder.ConvertToImage(); - m_ams_extruder = ScalableBitmap(this, "monitor_ams_extruder", 55); + m_ams_extruder = ScalableBitmap(this, m_file_name, 36); + Layout(); Refresh(); } @@ -434,22 +497,33 @@ void AMSextruderImage::render(wxDC &dc) void AMSextruderImage::doRender(wxDC &dc) { auto size = GetSize(); - dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(m_colour); - dc.DrawRectangle(0, FromDIP(18), size.x, size.y - FromDIP(18) - FromDIP(5)); - dc.DrawBitmap(m_ams_extruder.bmp(), wxPoint((size.x - m_ams_extruder.GetBmpSize().x) / 2, (size.y - m_ams_extruder.GetBmpSize().y) / 2)); + //dc.DrawRectangle(0, FromDIP(5), size.x, size.y - FromDIP(5) - FromDIP(2)); + if (m_show_state){ + if (m_ams_loading) { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(m_colour); + dc.DrawRectangle(FromDIP(2), FromDIP(10), size.x - FromDIP(3), size.y - FromDIP(20)); + } + else{ + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(*wxWHITE); + dc.DrawRectangle(FromDIP(3), FromDIP(10), size.x - FromDIP(6), size.y - FromDIP(20)); + } + dc.DrawBitmap(m_ams_extruder.bmp(), wxPoint((size.x - m_ams_extruder.GetBmpSize().x) / 2, 0)); + } } -AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, 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); - SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + wxWindow::Create(parent, id, pos, size); + SetBackgroundColour(*wxWHITE); - m_ams_extruder = ScalableBitmap(this, "monitor_ams_extruder",55); - SetSize(AMS_EXTRUDER_BITMAP_SIZE); - SetMinSize(AMS_EXTRUDER_BITMAP_SIZE); - SetMaxSize(AMS_EXTRUDER_BITMAP_SIZE); + m_ams_extruder = ScalableBitmap(this, file_name,36); + m_file_name = file_name; + SetSize(size); + SetMinSize(size); + SetMaxSize(size); Bind(wxEVT_PAINT, &AMSextruderImage::paintEvent, this); @@ -460,42 +534,149 @@ AMSextruderImage::~AMSextruderImage() {} +/************************************************* +Description:AMSExtImage upon ext lib +**************************************************/ + +AMSExtImage::AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos, ExtderData *data, wxWindowID id, const wxPoint& pos) +{ + if (data == nullptr){ + 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_ext_pos = ext_pos; + if (data != nullptr) m_extder_data = data; + + m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); + m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); + m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98); + m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); + + Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this); +} + +AMSExtImage::~AMSExtImage() {} + +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_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98); + m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); + Layout(); + Fit(); + Refresh(); +} + +void AMSExtImage::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSExtImage::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +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)); + if (m_extder_data == nullptr){ + if (m_ext_show) { + dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0)); + } + } + else{ + if (m_extder_data->total_extder_count < 2) { + dc.DrawBitmap(m_ams_ext_single_nozzle.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2)); + } + else { + 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)); + } + } + } + + 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() {} -void AMSextruder::TurnOn(wxColour col) -{ - m_amsSextruder->TurnOn(col); -} + void AMSextruder::TurnOn(wxColour col) + { + //m_left_extruder->TurnOn(col); + } void AMSextruder::TurnOff() { - m_amsSextruder->TurnOff(); + m_left_extruder->TurnOff(); } void AMSextruder::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { - wxWindow::Create(parent, id, pos, AMS_EXTRUDER_SIZE, wxBORDER_NONE); - SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + //wxWindow::Create(parent, id, pos, AMS_EXTRUDER_SIZE, 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_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_BITMAP_SIZE, wxTAB_TRAVERSAL); - m_bitmap_panel->SetBackgroundColour(AMS_EXTRUDER_DEF_COLOUR); - m_bitmap_panel->SetDoubleBuffered(true); m_bitmap_sizer = new wxBoxSizer(wxHORIZONTAL); - m_amsSextruder = new AMSextruderImage(m_bitmap_panel, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_BITMAP_SIZE); - m_bitmap_sizer->Add(m_amsSextruder, 0, wxALIGN_CENTER, 0); + m_right_extruder = new AMSextruderImage(this, wxID_ANY, "right_nozzle", AMS_EXTRUDER_DOUBLE_NOZZLE_BITMAP_SIZE); + m_right_extruder->setShowState(false); - m_bitmap_panel->SetSizer(m_bitmap_sizer); - m_bitmap_panel->Layout(); - m_sizer_body->Add( 0, 0, 1, wxEXPAND, 0 ); - m_sizer_body->Add(m_bitmap_panel, 0, wxALIGN_CENTER, 0); + 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); - SetSizer(m_sizer_body); + /*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); Layout(); @@ -508,13 +689,62 @@ void AMSextruder::OnVamsLoading(bool load, wxColour col) Refresh(); } -void AMSextruder::OnAmsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) +void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CONTROL_GRAY500*/) { m_ams_loading = load; - if (load)m_current_colur = col; + if (m_nozzle_num == 1){ + m_left_extruder->OnAmsLoading(load, col); + if (load) m_current_colur_deputy = col; + } + else if (m_nozzle_num > 1){ + if (nozzle_id == MAIN_NOZZLE_ID) { + m_right_extruder->OnAmsLoading(load, col); + if (m_current_colur != col){ + if (load) m_current_colur = col; + } + } + else if(nozzle_id == DEPUTY_NOZZLE_ID) { + m_left_extruder->OnAmsLoading(load, col); + if (m_current_colur_deputy != col) { + 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); @@ -532,9 +762,15 @@ void AMSextruder::render(wxDC& dc) { wxGCDC dc2(memdc); - doRender(dc2); + //doRender(dc2); + } + m_left_extruder->setShowState(true); + if (m_nozzle_num >= 2) { + m_right_extruder->setShowState(true); + } + else { + m_right_extruder->setShowState(false); } - memdc.SelectObject(wxNullBitmap); dc.DrawBitmap(bmp, 0, 0); #else @@ -545,62 +781,16 @@ void AMSextruder::render(wxDC& dc) void AMSextruder::doRender(wxDC& dc) { - //m_current_colur = + //m_current_colur = wxSize size = GetSize(); - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); - 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, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } - 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, wxPENSTYLE_SOLID)); - 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, wxPENSTYLE_SOLID));} - else {dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID));} - 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, wxPENSTYLE_SOLID)); - 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, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } - 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, wxPENSTYLE_SOLID)); - 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_amsSextruder->msw_rescale(); + if (m_left_extruder) m_left_extruder->msw_rescale(); + if (m_right_extruder) m_right_extruder->msw_rescale(); Layout(); Update(); Refresh(); @@ -616,15 +806,15 @@ AMSVirtualRoad::~AMSVirtualRoad() {} void AMSVirtualRoad::OnVamsLoading(bool load, wxColour col) { - m_vams_loading = load; + /*m_vams_loading = load; if (load)m_current_color = col; - Refresh(); + Refresh();*/ } void AMSVirtualRoad::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, wxDefaultSize, wxBORDER_NONE); - SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR)); + SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); Layout(); Bind(wxEVT_PAINT, &AMSVirtualRoad::paintEvent, this); } @@ -662,18 +852,18 @@ void AMSVirtualRoad::doRender(wxDC& dc) wxSize size = GetSize(); if (m_vams_loading) { - if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_color, 6, wxPENSTYLE_SOLID)); } + if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } + else { dc.SetPen(wxPen(m_current_color, 6, wxSOLID)); } } else { - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawRoundedRectangle(size.x / 2, -size.y / 1.1 + FromDIP(1), size.x, size.y, 4); if ((m_current_color == *wxWHITE || m_current_color.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_LIB_BK_COLOUR, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); dc.DrawRoundedRectangle(size.x / 2 - FromDIP(3), -size.y / 1.1 + FromDIP(4), size.x, size.y, 5); dc.DrawRoundedRectangle(size.x / 2 + FromDIP(3), -size.y / 1.1 - FromDIP(2), size.x, size.y, 3); } @@ -687,13 +877,15 @@ void AMSVirtualRoad::msw_rescale() Refresh(); } + /************************************************* Description:AMSLib **************************************************/ -AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info) +AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info, AMSModelOriginType ext_type) { m_border_color = (wxColour(130, 130, 128)); m_road_def_color = AMS_CONTROL_GRAY500; + m_ext_type = ext_type; wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); create(parent); @@ -724,16 +916,20 @@ void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const w m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14); m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14); m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76); + m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76); - m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 80); - m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 80); + 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", 80); - m_bitmap_extra_tray_right_hover = ScalableBitmap(this, "extra_ams_tray_right_hover", 80); + 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", 80); - m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 80); + 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); @@ -821,7 +1017,7 @@ void AMSLib::render(wxDC &dc) #endif // text - if (m_ams_model == AMSModel::AMS_LITE) { + if (m_ams_model == AMSModel::AMS_LITE || (m_ams_model == AMSModel::EXT_AMS && m_ext_type == AMSModelOriginType::LITE_EXT)) { render_lite_text(dc); } else{ @@ -863,7 +1059,7 @@ void AMSLib::render_lite_text(wxDC& dc) auto tsize = dc.GetMultiLineTextExtent("?"); auto pot = wxPoint(0, 0); pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 - FromDIP(5)); - dc.DrawText("?", pot); + dc.DrawText(L("?"), pot); } else { auto tsize = dc.GetMultiLineTextExtent(m_info.material_name); @@ -906,9 +1102,9 @@ void AMSLib::render_lite_text(wxDC& dc) } if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) { - auto tsize = dc.GetMultiLineTextExtent("/"); + auto tsize = dc.GetMultiLineTextExtent(_L("/")); auto pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 + FromDIP(3)); - dc.DrawText("/", pot); + dc.DrawText(_L("/"), pot); } } @@ -970,7 +1166,7 @@ void AMSLib::render_generic_text(wxDC &dc) else { pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3)); } - dc.DrawText("?", pot); + dc.DrawText(L("?"), pot); } else { @@ -1047,22 +1243,30 @@ void AMSLib::render_generic_text(wxDC &dc) void AMSLib::doRender(wxDC &dc) { - if (m_ams_model == AMSModel::AMS_LITE) { + if (m_ams_model == AMSModel::AMS_LITE || m_ext_type == AMSModelOriginType::LITE_EXT) { render_lite_lib(dc); } else { render_generic_lib(dc); } + //render_extra_lib(dc); } void AMSLib::render_lite_lib(wxDC& dc) { wxSize size = GetSize(); - - ScalableBitmap tray_bitmap = m_can_index <= 1 ? m_bitmap_extra_tray_left : m_bitmap_extra_tray_right; - ScalableBitmap tray_bitmap_hover = m_can_index <= 1 ? m_bitmap_extra_tray_left_hover : m_bitmap_extra_tray_right_hover; - ScalableBitmap tray_bitmap_selected = m_can_index <= 1 ? m_bitmap_extra_tray_left_selected : m_bitmap_extra_tray_right_selected; - + auto libsize = AMS_LITE_CAN_LIB_SIZE; + 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); @@ -1073,11 +1277,11 @@ void AMSLib::render_lite_lib(wxDC& dc) //draw road - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_pass_road) { - dc.SetPen(wxPen(m_info.material_colour, 6, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_info.material_colour, 4, wxSOLID)); } if (m_can_index == 0 || m_can_index == 3) { @@ -1090,7 +1294,10 @@ void AMSLib::render_lite_lib(wxDC& dc) //draw def background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR))); - dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0); + if (m_ams_model == AMSModel::EXT_AMS){ + dc.DrawRoundedRectangle(FromDIP(10), FromDIP(6), libsize.x - FromDIP(20), libsize.y - FromDIP(12), 0); + } + dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), libsize.x - FromDIP(20), libsize.y - FromDIP(20), 0); if (tmp_lib_colour.GetLuminance() < 0.6) { temp_bitmap_third = m_bitmap_editable_light; @@ -1114,11 +1321,11 @@ void AMSLib::render_lite_lib(wxDC& dc) dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); if (m_info.material_cols.size() > 1) { int left = FromDIP(10); - int gwidth = std::round(size.x / (m_info.material_cols.size() - 1)); + int gwidth = std::round(libsize.x / (m_info.material_cols.size() - 1)); //gradient if (m_info.ctype == 0) { for (int i = 0; i < m_info.material_cols.size() - 1; i++) { - auto rect = wxRect(left, FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20)); + auto rect = wxRect(left, FromDIP(10), libsize.x - FromDIP(18), libsize.y - FromDIP(18)); dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST); left += gwidth; } @@ -1127,15 +1334,21 @@ void AMSLib::render_lite_lib(wxDC& dc) int cols_size = m_info.material_cols.size(); for (int i = 0; i < cols_size; i++) { dc.SetBrush(wxBrush(m_info.material_cols[i])); - float x = FromDIP(10) + ((float)size.x - FromDIP(20)) * i / cols_size; - dc.DrawRoundedRectangle(x, FromDIP(10), ((float)size.x - FromDIP(20)) / cols_size, size.y - FromDIP(20), 0); + float x = FromDIP(10) + ((float)libsize.x - FromDIP(18)) * i / cols_size; + dc.DrawRoundedRectangle(x, FromDIP(10), ((float)libsize.x - FromDIP(17)) / cols_size, libsize.y - FromDIP(18), 0); } dc.SetBrush(wxBrush(tmp_lib_colour)); } } else { dc.SetBrush(wxBrush(tmp_lib_colour)); - dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0); + if (m_ams_model == AMSModel::EXT_AMS) { + dc.DrawRoundedRectangle(FromDIP(10), (size.y - libsize.y) / 2 + FromDIP(8), libsize.x - FromDIP(17), libsize.y - FromDIP(16), 0); + } + else{ + dc.DrawRoundedRectangle(FromDIP(10), (size.y - libsize.y) / 2 + FromDIP(10), libsize.x - FromDIP(17), libsize.y - FromDIP(18), 0); + } + } dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetBrush(wxBrush(tmp_lib_colour)); @@ -1175,7 +1388,9 @@ void AMSLib::render_generic_lib(wxDC &dc) //draw def background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); 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(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), size.x - FromDIP(4), size.y - FromDIP(3), m_radius); if (tmp_lib_colour.GetLuminance() < 0.6) { temp_bitmap_third = m_bitmap_editable_light; @@ -1196,56 +1411,91 @@ void AMSLib::render_generic_lib(wxDC &dc) temp_bitmap_brand = m_bitmap_readonly; } - // selected - if (m_selected) { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); - if (tmp_lib_colour.Alpha() == 0) { - dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxPENSTYLE_SOLID)); - } - dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - if (m_radius == 0) { - dc.DrawRectangle(0, 0, size.x, size.y); - } - else { - dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(1), size.y - FromDIP(1), m_radius); - } - - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetBrush(wxBrush(tmp_lib_colour)); - } - - if (!m_selected && m_hover) { - dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxPENSTYLE_SOLID)); - dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - if (m_radius == 0) { - dc.DrawRectangle(0, 0, size.x, size.y); - } - else { - dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(1), size.y - FromDIP(1), m_radius); - } - - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetBrush(wxBrush(tmp_lib_colour)); - } - else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); - dc.SetBrush(wxBrush(tmp_lib_colour)); - } + dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); + dc.SetBrush(wxBrush(tmp_lib_colour)); //draw remain auto alpha = m_info.material_colour.Alpha(); - int height = size.y - FromDIP(8); - int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); + int height = size.y; + int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); dc.SetFont(::Label::Body_13); int top = height - curr_height; - if (curr_height >= FromDIP(6)) { + if (m_ams_model == EXT_AMS){ + if (m_radius > 0){ + dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius - 1); + } + else{ + dc.DrawRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1)); + } + if (!m_disable_mode) { + // edit icon + if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE){ + if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) + dc.DrawBitmap(temp_bitmap_third.bmp(), (size.x - temp_bitmap_third.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_third.GetBmpSize().y)); + if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND) + dc.DrawBitmap(temp_bitmap_brand.bmp(), (size.x - temp_bitmap_brand.GetBmpSize().x) / 2, (size.y - FromDIP(10) - temp_bitmap_brand.GetBmpSize().y)); + } + } + if (alpha == 0) { + dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2)); + } + else if (alpha != 255 && alpha != 254) { + if (transparent_changed) { + transparent_changed = false; + } + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2)); + } + + dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); +#ifdef __APPLE__ + //dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(7), m_radius); + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(m_radius - 1), m_radius); +#else + //dc.DrawRoundedRectangle(FromDIP(3), FromDIP(3), size.x - FromDIP(6), size.y - FromDIP(6), m_radius); + dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius); +#endif + if (m_selected) { + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + //dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + if (tmp_lib_colour.Alpha() == 0) { + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxSOLID)); + } + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + if (m_radius == 0) { + dc.DrawRectangle(0, 0, size.x, size.y); + } + else { + dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius); + } + + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(tmp_lib_colour)); + } + + if (!m_selected && m_hover) { + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + if (m_radius == 0) { + dc.DrawRectangle(0, 0, size.x, size.y); + } + else { + dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius); + } + + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(tmp_lib_colour)); + } + return; + } + + if (curr_height >= FromDIP(1)) { //transparent - if (alpha == 0) { - dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); + dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(2), FromDIP(2)); } else if (alpha != 255 && alpha != 254) { if (transparent_changed) { @@ -1259,26 +1509,26 @@ void AMSLib::render_generic_lib(wxDC &dc) replace.push_back(rgb); std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f); replace.push_back(fill_replace); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68, false, false, true, replace); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76, false, false, true, replace); transparent_changed = false; - + } - dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(2), FromDIP(2)); } //gradient if (m_info.material_cols.size() > 1) { - int left = FromDIP(4); - float total_width = size.x - FromDIP(8); + auto left = FromDIP(2); + float total_width = size.x - FromDIP(4); int gwidth = std::round(total_width / (m_info.material_cols.size() - 1)); //gradient if (m_info.ctype == 0) { for (int i = 0; i < m_info.material_cols.size() - 1; i++) { - if ((left + gwidth) > (size.x - FromDIP(8))) { - gwidth = (size.x - FromDIP(4)) - left; + if ((left + gwidth) > (size.x)) { + gwidth = (size.x) - left; } - auto rect = wxRect(left, height - curr_height + FromDIP(4), gwidth, curr_height); + auto rect = wxRect(left, height - curr_height, gwidth, curr_height); dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST); left += gwidth; } @@ -1291,21 +1541,32 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(m_info.material_cols[i])); if (i == 0 || i == m_info.material_cols.size() - 1) { #ifdef __APPLE__ - dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height, m_radius); + if (height - curr_height < m_radius){ + dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, m_radius); + } + else{ + dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, 0); + } + #else - dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height, m_radius - 1); + if (height - curr_height < m_radius) { + dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, m_radius - 1); + } + else { + dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, 0); + } #endif //add rectangle int dr_gwidth = std::round(gwidth * 0.6); if (i == 0) { - dc.DrawRectangle(left + gwidth - dr_gwidth, height - curr_height + FromDIP(4), dr_gwidth, curr_height); + dc.DrawRectangle(left + gwidth - dr_gwidth, height - curr_height, dr_gwidth, curr_height); } else { - dc.DrawRectangle(left + gwidth*i, height - curr_height + FromDIP(4), dr_gwidth, curr_height); + dc.DrawRectangle(left + gwidth*i, height - curr_height, dr_gwidth, curr_height); } } else { - dc.DrawRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height); + dc.DrawRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height); } } //reset pen and brush @@ -1314,7 +1575,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(tmp_lib_colour)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); dc.SetBrush(wxBrush(tmp_lib_colour)); } } @@ -1323,60 +1584,109 @@ void AMSLib::render_generic_lib(wxDC &dc) auto brush = dc.GetBrush(); if (alpha != 0 && alpha != 255 && alpha != 254) dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); #ifdef __APPLE__ - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); + + //dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); + if (top < m_radius) { + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); + } + else { + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, 0); + } #else - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); + //dc.DrawRoundedRectangle(FromDIP(2), top, FromDIP(size.x - 4), curr_height, m_radius - 1); + if (top < m_radius) { + dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) + top, size.x - FromDIP(4), curr_height, m_radius - 1); + } + else { + dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) + top, size.x - FromDIP(4), curr_height, 0); + } #endif dc.SetBrush(brush); } } if (top > 2) { - if (curr_height >= FromDIP(6)) { - dc.DrawRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), FromDIP(2)); + if (curr_height >= FromDIP(1)) { + //dc.DrawLine(FromDIP(2), top, size.x - FromDIP(4), top); if (alpha != 255 && alpha != 254) { dc.SetPen(wxPen(*wxWHITE)); dc.SetBrush(wxBrush(*wxWHITE)); #ifdef __APPLE__ - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) , size.x - FromDIP(8), top, m_radius); + dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , size.x - FromDIP(4), top, m_radius); #else - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) , size.x - FromDIP(8), top, m_radius - 1); + dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , size.x - FromDIP(4), top, m_radius - 1); #endif } if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawLine(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(4), FromDIP(4) + top); + if (m_info.material_cols.size() <= 1){ + dc.DrawLine(FromDIP(2), top, size.x - FromDIP(4), top); + } } } else { dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxSOLID)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); } #ifdef __APPLE__ dc.DrawLine(FromDIP(5), FromDIP(4) + height - FromDIP(2), size.x - FromDIP(5), FromDIP(4) + height - FromDIP(2)); dc.DrawLine(FromDIP(6), FromDIP(4) + height - FromDIP(1), size.x - FromDIP(6), FromDIP(4) + height - FromDIP(1)); #else - dc.DrawLine(FromDIP(4), FromDIP(4) + height - FromDIP(2), size.x - FromDIP(4), FromDIP(4) + height - FromDIP(2)); - dc.DrawLine(FromDIP(5), FromDIP(4) + height - FromDIP(1), size.x - FromDIP(5), FromDIP(4) + height - FromDIP(1)); + //dc.DrawLine(FromDIP(2), FromDIP(0 + height), FromDIP(size.x - 4), FromDIP(height)); + dc.DrawLine(FromDIP(2), height - FromDIP(1), size.x - FromDIP(4), height - FromDIP(1)); #endif } } //border - dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); #ifdef __APPLE__ - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(7), m_radius); + //dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(7), m_radius); + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(m_radius - 1), m_radius); #else - dc.DrawRoundedRectangle(FromDIP(3), FromDIP(3), size.x - FromDIP(6), size.y - FromDIP(6), m_radius); + //dc.DrawRoundedRectangle(FromDIP(3), FromDIP(3), size.x - FromDIP(6), size.y - FromDIP(6), m_radius); + dc.DrawRoundedRectangle(FromDIP(1), FromDIP(1), size.x - FromDIP(2), size.y - FromDIP(1), m_radius); #endif + if (m_selected) { + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + //dc.SetPen(wxPen(tmp_lib_colour, 3, wxSOLID)); + if (tmp_lib_colour.Alpha() == 0) { + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxSOLID)); + } + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + if (m_radius == 0) { + dc.DrawRectangle(0, 0, size.x, size.y); + } + else { + dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius); + } + + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(tmp_lib_colour)); + } + + if (!m_selected && m_hover) { + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + if (m_radius == 0) { + dc.DrawRectangle(0, 0, size.x, size.y); + } + else { + dc.DrawRoundedRectangle(0, 0, size.x, size.y, m_radius); + } + + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(tmp_lib_colour)); + } + if (!m_disable_mode) { // edit icon if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE) @@ -1407,10 +1717,10 @@ void AMSLib::Update(Caninfo info, std::string ams_idx, bool refresh) if (info.material_colour.Alpha() != 0 && info.material_colour.Alpha() != 255 && info.material_colour.Alpha() != 254 && m_info.material_colour != info.material_colour) { transparent_changed = true; } - m_info = info; m_ams_id = ams_idx; m_slot_id = info.can_id; + Layout(); if (refresh) Refresh(); } @@ -1447,7 +1757,29 @@ bool AMSLib::Enable(bool enable) { return wxWindow::Enable(enable); } void AMSLib::msw_rescale() { - m_bitmap_transparent.msw_rescale(); + //m_bitmap_transparent.msw_rescale(); + m_bitmap_transparent_def.msw_rescale(); + m_bitmap_editable = ScalableBitmap(this, "ams_editable", 14); + m_bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14); + m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14); + m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 76); + m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 76); + + m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 72); + m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 72); + 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(); } /************************************************* @@ -1476,6 +1808,13 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE_ANY_ROAD; } + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_light", 32)); + } + + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", 32)); + } if (m_rode_mode != AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY) { create(parent, id, pos, size); } @@ -1486,7 +1825,26 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in } Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this); - wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); + + Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { + if (m_canindex == 3 && m_show_humidity) { + auto mouse_pos = ClientToScreen(e.GetPosition()); + auto rect = ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > rect.x + GetSize().x - FromDIP(40) && + mouse_pos.y > rect.y + GetSize().y - FromDIP(40)) { + wxCommandEvent show_event(EVT_AMS_SHOW_HUMIDITY_TIPS); + wxPostEvent(GetParent()->GetParent(), show_event); + +#ifdef __WXMSW__ + wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); + wxPostEvent(GetParent()->GetParent(), close_event); +#endif // __WXMSW__ + + } + } + }); } void AMSRoad::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size); } @@ -1511,9 +1869,9 @@ void AMSRoad::Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan) void AMSRoad::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) { - m_vams_loading = load; + /*m_vams_loading = load; if(load)m_road_color = col; - Refresh(); + Refresh();*/ } void AMSRoad::SetPassRoadColour(wxColour col) { m_road_color = col; } @@ -1555,15 +1913,15 @@ void AMSRoad::doRender(wxDC &dc) { wxSize size = GetSize(); - dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); // left mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT) { dc.DrawRoundedRectangle(-10, -10, size.x / 2 + 10, size.y * 0.6 + 10, 4); } // left right mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT) { - dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); - dc.DrawLine(0, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1); + dc.DrawLine(size.x / 2, 0, size.x / 2, size.y * 0.6 - FromDIP(1)); + dc.DrawLine(0, size.y * 0.6 - 1, size.x, size.y * 0.6 - FromDIP(1)); } // end mode @@ -1598,8 +1956,8 @@ void AMSRoad::doRender(wxDC &dc) // mode none // if (m_pass_rode_mode.size() == 1 && m_pass_rode_mode[0] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) return; - if (m_road_color.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxPENSTYLE_SOLID));} - else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxPENSTYLE_SOLID));} + 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.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -1625,11 +1983,32 @@ void AMSRoad::doRender(wxDC &dc) } // end mode - if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END) { - dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); + if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END || m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) { + dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); dc.SetBrush(wxBrush(m_road_def_color)); dc.DrawRoundedRectangle(size.x * 0.37 / 2, size.y * 0.6 - size.y / 6, size.x * 0.63, size.y / 3, m_radius); } + + if (m_canindex == 3) { + + if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) {m_show_humidity = true;} + else {m_show_humidity = false;} + + if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { + + int hum_index = m_amsinfo.ams_humidity - 1; + if (wxGetApp().dark_mode()) { + hum_index += 5; + } + + if (hum_index >= 0) { + dc.DrawBitmap(ams_humidity_img[hum_index].bmp(), wxPoint(size.x - FromDIP(33), size.y - FromDIP(33))); + } + } + else { + //to do ... + } + } } void AMSRoad::UpdatePassRoad(int tag_index, AMSPassRoadType type, AMSPassRoadSTEP step) {} @@ -1685,6 +2064,445 @@ void AMSRoad::OnPassRoad(std::vector prord_list) } } +/* + + +/************************************************* +Description:AMSRoadUpPart +**************************************************/ +AMSRoadUpPart::AMSRoadUpPart() : m_road_def_color(AMS_CONTROL_GRAY500), m_road_color(AMS_CONTROL_GRAY500) {} +AMSRoadUpPart::AMSRoadUpPart(wxWindow* parent, wxWindowID id, AMSinfo info, AMSModel model, const wxPoint& pos, const wxSize& size) + : AMSRoadUpPart() +{ + m_amsinfo = info; + // road type + auto mode = AMSRoadMode::AMS_ROAD_MODE_END; + m_ams_model = model; + + if (m_ams_model == AMSModel::GENERIC_AMS){ + create(parent, id, pos, wxSize(FromDIP(264), FromDIP(34))); + } + else{ + create(parent, id, pos, wxSize(FromDIP(78), FromDIP(34))); + } + /*create(parent, id, pos, size); + this->SetMinSize(AMS_SINGLE_CAN_SIZE); + this->SetSize(AMS_SINGLE_CAN_SIZE);*/ + + + Bind(wxEVT_PAINT, &AMSRoadUpPart::paintEvent, this); + wxWindow::SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + +} + +void AMSRoadUpPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { + wxWindow::Create(parent, id, pos, size); + SetSize(size); + SetMinSize(size); + SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + Layout(); + Fit(); + Refresh(); +} + +void AMSRoadUpPart::Update(AMSinfo amsinfo) +{ + m_amsinfo = amsinfo; + Refresh(); +} + +void AMSRoadUpPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) +{ + /*m_vams_loading = load; + if(load)m_road_color = col; + Refresh();*/ +} + +void AMSRoadUpPart::SetPassRoadColour(wxColour col) { m_road_color = col; } + +void AMSRoadUpPart::SetMode(AMSRoadShowMode mode) +{ + m_road_mode = mode; + Refresh(); +} + +void AMSRoadUpPart::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSRoadUpPart::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AMSRoadUpPart::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + //dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + + if ((m_ams_model == N3S_AMS || m_ams_model == EXT_AMS) && m_amsinfo.cans.size() != 4){ + 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{ + 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; + } + x -= width; + dc.DrawLine((x_start), (height), (x), (height)); + dc.DrawLine((size.x / 2), (height), (size.x / 2), (size.y)); + + dc.SetPen(wxPen(m_amsinfo.cans[m_load_slot_index].material_colour, 4, wxSOLID)); + auto temp = m_amsinfo; + if (m_load_step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE){ + if (m_amsinfo.cans.size() <= m_load_slot_index || m_load_slot_index < 0){ + BOOST_LOG_TRIVIAL(trace) << "up road render error"; + return; + } + x = x_start + m_load_slot_index * width; + dc.DrawLine((x), (0), (x), (height)); + if (x < size.x / 2){ + dc.DrawLine((x), (height), (size.x / 2), (height)); + } + else { + dc.DrawLine((size.x / 2), (height), (x), (height)); + } + if(m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){ + dc.DrawLine((size.x / 2), (height), (size.x / 2), (size.y)); + } + } + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(wxColour(194, 194, 194))); + //width = 0.11 * size.x, height = 0.294 * size.y; + //dc.DrawRectangle((size.x - width) / 2, (16), (28), (10)); + //dc.DrawRectangle((size.x - width) / 2, (size.y * 0.62 - height / 2), (width), (height)); + dc.DrawRectangle(size.x / 2 - FromDIP(14), height - FromDIP(5), FromDIP(28), FromDIP(10)); + } + // left mode +} + +void AMSRoadUpPart::UpdatePassRoad(std::string ams_index, std::string slot_index, AMSPassRoadType type, AMSPassRoadSTEP step) { + m_load_ams_index = atoi(ams_index.c_str()); + m_load_slot_index = atoi(slot_index.c_str()); + m_load_step = step; +} + +void AMSRoadUpPart::OnPassRoad(std::vector prord_list) +{ + // AMS_ROAD_MODE_NONE, AMS_ROAD_MODE_LEFT, AMS_ROAD_MODE_LEFT_RIGHT, AMS_ROAD_MODE_END_TOP, AMS_ROAD_MODE_END_BOTTOM, AMS_ROAD_MODE_END_RIGHT, + // AMS_ROAD_MODE_LEFT, AMS_ROAD_MODE_LEFT_RIGHT, AMS_ROAD_MODE_END, + //wait fill +} + +void AMSRoadUpPart::msw_rescale() { + Layout(); + Fit(); + Refresh(); +} + + + +/************************************************* +Description:AMSRoadDownPart +**************************************************/ +AMSRoadDownPart::AMSRoadDownPart(){} +AMSRoadDownPart::AMSRoadDownPart(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) + : AMSRoadDownPart() +{ + /*m_info = info; + m_canindex = canindex;*/ + // road type + m_road_color[0] = AMS_CONTROL_GRAY500; + m_road_color[1] = AMS_CONTROL_GRAY500; + m_left_rode_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR; + m_right_rode_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR; + m_selected = false; + + m_left_road_length = -1; + m_right_road_length = -1; + create(parent, id, pos, size); + this->SetMinSize(AMS_DOWN_ROAD_SIZE); + this->SetSize(AMS_DOWN_ROAD_SIZE); + + Bind(wxEVT_PAINT, &AMSRoadDownPart::paintEvent, this); + wxWindow::SetBackgroundColour(*wxWHITE); + +} + +void AMSRoadDownPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, size); } + +//void AMSRoadDownPart::Update(int nozzle_num, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len) +//{ +// this->m_nozzle_num = nozzle_num; +// this->m_left_rode_mode = left_mode; +// this->m_right_rode_mode = right_mode; +// +// m_left_road_length = left_len; +// m_right_road_length = right_len; +// m_selected = false; +// +// Refresh(); +//} + +void AMSRoadDownPart::UpdateLeft(int nozzle_num, AMSRoadShowMode mode) { + this->m_left_rode_mode = mode; + m_nozzle_num = nozzle_num; + Refresh(); +} +void AMSRoadDownPart::UpdateRight(int nozzle_num, AMSRoadShowMode mode) { + this->m_right_rode_mode = mode; + m_nozzle_num = nozzle_num; + Refresh(); +} + +void AMSRoadDownPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) +{ + /*m_vams_loading = load; + if(load)m_road_color = col; + Refresh();*/ +} + +void AMSRoadDownPart::SetPassRoadColour(bool left, wxColour col) +{ + if (left){ + m_road_color[DEPUTY_NOZZLE_ID] = col; + } + else{ + m_road_color[MAIN_NOZZLE_ID] = col; + } +} + +//void AMSRoadDownPart::SetMode(AMSRoadDownPartMode mode) { +// +//} +void AMSRoadDownPart::SetShowMode(AMSRoadShowMode left_mode, AMSRoadShowMode right_mode) { + m_left_rode_mode = left_mode; + m_right_rode_mode = right_mode; +} + +void AMSRoadDownPart::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSRoadDownPart::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AMSRoadDownPart::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + 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){ + auto length = 50; + if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE || m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE) + length = -13; + dc.DrawLine(left_nozzle_pos.x - FromDIP(length), (size.y / 2), (left_nozzle_pos.x), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(length), (0), left_nozzle_pos.x - FromDIP(length), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x, size.y / 2, left_nozzle_pos.x, size.y); + } + else { + switch (m_left_rode_mode) + { + case AMSRoadShowMode::AMS_ROAD_MODE_FOUR: + 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(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(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_AMS_LITE: + dc.DrawLine(left_nozzle_pos.x, 0, left_nozzle_pos.x, size.y); + break; + default: + break; + } + + 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(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(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(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_AMS_LITE: + dc.DrawLine(left_nozzle_pos.x, (size.y / 2), left_nozzle_pos.x + FromDIP(145), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x + FromDIP(145), 0, left_nozzle_pos.x + FromDIP(145), (size.y / 2)); + break; + default: + break; + } + } + + 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));*/ + dc.DrawLine((left_nozzle_pos.x), (size.y / 2), (left_nozzle_pos.x), (size.y)); + 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 && 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)); + } + } + + + /*if (m_nozzle_mode == AMSRoadDownPartMode::AMS_ROAD_MODE_SINGLE) + { + dc.DrawLine(left_nozzle_pos.x, left_nozzle_pos.y, FromDIP(left_nozzle_pos.x + 30), left_nozzle_pos.y); + }*/ + //dc.SetBrush(wxBrush(*wxBLUE)); + + 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_AMS_LITE){ + /* dc.SetPen(wxPen(*wxRED)); + 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.SetPen(wxPen(*wxGREEN)); + dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x, size.y / 2); + dc.SetPen(wxPen(*wxYELLOW)); + dc.DrawLine(xpos, size.y / 2, xpos, size.y);*/ + int x = left_nozzle_pos.x; + int len = m_right_road_length; + if (m_nozzle_num == 2) { + x = right_nozzle_pos.x; + len = len - 14; + } + dc.DrawLine(((x)), (size.y / 2), x + FromDIP(len), (size.y / 2)); + dc.DrawLine(x + FromDIP(len), (0), x + FromDIP(len), (size.y / 2)); + dc.DrawLine((x), (size.y / 2), (x), (size.y)); + } + else{ + int x = left_nozzle_pos.x; + int len = m_right_road_length; + if (m_nozzle_num == 2) { + x = right_nozzle_pos.x; + len = len - 14; + } + dc.DrawLine(((x)), (size.y / 2), x + FromDIP(len), (size.y / 2)); + dc.DrawLine(x + FromDIP(len), (0), x + FromDIP(len), (size.y / 2)); + dc.DrawLine((x), (size.y / 2), (x), (size.y)); + } + } + } + + 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_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)); + dc.DrawLine((left_nozzle_pos.x), (size.y / 2), (left_nozzle_pos.x), (size.y)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(m_left_road_length), (0), left_nozzle_pos.x - FromDIP(m_left_road_length), (size.y / 2)); + } + } + } +} + +void AMSRoadDownPart::UpdatePassRoad(AMSPanelPos pos, int len, AMSPassRoadSTEP step) { + if (m_nozzle_num >= 2){ + if (pos == AMSPanelPos::LEFT_PANEL){ + m_left_road_length = len;; + m_pass_road_left_step = step; + } + else{ + m_right_road_length = len; + m_pass_road_right_step = step; + } + } + else{ + if (pos == AMSPanelPos::LEFT_PANEL) { + m_left_road_length = len; + m_right_road_length = -1; + m_pass_road_left_step = step; + } + else { + m_right_road_length = len; + m_left_road_length = -1; + m_pass_road_right_step = step; + } + } + Refresh(); +} + +void AMSRoadDownPart::msw_rescale() { + Layout(); + Fit(); + Refresh(); +} /************************************************* Description:AMSPreview @@ -1694,7 +2512,12 @@ AMSPreview::AMSPreview() {} AMSPreview::AMSPreview(wxWindow* parent, wxWindowID id, AMSinfo amsinfo, AMSModel itemType, const wxPoint& pos, const wxSize& size) : AMSPreview() { wxWindow::Create(parent, id, pos); - create(parent, id, pos, AMS_ITEM_SIZE); + if (itemType == AMSModel::GENERIC_AMS || itemType == AMSModel::AMS_LITE || itemType == AMSModel::N3F_AMS) { + create(parent, id, pos, AMS_PREV_FOUR_SIZE); + } + else { + create(parent, id, pos, AMS_PREV_SINGLE_SIZE); + } m_amsinfo = amsinfo; m_ams_item_type = itemType; //create(parent, id, pos, AMS_PREVIEW_SIZE); @@ -1721,20 +2544,24 @@ void AMSPreview::Update(AMSinfo amsinfo) m_ams_item_type = amsinfo.ams_type; if (m_ams_item_type == AMSModel::GENERIC_AMS || m_ams_item_type == AMSModel::AMS_LITE || m_ams_item_type == AMSModel::N3F_AMS) { - SetMinSize(AMS_ITEM_SIZE); - SetMaxSize(AMS_ITEM_SIZE); + SetMinSize(AMS_PREV_FOUR_SIZE); + SetMaxSize(AMS_PREV_FOUR_SIZE); } else { - SetMinSize(AMS_ITEM_SIZE); - SetMaxSize(AMS_ITEM_SIZE); + SetMinSize(AMS_PREV_SINGLE_SIZE); + SetMaxSize(AMS_PREV_SINGLE_SIZE); } } void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { - m_ts_bitmap_cube = new ScalableBitmap(this, "ts_bitmap_cube", 14); + 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", 26); + SetMinSize(size); SetMaxSize(size); - SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_WHITE_COLOUR)); + //SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); Refresh(); } @@ -1795,92 +2622,162 @@ void AMSPreview::render(wxDC &dc) void AMSPreview::doRender(wxDC &dc) { wxSize size = GetSize(); - dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); + /*dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); dc.SetBrush(wxBrush(StateColor::darkModeColorFor(m_background_colour))); - dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3);*/ - auto left = m_padding; - for (std::vector::iterator iter = m_amsinfo.cans.begin(); iter != m_amsinfo.cans.end(); iter++) { - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + auto left = 8; + m_space = 9; + auto color = *wxWHITE; + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(color); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, FromDIP(3)); - if (wxWindow::IsEnabled()) { - wxColour color = iter->material_colour; - change_the_opacity(color); - dc.SetBrush(wxBrush(color)); - } else { - dc.SetBrush(AMS_CONTROL_DISABLE_COLOUR); + //four slot + if (m_ams_item_type != AMSModel::EXT_AMS && m_ams_item_type != AMSModel::N3S_AMS){ + for (std::vector::iterator iter = m_amsinfo.cans.begin(); iter != m_amsinfo.cans.end(); iter++) { + + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + + if (wxWindow::IsEnabled()) { + wxColour color = iter->material_colour; + change_the_opacity(color); + dc.SetBrush(wxBrush(color)); + } + else { + dc.SetBrush(AMS_CONTROL_DISABLE_COLOUR); + } + if (iter->material_cols.size() > 1) { + int fleft = FromDIP(left); + float total_width = AMS_ITEM_CUBE_SIZE.x; + int gwidth = (total_width / (iter->material_cols.size() - 1)); + if (iter->ctype == 0) { + for (int i = 0; i < iter->material_cols.size() - 1; i++) { + if (fleft + gwidth > (AMS_ITEM_CUBE_SIZE.x)) { + gwidth = fleft + AMS_ITEM_CUBE_SIZE.x - fleft; + } + + auto rect = wxRect(fleft, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, gwidth, AMS_ITEM_CUBE_SIZE.y); + dc.GradientFillLinear(rect, iter->material_cols[i], iter->material_cols[i + 1], wxEAST); + fleft += gwidth; + } + } + else { + int cols_size = iter->material_cols.size(); + for (int i = 0; i < cols_size; i++) { + dc.SetBrush(wxBrush(iter->material_cols[i])); + int x = FromDIP(left) + total_width * i / cols_size; + dc.DrawRectangle(x, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, total_width / cols_size, AMS_ITEM_CUBE_SIZE.y); + } + } + } + else { + if (iter->material_colour.Alpha() == 0) { + dc.DrawBitmap(m_ts_bitmap_cube.bmp(), FromDIP(left), (size.y - AMS_ITEM_CUBE_SIZE.y) / 2); + } + else { + wxRect rect(FromDIP(left), (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, AMS_ITEM_CUBE_SIZE.x, AMS_ITEM_CUBE_SIZE.y); + if (iter->material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) { + + // draw a slash when ams slot is empty + /*dc.SetPen(wxPen(wxColor(0, 0, 0))); + dc.DrawRoundedRectangle(rect, 3);*/ + //dc.DrawLine(rect.GetRight() - FromDIP(1), rect.GetTop() + FromDIP(1), rect.GetLeft() + FromDIP(1), rect.GetBottom() - FromDIP(1)); + } + else { + dc.DrawRoundedRectangle(rect, 2); + } + } + } + left += m_space; } - if (iter->material_cols.size() > 1) { - int fleft = left; + auto pot = wxPoint((size.x - m_four_slot_bitmap.GetBmpSize().x) / 2, (size.y - m_four_slot_bitmap.GetBmpSize().y) / 2); + dc.DrawBitmap(m_four_slot_bitmap.bmp(), pot); + } + + //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; + float total_width = AMS_ITEM_CUBE_SIZE.x; - int gwidth = std::round(total_width / (iter->material_cols.size() - 1)); - if (iter->ctype == 0) { - for (int i = 0; i < iter->material_cols.size() - 1; i++) { + int gwidth = (total_width / (iter.material_cols.size())); + if (iter.ctype == 0) { + for (int i = 0; i < iter.material_cols.size() - 1; i++) { if ((fleft + gwidth) > (AMS_ITEM_CUBE_SIZE.x)) { gwidth = (fleft + AMS_ITEM_CUBE_SIZE.x) - fleft; } auto rect = wxRect(fleft, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, gwidth, AMS_ITEM_CUBE_SIZE.y); - dc.GradientFillLinear(rect, iter->material_cols[i], iter->material_cols[i + 1], wxEAST); + dc.GradientFillLinear(rect, iter.material_cols[i], iter.material_cols[i + 1], wxEAST); fleft += gwidth; } - } else { - int cols_size = iter->material_cols.size(); - for (int i = 0; i < cols_size; i++) { - dc.SetBrush(wxBrush(iter->material_cols[i])); - float x = left + total_width * i / cols_size; - dc.DrawRoundedRectangle(x, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, total_width / cols_size, AMS_ITEM_CUBE_SIZE.y , 0); - } - } - - dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRoundedRectangle(left - 1, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2 - 1, AMS_ITEM_CUBE_SIZE.x + 2, AMS_ITEM_CUBE_SIZE.y + 2, 2); - - }else { - if (iter->material_colour.Alpha() == 0) { - dc.DrawBitmap(m_ts_bitmap_cube->bmp(),left,(size.y - AMS_ITEM_CUBE_SIZE.y) / 2); } else { - wxRect rect(left, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, AMS_ITEM_CUBE_SIZE.x, AMS_ITEM_CUBE_SIZE.y); - if(iter->material_state==AMSCanType::AMS_CAN_TYPE_EMPTY){ - dc.SetPen(wxPen(wxColor(0, 0, 0))); - dc.DrawRoundedRectangle(rect, 2); - - dc.DrawLine(rect.GetRight()-1, rect.GetTop()+1, rect.GetLeft()+1, rect.GetBottom()-1); - } - else { - dc.DrawRoundedRectangle(rect, 2); + int cols_size = iter.material_cols.size(); + for (int i = 0; i < cols_size; i++) { + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(iter.material_cols[i])); + float x = (size.x - AMS_ITEM_CUBE_SIZE.x) / 2 + total_width * i / cols_size; + dc.DrawRectangle(x, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, total_width / cols_size, AMS_ITEM_CUBE_SIZE.y); } } - } - - - left += AMS_ITEM_CUBE_SIZE.x; - left += m_space; + else { + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + 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), (AMS_ITEM_CUBE_SIZE.y)); + dc.DrawRoundedRectangle(rect, FromDIP(4)); + } + if (m_ams_item_type == AMSModel::N3S_AMS) { + auto pot = wxPoint(((size.x - m_single_slot_bitmap.GetBmpSize().x) / 2), ((size.y - m_single_slot_bitmap.GetBmpSize().y) / 2)); + dc.DrawBitmap(m_single_slot_bitmap.bmp(), pot); + } + if (((iter.material_colour.Red() >= 238 && iter.material_colour.Green() >= 238 && iter.material_colour.Blue() >= 238) + || iter.material_colour.Alpha() == 0) && m_ams_item_type == AMSModel::EXT_AMS) { + dc.SetPen(wxPen(AMS_CONTROL_GRAY500)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + auto rect = wxRect((size.x - AMS_ITEM_CUBE_SIZE.x) / 2, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, AMS_ITEM_CUBE_SIZE.x, AMS_ITEM_CUBE_SIZE.y); + dc.DrawRoundedRectangle(rect, FromDIP(4)); + } } - auto border_colour = AMS_CONTROL_BRAND_COLOUR; if (!wxWindow::IsEnabled()) { border_colour = AMS_CONTROL_DISABLE_COLOUR; } if (m_hover) { - dc.SetPen(wxPen(border_colour, 2)); + dc.SetPen(wxPen(border_colour, 1)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawRoundedRectangle(1, 1, size.x - 1, size.y - 1, 3); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); } if (m_selected) { - dc.SetPen(wxPen(border_colour, 2)); + dc.SetPen(wxPen(border_colour, 1)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawRoundedRectangle(1, 1, size.x-1, size.y-1, 3); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); } } void AMSPreview::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) { wxWindow::DoSetSize(x, y, width, height, sizeFlags); } +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", 26); + + Layout(); + Refresh(); +} + /************************************************* Description:AMSHumidity @@ -1890,39 +2787,31 @@ AMSHumidity::AMSHumidity() {} AMSHumidity::AMSHumidity(wxWindow* parent, wxWindowID id, AMSinfo info, const wxPoint& pos, const wxSize& size) : AMSHumidity() { - create(parent, id, pos, wxDefaultSize); + m_amsinfo = info; + // road type - for (int i = 1; i <= 5; i++) { ams_humidity_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_light", 16));} - for (int i = 1; i <= 5; i++) { ams_humidity_dark_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", 16));} - for (int i = 1; i <= 5; i++) { ams_humidity_no_num_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_no_num_light", 16)); } - for (int i = 1; i <= 5; i++) { ams_humidity_no_num_dark_imgs.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_no_num_dark", 16)); } + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_light", 16)); + } + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", 16)); + } ams_sun_img = ScalableBitmap(this, "ams_drying", 16); - ams_drying_img = ScalableBitmap(this, "ams_is_drying", 16); + create(parent, id, pos, AMS_HUMIDITY_SIZE); Bind(wxEVT_PAINT, &AMSHumidity::paintEvent, this); //wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_HUMIDITY_BK_COLOUR); Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { if (m_show_humidity) { - if (m_amsinfo.ams_type == AMSModel::GENERIC_AMS) { - return;/*STUDIO-12083*/ - } - auto mouse_pos = ClientToScreen(e.GetPosition()); auto rect = ClientToScreen(wxPoint(0, 0)); if (mouse_pos.x > rect.x && mouse_pos.y > rect.y) { wxCommandEvent show_event(EVT_AMS_SHOW_HUMIDITY_TIPS); - - uiAmsHumidityInfo *info = new uiAmsHumidityInfo; - info->ams_id = m_amsinfo.ams_id; - info->humidity_level = m_amsinfo.ams_humidity; - info->humidity_percent = m_amsinfo.humidity_raw; - info->left_dry_time = m_amsinfo.left_dray_time; - info->current_temperature = m_amsinfo.current_temperature; - show_event.SetClientData(info); + show_event.SetInt(m_amsinfo.ams_humidity); wxPostEvent(GetParent()->GetParent(), show_event); #ifdef __WXMSW__ @@ -1933,40 +2822,21 @@ AMSHumidity::AMSHumidity(wxWindow* parent, wxWindowID id, AMSinfo info, const wx } } }); - - Update(info); } void AMSHumidity::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, size); + SetSize(size); + SetMinSize(size); SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + Refresh(); } void AMSHumidity::Update(AMSinfo amsinfo) { - if (m_amsinfo != amsinfo) - { - m_amsinfo = amsinfo; - update_size(); - Refresh(); - } -} - -void AMSHumidity::update_size() -{ - wxSize size; - if (m_amsinfo.humidity_raw != -1) { - size = AMS_HUMIDITY_SIZE; - } else { - size = AMS_HUMIDITY_NO_PERCENT_SIZE; - } - - if (!m_amsinfo.support_drying()) { size.x -= AMS_HUMIDITY_DRY_WIDTH; } - - SetMaxSize(size); - SetMinSize(size); - SetSize(size); + m_amsinfo = amsinfo; + Refresh(); } @@ -2006,84 +2876,55 @@ void AMSHumidity::doRender(wxDC& dc) // left mode if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { m_show_humidity = true; } else { m_show_humidity = false; } - - if (m_show_humidity) { + if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { //background dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); dc.SetBrush(wxBrush(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR))); dc.DrawRoundedRectangle(0, 0, (size.x), (size.y), (size.y / 2)); - wxPoint pot; - if (m_amsinfo.humidity_raw != -1) /*image with no number + percentage*/ - { - // hum image - ScalableBitmap hum_img; - if (!wxGetApp().dark_mode()) { - hum_img = ams_humidity_no_num_imgs[m_amsinfo.ams_humidity - 1]; - } else { - hum_img = ams_humidity_no_num_dark_imgs[m_amsinfo.ams_humidity - 1]; - } - - pot = wxPoint(FromDIP(5), ((size.y - hum_img.GetBmpSize().y) / 2)); - dc.DrawBitmap(hum_img.bmp(), pot); - pot.x += hum_img.GetBmpSize().x + FromDIP(3); - - // percentage - wxString hum_percentage(std::to_string(m_amsinfo.humidity_raw)); - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetFont(Label::Body_14); - dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR)); - - //WxFontUtils::get_suitable_font_size(0.7 * size.GetHeight(), dc); - auto tsize1 = dc.GetMultiLineTextExtent(hum_percentage); - pot.y = (size.y - tsize1.y) / 2; - dc.DrawText(hum_percentage, pot); - pot.x += (tsize1.x + FromDIP(3)); - - // percentage sign - dc.SetFont(Label::Body_12); - //WxFontUtils::get_suitable_font_size(0.5 * size.GetHeight(), dc); - auto tsize2 = dc.GetMultiLineTextExtent(_L("%")); - pot.y = pot.y + ((tsize1.y - tsize2.y) / 2) + FromDIP(2); - dc.DrawText(_L("%"), pot); - - pot.x += tsize2.x; + //hum image + int hum_idx = m_amsinfo.ams_humidity - 1; + if (wxGetApp().dark_mode()) { + hum_idx += 5; } - else /*image with number*/ - { - // hum image - ScalableBitmap hum_img; - if (!wxGetApp().dark_mode()) { - hum_img = ams_humidity_imgs[m_amsinfo.ams_humidity - 1]; - } else { - hum_img = ams_humidity_dark_imgs[m_amsinfo.ams_humidity - 1]; - } - - pot = wxPoint(FromDIP(5), ((size.y - hum_img.GetBmpSize().y) / 2)); - dc.DrawBitmap(hum_img.bmp(), pot); - pot.x = pot.x + hum_img.GetBmpSize().x; + 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); - if (m_amsinfo.support_drying()) - { - pot.x += FromDIP(2);// spacing + //percentage + wxString hum_percentage = _L(std::to_string(20 * (5 - m_amsinfo.ams_humidity + 1))); + auto tsize = dc.GetMultiLineTextExtent(hum_percentage); + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetFont(Label::Body_14); + dc.SetTextForeground(StateColor::darkModeColorFor(AMS_CONTROL_BLACK_COLOUR)); + //pot = wxPoint(FromDIP(size.x * 0.3), FromDIP((size.y - tsize.y) / 2)); + pot.x = pot.x + hum_img.GetBmpSize().x + FromDIP(3); + dc.DrawText(hum_percentage, pot); - // vertical line - dc.SetPen(wxPen(wxColour(194, 194, 194))); - dc.SetBrush(wxBrush(wxColour(194, 194, 194))); - dc.DrawLine(pot.x, GetSize().y / 2 - FromDIP(10), pot.x, GetSize().y / 2 + FromDIP(10)); + pot.x += (tsize.x + FromDIP(5)); + pot.y += (tsize.y / 2 - FromDIP(4)); + tsize = dc.GetMultiLineTextExtent(_L("%")); + dc.SetFont(Label::Body_12); + dc.DrawText(_L("%"), pot); + + //vertical line + pot.x = pot.x + tsize.x + FromDIP(2); + dc.SetPen(wxPen(wxColour(194, 194, 194))); + dc.SetBrush(wxBrush(wxColour(194, 194, 194))); + //dc.DrawLine(FromDIP(GetSize().x * 0.64), FromDIP(GetSize().y / 2 - 10), FromDIP(GetSize().x * 0.64), FromDIP(GetSize().y / 2 + 10)); + dc.DrawLine(pot.x, GetSize().y / 2 - FromDIP(10), pot.x, GetSize().y / 2 + FromDIP(10)); + + //sun image + /*pot.x = FromDIP(size.x * 0.69); + pot.y = FromDIP((size.y - ams_sun_img.GetBmpHeight()) / 2);*/ + pot.x = pot.x + FromDIP(4); + pot.y = FromDIP((size.y - ams_sun_img.GetBmpHeight()) / 2); + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.DrawBitmap(ams_sun_img.bmp(), pot); - // sun image - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - pot.x += ((size.GetWidth() - pot.x) - ams_drying_img.GetBmpWidth()) / 2;// spacing - if (m_amsinfo.left_dray_time > 0) { - pot.y = (size.y - ams_drying_img.GetBmpHeight()) / 2; - dc.DrawBitmap(ams_drying_img.bmp(), pot); - } else { - pot.y = (size.y - ams_sun_img.GetBmpHeight()) / 2; - dc.DrawBitmap(ams_sun_img.bmp(), pot); - } - } } else { //to do ... @@ -2091,12 +2932,15 @@ void AMSHumidity::doRender(wxDC& dc) } void AMSHumidity::msw_rescale() { - for (auto& img : ams_humidity_imgs) { img.msw_rescale();} - for (auto& img : ams_humidity_dark_imgs) { img.msw_rescale(); } - for (auto &img : ams_humidity_no_num_imgs) { img.msw_rescale(); } - for (auto &img : ams_humidity_no_num_dark_imgs) { img.msw_rescale(); } - ams_sun_img.msw_rescale(); - ams_drying_img.msw_rescale(); + for (int i = 0; i < ams_humidity_img.size(); i++) { + if (i < ams_humidity_img.size() / 2){ + ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string(i + 1) + "_light", 16); + } + else{ + ams_humidity_img[i] = ScalableBitmap(this, "hum_level" + std::to_string((i - ams_humidity_img.size() / 2 + 1)) + "_dark", 16); + } + } + ams_sun_img = ScalableBitmap(this, "ams_drying", 16); Layout(); Refresh(); @@ -2109,15 +2953,27 @@ Description:AmsItem AmsItem::AmsItem() {} -AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model) : AmsItem() +AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model, AMSPanelPos pos) : AmsItem() { - m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid", 140); + m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 134); SetDoubleBuffered(true); m_ams_model = model; m_info = info; + m_panel_pos = pos; - wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE); + if (m_ams_model == AMSModel::GENERIC_AMS){ + wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE); + SetSize(AMS_CANS_WINDOW_SIZE); + SetMinSize(AMS_CANS_WINDOW_SIZE); + SetMaxSize(AMS_CANS_WINDOW_SIZE); + } + else{ + wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_SINGLE_CAN_SIZE); + SetSize(AMS_SINGLE_CAN_SIZE); + SetMinSize(AMS_SINGLE_CAN_SIZE); + SetMaxSize(AMS_SINGLE_CAN_SIZE); + } create(parent); @@ -2125,72 +2981,172 @@ AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model) : AmsItem() Bind(wxEVT_PAINT, &AmsItem::paintEvent, this); } +AmsItem::~AmsItem() +{ +} + void AmsItem::create(wxWindow *parent) { Freeze(); - if (m_ams_model == AMSModel::GENERIC_AMS || m_ams_model == AMSModel::N3F_AMS || m_ams_model == AMSModel::N3S_AMS) { + //if (m_ams_model == AMSModel::GENERIC_AMS) + if (m_ams_model != AMSModel::AMS_LITE) { sizer_can = new wxBoxSizer(wxHORIZONTAL); sizer_item = new wxBoxSizer(wxVERTICAL); - for (auto it = m_info.cans.begin(); it != m_info.cans.end(); it++) { + auto it = m_info.cans.begin(); + for (; it != m_info.cans.end(); it++) { AddCan(*it, m_can_count, m_info.cans.size(), sizer_can); m_can_count++; } - m_humidity = new AMSHumidity(this, wxID_ANY, m_info); - sizer_item->Add(m_humidity, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_item->Add(sizer_can, 0, wxALIGN_LEFT, 0); + it = m_info.cans.begin(); + //auto road_panel = new wxWindow(this, wxID_ANY); + //auto road_panel = new wxPanel(this, wxID_ANY); + //road_panel->SetSize(AMS_CAN_ROAD_SIZE); + //road_panel->SetMinSize(AMS_CAN_ROAD_SIZE); + 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, AMSPanelPos::RIGHT_PANEL); + sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); + } + } + m_panel_road = new AMSRoadUpPart(this, wxID_ANY, m_info, m_ams_model); + + sizer_item->Add(sizer_can, 0, wxALIGN_CENTER_HORIZONTAL, 0); + //sizer_item->Add(m_panel_road, 0, wxALIGN_CENTER_HORIZONTAL, 0); + sizer_item->Add(m_panel_road, 1, wxEXPAND); + SetSizer(sizer_item); } - else if(m_ams_model == AMSModel::AMS_LITE) { - sizer_can = new wxBoxSizer(wxVERTICAL); - sizer_can_middle = new wxBoxSizer(wxHORIZONTAL); - sizer_can_left = new wxBoxSizer(wxVERTICAL); - sizer_can_right = new wxBoxSizer(wxVERTICAL); - - sizer_can_left->Add(0,0,0,wxTOP,FromDIP(8)); - - for (auto it = m_info.cans.begin(); it != m_info.cans.end(); it++) { - if (m_can_count <= 1) { - AddCan(*it, m_can_count, m_info.cans.size(), sizer_can_left); - if (m_can_count == 0) { - sizer_can_left->Add(0,0,0,wxTOP,FromDIP(20)); - } - } - else { - AddCan(*it, m_can_count, m_info.cans.size(), sizer_can_right); - if (m_can_count == 2) { - sizer_can_right->Prepend(0, 0, 0, wxTOP, FromDIP(20)); - } - } - - m_can_count++; + else{ + sizer_can_extra = new wxGridSizer(2, 2, FromDIP(18), FromDIP(20)); + //sizer_can_extra = new wxGridSizer(2, 2, 20, 20); + sizer_item = new wxBoxSizer(wxVERTICAL); + 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 = GENERIC_AMS_SLOT_NUM; } - sizer_can_right->Prepend(0,0,0,wxTOP,FromDIP(8)); - sizer_can_middle->Add(0, 0, 0, wxLEFT, FromDIP(8)); - sizer_can_middle->Add(sizer_can_left, 0, wxALL, 0); - sizer_can_middle->Add( 0, 0, 0, wxLEFT, FromDIP(20) ); - sizer_can_middle->Add(sizer_can_right, 0, wxALL, 0); - sizer_can->Add(sizer_can_middle, 1, wxALIGN_CENTER, 0); - SetSizer(sizer_can); + sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_TOP, 0); + //sizer_item->Add(sizer_can_extra, 0, wxALIGN_CENTER); + SetSizer(sizer_item); } Layout(); Fit(); Thaw(); + //Refresh(); } void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer) { + auto amscan = new wxWindow(this, wxID_ANY); + amscan->SetSize(wxSize(FromDIP(52), FromDIP(109))); + amscan->SetMinSize(wxSize(FromDIP(52), FromDIP(109))); + + amscan->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); + //amscan->SetBackgroundColour(wxTRANSPARENT); + + wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL); + + AMSrefresh* m_panel_refresh; + if (m_ams_model != AMSModel::EXT_AMS) + { + m_panel_refresh = new AMSrefresh(amscan, m_can_count, caninfo); + m_can_refresh_list[caninfo.can_id] = m_panel_refresh; + } + else if (m_ams_model == AMSModel::EXT_AMS){ + m_ext_text = new AMSExtText(amscan, wxID_ANY); + } + + AMSLib* m_panel_lib = nullptr; + if (m_ams_model == AMSModel::EXT_AMS && m_info.ext_type == AMSModelOriginType::LITE_EXT) { + m_panel_lib = new AMSLib(amscan, m_info.ams_id, caninfo, AMSModelOriginType::LITE_EXT); + } + else{ + m_panel_lib = new AMSLib(amscan, m_info.ams_id, caninfo); + } + + try{ + m_panel_lib->Bind(wxEVT_LEFT_DOWN, [this, canindex](wxMouseEvent& ev) { + m_canlib_selection = canindex; + // m_canlib_id = caninfo.can_id; + + for (auto lib_it : m_can_lib_list) { + AMSLib* lib = lib_it.second; + if (lib->m_can_index == m_canlib_selection) { + wxCommandEvent evt(EVT_AMS_UNSELETED_VAMS); + evt.SetString(m_info.ams_id); + wxPostEvent(GetParent()->GetParent(), evt); + lib->OnSelected(); + } + else { + lib->UnSelected(); + } + } + ev.Skip(); + }); + + m_panel_lib->m_ams_model = m_ams_model; + m_panel_lib->m_ams_id = m_info.ams_id; + m_panel_lib->m_slot_id = caninfo.can_id; + m_panel_lib->m_info.can_id = caninfo.can_id; + m_panel_lib->m_can_index = canindex; + } + catch (...) + { + ; + } + + //auto m_panel_road = new AMSRoad(amscan, wxID_ANY, caninfo, canindex, maxcan, wxDefaultPosition, AMS_CAN_ROAD_SIZE); + + if (m_ams_model != AMSModel::AMS_LITE && m_ams_model != AMSModel::EXT_AMS) { + m_sizer_ams->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_sizer_ams->Add(m_panel_refresh, 0, wxALIGN_CENTER_HORIZONTAL | wxDOWN, FromDIP(4)); + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER_HORIZONTAL, 0); + } + else + { + if (m_ams_model == AMSModel::EXT_AMS){ + m_sizer_ams->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL, 0); + //m_sizer_ams->Add(m_panel_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 4); + m_sizer_ams->Add(m_ext_text, 0, wxALIGN_CENTER_HORIZONTAL | wxDOWN, FromDIP(4)); + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER_HORIZONTAL, 0); + } + } + + + amscan->SetSizer(m_sizer_ams); + amscan->Layout(); + amscan->Fit(); + + sizer->Add(amscan, 0, wxUP | wxLEFT | wxRIGHT, FromDIP(5)); + + m_can_lib_list[caninfo.can_id] = m_panel_lib; + //m_can_road_list[caninfo.can_id] = m_panel_road; +} + +void AmsItem::AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer) +{ + auto amscan = new wxWindow(this, wxID_ANY); + /*amscan->SetSize(wxSize(FromDIP(49), FromDIP(72))); + amscan->SetMinSize(wxSize(FromDIP(49), FromDIP(72))); + amscan->SetMaxSize(wxSize(FromDIP(49), FromDIP(72)));*/ + amscan->SetSize(wxSize(FromDIP(80), FromDIP(72))); + amscan->SetMinSize(wxSize(FromDIP(80), FromDIP(72))); + amscan->SetMaxSize(wxSize(FromDIP(80), FromDIP(72))); + amscan->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); - wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL); - - - auto m_panel_refresh = new AMSrefresh(amscan, m_can_count, caninfo); - m_can_refresh_list[caninfo.can_id] = m_panel_refresh; + wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxHORIZONTAL); auto m_panel_lib = new AMSLib(amscan, m_info.ams_id, caninfo); @@ -2213,54 +3169,45 @@ void AmsItem::AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* size ev.Skip(); }); + auto ams_refresh = new AMSrefresh(amscan, canindex, caninfo); + m_can_refresh_list[caninfo.can_id] = ams_refresh; m_panel_lib->m_ams_model = m_ams_model; m_panel_lib->m_ams_id = m_info.ams_id; m_panel_lib->m_slot_id = caninfo.can_id; m_panel_lib->m_info.can_id = caninfo.can_id; m_panel_lib->m_can_index = canindex; - auto m_panel_road = new AMSRoad(amscan, wxID_ANY, caninfo, canindex, maxcan, wxDefaultPosition, AMS_CAN_ROAD_SIZE); - - if (m_ams_model != AMSModel::AMS_LITE && m_ams_model != AMSModel::EXT_AMS) { - //m_sizer_ams->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(2)); - m_sizer_ams->Add(m_panel_refresh, 0, wxALIGN_CENTER_HORIZONTAL, 0); - //m_sizer_ams->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(2)); - m_sizer_ams->Add(m_panel_lib, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(3)); - m_sizer_ams->Add(m_panel_road, 0, wxALL, 0); + //auto m_panel_road = new AMSRoad(amscan, wxID_ANY, caninfo, canindex, maxcan, wxDefaultPosition, AMS_CAN_ROAD_SIZE); + if (caninfo.can_id == "0" || caninfo.can_id == "1") { + m_sizer_ams->Add(ams_refresh, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); } - else if (m_ams_model == AMSModel::AMS_LITE) - { - m_sizer_ams = new wxBoxSizer(wxHORIZONTAL); - m_panel_road->Hide(); - - if (canindex <= 1) { - m_sizer_ams->Add(m_panel_refresh, 0, wxALIGN_CENTER, 0); - m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER, 0); - } - else { - m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER, 0); - m_sizer_ams->Add(m_panel_refresh, 0, wxALIGN_CENTER, 0); - } + switch (canindex){ + case 0: + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_RIGHT | wxALIGN_BOTTOM, 0); + break; + case 1: + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_RIGHT | wxALIGN_TOP, 0); + break; + case 2: + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_LEFT | wxALIGN_TOP, 0); + break; + case 3: + m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_LEFT | wxALIGN_BOTTOM, 0); + break; + default: + break; + } + if (caninfo.can_id == "2" || caninfo.can_id == "3") { + m_sizer_ams->Add(ams_refresh, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, 0); } amscan->SetSizer(m_sizer_ams); amscan->Layout(); amscan->Fit(); - if (m_ams_model != AMSModel::AMS_LITE && m_ams_model != AMSModel::EXT_AMS) { - sizer->Add(amscan, 0, wxALL, 0); - } - else if (m_ams_model == AMSModel::AMS_LITE) - { - if (canindex > 1) { - sizer->Prepend(amscan, 0, wxALL, 0); - } - else { - sizer->Add(amscan, 0, wxALL, 0); - } - } + sizer->Add(amscan, 0, wxUP | wxLEFT | wxRIGHT, FromDIP(5)); m_can_lib_list[caninfo.can_id] = m_panel_lib; - m_can_road_list[caninfo.can_id] = m_panel_road; + //m_can_road_list[caninfo.can_id] = m_panel_road; } void AmsItem::Update(AMSinfo info) @@ -2268,10 +3215,18 @@ void AmsItem::Update(AMSinfo info) m_info = info; m_can_count = info.cans.size(); - if (m_humidity) - { - m_humidity->Update(m_info); - } + + // 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)); @@ -2296,21 +3251,14 @@ void AmsItem::Update(AMSinfo info) } } } - - if (m_ams_model != AMSModel::AMS_LITE) { - for (auto i = 0; i < m_can_road_list.size(); i++) { - AMSRoad* road = m_can_road_list[std::to_string(i)]; - if (road != nullptr) { - if (i < m_can_count) { - road->Update(m_info, info.cans[i], i, m_can_count); - road->Show(); - } else { - road->Hide(); - } - } - } + if (m_panel_road != nullptr){ + m_panel_road->Update(m_info); } + if (true || m_ams_model == AMSModel::GENERIC_AMS) { + /*m_panel_road->Update(m_info, info.cans[0]); + m_panel_road->Show();*/ + } Layout(); } @@ -2362,89 +3310,113 @@ wxColour AmsItem::GetTagColr(wxString canid) void AmsItem::SetAmsStepExtra(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step) { - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1 || step == AMSPassRoadSTEP::AMS_ROAD_STEP_1) { SetAmsStep(canid.ToStdString()); - }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { + }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2 || step == AMSPassRoadSTEP::AMS_ROAD_STEP_2) { SetAmsStep(canid.ToStdString()); - }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { + }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3 || step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { SetAmsStep(canid.ToStdString()); }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { SetAmsStep(""); } } -void AmsItem::SetAmsStep(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step) +void AmsItem::SetAmsStep(std::string amsid, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step) { - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - for (auto road_it : m_can_road_list) { - AMSRoad* road = road_it.second; - auto pr = std::vector{}; - pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_NONE); - road->OnPassRoad(pr); - } - + if (m_panel_road){ + m_panel_road->UpdatePassRoad(amsid, canid, type, step); + } + if (m_info.ams_id != amsid){ return; } - - auto tag_can_index = -1; - for (auto road_it : m_can_road_list) { - AMSRoad* road = road_it.second; - if (canid == road->m_info.can_id) { tag_can_index = road->m_canindex; } + SetAmsStepExtra(canid, type, step); + /*if (m_info.ams_type == AMSModel::EXTRA_AMS){ + SetAmsStepExtra(canid, type, step); + }*/ + + /*if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE){ + m_road_canid = ""; } - if (tag_can_index == -1) return; + else{ + m_road_canid = canid; + }*/ - // get colour - auto tag_colour = *wxWHITE; - for (auto lib_it : m_can_lib_list) { - AMSLib* lib = lib_it.second; - if (canid == lib->m_info.can_id) tag_colour = lib->GetLibColour(); - } - - // unload - if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) { - for (auto road_it : m_can_road_list) { - AMSRoad* road = road_it.second; - - auto index = road->m_canindex; - auto pr = std::vector{}; - - pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_2) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { - if (index == tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT); } - if (index < tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT); } - if (index == 0 && tag_can_index == index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_TOP); } - if (index == 0 && tag_can_index > index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT); } - } - - road->SetPassRoadColour(tag_colour); - road->OnPassRoad(pr); - } - } - - // load - if (type == AMSPassRoadType::AMS_ROAD_TYPE_LOAD) { - for (auto road_it : m_can_road_list) { - AMSRoad* road = road_it.second; - - auto index = road->m_canindex; - auto pr = std::vector{}; - - if (index == tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT); } - if (index < tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT); } - if (index == 0 && tag_can_index == index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_TOP); } - if (index == 0 && tag_can_index > index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT); } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_2) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); } - - road->SetPassRoadColour(tag_colour); - road->OnPassRoad(pr); - } - } } +//void AmsItem::SetAmsStep(wxString amsid, wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step) +//{ +// +// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { +// for (auto road_it : m_can_road_list) { +// AMSRoad* road = road_it.second; +// auto pr = std::vector{}; +// pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_NONE); +// road->OnPassRoad(pr); +// } +// +// return; +// } +// +// +// auto tag_can_index = -1; +// for (auto road_it : m_can_road_list) { +// AMSRoad* road = road_it.second; +// if (canid == road->m_info.can_id) { tag_can_index = road->m_canindex; } +// } +// if (tag_can_index == -1) return; +// +// // get colour +// auto tag_colour = *wxWHITE; +// for (auto lib_it : m_can_lib_list) { +// AMSLib* lib = lib_it.second; +// if (canid == lib->m_info.can_id) tag_colour = lib->GetLibColour(); +// } +// +// // unload +// if (type == AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD) { +// for (auto road_it : m_can_road_list) { +// AMSRoad* road = road_it.second; +// +// auto index = road->m_canindex; +// auto pr = std::vector{}; +// +// pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); +// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_2) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); } +// +// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { +// if (index == tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT); } +// if (index < tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT); } +// if (index == 0 && tag_can_index == index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_TOP); } +// if (index == 0 && tag_can_index > index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT); } +// } +// +// road->SetPassRoadColour(tag_colour); +// road->OnPassRoad(pr); +// } +// } +// +// // load +// if (type == AMSPassRoadType::AMS_ROAD_TYPE_LOAD) { +// for (auto road_it : m_can_road_list) { +// AMSRoad* road = road_it.second; +// +// auto index = road->m_canindex; +// auto pr = std::vector{}; +// +// if (index == tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT); } +// if (index < tag_can_index && index > 0) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT); } +// if (index == 0 && tag_can_index == index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_TOP); } +// if (index == 0 && tag_can_index > index) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT); } +// +// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_2) { pr.push_back(AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM); } +// +// road->SetPassRoadColour(tag_colour); +// road->OnPassRoad(pr); +// } +// } +//} + void AmsItem::SetAmsStep(std::string can_id) { if (m_road_canid != can_id) { @@ -2465,7 +3437,7 @@ void AmsItem::PlayRridLoading(wxString canid) { for (auto refresh_it : m_can_refresh_list) { AMSrefresh* refresh = refresh_it.second; - if (refresh->GetCanId() == canid) { refresh->PlayLoading(); } + if (refresh->m_info.can_id == canid) { refresh->PlayLoading(); } } } @@ -2510,22 +3482,25 @@ void AmsItem::doRender(wxDC& dc) //road for extra if (m_ams_model == AMSModel::AMS_LITE) { - dc.DrawBitmap(m_bitmap_extra_framework.bmp(), (size.x - m_bitmap_extra_framework.GetBmpSize().x) / 2, (size.y - m_bitmap_extra_framework.GetBmpSize().y) / 2); + dc.DrawBitmap(m_bitmap_extra_framework.bmp(), (size.x - m_bitmap_extra_framework.GetBmpSize().x) / 2, (size.y - m_bitmap_extra_framework.GetBmpSize().y) / 2 - FromDIP(4)); // A1 - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); RenderLiteRoad(dc, size); } } void AmsItem::RenderLiteRoad(wxDC& dc, wxSize size) { - auto end_top = size.x / 2 - FromDIP(99); - auto passroad_width = 6; - auto a1_top = size.y / 2 - FromDIP(4); - auto a2_top = size.y / 2 + FromDIP(8); - auto a3_top = size.y / 2 + FromDIP(4); - auto a4_top = size.y / 2; + auto end_top = size.x - FromDIP(3); + if (m_panel_pos == AMSPanelPos::RIGHT_PANEL){ + end_top = 0; + } + auto passroad_width = 4; + auto a1_top = m_panel_pos == AMSPanelPos::RIGHT_PANEL ? size.y / 2 - FromDIP(4) : size.y / 2; + auto a2_top = m_panel_pos == AMSPanelPos::RIGHT_PANEL ? size.y / 2 : size.y / 2 - FromDIP(4); + auto a3_top = m_panel_pos == AMSPanelPos::RIGHT_PANEL ? size.y / 2 + FromDIP(8) : size.y / 2 + FromDIP(4); + auto a4_top = m_panel_pos == AMSPanelPos::RIGHT_PANEL ? size.y / 2 + FromDIP(4) : size.y / 2 + FromDIP(8); try { @@ -2536,14 +3511,14 @@ void AmsItem::RenderLiteRoad(wxDC& dc, wxSize size) { dc.DrawLine(a1_left, a1_top, end_top, a1_top); // A2 - auto a2_left = m_can_lib_list["1"]->GetScreenPosition().x + m_can_lib_list["1"]->GetSize().x / 2; + auto a2_left = m_can_lib_list["3"]->GetScreenPosition().x + m_can_lib_list["3"]->GetSize().x / 2; auto local_pos2 = GetScreenPosition().x + GetSize().x / 2; a2_left = size.x / 2 + (a2_left - local_pos2); - dc.DrawLine(a2_left, FromDIP(160), a2_left, a2_top); + dc.DrawLine(a2_left, FromDIP(30), a2_left, a2_top); dc.DrawLine(a2_left, a2_top, end_top, a2_top); // A3 - auto a3_left = m_can_lib_list["2"]->GetScreenPosition().x + m_can_lib_list["2"]->GetSize().x / 2; + auto a3_left = m_can_lib_list["1"]->GetScreenPosition().x + m_can_lib_list["1"]->GetSize().x / 2; auto local_pos3 = GetScreenPosition().x + GetSize().x / 2; a3_left = size.x / 2 + (a3_left - local_pos3); dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); @@ -2551,16 +3526,17 @@ void AmsItem::RenderLiteRoad(wxDC& dc, wxSize size) { //// A4 - auto a4_left = m_can_lib_list["3"]->GetScreenPosition().x + m_can_lib_list["3"]->GetSize().x / 2; + auto a4_left = m_can_lib_list["2"]->GetScreenPosition().x + m_can_lib_list["2"]->GetSize().x / 2; auto local_pos4 = GetScreenPosition().x + GetSize().x / 2; a4_left = size.x / 2 + (a4_left - local_pos4); - dc.DrawLine(a4_left, FromDIP(30), a4_left, a4_top); + dc.DrawLine(a4_left, FromDIP(160), a4_left, a4_top); dc.DrawLine(a4_left, a4_top, end_top, a4_top); //to Extruder - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawLine(end_top, a1_top, end_top, size.y); + auto top = std::min(a1_top, a2_top); + dc.DrawLine(end_top, top, end_top, size.y); if (!m_road_canid.empty()) { @@ -2569,27 +3545,27 @@ void AmsItem::RenderLiteRoad(wxDC& dc, wxSize size) { return; } m_road_colour = m_info.cans[can_idx].material_colour; - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); 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, a1_top, end_top, size.y); } - if (m_road_canid == "1") { - dc.DrawLine(a2_left, FromDIP(160), a2_left, a2_top); + 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, a2_top, end_top, size.y); } - if (m_road_canid == "2") { + 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, a3_top, end_top, size.y); } - if (m_road_canid == "3") { - dc.DrawLine(a4_left, FromDIP(30), a4_left, a4_top); + 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, a4_top, end_top, size.y); } @@ -2602,7 +3578,7 @@ void AmsItem::StopRridLoading(wxString canid) { for (auto refresh_it : m_can_refresh_list) { AMSrefresh* refresh = refresh_it.second; - if (refresh->GetCanId() == canid) { refresh->StopLoading(); } + if (refresh->m_info.can_id == canid) { refresh->StopLoading(); } } } @@ -2618,6 +3594,13 @@ void AmsItem::msw_rescale() if (lib) lib->msw_rescale(); } if (m_humidity != nullptr) m_humidity->msw_rescale(); + if (m_ext_text != nullptr) m_ext_text->msw_rescale(); + if (m_ext_image != nullptr) m_ext_image->msw_rescale(); //ext image upon the lib + + m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid_new", 134); + + Layout(); + Refresh(); } void AmsItem::show_sn_value(bool show) diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 0629d93bf7..86c49b0335 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -14,7 +14,7 @@ #include -#define AMS_CONTROL_BRAND_COLOUR wxColour(0, 150, 136) +#define AMS_CONTROL_BRAND_COLOUR wxColour(0, 174, 66) #define AMS_CONTROL_GRAY700 wxColour(107, 107, 107) #define AMS_CONTROL_GRAY800 wxColour(50, 58, 61) #define AMS_CONTROL_GRAY500 wxColour(172, 172, 172) @@ -27,6 +27,7 @@ #define AMS_EXTRUDER_DEF_COLOUR wxColour(234, 234, 234) #define AMS_CONTROL_MAX_COUNT 4 #define AMS_CONTRO_CALIBRATION_BUTTON_SIZE wxSize(FromDIP(150), FromDIP(28)) +#define AMS_CONTROL_DEF_HUMIDITY_BK_COLOUR wxColour(238, 238, 238) namespace Slic3r { namespace GUI { @@ -39,6 +40,11 @@ enum AMSModel { N3S_AMS = 4 //n3s single_ams }; +enum AMSModelOriginType { + GENERIC_EXT, + LITE_EXT +}; + enum ActionButton { ACTION_BTN_CALI = 0, ACTION_BTN_LOAD = 1, @@ -56,6 +62,20 @@ enum class AMSRoadMode : int { AMS_ROAD_MODE_VIRTUAL_TRAY }; +enum class AMSPanelPos : int { + SINGLE_PANEL, + LEFT_PANEL, + RIGHT_PANEL, +}; + +enum class AMSRoadShowMode : int { + AMS_ROAD_MODE_FOUR, + AMS_ROAD_MODE_DOUBLE, + AMS_ROAD_MODE_SINGLE, + AMS_ROAD_MODE_AMS_LITE, + AMS_ROAD_MODE_NONE +}; + enum class AMSPassRoadMode : int { AMS_ROAD_MODE_NONE, AMS_ROAD_MODE_LEFT, @@ -76,10 +96,10 @@ enum class AMSAction : int { }; enum class AMSPassRoadSTEP : int { - AMS_ROAD_STEP_NONE, - AMS_ROAD_STEP_1, // lib -> extrusion - AMS_ROAD_STEP_2, // extrusion->buffer - AMS_ROAD_STEP_3, // extrusion + AMS_ROAD_STEP_NONE = 0, + AMS_ROAD_STEP_1 = 1, // lib -> extrusion + AMS_ROAD_STEP_2 = 2, // extrusion->buffer + AMS_ROAD_STEP_3 = 4, // extrusion AMS_ROAD_STEP_COMBO_LOAD_STEP1, AMS_ROAD_STEP_COMBO_LOAD_STEP2, @@ -120,24 +140,30 @@ enum FilamentStepType { STEP_TYPE_VT_LOAD = 2, }; -#define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(14), FromDIP(14)) -#define AMS_ITEM_SIZE wxSize(FromDIP(82), FromDIP(27)) +#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_PREV_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32)) +#define AMS_PREV_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32)) #define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27)) -#define AMS_CAN_LIB_SIZE wxSize(FromDIP(58), FromDIP(80)) -#define AMS_CAN_ROAD_SIZE wxSize(FromDIP(66), FromDIP(70)) -#define AMS_CAN_ITEM_HEIGHT_SIZE FromDIP(27) -//#define AMS_CANS_SIZE wxSize(FromDIP(284), FromDIP(196)) +#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(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(30), FromDIP(30)) -#define AMS_EXTRUDER_SIZE wxSize(FromDIP(86), FromDIP(72)) -#define AMS_EXTRUDER_BITMAP_SIZE wxSize(FromDIP(36), FromDIP(55)) - +#define AMS_REFRESH_SIZE wxSize(FromDIP(28), FromDIP(28)) +#define AMS_EXTRUDER_SIZE wxSize(FromDIP(29), 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_HUMIDITY_NO_PERCENT_SIZE wxSize(FromDIP(60), FromDIP(26)) -#define AMS_HUMIDITY_DRY_WIDTH FromDIP(35) +#define AMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(150)) #define GENERIC_AMS_SLOT_NUM 4 +#define MAX_AMS_NUM_IN_PANEL 2 struct Caninfo { @@ -152,25 +178,6 @@ struct Caninfo float k = 0.0f; float n = 0.0f; std::vector material_cols; - -public: - bool operator==(const Caninfo& other) const - { - if (can_id == other.can_id && - material_name == other.material_name && - material_colour == other.material_colour && - material_state == other.material_state && - ctype == other.ctype && - material_remain == other.material_remain && - k == other.k && - n == other.n && - material_cols == other.material_cols) - { - return true; - } - - return false; - }; }; struct AMSinfo @@ -180,51 +187,34 @@ public: std::vector cans; int nozzle_id = 0; std::string current_can_id; - AMSPassRoadSTEP current_step; + AMSPassRoadSTEP current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_NONE; AMSAction current_action; int curreent_filamentstep; int ams_humidity = 0; - int humidity_raw = -1; - int left_dray_time = 0; - float current_temperature = INVALID_AMS_TEMPERATURE; AMSModel ams_type = AMSModel::GENERIC_AMS; - -public: - bool operator== (const AMSinfo& other) const - { - if (ams_id == other.ams_id && - cans == other.cans && - nozzle_id == other.nozzle_id && - current_can_id == other.current_can_id && - current_step == other.current_step && - current_action == other.current_action && - curreent_filamentstep == other.curreent_filamentstep && - ams_humidity == other.ams_humidity && - left_dray_time == other.left_dray_time && - current_temperature == other.current_temperature && - ams_type == other.ams_type) - { - return true; - } - - return false; - }; - - bool operator!=(const AMSinfo &other) const - { - if (operator==(other)) - { - return false; - } - - return true; - }; + AMSModelOriginType ext_type = AMSModelOriginType::GENERIC_EXT; bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false); void parse_ext_info(MachineObject* obj, AmsTray tray); - bool support_drying() const { return (ams_type == AMSModel::N3S_AMS) || (ams_type == AMSModel::N3F_AMS); }; }; +/************************************************* +Description:AMSExtText +**************************************************/ + +class AMSExtText : public wxWindow +{ +public: + void msw_rescale(); + void paintEvent(wxPaintEvent& evt); + + void render(wxDC& dc); + void doRender(wxDC& dc); + AMSExtText(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + ~AMSExtText(); +}; + + /************************************************* Description:AMSrefresh **************************************************/ @@ -236,26 +226,20 @@ public: AMSrefresh(wxWindow *parent, wxString number, Caninfo info, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); ~AMSrefresh(); - -public: - void Update(std::string ams_id, Caninfo info); - - std::string GetCanId() const { return m_info.can_id; }; - void PlayLoading(); void StopLoading(); - + void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); + void on_timer(wxTimerEvent &event); + void OnEnterWindow(wxMouseEvent &evt); + void OnLeaveWindow(wxMouseEvent &evt); + void OnClick(wxMouseEvent &evt); + void post_event(wxCommandEvent &&event); + void paintEvent(wxPaintEvent &evt); + void Update(std::string ams_id, Caninfo info); void msw_rescale(); + void set_disable_mode(bool disable) { m_disable_mode = disable; } + Caninfo m_info; -protected: - void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); - - void on_timer(wxTimerEvent &event); - void OnEnterWindow(wxMouseEvent &evt); - void OnLeaveWindow(wxMouseEvent &evt); - void OnClick(wxMouseEvent &evt); - void post_event(wxCommandEvent &&event); - void paintEvent(wxPaintEvent &evt); protected: wxTimer *m_playing_timer= {nullptr}; @@ -265,7 +249,6 @@ protected: std::string m_ams_id; std::string m_can_id; - Caninfo m_info; ScalableBitmap m_bitmap_normal; ScalableBitmap m_bitmap_selected; @@ -292,47 +275,78 @@ Description:AMSextruder class AMSextruderImage: public wxWindow { public: - void TurnOn(wxColour col); + void OnAmsLoading(bool load, wxColour col); void TurnOff(); + void setShowState(bool show_state) { m_show_state = show_state; }; void msw_rescale(); void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); - bool m_turn_on = {false}; + bool m_show_state = {false}; wxColour m_colour; ScalableBitmap m_ams_extruder; + string m_file_name; + bool m_ams_loading{ false }; void doRender(wxDC &dc); - AMSextruderImage(wxWindow *parent, wxWindowID id, 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; + ExtderData* m_extder_data = nullptr; + 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; + ScalableBitmap m_ams_ext_single_nozzle; + void doRender(wxDC& dc); + AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, ExtderData *data = nullptr, + wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition); + ~AMSExtImage(); +}; + class AMSextruder : public wxWindow { +private: + int m_nozzle_num{ 1 }; public: void TurnOn(wxColour col); void TurnOff(); void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); - void OnAmsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); + void OnAmsLoading(bool load, int nozzle_id = 0, wxColour col = AMS_CONTROL_GRAY500); void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); void doRender(wxDC& dc); 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 updateNozzleNum(int nozzle_num); bool m_none_ams_mode{true}; bool m_has_vams{false}; bool m_vams_loading{false}; bool m_ams_loading{false}; wxColour m_current_colur; + wxColour m_current_colur_deputy; wxBoxSizer * m_bitmap_sizer{nullptr}; wxPanel * m_bitmap_panel{nullptr}; - AMSextruderImage *m_amsSextruder{nullptr}; - ScalableBitmap monitor_ams_extruder; - AMSextruder(wxWindow *parent, wxWindowID id, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); + //AMSextruderImage *m_amsSextruder{nullptr}; + 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(); }; @@ -363,7 +377,7 @@ Description:AMSLib class AMSLib : public wxWindow { public: - AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info); + AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info, AMSModelOriginType ext_type = AMSModelOriginType::GENERIC_EXT); ~AMSLib(); void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); public: @@ -375,7 +389,9 @@ public: std::string m_slot_id; int m_can_index = 0; + bool transparent_changed = { false }; AMSModel m_ams_model; + AMSModelOriginType m_ext_type = { AMSModelOriginType::GENERIC_EXT }; void Update(Caninfo info, std::string ams_idx, bool refresh = true); void UnableSelected() { m_unable_selected = true; }; @@ -399,15 +415,19 @@ protected: ScalableBitmap m_bitmap_readonly; ScalableBitmap m_bitmap_readonly_light; ScalableBitmap m_bitmap_transparent; + ScalableBitmap m_bitmap_transparent_def; 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}; @@ -415,7 +435,7 @@ protected: bool m_hover = {false}; bool m_show_kn = {false}; bool m_support_cali = {false}; - bool transparent_changed = {false}; + double m_radius = {4}; wxColour m_border_color; @@ -459,6 +479,11 @@ public: wxColour m_road_color; void Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan); + std::vector ams_humidity_img; + + + int m_humidity = { 0 }; + bool m_show_humidity = { false }; bool m_vams_loading{false}; AMSModel m_ams_model; @@ -470,12 +495,110 @@ public: void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); + void doRender(wxDC &dc); +}; + + +/************************************************* +Description:AMSRoadUpPart +**************************************************/ +class AMSRoadUpPart : public wxWindow +{ +public: + AMSRoadUpPart(); + AMSRoadUpPart(wxWindow* parent, wxWindowID id, AMSinfo info, AMSModel mode, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + +public: + AMSinfo m_amsinfo; + //Caninfo m_info; + int m_load_slot_index = { 0 }; + int m_load_ams_index = { 0 }; + //AMSRoadMode m_rode_mode = { AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT }; + std::vector m_pass_rode_mode = { AMSPassRoadMode::AMS_ROAD_MODE_NONE }; + AMSRoadShowMode m_road_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; + AMSPassRoadSTEP m_load_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; + + bool m_selected = { false }; + int m_passroad_width = { 6 }; + double m_radius = { 4 }; + wxColour m_road_def_color; + wxColour m_road_color; + void Update(AMSinfo amsinfo); + + std::vector ams_humidity_img; + + + int m_humidity = { 0 }; + bool m_show_humidity = { false }; + bool m_vams_loading{ false }; + AMSModel m_ams_model; + + void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); + void SetPassRoadColour(wxColour col); + void SetMode(AMSRoadShowMode mode); + void OnPassRoad(std::vector prord_list); + void UpdatePassRoad(std::string ams_index, std::string slot_index, AMSPassRoadType type, AMSPassRoadSTEP step); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); void doRender(wxDC& dc); + + void msw_rescale(); +}; + + +/************************************************* +Description:AMSRoadDownPart +**************************************************/ +class AMSRoadDownPart : public wxWindow +{ +public: + AMSRoadDownPart(); + AMSRoadDownPart(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + +public: + int m_nozzle_num = { 1 }; + AMSRoadShowMode m_single_ext_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; + AMSRoadShowMode m_left_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; + AMSRoadShowMode m_right_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; + bool m_selected = { false }; + + int m_left_road_length = { -1 }; + int m_right_road_length = { -1 }; + int m_passroad_width = { 6 }; + double m_radius = { 4 }; + AMSPassRoadType m_pass_road_type = { AMSPassRoadType::AMS_ROAD_TYPE_NONE }; + AMSPassRoadSTEP m_pass_road_left_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; + AMSPassRoadSTEP m_pass_road_right_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; + + std::map m_road_color; + + //void Update(AMSRoadDownPartMode nozzle, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len); + void UpdateLeft(int nozzle_num, AMSRoadShowMode mode); + void UpdateRight(int nozzle_num, AMSRoadShowMode mode); + + bool m_vams_loading{ false }; + + AMSModel m_ams_model; + + 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(AMSPanelPos pos, int len, AMSPassRoadSTEP step); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + + void msw_rescale(); }; /************************************************* Description:AMSPreview **************************************************/ + class AMSPreview : public wxWindow { public: @@ -493,22 +616,27 @@ public: void OnSelected(); void UnSelected(); virtual bool Enable(bool enable = true); + void msw_rescale(); std::string get_ams_id() const { return m_amsinfo.ams_id; }; + int get_nozzle_id() const { return m_amsinfo.nozzle_id; }; protected: AMSinfo m_amsinfo; wxSize m_cube_size; - wxColour m_background_colour = {AMS_CONTROL_DEF_LIB_BK_COLOUR}; - int m_padding = {7}; - int m_space = {5}; + wxColour m_background_colour = { AMS_CONTROL_DEF_LIB_BK_COLOUR }; + float m_padding; + float m_space; bool m_hover = {false}; bool m_selected = {false}; AMSModel m_ams_item_type = AMSModel::GENERIC_AMS; - ScalableBitmap* m_ts_bitmap_cube; + ScalableBitmap m_ts_bitmap_cube; + ScalableBitmap m_four_slot_bitmap; + ScalableBitmap m_single_slot_bitmap; + ScalableBitmap m_ext_bitmap; void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); @@ -529,28 +657,24 @@ public: public: AMSinfo m_amsinfo; + int m_canindex = { 0 }; + bool m_selected = { false }; + double m_radius = { 12 }; void Update(AMSinfo amsinfo); - std::vector ams_humidity_imgs; - std::vector ams_humidity_dark_imgs; - - std::vector ams_humidity_no_num_imgs; - std::vector ams_humidity_no_num_dark_imgs; - - ScalableBitmap ams_sun_img; - ScalableBitmap ams_drying_img; + std::vector ams_humidity_img; + ScalableBitmap ams_sun_img; int m_humidity = { 0 }; bool m_show_humidity = { false }; + bool m_vams_loading{ false }; + AMSModel m_ams_model; void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); void doRender(wxDC& dc); void msw_rescale(); - -private: - void update_size(); }; @@ -561,11 +685,13 @@ class AmsItem : public wxWindow { public: AmsItem(); - AmsItem(wxWindow *parent, AMSinfo info, AMSModel model); + AmsItem(wxWindow *parent, AMSinfo info, AMSModel model, AMSPanelPos pos); + ~AmsItem(); void Update(AMSinfo info); void create(wxWindow *parent); void AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer); + void AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer); void SetDefSelectCan(); void SelectCan(std::string canid); void PlayRridLoading(wxString canid); @@ -573,7 +699,7 @@ public: void msw_rescale(); void show_sn_value(bool show); void SetAmsStepExtra(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step); - void SetAmsStep(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step); + void SetAmsStep(std::string amsid, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); void SetAmsStep(std::string can_id); void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); @@ -586,35 +712,49 @@ public: AMSinfo get_ams_info() const { return m_info; }; std::string get_ams_id() const { return m_info.ams_id; }; + AMSModel get_ams_model() const { return m_info.ams_type; }; + AMSModelOriginType get_ext_type() const { return m_info.ext_type; }; + AMSExtImage *get_ext_image() const { return m_ext_image; }; + + size_t get_can_count() const { return m_info.cans.size(); }; std::map get_can_lib_list() const { return m_can_lib_list; }; int get_selection() const { return m_selection; }; void set_selection(int selection) { m_selection = selection; }; + AMSPanelPos get_panel_pos() const { return m_panel_pos; }; + int get_nozzle_id() const { return m_info.nozzle_id; }; + private: ScalableBitmap m_bitmap_extra_framework; int m_canlib_selection = { -1 }; int m_selection = { 0 }; int m_can_count = { 0 }; + AMSModel m_ams_model; + AMSPanelPos m_panel_pos; std::string m_canlib_id; std::string m_road_canid; wxColour m_road_colour; - std::map m_can_lib_list; - std::map m_can_road_list; - std::map m_can_refresh_list; - AMSHumidity* m_humidity = { nullptr }; + std::map m_can_lib_list; + //std::map m_can_road_list; + AMSRoadUpPart* m_panel_road = { nullptr }; + std::map m_can_refresh_list; + AMSHumidity* m_humidity = { nullptr }; AMSinfo m_info; wxBoxSizer * sizer_can = {nullptr}; + wxGridSizer* sizer_can_extra = { nullptr }; + wxBoxSizer * sizer_humidity = { nullptr }; wxBoxSizer * sizer_item = { nullptr }; wxBoxSizer * sizer_can_middle = {nullptr}; wxBoxSizer * sizer_can_left = {nullptr}; wxBoxSizer * sizer_can_right = {nullptr}; - AMSPassRoadSTEP m_step = {AMSPassRoadSTEP ::AMS_ROAD_STEP_NONE}; + AMSExtImage* m_ext_image = { nullptr }; //the ext image upon the ext ams + AMSExtText* m_ext_text = { nullptr }; //the ext text upon the ext ams }; wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent); @@ -625,14 +765,16 @@ wxDECLARE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent); wxDECLARE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent); -wxDECLARE_EVENT(EVT_VAMS_ON_FILAMENT_EDIT, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_CLIBRATION_AGAIN, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_CLIBRATION_CANCEL, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_GUIDE_WIKI, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_RETRY, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_SHOW_HUMIDITY_TIPS, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_UNSELETED_VAMS, wxCommandEvent); +wxDECLARE_EVENT(EVT_AMS_UNSELETED_AMS, wxCommandEvent); wxDECLARE_EVENT(EVT_CLEAR_SPEED_CONTROL, wxCommandEvent); +wxDECLARE_EVENT(EVT_VAMS_ON_FILAMENT_EDIT, wxCommandEvent); +wxDECLARE_EVENT(EVT_AMS_SWITCH, SimpleEvent); }} // namespace Slic3r::GUI