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