diff --git a/resources/images/ams_drying.svg b/resources/images/ams_drying.svg
new file mode 100644
index 000000000..e6f9fb9f6
--- /dev/null
+++ b/resources/images/ams_drying.svg
@@ -0,0 +1,10 @@
+
diff --git a/resources/images/ams_ext_image.svg b/resources/images/ams_ext_image.svg
new file mode 100644
index 000000000..299f4cb94
--- /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 000000000..f05222c7f
--- /dev/null
+++ b/resources/images/ext_ams_item.svg
@@ -0,0 +1,3 @@
+
diff --git a/resources/images/ext_image.svg b/resources/images/ext_image.svg
new file mode 100644
index 000000000..e506134f1
--- /dev/null
+++ b/resources/images/ext_image.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 000000000..2973eaecf
--- /dev/null
+++ b/resources/images/four_slot_ams_item.svg
@@ -0,0 +1,4 @@
+
diff --git a/resources/images/left_nozzle.svg b/resources/images/left_nozzle.svg
new file mode 100644
index 000000000..e59b05124
--- /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 000000000..5fb901f9e
--- /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 000000000..bca4c92c8
--- /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 000000000..d194b85a2
--- /dev/null
+++ b/resources/images/single_slot_ams_item.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 0bcca3b71..68b54b17b 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -58,6 +58,8 @@ set(SLIC3R_GUI_SOURCES
GUI/Widgets/TempInput.hpp
GUI/Widgets/AMSControl.cpp
GUI/Widgets/AMSControl.hpp
+ GUI/Widgets/AMSItem.cpp
+ GUI/Widgets/AMSItem.hpp
GUI/Widgets/FanControl.cpp
GUI/Widgets/FanControl.hpp
GUI/Widgets/Scrollbar.cpp
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp
index 6b9774d8c..b41e7aab5 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.cpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp
@@ -584,9 +584,10 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event)
}
else {
//todo
+ tar_tray = 0;
}
- obj->command_ams_filament_settings(255, tar_tray, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int);
+ obj->command_ams_filament_settings(ams_id, tar_tray, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int);
}
else {
obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int);
diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
index e68bf9ee0..1fa5ee7d1 100644
--- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
+++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
@@ -626,12 +626,12 @@ void CalibrationPresetPage::create_filament_list_panel(wxWindow* parent)
auto ams_items_sizer = new wxBoxSizer(wxHORIZONTAL);
for (int i = 0; i < 4; i++) {
AMSinfo temp_info = AMSinfo{ std::to_string(i), std::vector{} };
- auto amsitem = new AMSItem(m_multi_ams_panel, wxID_ANY, temp_info);
+ auto amsitem = new AMSPreview(m_multi_ams_panel, wxID_ANY, temp_info);
amsitem->Bind(wxEVT_LEFT_DOWN, [this, amsitem](wxMouseEvent& e) {
on_switch_ams(amsitem->m_amsinfo.ams_id);
e.Skip();
});
- m_ams_item_list.push_back(amsitem);
+ m_ams_preview_list.push_back(amsitem);
ams_items_sizer->Add(amsitem, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(6));
}
multi_ams_sizer->Add(ams_items_sizer, 0);
@@ -914,8 +914,8 @@ void CalibrationPresetPage::on_select_tray(wxCommandEvent& event)
void CalibrationPresetPage::on_switch_ams(std::string ams_id)
{
- for (auto i = 0; i < m_ams_item_list.size(); i++) {
- AMSItem* item = m_ams_item_list[i];
+ for (auto i = 0; i < m_ams_preview_list.size(); i++) {
+ AMSPreview* item = m_ams_preview_list[i];
if (item->m_amsinfo.ams_id == ams_id) {
item->OnSelected();
}
@@ -1711,8 +1711,8 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj)
}
}
- for (auto i = 0; i < m_ams_item_list.size(); i++) {
- AMSItem* item = m_ams_item_list[i];
+ for (auto i = 0; i < m_ams_preview_list.size(); i++) {
+ AMSPreview* item = m_ams_preview_list[i];
if (ams_info.size() > 1) {
if (i < ams_info.size()) {
item->Update(ams_info[i]);
diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp
index 15b46f236..bfa742fb0 100644
--- a/src/slic3r/GUI/CalibrationWizardPresetPage.hpp
+++ b/src/slic3r/GUI/CalibrationWizardPresetPage.hpp
@@ -293,7 +293,7 @@ protected:
FilamentComboBox* m_virtual_tray_comboBox;
- std::vector m_ams_item_list;
+ std::vector m_ams_preview_list;
// for update filament combobox, key : tray_id
std::map filament_ams_list;
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index 5d6f228ce..1675b0838 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -851,6 +851,9 @@ StatusBasePanel::StatusBasePanel(wxWindow *parent, wxWindowID id, const wxPoint
: wxScrolledWindow(parent, id, pos, size, wxHSCROLL | wxVSCROLL)
{
this->SetScrollRate(5, 5);
+ Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
+ if (!dev) return;
+ obj = dev->get_selected_machine();
init_bitmaps();
@@ -1155,7 +1158,7 @@ wxBoxSizer *StatusBasePanel::create_temp_axis_group(wxWindow *parent)
content_sizer->Add(extruder_sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(12));
box->SetSizer(content_sizer);
- sizer->Add(box, 0, wxEXPAND | wxALL, FromDIP(9));
+ sizer->Add(box, 0, wxEXPAND | wxALL, FromDIP(0));
return sizer;
}
@@ -1566,7 +1569,7 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent)
m_ams_control = new AMSControl(m_ams_control_box, wxID_ANY);
//m_ams_control->SetMinSize(wxSize(FromDIP(510), FromDIP(286)));
m_ams_control->SetDoubleBuffered(true);
- sizer_box->Add(m_ams_control, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10));
+ sizer_box->Add(m_ams_control, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(3));
m_ams_control_box->SetBackgroundColour(*wxWHITE);
m_ams_control_box->SetSizer(sizer_box);
@@ -1592,6 +1595,7 @@ void StatusBasePanel::show_ams_group(bool show)
}
}
+
void StatusPanel::update_camera_state(MachineObject* obj)
{
if (!obj) return;
@@ -1752,6 +1756,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
Bind(EVT_AMS_ON_SELECTED, &StatusPanel::on_ams_selected, this);
Bind(EVT_AMS_ON_FILAMENT_EDIT, &StatusPanel::on_filament_edit, this);
Bind(EVT_VAMS_ON_FILAMENT_EDIT, &StatusPanel::on_ext_spool_edit, this);
+ //Bind(EVT_VAMS_ON_FILAMENT_EDIT, &StatusPanel::on_filament_edit, this);
Bind(EVT_AMS_GUIDE_WIKI, &StatusPanel::on_ams_guide, this);
Bind(EVT_AMS_RETRY, &StatusPanel::on_ams_retry, this);
Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this);
@@ -2620,14 +2625,37 @@ void StatusPanel::update_ams(MachineObject *obj)
if (m_filament_setting_dlg) m_filament_setting_dlg->update();
std::vector ams_info;
+ ams_info.clear();
for (auto ams = obj->amsList.begin(); ams != obj->amsList.end(); ams++) {
AMSinfo info;
info.ams_id = ams->first;
- if (ams->second->is_exists && info.parse_ams_info(obj, ams->second, obj->ams_calibrate_remain_flag, obj->is_support_ams_humidity)) ams_info.push_back(info);
+ if (ams->second->is_exists && info.parse_ams_info(obj, ams->second, obj->ams_calibrate_remain_flag, obj->is_support_ams_humidity)) {
+ ams_info.push_back(info);
+ }
}
+ std::vector ext_info;
+ ext_info.clear();
+ for (auto slot : obj->vt_slot) {
+ AMSinfo info;
+ info.ReadExtInfo(slot);
+ ext_info.push_back(info);
+ }
+ std::string dev_id = obj->dev_id;
+ //if (obj->ams_exist_bits != last_ams_exist_bits || obj->tray_exist_bits != last_tray_exist_bits || obj->tray_is_bbl_bits != last_tray_is_bbl_bits ||
+ // obj->tray_read_done_bits != last_read_done_bits || obj->ams_version != last_ams_version) {
+ // m_ams_control->UpdateAms(ams_info, false);
+ // // select current ams
+ // //if (!obj->m_ams_id.empty()) m_ams_control->SwitchAms(obj->m_ams_id);
+
+ // last_tray_exist_bits = obj->tray_exist_bits;
+ // last_ams_exist_bits = obj->ams_exist_bits;
+ // last_tray_is_bbl_bits = obj->tray_is_bbl_bits;
+ // last_read_done_bits = obj->tray_read_done_bits;
+ // last_ams_version = obj->ams_version;
+ //}
// must select a current can
- m_ams_control->UpdateAms(ams_info, false);
+ m_ams_control->UpdateAms(ams_info, ext_info, dev_id, false);
last_tray_exist_bits = obj->tray_exist_bits;
last_ams_exist_bits = obj->ams_exist_bits;
@@ -3676,9 +3704,17 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event)
if (obj) {
m_filament_setting_dlg->obj = obj;
- std::string ams_id = m_ams_control->GetCurentAms();
+ std::string ams_id;
int ams_id_int = 0;
int tray_id_int = 0;
+ int tray_id = event.GetInt();
+ if (tray_id == VIRTUAL_TRAY_MAIN_ID || tray_id == VIRTUAL_TRAY_DEPUTY_ID) {
+ ams_id = std::to_string(tray_id);
+ }
+ else{
+ ams_id = std::to_string(tray_id / 4);
+ }
+
if (ams_id.compare(std::to_string(VIRTUAL_TRAY_MAIN_ID)) == 0) {
tray_id_int = VIRTUAL_TRAY_MAIN_ID;
m_filament_setting_dlg->ams_id = ams_id_int;
@@ -3690,10 +3726,10 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event)
m_filament_setting_dlg->Move(wxPoint(current_position_x, current_position_y));
m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val);
} else {
- std::string tray_id = event.GetString().ToStdString(); // m_ams_control->GetCurrentCan(ams_id);
+ //std::string tray_id = event.GetString().ToStdString(); // m_ams_control->GetCurrentCan(ams_id);
try {
- ams_id_int = atoi(ams_id.c_str());
- tray_id_int = atoi(tray_id.c_str());
+ ams_id_int = tray_id / 4;
+ tray_id_int = tray_id % 4;
m_filament_setting_dlg->ams_id = ams_id_int;
m_filament_setting_dlg->tray_id = tray_id_int;
@@ -3703,9 +3739,9 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event)
std::string temp_min;
wxString k_val;
wxString n_val;
- auto it = obj->amsList.find(ams_id);
+ auto it = obj->amsList.find(std::to_string(ams_id_int));
if (it != obj->amsList.end()) {
- auto tray_it = it->second->trayList.find(tray_id);
+ auto tray_it = it->second->trayList.find(std::to_string(tray_id));
if (tray_it != it->second->trayList.end()) {
k_val = wxString::Format("%.3f", tray_it->second->k);
n_val = wxString::Format("%.3f", tray_it->second->n);
@@ -3758,7 +3794,10 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event)
current_position_y = current_position_y + m_filament_setting_dlg->GetSize().GetHeight() > drect ? drect - m_filament_setting_dlg->GetSize().GetHeight() : current_position_y;
if (obj) {
+ int tray_id = event.GetInt();
+ int ams_id = tray_id / 4;
m_filament_setting_dlg->obj = obj;
+ m_filament_setting_dlg->ams_id = ams_id;
try {
m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_MAIN_ID;
std::string sn_number;
diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp
index 9cdcbf607..69556320c 100644
--- a/src/slic3r/GUI/StatusPanel.hpp
+++ b/src/slic3r/GUI/StatusPanel.hpp
@@ -440,6 +440,7 @@ public:
~StatusBasePanel();
+ MachineObject* obj{ nullptr };
void init_bitmaps();
wxBoxSizer *create_monitoring_page();
wxBoxSizer *create_machine_control_page(wxWindow *parent);
@@ -647,7 +648,6 @@ public:
STATE_COUNT = 4
};
- MachineObject *obj {nullptr};
BBLSubTask * last_subtask{nullptr};
std::string last_profile_id;
std::string last_task_id;
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index 4c2af1a7b..ffff4c7df 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -2410,190 +2410,216 @@ void AmsCans::show_sn_value(bool show)
Description:AMSControl
**************************************************/
// WX_DEFINE_OBJARRAY(AmsItemsHash);
+#define AMS_CANS_SIZE wxSize(FromDIP(284), -1)
+#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), -1)
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_ams_introduce_popup(AmsIntroducePopup(this))
{
+ Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
+ if (dev) {
+ MachineObject *obj = dev->get_selected_machine();
+ parse_object(obj);
+ }
+
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_amsitems = new wxSimplebook(m_amswin, wxID_ANY);
- m_simplebook_amsitems->SetSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE));
- m_simplebook_amsitems->SetMinSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE));
- auto m_sizer_amsitems = new wxBoxSizer(wxHORIZONTAL);
- m_simplebook_amsitems->SetSizer(m_sizer_amsitems);
- m_simplebook_amsitems->Layout();
- m_sizer_amsitems->Fit(m_simplebook_amsitems);
-
- m_panel_top = new wxPanel(m_simplebook_amsitems, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE));
- m_sizer_top = new wxBoxSizer(wxHORIZONTAL);
- m_panel_top->SetSizer(m_sizer_top);
- m_panel_top->Layout();
- m_sizer_top->Fit(m_panel_top);
-
- auto m_panel_top_empty = new wxPanel(m_simplebook_amsitems, 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_amsitems->AddPage(m_panel_top_empty, wxEmptyString, false);
- m_simplebook_amsitems->AddPage(m_panel_top, 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_items_left = new wxPanel(m_amswin, wxID_ANY);
+ m_panel_items_left->SetSize(AMS_ITEMS_PANEL_SIZE);
+ m_panel_items_left->SetMinSize(AMS_ITEMS_PANEL_SIZE);
+ //m_panel_items_left->SetBackgroundColour(0x4169E1);
+ m_panel_items_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ m_sizer_items_left = new wxBoxSizer(wxHORIZONTAL);
+ m_panel_items_left->SetSizer(m_sizer_items_left);
+ m_panel_items_left->Layout();
+ //m_sizer_items_left->Fit(m_panel_items_left);
+
+ /*right items*/
+ m_panel_items_right = new wxPanel(m_amswin, wxID_ANY);
+ m_panel_items_right->SetSize(AMS_ITEMS_PANEL_SIZE);
+ m_panel_items_right->SetMinSize(AMS_ITEMS_PANEL_SIZE);
+ //m_panel_items_right->SetBackgroundColour(0x4169E1);
+ m_panel_items_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ m_sizer_items_right = new wxBoxSizer(wxHORIZONTAL);
+ m_panel_items_right->SetSizer(m_sizer_items_right);
+ m_panel_items_right->Layout();
+ //m_sizer_items_right->Fit(m_panel_items_right);
+
+ /*m_sizer_ams_items->Add(m_panel_items_left, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));
+ m_sizer_ams_items->Add(m_panel_items_right, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));*/
+ m_sizer_ams_items->Add(m_panel_items_left, 0, wxLEFT, FromDIP(5));
+ m_sizer_ams_items->Add(m_panel_items_right, 0, wxLEFT, FromDIP(5));
+
+ //m_panel_items_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 = 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->Add(m_ams_tip, 0, wxTOP, FromDIP(5));
- m_sizer_ams_tips->Add(m_img_amsmapping_tip, 0, wxALL, FromDIP(3));
+ //ams area
+ /*m_panel_left_ams_area = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
+ m_panel_left_ams_area->SetMaxSize(AMS_CANS_SIZE);
+ m_panel_left_ams_area->SetMinSize(AMS_CANS_SIZE);
+ m_panel_left_ams_area->SetCornerRadius(FromDIP(10));
+ m_panel_left_ams_area->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Normal)));
- m_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();
+ m_panel_right_ams_area = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
+ m_panel_right_ams_area->SetMaxSize(AMS_CANS_SIZE);
+ m_panel_right_ams_area->SetMinSize(AMS_CANS_SIZE);
+ m_panel_right_ams_area->SetCornerRadius(FromDIP(10));
+ m_panel_right_ams_area->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Normal)));*/
-#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_area_left = new wxBoxSizer(wxHORIZONTAL);
+ m_sizer_ams_area_right = new wxBoxSizer(wxHORIZONTAL);
+ m_sizer_down_road = new wxBoxSizer(wxHORIZONTAL);
+ m_simplebook_ams_left = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ m_simplebook_ams_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxLEFT | wxRIGHT, FromDIP(10));
- //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(0x00AE42));
- 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);
+ m_simplebook_ams_right = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxLEFT | wxRIGHT, FromDIP(10));
- m_sizer_ams_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_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);
- 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_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_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)); });
-
-
- //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_BLOCK_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_BLOCK_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, 0);
// ams mode
- m_simplebook_generic_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
- m_simplebook_generic_cans->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ //m_simplebook_ams_left = new wxSimplebook(m_simplebook_ams_left, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ //m_simplebook_ams_left->SetBackgroundColour(*wxGREEN);
+ //m_simplebook_ams_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ //m_simplebook_ams_right = new wxSimplebook(m_simplebook_ams_right, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
- // 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_BLOCK_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_cans = new wxSimplebook(m_simplebook_ams, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
- m_simplebook_extra_cans->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ //m_simplebook_extra_cans_left = new wxSimplebook(m_simplebook_ams_left, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ //m_simplebook_extra_cans_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ // m_simplebook_extra_cans_right = new wxSimplebook(m_simplebook_ams_right, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0);
+ //m_simplebook_extra_cans_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
- m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false);
- m_simplebook_ams->AddPage(m_simplebook_generic_cans, wxEmptyString, false);
- m_simplebook_ams->AddPage(m_simplebook_extra_cans, wxEmptyString, false);
+ //m_simplebook_ams_left->AddPage(m_simplebook_ams_left, wxEmptyString, false);
+ //m_simplebook_ams_left->AddPage(m_simplebook_extra_cans_left, wxEmptyString, false);
+ //m_simplebook_ams_right->AddPage(m_simplebook_ams_right, wxEmptyString, false);
+ //m_simplebook_ams_right->AddPage(m_simplebook_extra_cans_right, wxEmptyString, false);
- m_panel_can->SetSizer(m_sizer_cans);
- m_panel_can->Layout();
- m_sizer_cans->Fit(m_panel_can);
+ m_sizer_ams_area_left->Layout();
+ m_sizer_ams_area_right->Layout();
- m_sizer_left->Add(m_sizer_ams_tips, 0, wxEXPAND, 0);
- m_sizer_left->Add(m_panel_can, 1, wxEXPAND, 0);
- wxBoxSizer *m_sizer_left_bottom = new wxBoxSizer(wxHORIZONTAL);
- wxBoxSizer *sizer_sextruder = new wxBoxSizer(wxVERTICAL);
+ 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);
- 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(180), -1));
+ //m_sizer_option_right->SetMinSize(wxSize(FromDIP(120), -1));
StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled),
- std::pair(wxColour(27, 136, 68), StateColor::Pressed),
- std::pair(wxColour(61, 203, 115), 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));
+ 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, wxLEFT, 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, wxLEFT, FromDIP(5));
+
+
+ /*option mid*/
+ m_extruder = new AMSextruder(m_amswin, wxID_ANY, 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);
@@ -2612,7 +2638,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
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);
@@ -2629,119 +2655,132 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_back->SetFont(Label::Body_9);
if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_back->SetLabel("Unload");
- 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_sizer_option_right->Add(0, 0, 1, wxEXPAND, 0);
+ m_sizer_option_right->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(60));
+ m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(5));
- 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);
+ m_sizer_ams_option->Add(m_sizer_option_left, 0, wxEXPAND, 0);
+ //m_sizer_ams_option->Add(m_sizer_option_mid, 1, wxEXPAND, 0);
+ m_sizer_ams_option->Add(m_sizer_option_mid, 1, wxEXPAND, 0);
+ //m_sizer_ams_option->Add(m_sizer_option_right, 0, wxEXPAND, 0);
+ m_sizer_ams_option->Add(m_sizer_option_right, 0, wxLEFT, 0);
+
//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_BLOCK_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_panel_virtual = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
+ //m_panel_virtual->SetBackgroundColor(StateColor(std::pair(AMS_CONTROL_DEF_BLOCK_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();
+ //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_BLOCK_BK_COLOUR);
+ //auto vams_panel = new wxWindow(m_panel_virtual, wxID_ANY);
+ //vams_panel->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
- m_vams_lib = new AMSLib(vams_panel, m_vams_info);
- m_vams_road = new AMSRoad(vams_panel, wxID_ANY, m_vams_info, -1, -1, wxDefaultPosition, AMS_CAN_ROAD_SIZE);
+ //m_vams_lib = new AMSLib(vams_panel, m_vams_info);
+ //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](auto& e) {
- //clear all selected
- m_current_ams = m_vams_info.can_id;
- m_vams_lib->OnSelected();
+ //m_vams_lib->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
+ // //clear all selected
+ // m_current_ams = m_vams_info.can_id;
+ // m_vams_lib->OnSelected();
- SwitchAms(m_current_ams);
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow* cans = m_ams_cans_list[i];
- cans->amsCans->SelectCan(m_current_ams);
- }
+ // SwitchAms(m_current_ams);
+ // for (auto i = 0; i < m_ams_item_list.GetCount(); i++) {
+ // AmsCansWindow* cans = m_ams_item_list[i];
+ // cans->amsCans->SelectCan(m_current_ams);
+ // }
- e.Skip();
- });
+ // 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();
- });
+ //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);
+ //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);
+ //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);
+ //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();
+ //});
- //extra road
+ ////extra road
- vams_panel->SetSizer(m_vams_top_sizer);
- vams_panel->Layout();
- vams_panel->Fit();
+ //vams_panel->SetSizer(m_vams_top_sizer);
+ //vams_panel->Layout();
+ //vams_panel->Fit();
- wxBoxSizer* m_sizer_vams_panel = new wxBoxSizer(wxVERTICAL);
+ //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_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);
+ //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();
+// 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));
-#ifdef __WXMSW__
- wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL);
- wxPostEvent(this, close_event);
-#endif // __WXMSW__
- });
+ //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_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_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);
//Right
+ /*
+ addaddaddaddaddaaddaddaddadd
+ */
+
+ /*
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)));
@@ -2792,13 +2831,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
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);
@@ -2811,7 +2844,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
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);
- if (wxGetApp().app_config->get("language") == "pt_BR") m_button_guide->SetLabel("Guide");
m_button_guide->SetCornerRadius(FromDIP(12));
m_button_guide->SetBorderColor(btn_bd_white);
@@ -2832,7 +2864,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
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);
- if (wxGetApp().app_config->get("language") == "pt_BR") m_button_retry->SetLabel("Retry");
m_button_retry->SetCornerRadius(FromDIP(12));
m_button_retry->SetBorderColor(btn_bd_white);
@@ -2843,101 +2874,44 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
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_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));
+ /*
+ addaddaddaddaddaaddaddaddadd
+ */
- m_sizer_body->Add(m_simplebook_amsitems, 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));
+ m_sizer_ams_body->Add(m_sizer_ams_area_left, wxLEFT|wxRIGHT, FromDIP(5));
+ //m_sizer_ams_body->Add(0, 0, 0, wxLEFT, FromDIP(15));
+ m_sizer_ams_body->Add(m_sizer_ams_area_right, wxLEFT|wxRIGHT, FromDIP(5));
+
+ //m_sizer_ams_body->Add(m_sizer_right, 0, wxEXPAND, FromDIP(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, 0);
+ //m_sizer_body->Add(m_sizer_ams_body, 0, wxEXPAND, 0);
+ //m_sizer_body->Add(m_sizer_ams_option, 0, wxEXPAND, 0);
+ m_sizer_body->Add(m_sizer_ams_option, 0, wxALIGN_CENTER, 0);
- 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());
@@ -2971,16 +2945,16 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
});
- 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));
- });
+ /* 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));
+ });*/
- CreateAms();
- SetSelection(0);
- EnterNoneAMSMode();
+ //CreateAms();
+ //CreateAmsNew();
+ //EnterNoneAMSMode();
}
@@ -2989,12 +2963,9 @@ 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() {
+ /*m_simplebook_ams_left->DeleteAllPages();
+ m_simplebook_ams_right->DeleteAllPages();*/
}
std::string AMSControl::GetCurentAms() { return m_current_ams; }
@@ -3003,16 +2974,17 @@ std::string AMSControl::GetCurentShowAms() { return m_current_show_ams; }
std::string AMSControl::GetCurrentCan(std::string amsid)
{
std::string current_can;
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *ams = m_ams_cans_list[i];
- if (ams->amsCans->m_info.ams_id == amsid) {
- current_can = ams->amsCans->GetCurrentCan();
+ for (auto ams_item : m_ams_item_list) {
+ AmsItem* item = ams_item.second;
+ if (item->m_info.ams_id == amsid) {
+ current_can = item->GetCurrentCan();
return current_can;
}
}
return current_can;
}
+
wxColour AMSControl::GetCanColour(std::string amsid, std::string canid)
{
wxColour col = *wxWHITE;
@@ -3039,18 +3011,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::NO_AMS) return;
- m_panel_top->Hide();
- m_simplebook_amsitems->Hide();
- m_simplebook_amsitems->SetSelection(0);
+ m_panel_items_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();
@@ -3061,27 +3031,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_top->Show();
- m_simplebook_amsitems->Show();
- m_simplebook_amsitems->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();
@@ -3090,28 +3058,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::EXTRA_AMS) return;
- m_panel_top->Hide();
- m_simplebook_amsitems->Show();
- m_simplebook_amsitems->SetSelection(1);
+ m_panel_items_left->Hide();
- 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_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->SetSelection(2);
+ 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();
@@ -3120,48 +3086,23 @@ 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)
{
- AmsCansHash::iterator iter = m_ams_cans_list.begin();
- auto count_item_index = 0;
+ auto iter = m_ams_item_list.find(amsid.ToStdString());
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
- if (cans->amsCans->m_info.ams_id == amsid) { cans->amsCans->PlayRridLoading(canid); }
- iter++;
+ if (iter != m_ams_item_list.end()) {
+ AmsItem* cans = iter->second;
+ cans->PlayRridLoading(canid);
}
}
void AMSControl::StopRridLoading(wxString amsid, wxString canid)
{
- AmsCansHash::iterator iter = m_ams_cans_list.begin();
- auto count_item_index = 0;
+ auto iter = m_ams_item_list.find(amsid.ToStdString());
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
- if (cans->amsCans->m_info.ams_id == amsid) { cans->amsCans->StopRridLoading(canid); }
- iter++;
+ if (iter != m_ams_item_list.end()) {
+ AmsItem* cans = iter->second;
+ cans->StopRridLoading(canid);
}
}
@@ -3177,14 +3118,15 @@ void AMSControl::msw_rescale()
m_button_extruder_feed->SetMinSize(wxSize(-1, FromDIP(24)));
m_button_extruder_back->SetMinSize(wxSize(-1, FromDIP(24)));
+ m_button_auto_refill->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 i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
- cans->amsCans->msw_rescale();
+
+ for (auto ams_item : m_ams_item_list) {
+ ams_item.second->msw_rescale();
}
Layout();
@@ -3193,7 +3135,7 @@ void AMSControl::msw_rescale()
void AMSControl::UpdateStepCtrl(bool is_extrusion)
{
- wxString FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_COUNT] = {
+ /*wxString FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_COUNT] = {
_L("Idling..."),
_L("Heat the nozzle"),
_L("Cut filament"),
@@ -3253,37 +3195,379 @@ void AMSControl::UpdateStepCtrl(bool is_extrusion)
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::UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step) {
+ bool left = false;
+ int len = -1;
+ for (auto id : m_item_ids[0])
+ {
+ if (ams_id == id)
+ {
+ left = true;
+ break;
+ }
+ }
+ if (m_ams_item_list[ams_id]->m_info.cans.size() == 4)
+ {
+ len = 133;
+ }
+ else
+ {
+ for (auto pairId : pair_id)
+ {
+ if (pairId.first == ams_id) {
+ len = 72;
+ break;
+ }
+ if (pairId.second == ams_id)
+ {
+ len = 188;
+ break;
+ }
+ }
+ }
+ if (len == -1)
+ {
+ if (left)
+ {
+ len = 213;
+ }
+ else
+ {
+ len = 72;
+ }
+ }
+
+ //std::vector m_item_nums = { 0, 0 };
+ //std::vector> m_item_ids = { {},{} };
+}
+
+
void AMSControl::CreateAms()
{
- 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++) {
- AddAmsItems(*it);
+ AddAmsPreview(*it, AMSModel::GENERIC_AMS);
AddAms(*it);
- AddExtraAms(*it);
+ //AddExtraAms(*it);
m_ams_info.push_back(*it);
}
-
- m_sizer_top->Layout();
+ if (m_single_nozzle_no_ams)
+ {
+ m_simplebook_ams_left->Hide();
+ }
+ else {
+ m_sizer_items_left->Layout();
+ m_sizer_items_right->Layout();
+ }
Thaw();
}
+
+void AMSControl::ClearAms() {
+ 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();
+
+ m_ams_item_list.clear();
+ m_sizer_items_right->Clear();
+ m_sizer_items_left->Clear();
+}
+
+void AMSControl::CreateAmsNew()
+{
+ /*m_ams_item_list.clear();
+ m_ams_generic_item_list.clear();
+ m_ams_extra_item_list.clear();*/
+ AMSRoadShowMode left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ AMSRoadShowMode right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ bool first_left_page = true, first_right_page = true;
+
+ std::vector single_info_left;
+ std::vector single_info_right;
+
+ Freeze();
+ for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++)
+ {
+
+ if (first_left_page && ams_info->nozzle_id == 1) {
+ first_left_page = false;
+ left_init_mode = ams_info->cans.size() == 4 ? AMSRoadShowMode::AMS_ROAD_MODE_FOUR : AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ }
+ if (ams_info->cans.size() == 4)
+ {
+ if (first_right_page && ams_info->nozzle_id == 0) {
+ first_right_page = false;
+ right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ }
+ if (first_left_page && ams_info->nozzle_id == 1) {
+ first_left_page = false;
+ left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ }
+ AddAmsPreview(*ams_info, ams_info->ams_type);
+ AddAms(*ams_info);
+ }
+ else if (ams_info->cans.size() == 1)
+ {
+ AddAmsPreview(*ams_info, ams_info->ams_type);
+ if (ams_info->nozzle_id == 0)
+ {
+ single_info_right.push_back(*ams_info);
+ if (single_info_right.size() == 2)
+ {
+ if (first_right_page) {
+ first_right_page = false;
+ right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ AddAms(single_info_right);
+ 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)
+ {
+ if (first_left_page) {
+ first_left_page = false;
+ left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ AddAms(single_info_left);
+ 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);
+ //wait add
+ if (single_info_right.size() == 2)
+ {
+ if (first_right_page) {
+ first_right_page = false;
+ right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id));
+ }
+ AddAmsPreview(ext_info, AMSModel::NO_AMS);
+ AddAms(single_info_right);
+ 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);
+ //wait add
+ if (single_info_left.size() == 2)
+ {
+ if (first_left_page) {
+ first_left_page = false;
+ left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id));
+ }
+ AddAmsPreview(ext_info, AMSModel::NO_AMS);
+ AddAms(single_info_left);
+ single_info_left.clear();
+
+ if (m_nozzle_num <= 1)
+ {
+ m_simplebook_ams_left->Hide();
+ m_panel_items_left->Hide();
+ }
+ else if(m_nozzle_num > 1) {
+ m_sizer_items_left->Layout();
+ m_sizer_items_right->Layout();
+ m_simplebook_ams_left->Show();
+ m_panel_items_left->Show();
+ m_simplebook_ams_right->Show();
+ m_panel_items_right->Show();
+ m_simplebook_ams_left->SetSelection(0);
+ m_simplebook_ams_right->SetSelection(0);
+ m_down_road->UpdateLeft(2, left_init_mode);
+ m_down_road->UpdateRight(2, right_init_mode);
+ }
+ m_extruder->update(2);
+ //Refresh();
+ //Freeze();
+ Thaw();
+}
+
+void AMSControl::CreateAmsSingleNozzle()
+{
+ std::vectorm_item_nums{0,0};
+ std::vector single_info;
+
+ Freeze();
+
+ bool left = true;
+ AMSRoadShowMode left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE;
+ AMSRoadShowMode right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE;
+ for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++){
+ if (ams_info->cans.size() == 4){
+ if (m_item_nums[0] <= m_item_nums[1]){
+ if (m_item_nums[0] == 0) left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ left = true;
+ m_item_ids[0].push_back(ams_info->ams_id);
+ m_item_nums[0]++;
+ }
+ else{
+ if (m_item_nums[1] == 0) right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ left = false;
+ m_item_ids[1].push_back(ams_info->ams_id);
+ m_item_nums[1]++;
+ }
+ AddAmsPreview(*ams_info, ams_info->ams_type);
+ AddAms(*ams_info, left);
+ //AddExtraAms(*ams_info);
+ }
+ else if (ams_info->cans.size() == 1){
+ AddAmsPreview(*ams_info, ams_info->ams_type);
+ single_info.push_back(*ams_info);
+ if (single_info.size() == 2){
+ if (m_item_nums[0] <= m_item_nums[1]){
+ if (m_item_nums[0] == 0) left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ left = true;
+ m_item_ids[0].push_back(single_info[0].ams_id);
+ m_item_ids[0].push_back(single_info[1].ams_id);
+ m_item_nums[0]++;
+ }
+ else{
+ if (m_item_nums[1] == 0) right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ left = false;
+ m_item_ids[1].push_back(single_info[0].ams_id);
+ m_item_ids[1].push_back(single_info[1].ams_id);
+ m_item_nums[1]++;
+ }
+ pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id));
+ AddAms(single_info, left);
+ single_info.clear();
+ }
+ }
+ }
+ //ext_info.cans[0].material_colour =
+ if (m_ext_info.size() <= 0){
+ BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!";
+ return;
+ }
+ single_info.push_back(m_ext_info[0]);
+ if (m_item_nums[0] <= m_item_nums[1]){
+ if (m_item_nums[0] == 0){
+ if (single_info.size() == 2){
+ left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ else{
+ left_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ }
+ }
+ left = true;
+ for (auto it : single_info){
+ m_item_ids[0].push_back(it.ams_id);
+ }
+ m_item_nums[0]++;
+
+ }
+ else{
+ if (m_item_nums[1] == 0){
+ if (single_info.size() == 2){
+ right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ }
+ else{
+ right_init_mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ }
+ }
+ left = false;
+ for (auto it : single_info){
+ m_item_ids[1].push_back(it.ams_id);
+ }
+ m_item_nums[1]++;
+ }
+ //wait add
+ if (single_info.size() == 2){
+ pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id));
+ }
+ AddAmsPreview(m_ext_info[0], AMSModel::NO_AMS);
+ AddAms(single_info, left);
+
+ m_panel_items_left->Hide();
+ if (!m_item_nums[0] || !m_item_nums[1]){
+ /*m_simplebook_ams_right->Hide();
+ m_panel_items_right->Hide();*/
+ //m_simplebook_ams_left->Hide();
+ m_simplebook_ams_right->Hide();
+ m_panel_items_right->Hide();
+ m_simplebook_ams_left->SetSelection(0);
+ m_down_road->UpdateLeft(1, left_init_mode);
+ m_down_road->UpdateRight(1, right_init_mode);
+ }
+ else {
+ m_sizer_items_left->Layout();
+ if (m_item_nums[0] <= 1 && m_item_nums[1] <= 1){
+ m_panel_items_right->Hide();
+ }
+ else{
+ m_panel_items_right->Show();
+ }
+ /*m_simplebook_ams_left->Show();
+ m_simplebook_ams_right->Show();*/
+ m_simplebook_ams_left->Show();
+ m_simplebook_ams_right->Show();
+
+ m_simplebook_ams_left->SetSelection(0);
+ m_simplebook_ams_right->SetSelection(0);
+ m_down_road->UpdateLeft(1, left_init_mode);
+ m_down_road->UpdateRight(1, right_init_mode);
+ }
+ m_extruder->update(1);
+ //Refresh();
+ Thaw();
+}
+
+
void AMSControl::Reset()
{
- auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE};
+ /*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};
@@ -3294,43 +3578,47 @@ void AMSControl::Reset()
AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}};
std::vector ams_info{ams1, ams2, ams3, ams4};
- std::vector::iterator it;
- UpdateAms(ams_info, true);
+ 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_senect = "";
+ 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::NO_AMS) {
+ /*if (m_ams_model == AMSModel::NO_AMS) {
EnterNoneAMSMode();
} else if(m_ams_model == AMSModel::GENERIC_AMS){
EnterGenericAMSMode();
} else if (m_ams_model == AMSModel::EXTRA_AMS) {
EnterExtraAMSMode();
- }
+ }*/
+ EnterGenericAMSMode();
}
void AMSControl::show_auto_refill(bool show)
{
- if (m_auto_reill_show != show) {
- m_ams_backup_tip->Show(show);
- m_img_ams_backup->Show(show);
- m_amswin->Layout();
- m_amswin->Fit();
- m_auto_reill_show = show;
- }
+ //m_img_ams_backup->Show(show);
+ m_amswin->Layout();
+ m_amswin->Fit();
}
void AMSControl::show_vams(bool show)
{
- m_panel_virtual->Show(show);
- m_vams_sizer->Show(show);
- m_vams_extra_road->Show(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();
@@ -3346,48 +3634,41 @@ void AMSControl::show_vams(bool show)
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)
{
- auto last_k_value = m_vams_info.k;
- auto last_n_value = m_vams_info.n;
-
- 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_info.cali_idx = tray.cali_idx;
- m_vams_info.filament_id = tray.setting_id;
- 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->m_info.cali_idx = tray.cali_idx;
- m_vams_lib->m_info.filament_id = tray.setting_id;
-
- if (last_k_value != m_vams_info.k || last_n_value != m_vams_info.n) {
- 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;
@@ -3395,196 +3676,731 @@ void AMSControl::reset_vams()
m_vams_lib->m_info.filament_id = "";
m_vams_info.material_name = wxEmptyString;
m_vams_info.material_colour = AMS_CONTROL_WHITE_COLOUR;
- m_vams_info.cali_idx = -1;
- m_vams_info.filament_id = "";
- m_vams_lib->Refresh();
+ m_vams_lib->Refresh();*/
}
-void AMSControl::UpdateAms(std::vector info, bool is_reset)
+void AMSControl::ReadExtInfo(MachineObject* obj) {
+ m_ext_info.clear();
+ if (!obj){
+ return;
+ }
+ AMSinfo ext_info;
+ for (auto slot : obj->vt_slot){
+ ext_info.ams_id = slot.id;
+ Caninfo can;
+ can.can_id = std::to_string(0);
+ can.material_name = slot.filament_setting_id;
+ ext_info.cans.push_back(can);
+ if (slot.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){
+ ext_info.nozzle_id = 0;
+ }
+ else{
+ ext_info.nozzle_id = 1;
+ }
+ ext_info.cans[0].material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL;
+ ext_info.cans[0].material_colour = slot.decode_color(slot.color);
+ ext_info.cans[0].material_remain = slot.remain;
+ ext_info.cans[0].material_name = slot.type;
+
+ m_ext_info.push_back(ext_info);
+ }
+}
+
+void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, std::string dev_id, bool is_reset, bool test)
{
- std::string curr_ams_id = GetCurentAms();
- std::string curr_can_id = GetCurrentCan(curr_ams_id);
+ if (!test){
+ std::string curr_ams_id = GetCurentAms();
+ std::string curr_can_id = GetCurrentCan(curr_ams_id);
- m_button_area->Layout();
- m_button_area->Fit();
+ int nozzle_num = ext_info.size();
- // update item
-
- if (m_ams_model == AMSModel::GENERIC_AMS){
- m_ams_cans_list = m_ams_generic_cans_list;
- }
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
- m_ams_cans_list = m_ams_extra_cans_list;
- }
-
- if (m_ams_info.size() != info.size()) {
- if (info.size() > 1) {
- m_simplebook_amsitems->Show();
- m_amswin->Layout();
- m_amswin->Fit();
- SetSize(m_amswin->GetSize());
- SetMinSize(m_amswin->GetSize());
- } else {
- m_simplebook_amsitems->Hide();
- m_amswin->Layout();
- m_amswin->Fit();
- SetSize(m_amswin->GetSize());
- SetMinSize(m_amswin->GetSize());
+ // update item
+ bool fresh = false;
+ if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num && 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;
+ }
+ }
}
- }
-
- m_ams_info = info;
-
- for (auto i = 0; i < m_ams_item_list.GetCount(); i++) {
- AmsItems *item = m_ams_item_list[i];
- if (i < info.size() && info.size() > 1) {
- item->amsItem->Update(m_ams_info[i]);
- item->amsItem->Open();
- } else {
- item->amsItem->Close();
+ else{
+ fresh = true;
}
+ m_ams_info.clear();
+ m_ams_info = ams_info;
+ m_ext_info.clear();
+ m_ext_info = ext_info;
+ m_nozzle_num = nozzle_num;
+ m_dev_id = dev_id;
+ if (fresh){
+ //m_ams_generic_item_list.clear();
+ for (auto it : m_ams_preview_list){
+ delete it.second;
+ }
+ m_ams_preview_list.clear();
+ ClearAms();
+ m_left_page_index = 0;
+ m_right_page_index = 0;
+ if (m_nozzle_num >= 2){
+ CreateAmsNew();
+ }else{
+ /*m_panel_items_right->ClearBackground();
+ m_panel_items_left->ClearBackground();*/
+ m_item_ids = { {}, {} };
+ pair_id.clear();
+ CreateAmsSingleNozzle();
+ }
+ /*m_amswin->Layout();
+ m_amswin->Fit();
+ */
+ SetSize(wxSize(FromDIP(578), -1));
+ SetMinSize(wxSize(FromDIP(578), -1));
+
+
+ }
+ // update cans
+
+ for (auto ams_item : m_ams_item_list) {
+ std::string ams_id = ams_item.second->m_info.ams_id;
+ AmsItem* cans = ams_item.second;
+ if (cans->m_info.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->m_info.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)){
+ for (auto ifo : m_ext_info) {
+ if (ifo.ams_id == ams_id) {
+ cans->m_info = ifo;
+ cans->Update(ifo);
+ cans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS ? false : true);
+ }
+ }
+ }
+ else{
+ for (auto ifo : m_ams_info) {
+ if (ifo.ams_id == ams_id) {
+ cans->m_info = ifo;
+ cans->Update(ifo);
+ cans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS ? false : true);
+ }
+ }
+ }
+ }
+
+ 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;
+ static std::vectorams_info;
+ int nozzle_num = 2;
+ if (first_time)
+ {
+ auto caninfo0_0 = Caninfo{ "def_can_0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo0_1 = Caninfo{ "def_can_1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo0_2 = Caninfo{ "def_can_2", (""), *wxBLUE, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo0_3 = Caninfo{ "def_can_3", (""), *wxYELLOW, AMSCanType::AMS_CAN_TYPE_VIRTUAL };
- // update cans
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
+ auto caninfo1_0 = Caninfo{ "def_can_0", (""), wxColour(255, 255, 0), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo1_1 = Caninfo{ "def_can_1", (""), wxColour(255, 0, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo1_2 = Caninfo{ "def_can_2", (""), wxColour(0, 255, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
+ auto caninfo1_3 = Caninfo{ "def_can_3", (""), wxColour(200, 80, 150), AMSCanType::AMS_CAN_TYPE_VIRTUAL };
- for (auto ifo : m_ams_info) {
- if (ifo.ams_id == cans->amsIndex) {
- cans->amsCans->m_info = ifo;
- cans->amsCans->Update(ifo);
- cans->amsCans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS?false:true);
+ AMSinfo ams1 = AMSinfo{ "0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
+ AMSinfo ams2 = AMSinfo{ "1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
+ AMSinfo ams3 = AMSinfo{ "2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
+ AMSinfo ams4 = AMSinfo{ "3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 };
+
+ AMSinfo singleams1 = AMSinfo{ "0", std::vector{caninfo0_0}, 0 };
+ AMSinfo singleams2 = AMSinfo{ "1", std::vector{caninfo0_1}, 0 };
+ AMSinfo singleams3 = AMSinfo{ "2", std::vector{caninfo0_2}, 0 };
+ AMSinfo singleams4 = AMSinfo{ "3", std::vector{caninfo0_3}, 0 };
+
+ AMSinfo ams5 = AMSinfo{ "4", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
+ AMSinfo ams6 = AMSinfo{ "5", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
+ AMSinfo ams7 = AMSinfo{ "6", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
+ AMSinfo ams8 = AMSinfo{ "7", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 };
+
+ AMSinfo singleams5 = AMSinfo{ "4", std::vector{caninfo1_0}, 1 };
+ AMSinfo singleams6 = AMSinfo{ "5", std::vector{caninfo1_1}, 1 };
+ AMSinfo singleams7 = AMSinfo{ "6", std::vector{caninfo1_2}, 1 };
+ AMSinfo singleams8 = AMSinfo{ "7", std::vector{caninfo1_3}, 1 };
+ std::vectorgeneric_ams = { ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 };
+ std::vectorsingle_ams = { singleams1, singleams2, singleams3, singleams4, singleams5, singleams6, singleams7, singleams8 };
+ ams_info = { ams1, singleams1, ams3, singleams3, ams5, singleams5, ams7, singleams7 };
+ first_time = false;
+ }
+
+ Freeze();
+
+ // update item
+ bool fresh = false;
+ if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num){
+ for (int i = 0; i < m_ams_info.size(); i++)
+ {
+ if (m_ams_info[i].ams_id != ams_info[i].ams_id){
+ fresh = true;
+ }
+ }
+ }
+ else{
+ fresh = true;
+ }
+ 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[1].ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID);
+ m_nozzle_num = nozzle_num;
+ if (fresh){
+
+ for (auto it : m_ams_preview_list) {
+ delete it.second;
+ }
+ m_ams_preview_list.clear();
+ ClearAms();
+ m_left_page_index = 0;
+ m_right_page_index = 0;
+ if (m_nozzle_num >= 2) {
+ CreateAmsNew();
+ }
+ else {
+ /*m_panel_items_right->ClearBackground();
+ m_panel_items_left->ClearBackground();*/
+ m_item_ids = { {}, {} };
+ pair_id.clear();
+ CreateAmsSingleNozzle();
+ }
+ /*m_amswin->Layout();
+ m_amswin->Fit();
+ */
+ SetSize(wxSize(FromDIP(578), -1));
+ SetMinSize(wxSize(FromDIP(578), -1));
+ }
+ 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->m_info.ams_id.c_str()) >= VIRTUAL_TRAY_DEPUTY_ID) {
+ for (auto ifo : m_ext_info) {
+ if (ifo.ams_id == ams_id) {
+ cans->m_info = ifo;
+ cans->Update(ifo);
+ cans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS ? false : true);
+ }
+ }
+ }
+ else {
+ for (auto ifo : m_ams_info) {
+ if (ifo.ams_id == ams_id) {
+ cans->m_info = ifo;
+ cans->Update(ifo);
+ cans->show_sn_value(m_ams_model == AMSModel::EXTRA_AMS ? false : true);
+ }
+ }
+ }
+ }
+
+ if (m_current_show_ams.empty() && !is_reset) {
+ if (ams_info.size() > 0) {
+ SwitchAms(ams_info[0].ams_id);
}
}
}
- if ( m_current_show_ams.empty() && !is_reset ) {
- if (info.size() > 0) {
- SwitchAms(info[0].ams_id);
- }
- }
- if (m_ams_model == AMSModel::NO_AMS && !m_vams_lib->is_selected()) {
- m_vams_lib->OnSelected();
- }
}
-void AMSControl::AddAmsItems(AMSinfo info)
+void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type)
{
- auto amsitem = new AMSItem(m_panel_top, wxID_ANY, info);
- amsitem->Bind(wxEVT_LEFT_DOWN, [this, amsitem](wxMouseEvent& e) {
- SwitchAms(amsitem->m_amsinfo.ams_id);
+ AMSPreview *ams_prv = nullptr;
+
+ if (info.nozzle_id == 0)
+ {
+ ams_prv = new AMSPreview(m_panel_items_right, wxID_ANY, info, type);
+ m_sizer_items_right->Add(ams_prv, 0, wxALIGN_CENTER | wxRIGHT, 6);
+ }
+ else if (info.nozzle_id == 1)
+ {
+ ams_prv = new AMSPreview(m_panel_items_left, wxID_ANY, info, type);
+ m_sizer_items_left->Add(ams_prv, 0, wxALIGN_CENTER | wxRIGHT, 6);
+ }
+ ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent& e) {
+ SwitchAms(ams_prv->m_amsinfo.ams_id);
e.Skip();
});
- AmsItems* item = new AmsItems();
- item->amsIndex = info.ams_id;
- item->amsItem = amsitem;
+ m_ams_preview_list[info.ams_id] = ams_prv;
- m_ams_item_list.Add(item);
- m_sizer_top->Add(amsitem, 0, wxALIGN_CENTER | wxRIGHT, 6);
}
-void AMSControl::AddAms(AMSinfo info)
+void AMSControl::AddAms(AMSinfo info, bool left)
{
- AmsCansWindow* canswin = new AmsCansWindow();
- auto amscans = new AmsCans(m_simplebook_generic_cans, info, AMSModel::GENERIC_AMS);
+ AmsItem* ams_item;
+ if (m_nozzle_num > 1)
+ {
+ if (info.nozzle_id == 0)
+ {
+ ams_item = new AmsItem(m_simplebook_ams_right, info, info.ams_type);
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, ams_item, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ }
+ else if (info.nozzle_id == 1)
+ {
+ ams_item = new AmsItem(m_simplebook_ams_left, info, info.ams_type);
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, ams_item, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ }
+ else if (m_nozzle_num == 1)
+ {
+ if (left)
+ {
+ ams_item = new AmsItem(m_simplebook_ams_left, info, info.ams_type);
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, ams_item, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ else {
+ ams_item = new AmsItem(m_simplebook_ams_right, info, info.ams_type);
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, ams_item, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ //if (m_item_nums[1] == 1) m_simplebook_ams_right->SetSelection(m_simplebook_ams_left->GetSelection());
+ }
+ }
+ m_ams_item_list[info.ams_id] = ams_item;
+ m_simplebook_ams_left->Layout();
+ m_simplebook_ams_right->Layout();
+ m_simplebook_ams_left->Refresh();
+ m_simplebook_ams_right->Refresh();
- canswin->amsIndex = info.ams_id;
- canswin->amsCans = amscans;
- m_ams_generic_cans_list.Add(canswin);
-
- m_simplebook_generic_cans->AddPage(amscans, wxEmptyString, false);
- amscans->m_selection = m_simplebook_generic_cans->GetPageCount() - 1;
}
-void AMSControl::AddExtraAms(AMSinfo info)
-{
- AmsCansWindow* canswin = new AmsCansWindow();
- auto amscans = new AmsCans(m_simplebook_extra_cans, info, AMSModel::EXTRA_AMS);
+//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;
+// }
+//
+//}
- canswin->amsIndex = info.ams_id;
- canswin->amsCans = amscans;
- m_ams_extra_cans_list.Add(canswin);
+void AMSControl::AddAms(std::vectorsingle_info, bool left) {
+ AmsItem* ams_item;
+ AMSModel mode;
+ wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
+
+ if (single_info.size() == 0){
+ return;
+ }
+ else if (single_info.size() == 1){
+ mode = AMSModel::NO_AMS;
+ int w = 30;
+ if (m_nozzle_num == 2)
+ {
+ if (single_info[0].nozzle_id == 0)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_right);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ ams_item = new AmsItem(book_panel, single_info[0], mode);
+ sizer->Add(ams_item, 0, wxLEFT, FromDIP(30));
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetSizer(sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ }
+ else if (single_info[0].nozzle_id == 1)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_left);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ ams_item = new AmsItem(book_panel, single_info[0], mode);
+ sizer->Add(ams_item, 0, wxLEFT, FromDIP(30));
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetSizer(sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ }
+ else if (m_nozzle_num == 1)
+ {
+ if (!left)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_right);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ ams_item = new AmsItem(book_panel, single_info[0], mode);
+ sizer->Add(ams_item, 0, wxLEFT, FromDIP(30));
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetSizer(sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ }
+ else
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_left);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ ams_item = new AmsItem(book_panel, single_info[0], mode);
+ sizer->Add(ams_item, 0, wxLEFT, FromDIP(30));
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetSizer(sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ }
+
+ ams_item->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ m_ams_item_list[single_info[0].ams_id] = ams_item;
+ }
+ else if (single_info.size() == 2)
+ {
+ AmsItem* ext_item;
+ wxBoxSizer* book_sizer = new wxBoxSizer(wxVERTICAL);
+ if (single_info[1].ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || single_info[1].ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID))
+ {
+ mode = AMSModel::NO_AMS;
+ }
+ else
+ {
+ mode = AMSModel::SINGLE_AMS;
+ }
+ if (m_nozzle_num == 2)
+ {
+ if (single_info[1].nozzle_id == 0)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_right);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ ams_item = new AmsItem(book_panel, single_info[0], AMSModel::SINGLE_AMS);
+ ext_item = new AmsItem(book_panel, single_info[1], mode);
+ book_sizer->Add(ams_item);
+ book_sizer->Add(ext_item);
+ book_panel->SetSizer(book_sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ ext_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ }
+ else if (single_info[1].nozzle_id == 1)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_left);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ ams_item = new AmsItem(book_panel, single_info[0], AMSModel::SINGLE_AMS);
+ ext_item = new AmsItem(book_panel, single_info[1], mode);
+ book_sizer->Add(ams_item);
+ book_sizer->Add(ext_item);
+ book_panel->SetSizer(book_sizer);
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ ext_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ }
+ else {
+ if (!left)
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_right);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ ams_item = new AmsItem(book_panel, single_info[0], AMSModel::SINGLE_AMS);
+ ext_item = new AmsItem(book_panel, single_info[1], mode);
+ book_sizer->Add(ams_item);
+ book_sizer->Add(ext_item);
+ book_panel->SetSizer(book_sizer);
+ book_panel->Layout();
+ book_panel->Fit();
+ //m_simplebook_ams_right->RemovePage(m_right_page_index);
+ m_simplebook_ams_right->InsertPage(m_right_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_right_page_index;
+ ext_item->m_selection = m_right_page_index;
+ m_right_page_index++;
+ }
+ else
+ {
+ wxPanel* book_panel = new wxPanel(m_simplebook_ams_left);
+ book_panel->SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ book_panel->SetSize(wxSize(FromDIP(264), FromDIP(150)));
+ book_panel->SetMinSize(wxSize(FromDIP(264), FromDIP(150)));
+ ams_item = new AmsItem(book_panel, single_info[0], AMSModel::SINGLE_AMS);
+ ext_item = new AmsItem(book_panel, single_info[1], mode);
+ book_sizer->Add(ams_item);
+ book_sizer->Add(ext_item);
+ book_panel->SetSizer(book_sizer);
+ //m_simplebook_ams_left->RemovePage(m_left_page_index);
+ m_simplebook_ams_left->InsertPage(m_left_page_index, book_panel, wxEmptyString, true);
+ ams_item->m_selection = m_left_page_index;
+ ext_item->m_selection = m_left_page_index;
+ m_left_page_index++;
+ }
+ }
+
+ m_ams_item_list[single_info[0].ams_id] = ams_item;
+ m_ams_item_list[single_info[1].ams_id] = ext_item;
+ }
+ m_simplebook_ams_left->Layout();
+ m_simplebook_ams_right->Layout();
+ m_simplebook_ams_left->Refresh();
+ m_simplebook_ams_right->Refresh();
+}
+
+//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;
+// }
+//}
+
+void AMSControl::AddAmsPreview(std::vectorsingle_info) {
- m_simplebook_extra_cans->AddPage(amscans, wxEmptyString, false);
- amscans->m_selection = m_simplebook_extra_cans->GetPageCount() - 1;
}
void AMSControl::SwitchAms(std::string ams_id)
{
if(ams_id == m_current_show_ams){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);
+ }
+
+ /*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);
}
- }
+ }*/
- for (auto i = 0; i < m_ams_item_list.GetCount(); i++) {
- AmsItems *item = m_ams_item_list[i];
- if (item->amsItem->m_amsinfo.ams_id == m_current_show_ams) {
- item->amsItem->OnSelected();
- m_current_senect = ams_id;
-
- //bool ready_selected = false;
- //for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- // AmsCansWindow* ams = m_ams_cans_list[i];
- // if (ams->amsCans->m_info.ams_id == ams_id) {
- // //ams->amsCans->SetDefSelectCan();
- // //m_vams_lib->OnSelected();
- // if () {
-
- // }
- // }
- //}
+ for (auto prv_it : m_ams_preview_list) {
+ AMSPreview* prv = prv_it.second;
+ if (prv->m_amsinfo.ams_id == m_current_show_ams) {
+ prv->OnSelected();
+ m_current_select = ams_id;
bool ready_selected = false;
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow* ams = m_ams_cans_list[i];
- if (ams->amsCans->m_info.ams_id == ams_id) {
- for (auto lib : ams->amsCans->m_can_lib_list) {
- if (lib->canLib->is_selected()) {
+ for (auto item_it : m_ams_item_list) {
+ AmsItem* item = item_it.second;
+ if (item->m_info.ams_id == ams_id) {
+ for (auto lib_it : item->m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ if (lib->is_selected()) {
ready_selected = true;
}
}
}
}
- if (!ready_selected) {
- m_current_ams = std::to_string(VIRTUAL_TRAY_MAIN_ID);
- m_vams_lib->OnSelected();
- }
- else {
- m_current_ams = ams_id;
- m_vams_lib->UnSelected();
- }
+ //if (!ready_selected) {
+ // m_current_ams = std::to_string(VIRTUAL_TRAY_MAIN_ID);
+ // //m_vams_lib->OnSelected();
+ //}
+ //else {
+ // m_current_ams = ams_id;
+ // //m_vams_lib->UnSelected();
+ //}
+ m_current_ams = ams_id;
} else {
- item->amsItem->UnSelected();
+ prv->UnSelected();
}
- m_sizer_top->Layout();
- m_panel_top->Fit();
+
+ if (prv->m_amsinfo.nozzle_id == 1) {
+ m_sizer_items_left->Layout();
+ m_panel_items_left->Fit();
+ }
+ else if (prv->m_amsinfo.nozzle_id == 0)
+ {
+ m_sizer_items_right->Layout();
+ m_panel_items_right->Fit();
+ }
+
}
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
- if (cans->amsCans->m_info.ams_id == ams_id) {
+ for (auto ams_item : m_ams_item_list) {
+ AmsItem* item = ams_item.second;
+ if (item->m_info.ams_id == ams_id) {
+
+ /*if (m_ams_model == AMSModel::GENERIC_AMS) {
+ if (item->m_info.nozzle_id == 1)
+ {
+ m_simplebook_ams_left->SetSelection(item->m_selection);
+ }
+ else if (item->m_info.nozzle_id == 0)
+ {
+ m_simplebook_ams_right->SetSelection(item->m_selection);
+ }
+
+ }*/
+ if (m_nozzle_num == 2) {
+ if (item->m_info.nozzle_id == 1)
+ {
+ m_simplebook_ams_left->SetSelection(item->m_selection);
+ if (item->m_info.cans.size() == 4)
+ {
+ m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
+ }
+ else {
+ AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ for (auto it : pair_id)
+ {
+ if (it.first == ams_id || it.second == ams_id)
+ {
+ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ break;
+ }
+ }
+ m_down_road->UpdateLeft(m_nozzle_num, mode);
+ }
+
+ }
+ else if (item->m_info.nozzle_id == 0)
+ {
+ m_simplebook_ams_right->SetSelection(item->m_selection);
+ if (item->m_info.cans.size() == 4)
+ {
+ m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
+ }
+ else {
+ AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ for (auto it : pair_id)
+ {
+ if (it.first == ams_id || it.second == ams_id)
+ {
+ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ break;
+ }
+ }
+ m_down_road->UpdateRight(m_nozzle_num, mode);
+ }
+ }
- if (m_ams_model == AMSModel::GENERIC_AMS) {
- m_simplebook_generic_cans->SetSelection(cans->amsCans->m_selection);
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
- m_simplebook_extra_cans->SetSelection(cans->amsCans->m_selection);
+ else if (m_nozzle_num == 1) {
+ for (auto id : m_item_ids[0])
+ {
+ if (id == item->m_info.ams_id)
+ {
+ m_simplebook_ams_left->SetSelection(item->m_selection);
+ if (item->m_info.cans.size() == 4)
+ {
+ m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
+ }
+ else {
+ AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ for (auto it : pair_id)
+ {
+ if (it.first == ams_id || it.second == ams_id)
+ {
+ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ break;
+ }
+ }
+ m_down_road->UpdateLeft(m_nozzle_num, mode);
+ }
+
+ }
+
+ }
+ for (auto id : m_item_ids[1])
+ {
+ if (id == item->m_info.ams_id)
+ {
+ m_simplebook_ams_right->SetSelection(item->m_selection);
+
+ if (item->m_info.cans.size() == 4)
+ {
+ m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR);
+ }
+ else {
+ AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE;
+ for (auto it : pair_id)
+ {
+ if (it.first == ams_id || it.second == ams_id)
+ {
+ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE;
+ break;
+ }
+ }
+ m_down_road->UpdateRight(m_nozzle_num, mode);
+ }
+
+ }
+ }
}
}
}
- // update extruder
- //m_extruder->OnAmsLoading(false);
+ //update extruder
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) {
@@ -3601,7 +4417,7 @@ void AMSControl::SwitchAms(std::string ams_id)
}
void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type)
-{
+{/*
wxString FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_COUNT] = {
_L("Idling..."),
_L("Heat the nozzle"),
@@ -3669,12 +4485,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."));
@@ -3691,18 +4507,19 @@ void AMSControl::ShowFilamentTip(bool hasams)
bool AMSControl::Enable(bool enable)
{
- for (auto i = 0; i < m_ams_item_list.GetCount(); i++) {
- AmsItems *item = m_ams_item_list[i];
- item->amsItem->Enable(enable);
+ for (auto prv_it : m_ams_preview_list) {
+ AMSPreview* prv = prv_it.second;
+ prv->Enable(enable);
}
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- AmsCansWindow *cans = m_ams_cans_list[i];
- cans->amsCans->Enable(enable);
+ for (auto item_it : m_ams_item_list) {
+ AmsItem* item = item_it.second;
+ item->Enable(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);
@@ -3711,6 +4528,10 @@ bool AMSControl::Enable(bool enable)
void AMSControl::SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxColour col)
{
+ AmsItem* item = nullptr;
+ if (m_ams_item_list.find(ams_now) != m_ams_item_list.end()){
+ item = m_ams_item_list[ams_now];
+ }
if (m_ams_model == AMSModel::GENERIC_AMS || m_ext_model == AMSModel::GENERIC_AMS ) {
if (!on_off) {
m_extruder->TurnOff();
@@ -3720,15 +4541,17 @@ void AMSControl::SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxC
}
else {
m_extruder->TurnOn(col);
-
- if (ams_now != GetCurentShowAms()) {
- m_extruder->OnAmsLoading(false, col);
- } else {
- m_extruder->OnAmsLoading(true, col);
+ if (item){
+ if (ams_now != GetCurentShowAms()) {
+ m_extruder->OnAmsLoading(false, item->m_info.nozzle_id, col);
+ }
+ else {
+ m_extruder->OnAmsLoading(true, item->m_info.nozzle_id, col);
+ }
}
}
- if (is_vams && on_off) {
+ /*if (is_vams && on_off) {
m_extruder->OnAmsLoading(false);
m_vams_extra_road->OnVamsLoading(true, col);
m_extruder->OnVamsLoading(true, col);
@@ -3738,96 +4561,261 @@ void AMSControl::SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxC
m_vams_extra_road->OnVamsLoading(false);
m_extruder->OnVamsLoading(false);
m_vams_road->OnVamsLoading(false);
- }
+ }*/
}
else if (m_ams_model == AMSModel::EXTRA_AMS || m_ext_model == AMSModel::EXTRA_AMS) {
- if (!is_vams && !on_off) {
+ if (!on_off) {
m_extruder->TurnOff();
- m_extruder->OnVamsLoading(false);
- m_vams_extra_road->OnVamsLoading(false);
- m_vams_road->OnVamsLoading(false);
+ m_extruder->OnAmsLoading(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);
+ m_extruder->OnAmsLoading(true, item->m_info.nozzle_id, col);
}
}
}
+//void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step)
+//{
+// AmsItem *cans = nullptr;
+// auto cansit = m_ams_item_list.find(ams_id);
+// bool notfound = true;
+//
+//
+// if (cansit != m_ams_item_list.end()) {
+// cans = cansit->second;
+// }
+// else {
+// notfound = false;
+// }
+//
+//
+//
+// 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_down_road->UpdatePassRoad(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+// m_vams_extra_road->OnVamsLoading(false);
+// m_extruder->OnVamsLoading(false);
+// m_vams_road->OnVamsLoading(false);
+// }
+//
+// if (notfound) return;
+// if (cans == nullptr) return;
+//
+//
+// m_last_ams_id = ams_id;
+// m_last_tray_id = canid;
+//
+//
+// if (m_ams_model == AMSModel::GENERIC_AMS) {
+// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+// m_extruder->OnAmsLoading(false);
+// }
+//
+// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+// m_extruder->OnAmsLoading(false);
+// }
+//
+// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+// if (m_current_show_ams == ams_id) {
+// m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+// }
+// }
+//
+// if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+// //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+// m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+// }
+// }
+// else if (m_ams_model == AMSModel::EXTRA_AMS) {
+// //cans->SetAmsStepExtra(canid, type, step);
+// if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+// m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+// }
+// else {
+// m_extruder->OnAmsLoading(false);
+// }
+// }
+//
+// 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_can_id = canid;
+// }
+// }
+//}
+
+
void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step)
{
- AmsCansWindow *cans = nullptr;
- bool notfound = true;
+ AmsItem* ams = nullptr;
+ auto amsit = m_ams_item_list.find(ams_id);
+ bool notfound = false;
- for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) {
- cans = m_ams_cans_list[i];
- if (cans->amsCans->m_info.ams_id == ams_id) {
- notfound = false;
- break;
- }
+
+ if (amsit != m_ams_item_list.end()) {
+ ams = amsit->second;
+ }
+ else {
+ notfound = true;
}
-
- 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);
- }
+ //if (ams_id != m_last_ams_id || m_last_tray_id != canid) {
+ // m_down_road->UpdatePassRoad(m_last_ams_id, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // m_down_road->UpdatePassRoad(m_last_ams_id, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // //m_down_road->UpdatePassRoad(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // //m_vams_extra_road->OnVamsLoading(false);
+ // m_extruder->OnVamsLoading(false);
+ // //m_vams_road->OnVamsLoading(false);
+ //}
if (notfound) return;
- if (cans == nullptr) return;
+ if (ams == nullptr) return;
m_last_ams_id = ams_id;
m_last_tray_id = canid;
+ auto model = AMSModel::EXTRA_AMS;
- if (m_ams_model == AMSModel::GENERIC_AMS) {
+ bool left = false;
+ for (auto id : m_item_ids[0]){
+ if (id == ams_id){
+ left = true;
+ break;
+ }
+ }
+ int length = -1;
+
+
+ if (ams->m_info.cans.size() == 4){
+ length = left ? 135 : 149;
+ model = ams->m_info.ams_type;
+ }
+ else if (ams->m_info.cans.size() == 1){
+ for (auto it : pair_id){
+ if (it.first == ams_id){
+ length = left ? 150 : 50;
+ break;
+ }
+ else if (it.second == ams_id){
+ length = left ? 50 : 150;
+ break;
+ }
+ }
+ model = AMSModel::SINGLE_AMS;
+ }
+ if (model == AMSModel::EXTRA_AMS){
+ length = left ? 150 : 50;
+ }
+
+
+ if (model == AMSModel::GENERIC_AMS || model == AMSModel::N3F_AMS || model == AMSModel::EXTRA_AMS) {
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ m_down_road->UpdatePassRoad(canid, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ m_down_road->UpdatePassRoad(canid, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_extruder->OnAmsLoading(false);
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
m_extruder->OnAmsLoading(false);
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- if (m_current_show_ams == ams_id) { m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid)); }
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ if (m_current_show_ams == ams_id) {
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
+ }
}
if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
- cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
- m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
}
}
- else if (m_ams_model == AMSModel::EXTRA_AMS) {
- cans->amsCans->SetAmsStepExtra(canid, type, step);
- if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
- m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));
- }
- else {
+ else if(model == AMSModel::NO_AMS || model == AMSModel::SINGLE_AMS) {
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+ //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ m_down_road->UpdatePassRoad(canid, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ m_down_road->UpdatePassRoad(canid, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
m_extruder->OnAmsLoading(false);
}
+
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ m_extruder->OnAmsLoading(false);
+ }
+
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ if (m_current_show_ams == ams_id) {
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
+ }
+ }
+
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
+ m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid));
+ }
}
+ //if (m_ams_model == AMSModel::GENERIC_AMS) {
+ // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // m_down_road->UpdatePassRoad(canid, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // m_down_road->UpdatePassRoad(canid, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE);
+ // m_extruder->OnAmsLoading(false);
+ // }
+
+ // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ // m_extruder->OnAmsLoading(false);
+ // }
+
+ // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ // if (m_current_show_ams == ams_id) {
+ // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+ // }
+ // }
+
+ // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1);
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2);
+ // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3);
+ // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+ // }
+ //}
+ //else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ // //cans->SetAmsStepExtra(canid, type, step);
+ // if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+ // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid));
+ // }
+ // else {
+ // m_extruder->OnAmsLoading(false);
+ // }
+ //}
+
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;
}
}
@@ -3859,6 +4847,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++) {
@@ -3867,6 +4860,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 22ed4ee5c..12e00a9b5 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -5,6 +5,7 @@
#include "StaticBox.hpp"
#include "StepCtrl.hpp"
#include "Button.hpp"
+#include "AMSItem.hpp"
#include "../DeviceManager.hpp"
#include "slic3r/GUI/Event.hpp"
#include "slic3r/GUI/AmsMappingPopup.hpp"
@@ -13,652 +14,117 @@
#include
#include
-#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)
-#define AMS_CONTROL_DISABLE_COLOUR wxColour(206, 206, 206)
-#define AMS_CONTROL_DISABLE_TEXT_COLOUR wxColour(144, 144, 144)
-#define AMS_CONTROL_WHITE_COLOUR wxColour(255, 255, 255)
-#define AMS_CONTROL_BLACK_COLOUR wxColour(0, 0, 0)
-#define AMS_CONTROL_DEF_BLOCK_BK_COLOUR wxColour(238, 238, 238)
-#define AMS_CONTROL_DEF_LIB_BK_COLOUR wxColour(248, 248, 248)
-#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))
-
-// enum AMSRoadMode{
-// AMS_ROAD_MODE_LEFT,
-// AMS_ROAD_MODE_LEFT_RIGHT,
-// AMS_ROAD_MODE_END,
-//};
namespace Slic3r { namespace GUI {
-enum AMSModel {
- NO_AMS = 0,
- GENERIC_AMS = 1,
- EXTRA_AMS = 2
-};
-
-enum ActionButton {
- ACTION_BTN_CALI = 0,
- ACTION_BTN_LOAD = 1,
- ACTION_BTN_UNLOAD = 2,
- ACTION_BTN_COUNT = 3
-};
-
-enum class AMSRoadMode : int {
- AMS_ROAD_MODE_LEFT,
- AMS_ROAD_MODE_LEFT_RIGHT,
- AMS_ROAD_MODE_END,
- AMS_ROAD_MODE_END_ONLY,
- AMS_ROAD_MODE_NONE,
- AMS_ROAD_MODE_NONE_ANY_ROAD,
- AMS_ROAD_MODE_VIRTUAL_TRAY
-};
-
-enum class AMSPassRoadMode : int {
- AMS_ROAD_MODE_NONE,
- AMS_ROAD_MODE_LEFT,
- AMS_ROAD_MODE_LEFT_RIGHT,
- AMS_ROAD_MODE_END_TOP,
- AMS_ROAD_MODE_END_RIGHT,
- AMS_ROAD_MODE_END_BOTTOM,
-};
-
-enum class AMSAction : int {
- AMS_ACTION_NONE,
- AMS_ACTION_LOAD,
- AMS_ACTION_UNLOAD,
- AMS_ACTION_CALI,
- AMS_ACTION_PRINTING,
- AMS_ACTION_NORMAL,
- AMS_ACTION_NOAMS,
-};
-
-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_COMBO_LOAD_STEP1,
- AMS_ROAD_STEP_COMBO_LOAD_STEP2,
- AMS_ROAD_STEP_COMBO_LOAD_STEP3,
-};
-
-enum class AMSPassRoadType : int {
- AMS_ROAD_TYPE_NONE,
- AMS_ROAD_TYPE_LOAD,
- AMS_ROAD_TYPE_UNLOAD,
-};
-
-enum class AMSCanType : int {
- AMS_CAN_TYPE_NONE,
- AMS_CAN_TYPE_BRAND,
- AMS_CAN_TYPE_THIRDBRAND,
- AMS_CAN_TYPE_EMPTY,
- AMS_CAN_TYPE_VIRTUAL,
-};
-
-enum FilamentStep {
- STEP_IDLE,
- STEP_HEAT_NOZZLE,
- STEP_CUT_FILAMENT,
- STEP_PULL_CURR_FILAMENT,
- STEP_PUSH_NEW_FILAMENT,
- STEP_PURGE_OLD_FILAMENT,
- STEP_FEED_FILAMENT,
- STEP_CONFIRM_EXTRUDED,
- STEP_CHECK_POSITION,
- STEP_COUNT,
-};
-
-enum FilamentStepType {
- STEP_TYPE_LOAD = 0,
- STEP_TYPE_UNLOAD = 1,
- 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_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27))
-#define AMS_CAN_LIB_SIZE wxSize(FromDIP(58), FromDIP(75))
-#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_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))
-
-struct Caninfo
-{
- std::string can_id;
- wxString material_name;
- wxColour material_colour = {*wxWHITE};
- AMSCanType material_state;
- int ctype=0;
- int material_remain = 100;
- int cali_idx = -1;
- std::string filament_id;
- float k = 0.0f;
- float n = 0.0f;
- std::vector material_cols;
-
- bool operator==(const Caninfo &other) const
- {
- return 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 &&
- cali_idx == other.cali_idx &&
- filament_id == other.filament_id &&
- k == other.k &&
- n == other.n &&
- material_cols == other.material_cols;
- }
-};
-
-struct AMSinfo
-{
-public:
- std::string ams_id;
- std::vector cans;
- std::string current_can_id;
- AMSPassRoadSTEP current_step;
- AMSAction current_action;
- int curreent_filamentstep;
- int ams_humidity = 0;
-
- bool operator==(const AMSinfo &other) const
- {
- return ams_id == other.ams_id && cans == other.cans &&
- 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;
- }
-
- bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false);
-};
-
-/*************************************************
-Description:AMSrefresh
-**************************************************/
-#define AMS_REFRESH_PLAY_LOADING_TIMER 100
-class AMSrefresh : public wxWindow
-{
-public:
- AMSrefresh();
- 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();
- 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:
- wxTimer *m_playing_timer= {nullptr};
- int m_rotation_angle = 0;
- bool m_play_loading = {false};
- bool m_selected = {false};
-
- std::string m_ams_id;
- std::string m_can_id;
-
- ScalableBitmap m_bitmap_normal;
- ScalableBitmap m_bitmap_selected;
- ScalableBitmap m_bitmap_ams_rfid_0;
- ScalableBitmap m_bitmap_ams_rfid_1;
- ScalableBitmap m_bitmap_ams_rfid_2;
- ScalableBitmap m_bitmap_ams_rfid_3;
- ScalableBitmap m_bitmap_ams_rfid_4;
- ScalableBitmap m_bitmap_ams_rfid_5;
- ScalableBitmap m_bitmap_ams_rfid_6;
- ScalableBitmap m_bitmap_ams_rfid_7;
- std::vector m_rfid_bitmap_list;
-
- wxString m_refresh_id;
- wxBoxSizer * m_size_body;
- virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
-
- bool m_disable_mode{ false };
-};
-
-/*************************************************
-Description:AMSextruder
-**************************************************/
-class AMSextruderImage: public wxWindow
-{
-public:
- void TurnOn(wxColour col);
- void TurnOff();
- void msw_rescale();
- void paintEvent(wxPaintEvent &evt);
-
- void render(wxDC &dc);
- bool m_turn_on = {false};
- wxColour m_colour;
- ScalableBitmap m_ams_extruder;
- void doRender(wxDC &dc);
- AMSextruderImage(wxWindow *parent, wxWindowID id, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
- ~AMSextruderImage();
-};
-
-
-class AMSextruder : public wxWindow
-{
-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 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();};
-
- 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;
-
- 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);
- ~AMSextruder();
-};
-
-class AMSVirtualRoad : public wxWindow
-{
-public:
- AMSVirtualRoad(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
- ~AMSVirtualRoad();
-
-private:
- bool m_has_vams{ true };
- bool m_vams_loading{ false };
- wxColour m_current_color;
-
-public:
- void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500);
- void SetHasVams(bool hvams) { m_has_vams = hvams; };
- void create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size);
- void paintEvent(wxPaintEvent& evt);
- void render(wxDC& dc);
- void doRender(wxDC& dc);
- void msw_rescale();
-};
-
-/*************************************************
-Description:AMSLib
-**************************************************/
-class AMSLib : public wxWindow
-{
-public:
- AMSLib(wxWindow *parent, Caninfo info);
- void create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
-public:
- wxColour GetLibColour();
- Caninfo m_info;
- MachineObject* m_obj = {nullptr};
- int m_can_index = 0;
- AMSModel m_ams_model;
-
- void Update(Caninfo info, bool refresh = true);
- void UnableSelected() { m_unable_selected = true; };
- void EableSelected() { m_unable_selected = false; };
- void OnSelected();
- void UnSelected();
- bool is_selected() {return m_selected;};
- void post_event(wxCommandEvent &&event);
- void show_kn_value(bool show) { m_show_kn = show; };
- void support_cali(bool sup) { m_support_cali = sup; Refresh(); };
- virtual bool Enable(bool enable = true);
- void set_disable_mode(bool disable) { m_disable_mode = disable; }
- void msw_rescale();
- void on_pass_road(bool pass);
-
-protected:
- wxStaticBitmap *m_edit_bitmp = {nullptr};
- wxStaticBitmap *m_edit_bitmp_light = {nullptr};
- ScalableBitmap m_bitmap_editable;
- ScalableBitmap m_bitmap_editable_light;
- ScalableBitmap m_bitmap_readonly;
- ScalableBitmap m_bitmap_readonly_light;
- ScalableBitmap m_bitmap_transparent;
-
- ScalableBitmap m_bitmap_extra_tray_left;
- ScalableBitmap m_bitmap_extra_tray_right;
-
- ScalableBitmap m_bitmap_extra_tray_left_hover;
- ScalableBitmap m_bitmap_extra_tray_right_hover;
-
- ScalableBitmap m_bitmap_extra_tray_left_selected;
- ScalableBitmap m_bitmap_extra_tray_right_selected;
-
- bool m_unable_selected = {false};
- bool m_enable = {false};
- bool m_selected = {false};
- 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;
- wxColour m_road_def_color;
- wxColour m_lib_color;
- bool m_disable_mode{ false };
- bool m_pass_road{false};
-
- void on_enter_window(wxMouseEvent &evt);
- void on_leave_window(wxMouseEvent &evt);
- void on_left_down(wxMouseEvent &evt);
- void paintEvent(wxPaintEvent &evt);
- void render(wxDC &dc);
- void render_extra_text(wxDC& dc);
- void render_generic_text(wxDC& dc);
- void doRender(wxDC& dc);
- void render_extra_lib(wxDC& dc);
- void render_generic_lib(wxDC& dc);
-};
-
-/*************************************************
-Description:AMSRoad
-**************************************************/
-class AMSRoad : public wxWindow
-{
-public:
- AMSRoad();
- AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, int maxcan, 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_canindex = {0};
- AMSRoadMode m_rode_mode = {AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT};
- std::vector m_pass_rode_mode = {AMSPassRoadMode::AMS_ROAD_MODE_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, 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;
-
- void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500);
- void SetPassRoadColour(wxColour col);
- void SetMode(AMSRoadMode mode);
- void OnPassRoad(std::vector prord_list);
- void UpdatePassRoad(int tag_index, AMSPassRoadType type, AMSPassRoadSTEP step);
-
- void paintEvent(wxPaintEvent &evt);
- void render(wxDC &dc);
- void doRender(wxDC &dc);
-};
-
-/*************************************************
-Description:AMSItem
-**************************************************/
-
-class AMSItem : public wxWindow
-{
-public:
- AMSItem();
- AMSItem(wxWindow *parent, wxWindowID id, AMSinfo amsinfo, const wxSize cube_size = wxSize(14, 14), const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
-
- bool m_open = {false};
- void Open();
- void Close();
-
- void Update(AMSinfo amsinfo);
- void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size);
- void OnEnterWindow(wxMouseEvent &evt);
- void OnLeaveWindow(wxMouseEvent &evt);
- void OnSelected();
- void UnSelected();
- virtual bool Enable(bool enable = true);
-
- AMSinfo m_amsinfo;
-
-protected:
- wxSize m_cube_size;
- wxColour m_background_colour = {AMS_CONTROL_DEF_BLOCK_BK_COLOUR};
- int m_padding = {7};
- int m_space = {5};
- bool m_hover = {false};
- bool m_selected = {false};
- ScalableBitmap* m_ts_bitmap_cube;
-
- void paintEvent(wxPaintEvent &evt);
- void render(wxDC &dc);
- void doRender(wxDC &dc);
- virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
-};
-
-/*************************************************
-Description:AmsCans
-**************************************************/
-class Canrefreshs
-{
-public:
- wxString canID;
- AMSrefresh *canrefresh;
-};
-
-class CanLibs
-{
-public:
- wxString canID;
- AMSLib * canLib;
-};
-
-class CanRoads
-{
-public:
- wxString canID;
- AMSRoad *canRoad;
-};
-
-WX_DEFINE_ARRAY(Canrefreshs *, CanrefreshsHash);
-WX_DEFINE_ARRAY(CanLibs *, CanLibsHash);
-WX_DEFINE_ARRAY(CanRoads *, CansRoadsHash);
-
-class AmsCans : public wxWindow
-{
-public:
- AmsCans();
- AmsCans(wxWindow *parent, AMSinfo info, AMSModel model);
-
- void Update(AMSinfo info);
- void create(wxWindow *parent);
- void AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer);
- void SetDefSelectCan();
- void SelectCan(std::string canid);
- void PlayRridLoading(wxString canid);
- void StopRridLoading(wxString canid);
- 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 can_id);
- void paintEvent(wxPaintEvent& evt);
- void render(wxDC& dc);
- void doRender(wxDC& dc);
- wxColour GetTagColr(wxString canid);
- std::string GetCurrentCan();
-
-public:
- ScalableBitmap m_bitmap_extra_framework;
- int m_canlib_selection = { -1 };
- int m_selection = { 0 };
- int m_can_count = { 0 };
- AMSModel m_ams_model;
- std::string m_canlib_id;
-
- std::string m_road_canid;
- wxColour m_road_colour;
-
- CanLibsHash m_can_lib_list;
- CansRoadsHash m_can_road_list;
- CanrefreshsHash m_can_refresh_list;
- AMSinfo m_info;
- wxBoxSizer * sizer_can = {nullptr};
- wxBoxSizer * sizer_can_middle = {nullptr};
- wxBoxSizer * sizer_can_left = {nullptr};
- wxBoxSizer * sizer_can_right = {nullptr};
- AMSPassRoadSTEP m_step = {AMSPassRoadSTEP ::AMS_ROAD_STEP_NONE};
-};
-
-/*************************************************
-Description:AMSControl
-**************************************************/
-class AmsCansWindow
-{
-public:
- wxString amsIndex;
- AmsCans *amsCans;
- bool m_disable_mode{ false };
-
- void set_disable_mode(bool disable) {
- m_disable_mode = disable;
- for (auto can_lib : amsCans->m_can_lib_list) {
- can_lib->canLib->set_disable_mode(disable);
- }
- for (auto can_refresh : amsCans->m_can_refresh_list) {
- can_refresh->canrefresh->set_disable_mode(disable);
- }
- }
-};
-
-class AmsItems
-{
-public:
- wxString amsIndex;
- AMSItem *amsItem;
-};
-
-class AMSextruders
-{
-public:
- wxString amsIndex;
- AMSextruder *amsextruder;
-};
-
-WX_DEFINE_ARRAY(AmsCansWindow *, AmsCansHash);
-WX_DEFINE_ARRAY(AmsItems *, AmsItemsHash);
-WX_DEFINE_ARRAY(AMSextruders *, AMSextrudersHash);
-
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_slot;
std::string m_current_show_ams;
std::map m_ams_selection;
-
- AmsItemsHash m_ams_item_list;
+
+ std::map m_ams_preview_list;
std::vector m_ams_info;
- AmsCansHash m_ams_cans_list;
- AmsCansHash m_ams_generic_cans_list;
- AmsCansHash m_ams_extra_cans_list;
+ std::vector m_ext_info;
+ std::map m_ams_item_list;
+ //std::map m_ams_generic_item_list;
+ //std::map m_ams_extra_item_list;
+ //std::map m_ams_list;
+
+ int m_nozzle_num = 1;
+ 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_items_left {nullptr};
+ wxWindow* m_panel_items_right{nullptr};
+ wxBoxSizer* m_sizer_items_left{nullptr};
+ wxBoxSizer* m_sizer_items_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};
- AMSextruder *m_extruder = {nullptr};
AmsIntroducePopup m_ams_introduce_popup;
- wxSimplebook *m_simplebook_right = {nullptr};
- wxSimplebook *m_simplebook_calibration = {nullptr};
- wxSimplebook *m_simplebook_amsitems = {nullptr};
- wxSimplebook *m_simplebook_ams = {nullptr};
+ //wxSimplebook *m_simplebook_right{nullptr};
+ wxSimplebook *m_simplebook_ams_left{nullptr};
+ wxSimplebook *m_simplebook_ams_right{ nullptr };
+ wxPanel *m_panel_down_road{ nullptr };
+ int m_left_page_index = 0;
+ int m_right_page_index = 0;
- wxSimplebook *m_simplebook_generic_cans= {nullptr};
- wxSimplebook *m_simplebook_extra_cans = {nullptr};
+ //wxSimplebook* m_simplebook_generic_cans_left{ nullptr };
+ //wxSimplebook* m_simplebook_extra_cans_left {nullptr};
+ //wxSimplebook* m_simplebook_generic_cans_right{ nullptr };
+ //wxSimplebook* m_simplebook_extra_cans_right{ nullptr };
- wxSimplebook *m_simplebook_bottom = {nullptr};
+ 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_top = {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};
- bool m_auto_reill_show = {false};
- 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_top = {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;
- std::string m_last_ams_id;
- std::string m_last_tray_id;
+ std::string m_last_ams_id = "-1";
+ std::string m_last_tray_id = "-1";
public:
std::string GetCurentAms();
@@ -669,6 +135,7 @@ public:
AMSModel m_ams_model{AMSModel::NO_AMS};
AMSModel m_ext_model{AMSModel::NO_AMS};
AMSModel m_is_none_ams_mode{AMSModel::NO_AMS};
+ bool m_single_nozzle_no_ams = { true };
void SetAmsModel(AMSModel mode, AMSModel ext_mode) {m_ams_model = mode; m_ext_model = ext_mode;};
@@ -677,12 +144,6 @@ 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);
@@ -690,11 +151,22 @@ public:
void ShowFilamentTip(bool hasams = true);
void UpdateStepCtrl(bool is_extrusion_exist);
+ void UpdatePassRoad(string ams_id, AMSPassRoadType type, AMSPassRoadSTEP step);
void CreateAms();
- void UpdateAms(std::vector info, bool is_reset = true);
- void AddAms(AMSinfo info);
- void AddAmsItems(AMSinfo info);
- void AddExtraAms(AMSinfo info);
+ void CreateAmsNew();
+ void CreateAmsSingleNozzle();
+ void ClearAms();
+ void UpdateAms(std::vector ams_info, std::vector ext_info, std::string dev_id, bool is_reset = true, bool test = false);
+ void ReadExtInfo(MachineObject* obj);
+
+ void AddAms(AMSinfo info, bool left = true);
+ //void AddExtAms(int ams_id);
+ void AddAmsPreview(AMSinfo info, AMSModel type);
+ //void AddExtraAms(AMSinfo info);
+
+ void AddAms(std::vectorsingle_info, bool left = true);
+ void AddAmsPreview(std::vectorsingle_info);
+ //void AddExtraAms(std::vectorsingle_info);
void SetExtruder(bool on_off, bool is_vams, std::string ams_now, wxColour col);
void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step);
void SwitchAms(std::string ams_id);
@@ -702,6 +174,7 @@ public:
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);
@@ -719,28 +192,12 @@ public:
void post_event(wxEvent&& event);
virtual bool Enable(bool enable = true);
+ void parse_object(MachineObject* obj);
public:
- std::string m_current_senect;
+ std::string m_current_select;
};
-wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
-wxDECLARE_EVENT(EVT_AMS_LOAD, SimpleEvent);
-wxDECLARE_EVENT(EVT_AMS_UNLOAD, SimpleEvent);
-wxDECLARE_EVENT(EVT_AMS_SETTINGS, SimpleEvent);
-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_CLEAR_SPEED_CONTROL, wxCommandEvent);
-
}} // namespace Slic3r::GUI
#endif // !slic3r_GUI_amscontrol_hpp_
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
new file mode 100644
index 000000000..cb4c4e007
--- /dev/null
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -0,0 +1,3228 @@
+#include "AMSItem.hpp"
+#include "Label.hpp"
+#include "../BitmapCache.hpp"
+#include "../I18N.hpp"
+#include "../GUI_App.hpp"
+
+#include
+#include
+
+#include
+
+#include "CalibUtils.hpp"
+
+
+
+namespace Slic3r { namespace GUI {
+
+ static const wxColour AMS_TRAY_DEFAULT_COL = wxColour(255, 255, 255);
+ wxDEFINE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_LOAD, SimpleEvent);
+ wxDEFINE_EVENT(EVT_AMS_UNLOAD, SimpleEvent);
+ wxDEFINE_EVENT(EVT_AMS_SETTINGS, SimpleEvent);
+ wxDEFINE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent);
+ wxDEFINE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_VAMS_ON_FILAMENT_EDIT, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_CLIBRATION_AGAIN, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_CLIBRATION_CANCEL, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_GUIDE_WIKI, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_RETRY, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_SHOW_HUMIDITY_TIPS, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_AMS_UNSELETED_VAMS, wxCommandEvent);
+ wxDEFINE_EVENT(EVT_CLEAR_SPEED_CONTROL, wxCommandEvent);
+
+
+#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), 174)
+#define AMS_SINGLE_CAN_SIZE wxSize(FromDIP(78), 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){
+ this->ams_humidity = ams->humidity;
+ }
+ else{
+ this->ams_humidity = -1;
+ }
+ this->ams_type = AMSModel(ams->type);
+ /*if (humidity_flag) {
+ this->ams_humidity = ams->humidity;
+ }
+ else {
+ this->ams_humidity = -1;
+ }*/
+
+ nozzle_id = ams->nozzle;
+ cans.clear();
+ for (int i = 0; i < 4; i++) {
+ auto it = ams->trayList.find(std::to_string(i));
+ Caninfo info;
+ // tray is exists
+ if (it != ams->trayList.end() && it->second->is_exists) {
+ if (it->second->is_tray_info_ready()) {
+ info.can_id = it->second->id;
+ info.ctype = it->second->ctype;
+ info.material_name = it->second->get_display_filament_type();
+ if (!it->second->color.empty()) {
+ info.material_colour = AmsTray::decode_color(it->second->color);
+ } else {
+ // set to white by default
+ info.material_colour = AMS_TRAY_DEFAULT_COL;
+ }
+
+ for (std::string cols:it->second->cols) {
+ info.material_cols.push_back(AmsTray::decode_color(cols));
+ }
+
+ if (MachineObject::is_bbl_filament(it->second->tag_uid)) {
+ info.material_state = AMSCanType::AMS_CAN_TYPE_BRAND;
+ } else {
+ info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND;
+ }
+
+ if (!MachineObject::is_bbl_filament(it->second->tag_uid) || !remain_flag) {
+ info.material_remain = 100;
+ } else {
+ info.material_remain = it->second->remain < 0 ? 0 : it->second->remain;
+ info.material_remain = it->second->remain > 100 ? 100 : info.material_remain;
+ }
+
+
+ } else {
+ info.can_id = it->second->id;
+ info.material_name = "";
+ info.ctype = 0;
+ info.material_colour = AMS_TRAY_DEFAULT_COL;
+ info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND;
+ wxColour(255, 255, 255);
+ }
+
+ if (it->second->is_tray_info_ready() && obj->cali_version >= 0) {
+ CalibUtils::get_pa_k_n_value_by_cali_idx(obj, it->second->cali_idx, info.k, info.n);
+ }
+ else {
+ info.k = it->second->k;
+ info.n = it->second->n;
+ }
+ } else {
+ info.can_id = i;
+ info.material_state = AMSCanType::AMS_CAN_TYPE_EMPTY;
+ }
+ cans.push_back(info);
+ }
+ return true;
+}
+
+void AMSinfo::ReadExtInfo(AmsTray tray) {
+ this->ams_id = tray.id;
+ Caninfo can;
+ can.can_id = std::to_string(0);
+ can.material_name = tray.filament_setting_id;
+ this->cans.push_back(can);
+ if (tray.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)) {
+ this->nozzle_id = 0;
+ }
+ else {
+ this->nozzle_id = 1;
+ }
+ this->cans[0].material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL;
+ this->cans[0].material_colour = tray.decode_color(tray.color);
+ this->cans[0].material_remain = tray.remain;
+ this->cans[0].material_name = tray.type;
+}
+
+/*************************************************
+Description:AMSExtText
+**************************************************/
+
+AMSExtText::AMSExtText(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
+{
+ wxWindow::Create(parent, id, pos, AMS_REFRESH_SIZE);
+ SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+
+ Bind(wxEVT_PAINT, &AMSExtText::paintEvent, this);
+ SetSize(AMS_REFRESH_SIZE);
+ SetMinSize(AMS_REFRESH_SIZE);
+}
+
+AMSExtText::~AMSExtText() {}
+
+void AMSExtText::msw_rescale()
+{
+ 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(AMS_CONTROL_GRAY800, 2, wxSOLID));
+ auto tsize = dc.GetMultiLineTextExtent(_L("Ext"));
+ dc.SetFont(Label::Body_13);
+ dc.SetTextForeground(AMS_CONTROL_GRAY800);
+ wxPoint pot(FromDIP((size.x - tsize.x) / 2), FromDIP((size.y - tsize.y) / 2));
+ dc.DrawText(_L("Ext"), pot);
+}
+
+
+/*************************************************
+Description:AMSrefresh
+**************************************************/
+
+AMSrefresh::AMSrefresh() { SetFont(Label::Body_10);}
+
+AMSrefresh::AMSrefresh(wxWindow *parent, wxString number, Caninfo info, const wxPoint &pos, const wxSize &size) : AMSrefresh()
+{
+ m_info = info;
+ m_can_id = number.ToStdString();
+ create(parent, wxID_ANY, pos, size);
+}
+
+AMSrefresh::AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint &pos, const wxSize &size) : AMSrefresh()
+{
+ m_info = info;
+ m_can_id = wxString::Format("%d", number).ToStdString();
+ create(parent, wxID_ANY, pos, size);
+}
+
+ AMSrefresh::~AMSrefresh()
+ {
+ if (m_playing_timer) {
+ m_playing_timer->Stop();
+ delete m_playing_timer;
+ m_playing_timer = nullptr;
+ }
+ }
+
+void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
+{
+ wxWindow::Create(parent, id, pos, size, wxBORDER_NONE);
+ SetBackgroundColour(wxColour(240, 240, 240));
+
+ Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this);
+ Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this);
+ Bind(wxEVT_ENTER_WINDOW, &AMSrefresh::OnEnterWindow, this);
+ Bind(wxEVT_LEAVE_WINDOW, &AMSrefresh::OnLeaveWindow, this);
+ Bind(wxEVT_LEFT_DOWN, &AMSrefresh::OnClick, this);
+
+ m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 25);
+ m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 25);
+
+ m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 25);
+ m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 25);
+ m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 25);
+ m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 25);
+ m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 25);
+ m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 25);
+ m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 25);
+ m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 25);
+
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_1);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_2);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_3);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_4);
+ 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);
+
+ m_playing_timer = new wxTimer();
+ m_playing_timer->SetOwner(this);
+ wxPostEvent(this, wxTimerEvent());
+
+ SetSize(AMS_REFRESH_SIZE);
+ SetMinSize(AMS_REFRESH_SIZE);
+ SetMaxSize(AMS_REFRESH_SIZE);
+}
+
+void AMSrefresh::on_timer(wxTimerEvent &event)
+{
+ //if (m_rotation_angle >= m_rfid_bitmap_list.size()) {
+ // m_rotation_angle = 0;
+ //} else {
+ // m_rotation_angle++;
+ //}
+ Refresh();
+}
+
+void AMSrefresh::PlayLoading()
+{
+ 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;
+ m_playing_timer->Stop();
+ m_play_loading = false;
+ Refresh();
+}
+
+void AMSrefresh::OnEnterWindow(wxMouseEvent &evt)
+{
+ m_selected = true;
+ Refresh();
+}
+
+void AMSrefresh::OnLeaveWindow(wxMouseEvent &evt)
+{
+ m_selected = false;
+ Refresh();
+}
+
+void AMSrefresh::OnClick(wxMouseEvent &evt) {
+ post_event(wxCommandEvent(EVT_AMS_REFRESH_RFID));
+}
+
+void AMSrefresh::post_event(wxCommandEvent &&event)
+{
+ if (m_disable_mode)
+ return;
+ event.SetString(m_info.can_id);
+ event.SetEventObject(m_parent);
+ wxPostEvent(m_parent, event);
+ event.Skip();
+}
+
+void AMSrefresh::paintEvent(wxPaintEvent &evt)
+{
+ wxSize size = GetSize();
+ wxPaintDC dc(this);
+
+ auto colour = StateColor::darkModeColorFor(AMS_CONTROL_GRAY700);
+ if (!wxWindow::IsEnabled()) { colour = AMS_CONTROL_GRAY500; }
+
+ auto pot = wxPoint((size.x - m_bitmap_selected.GetBmpSize().x) / 2, (size.y - m_bitmap_selected.GetBmpSize().y) / 2);
+
+ if (!m_disable_mode) {
+ if (!m_play_loading) {
+ dc.DrawBitmap(m_selected ? m_bitmap_selected.bmp() : m_bitmap_normal.bmp(), pot);
+ }
+ else {
+ /* m_bitmap_rotation = ScalableBitmap(this, "ams_refresh_normal", 30);
+ auto image = m_bitmap_rotation.bmp().ConvertToImage();
+ wxPoint offset;
+ auto loading_img = image.Rotate(m_rotation_angle, wxPoint(image.GetWidth() / 2, image.GetHeight() / 2), true, &offset);
+ ScalableBitmap loading_bitmap;
+ loading_bitmap.bmp() = wxBitmap(loading_img);
+ dc.DrawBitmap(loading_bitmap.bmp(), offset.x , offset.y);*/
+ m_rotation_angle++;
+ if (m_rotation_angle >= m_rfid_bitmap_list.size()) {
+ m_rotation_angle = 0;
+ }
+ if (m_rfid_bitmap_list.size() <= 0)return;
+ dc.DrawBitmap(m_rfid_bitmap_list[m_rotation_angle].bmp(), pot);
+ }
+ }
+
+ dc.SetPen(wxPen(colour));
+ dc.SetBrush(wxBrush(colour));
+ dc.SetFont(Label::Body_11);
+ //dc.SetTextForeground(colour);
+ auto tsize = dc.GetTextExtent(m_refresh_id);
+ pot = wxPoint((size.x - tsize.x) / 2, (size.y - tsize.y) / 2);
+ dc.DrawText(m_refresh_id, pot);
+}
+
+void AMSrefresh::Update(std::string ams_id, Caninfo info)
+{
+ m_ams_id = ams_id;
+ m_info = info;
+
+ if (!m_ams_id.empty() && !m_can_id.empty()) {
+ auto aid = atoi(m_ams_id.c_str());
+ auto tid = atoi(m_can_id.c_str());
+ auto tray_id = aid * 4 + tid;
+ m_refresh_id = wxGetApp().transition_tridid(tray_id);
+ }
+ StopLoading();
+}
+
+void AMSrefresh::msw_rescale() {
+ m_bitmap_normal = ScalableBitmap(this, "ams_refresh_normal", 25);
+ m_bitmap_selected = ScalableBitmap(this, "ams_refresh_selected", 25);
+ m_bitmap_ams_rfid_0 = ScalableBitmap(this, "ams_rfid_0", 25);
+ m_bitmap_ams_rfid_1 = ScalableBitmap(this, "ams_rfid_1", 25);
+ m_bitmap_ams_rfid_2 = ScalableBitmap(this, "ams_rfid_2", 25);
+ m_bitmap_ams_rfid_3 = ScalableBitmap(this, "ams_rfid_3", 25);
+ m_bitmap_ams_rfid_4 = ScalableBitmap(this, "ams_rfid_4", 25);
+ m_bitmap_ams_rfid_5 = ScalableBitmap(this, "ams_rfid_5", 25);
+ m_bitmap_ams_rfid_6 = ScalableBitmap(this, "ams_rfid_6", 25);
+ m_bitmap_ams_rfid_7 = ScalableBitmap(this, "ams_rfid_7", 25);
+
+ m_rfid_bitmap_list.clear();
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_0);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_1);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_2);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_3);
+ m_rfid_bitmap_list.push_back(m_bitmap_ams_rfid_4);
+ 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);
+}
+
+void AMSrefresh::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+{
+ wxWindow::DoSetSize(x, y, width, height, sizeFlags);
+}
+
+/*************************************************
+Description:AMSextruder
+**************************************************/
+void AMSextruderImage::OnAmsLoading(bool load, wxColour col)
+{
+ m_ams_loading = load;
+ m_colour = col;
+ Refresh();
+}
+
+void AMSextruderImage::TurnOff()
+{
+ m_colour = AMS_EXTRUDER_DEF_COLOUR;
+ Refresh();
+}
+
+void AMSextruderImage::msw_rescale()
+{
+ //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE);
+ //auto image = m_ams_extruder.ConvertToImage();
+ m_ams_extruder = ScalableBitmap(this, m_file_name, 13);
+ Refresh();
+}
+
+void AMSextruderImage::paintEvent(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSextruderImage::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 AMSextruderImage::doRender(wxDC &dc)
+{
+ auto size = GetSize();
+ //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(3), FromDIP(10), FromDIP(size.x - 6), FromDIP(size.y - 20));
+ }
+ dc.DrawBitmap(m_ams_extruder.bmp(), wxPoint((size.x - m_ams_extruder.GetBmpSize().x) / 2, (size.y - m_ams_extruder.GetBmpSize().y) / 2));
+ }
+}
+
+
+AMSextruderImage::AMSextruderImage(wxWindow *parent, wxWindowID id, string file_name, const wxPoint &pos, const wxSize &size)
+{
+ wxWindow::Create(parent, id, pos, AMS_EXTRUDER_BITMAP_SIZE);
+ SetBackgroundColour(*wxWHITE);
+
+ m_ams_extruder = ScalableBitmap(this, file_name,36);
+ m_file_name = file_name;
+ SetSize(AMS_EXTRUDER_BITMAP_SIZE);
+ SetMinSize(AMS_EXTRUDER_BITMAP_SIZE);
+ SetMaxSize(AMS_EXTRUDER_BITMAP_SIZE);
+
+
+ Bind(wxEVT_PAINT, &AMSextruderImage::paintEvent, this);
+}
+
+AMSextruderImage::~AMSextruderImage() {}
+
+
+
+
+/*************************************************
+Description:AMSExtImage upon ext lib
+**************************************************/
+
+AMSExtImage::AMSExtImage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
+{
+ wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE);
+ SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+
+ m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
+ /*SetSize(wxSize(FromDIP(78), FromDIP(50)));
+ SetMinSize(wxSize(FromDIP(78), FromDIP(50)));
+ SetMaxSize(wxSize(FromDIP(78), FromDIP(50)));*/
+
+ Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this);
+}
+
+AMSExtImage::~AMSExtImage() {}
+
+void AMSExtImage::msw_rescale()
+{
+ //m_ams_extruder.SetSize(AMS_EXTRUDER_BITMAP_SIZE);
+ //auto image = m_ams_extruder.ConvertToImage();
+ m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25);
+ 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));
+ dc.DrawBitmap(m_ams_ext.bmp(), wxPoint(FromDIP((size.x - m_ams_ext.GetBmpSize().x) / 2), FromDIP(0)));
+}
+
+
+//Ams Extruder
+AMSextruder::AMSextruder(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { create(parent, id, pos, size); }
+
+ AMSextruder::~AMSextruder() {}
+
+ void AMSextruder::TurnOn(wxColour col)
+ {
+ //m_left_extruder->TurnOn(col);
+ }
+
+void AMSextruder::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);
+ wxWindow::Create(parent, id, pos, wxSize(FromDIP(29), FromDIP(37)), wxBORDER_NONE);
+ //SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
+ SetBackgroundColour(*wxWHITE);
+
+ wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL);
+
+ m_bitmap_sizer = new wxBoxSizer(wxHORIZONTAL);
+
+ m_left_extruder = new AMSextruderImage(this, wxID_ANY, "left_nozzle");
+ m_left_extruder->update(true);
+ m_right_extruder = new AMSextruderImage(this, wxID_ANY, "right_nozzle");
+
+ m_bitmap_sizer->Add(m_left_extruder, 0, wxLEFT, 0);
+ m_bitmap_sizer->Add(m_right_extruder, 0, wxLEFT, 2);
+ SetSizer(m_bitmap_sizer);
+
+ Bind(wxEVT_PAINT, &AMSextruder::paintEvent, this);
+ Layout();
+}
+
+void AMSextruder::OnVamsLoading(bool load, wxColour col)
+{
+ m_vams_loading = load;
+ if (load)m_current_colur = col;
+ Refresh();
+}
+
+void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CONTROL_GRAY500*/)
+{
+ m_ams_loading = load;
+ if (load)m_current_colur = col;
+ if (nozzle_id == 0){
+ m_left_extruder->OnAmsLoading(load, col);
+ m_right_extruder->OnAmsLoading(false, col);
+ }
+ else{
+ m_right_extruder->OnAmsLoading(load, col);
+ m_left_extruder->OnAmsLoading(false, col);
+ }
+ Refresh();
+}
+
+void AMSextruder::paintEvent(wxPaintEvent& evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSextruder::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);
+ }
+ if (m_nozzle_num >= 2) {
+ m_right_extruder->update(true);
+ }
+ else {
+ m_right_extruder->update(false);
+ }
+ memdc.SelectObject(wxNullBitmap);
+ dc.DrawBitmap(bmp, 0, 0);
+#else
+ doRender(dc);
+#endif
+
+}
+
+void AMSextruder::doRender(wxDC& dc)
+{
+ //m_current_colur =
+ wxSize size = GetSize();
+ /*dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID));
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));*/
+
+ /*if (!m_none_ams_mode) {
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+ }*/
+ /*if (m_has_vams) {
+ dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4);
+
+ if (m_vams_loading) {
+
+ if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); }
+ else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); }
+ dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4);
+
+ if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) {
+ dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID));
+ dc.DrawRoundedRectangle(-size.x / 2 - FromDIP(3), size.y * 0.1 + FromDIP(3), size.x, size.y, 3);
+ dc.DrawRoundedRectangle(-size.x / 2 + FromDIP(3), size.y * 0.1 - FromDIP(3), size.x, size.y, 5);
+ }
+ }
+
+ if (m_ams_loading && !m_none_ams_mode) {
+ if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID));}
+ else {dc.SetPen(wxPen(m_current_colur, 6, wxSOLID));}
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+
+ if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) {
+ dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID));
+ dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1);
+ dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1);
+ }
+ }
+ }
+ else {
+ if (m_ams_loading) {
+ if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); }
+ else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); }
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+
+ if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) {
+ dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID));
+ dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1);
+ dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1);
+ }
+ }
+ }*/
+
+}
+
+void AMSextruder::msw_rescale()
+{
+ //m_amsSextruder->msw_rescale();
+ m_left_extruder->msw_rescale();
+ m_right_extruder->msw_rescale();
+ Layout();
+ Update();
+ Refresh();
+}
+
+/*************************************************
+Description:AMSVirtualRoad
+**************************************************/
+
+AMSVirtualRoad::AMSVirtualRoad(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { create(parent, id, pos, size); }
+
+AMSVirtualRoad::~AMSVirtualRoad() {}
+
+void AMSVirtualRoad::OnVamsLoading(bool load, wxColour col)
+{
+ /*m_vams_loading = load;
+ if (load)m_current_color = col;
+ Refresh();*/
+}
+
+void AMSVirtualRoad::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
+{
+ wxWindow::Create(parent, id, pos, wxDefaultSize, wxBORDER_NONE);
+ SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
+ Layout();
+ Bind(wxEVT_PAINT, &AMSVirtualRoad::paintEvent, this);
+}
+
+void AMSVirtualRoad::paintEvent(wxPaintEvent& evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSVirtualRoad::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 AMSVirtualRoad::doRender(wxDC& dc)
+{
+ if (!m_has_vams) return;
+
+ wxSize size = GetSize();
+ if (m_vams_loading) {
+ 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, 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_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);
+ }
+}
+
+
+void AMSVirtualRoad::msw_rescale()
+{
+ Layout();
+ Update();
+ Refresh();
+}
+
+
+/*************************************************
+Description:AMSLib
+**************************************************/
+AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info)
+{
+ m_border_color = (wxColour(130, 130, 128));
+ m_road_def_color = AMS_CONTROL_GRAY500;
+ wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ create(parent);
+
+ Bind(wxEVT_PAINT, &AMSLib::paintEvent, this);
+ Bind(wxEVT_ENTER_WINDOW, &AMSLib::on_enter_window, this);
+ Bind(wxEVT_LEAVE_WINDOW, &AMSLib::on_leave_window, this);
+ Bind(wxEVT_LEFT_DOWN, &AMSLib::on_left_down, this);
+
+ Update(info, ams_idx, false);
+}
+
+AMSLib::~AMSLib()
+{
+}
+
+void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size)
+{
+ wxWindow::Create(parent, id, pos, size);
+
+ SetSize(AMS_CAN_LIB_SIZE);
+ SetMinSize(AMS_CAN_LIB_SIZE);
+ SetMaxSize(AMS_CAN_LIB_SIZE);
+
+ auto m_sizer_body = new wxBoxSizer(wxVERTICAL);
+
+ wxBoxSizer *m_sizer_edit = new wxBoxSizer(wxHORIZONTAL);
+
+ 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", 68);
+ m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 68);
+
+ 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_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_selected = ScalableBitmap(this, "extra_ams_tray_left_selected", 80);
+ m_bitmap_extra_tray_right_selected = ScalableBitmap(this, "extra_ams_tray_right_selected", 80);
+
+
+ m_sizer_body->Add(0, 0, 1, wxEXPAND, 0);
+ m_sizer_body->Add(m_sizer_edit, 0, wxALIGN_CENTER, 0);
+ m_sizer_body->Add(0, 0, 0, wxBOTTOM, GetSize().y * 0.12);
+ SetSizer(m_sizer_body);
+ Layout();
+}
+
+void AMSLib::on_enter_window(wxMouseEvent &evt)
+{
+ m_hover = true;
+ Refresh();
+}
+
+void AMSLib::on_leave_window(wxMouseEvent &evt)
+{
+ m_hover = false;
+ Refresh();
+}
+
+void AMSLib::on_left_down(wxMouseEvent &evt)
+{
+ if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE) {
+ auto size = GetSize();
+ auto pos = evt.GetPosition();
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND ||
+ m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
+
+ auto left = FromDIP(10);
+ auto right = size.x - FromDIP(10);
+ auto top = 0;
+ auto bottom = 0;
+
+ if (m_ams_model == AMSModel::GENERIC_AMS) {
+ top = (size.y - FromDIP(15) - m_bitmap_editable_light.GetBmpSize().y);
+ bottom = size.y - FromDIP(15);
+ }
+ else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ top = (size.y - FromDIP(20) - m_bitmap_editable_light.GetBmpSize().y);
+ bottom = size.y - FromDIP(20);
+ }
+
+ if (pos.x >= left && pos.x <= right && pos.y >= top && top <= bottom) {
+ if (m_selected) {
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
+ post_event(wxCommandEvent(EVT_VAMS_ON_FILAMENT_EDIT));
+ }
+ else {
+ post_event(wxCommandEvent(EVT_AMS_ON_FILAMENT_EDIT));
+ }
+ } else {
+ BOOST_LOG_TRIVIAL(trace) << "current amslib is not selected";
+ }
+ }
+ }
+ }
+}
+
+
+void AMSLib::paintEvent(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSLib::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
+
+ // text
+ /*if (m_ams_model == AMSModel::GENERIC_AMS) {
+ render_generic_text(dc);
+ }
+ else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ render_extra_text(dc);
+ }*/
+ render_generic_text(dc);
+}
+
+void AMSLib::render_extra_text(wxDC& dc)
+{
+ auto tmp_lib_colour = m_info.material_colour;
+
+ change_the_opacity(tmp_lib_colour);
+ auto temp_text_colour = AMS_CONTROL_GRAY800;
+
+ if (tmp_lib_colour.GetLuminance() < 0.6) {
+ temp_text_colour = AMS_CONTROL_WHITE_COLOUR;
+ }
+ else {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ if (m_info.material_remain < 50) {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ if (tmp_lib_colour.Alpha() == 0) {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ dc.SetFont(::Label::Body_13);
+ dc.SetTextForeground(temp_text_colour);
+
+ auto libsize = GetSize();
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND
+ || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND
+ || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
+
+ if (m_info.material_name.empty()) {
+ 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(L("?"), pot);
+ }
+ else {
+ auto tsize = dc.GetMultiLineTextExtent(m_info.material_name);
+ std::vector split_char_arr = { " ", "-" };
+ bool has_split = false;
+ std::string has_split_char = " ";
+
+ for (std::string split_char : split_char_arr) {
+ if (m_info.material_name.find(split_char) != std::string::npos) {
+ has_split = true;
+ has_split_char = split_char;
+ }
+ }
+
+
+ if (has_split) {
+ dc.SetFont(::Label::Body_10);
+ auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char));
+ auto line_bottom = m_info.material_name.substr(m_info.material_name.find(has_split_char));
+
+ auto line_top_tsize = dc.GetMultiLineTextExtent(line_top);
+ auto line_bottom_tsize = dc.GetMultiLineTextExtent(line_bottom);
+
+ auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2 + FromDIP(3), (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y);
+ dc.DrawText(line_top, pot_top);
+
+ auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2 + FromDIP(3), (libsize.y - line_bottom_tsize.y) / 2);
+ dc.DrawText(line_bottom, pot_bottom);
+
+
+ }
+ else {
+ dc.SetFont(::Label::Body_10);
+ auto pot = wxPoint(0, 0);
+ if (m_obj ) {
+ pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(6), (libsize.y - tsize.y) / 2 - FromDIP(5));
+ }
+ dc.DrawText(m_info.material_name, pot);
+ }
+ }
+ }
+
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
+ auto tsize = dc.GetMultiLineTextExtent(_L("/"));
+ auto pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 + FromDIP(3));
+ dc.DrawText(_L("/"), pot);
+ }
+}
+
+void AMSLib::render_generic_text(wxDC &dc)
+{
+ bool show_k_value = true;
+ if (m_obj && (m_obj->cali_version >= 0) && (abs(m_info.k - 0) < 1e-3)) {
+ show_k_value = false;
+ }
+
+ auto tmp_lib_colour = m_info.material_colour;
+ change_the_opacity(tmp_lib_colour);
+
+ auto temp_text_colour = AMS_CONTROL_GRAY800;
+
+ if (tmp_lib_colour.GetLuminance() < 0.6) {
+ temp_text_colour = AMS_CONTROL_WHITE_COLOUR;
+ }
+ else {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ if (m_info.material_remain < 50) {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ if (tmp_lib_colour.Alpha() == 0) {
+ temp_text_colour = AMS_CONTROL_GRAY800;
+ }
+
+ dc.SetFont(::Label::Body_13);
+ dc.SetTextForeground(temp_text_colour);
+ auto alpha = m_info.material_colour.Alpha();
+ if (alpha != 0 && alpha != 255 && alpha != 254) {
+ dc.SetTextForeground(*wxBLACK);
+ }
+
+ auto libsize = GetSize();
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND
+ || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND
+ || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) {
+
+ if (m_info.material_name.empty() /*&& m_info.material_state != AMSCanType::AMS_CAN_TYPE_VIRTUAL*/) {
+ auto tsize = dc.GetMultiLineTextExtent("?");
+ auto pot = wxPoint(0, 0);
+
+ if (m_obj && show_k_value) {
+ pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9));
+ }
+ else {
+ pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
+ }
+ dc.DrawText(L("?"), pot);
+
+ }
+ else {
+ auto tsize = dc.GetMultiLineTextExtent(m_info.material_name);
+ std::vector split_char_arr = { " ", "-" };
+ bool has_split = false;
+ std::string has_split_char = " ";
+
+ for (std::string split_char : split_char_arr) {
+ if (m_info.material_name.find(split_char) != std::string::npos) {
+ has_split = true;
+ has_split_char = split_char;
+ }
+ }
+
+
+ if (has_split) {
+ dc.SetFont(::Label::Body_12);
+
+ auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char));
+ auto line_bottom = m_info.material_name.substr(m_info.material_name.find(has_split_char));
+
+ auto line_top_tsize = dc.GetMultiLineTextExtent(line_top);
+ auto line_bottom_tsize = dc.GetMultiLineTextExtent(line_bottom);
+
+ if (!m_show_kn) {
+ auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2, (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y + FromDIP(6));
+ dc.DrawText(line_top, pot_top);
+
+
+ auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2, (libsize.y - line_bottom_tsize.y) / 2 + FromDIP(4));
+ dc.DrawText(line_bottom, pot_bottom);
+ }
+ else {
+ auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2, (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y - FromDIP(6));
+ dc.DrawText(line_top, pot_top);
+
+ auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2, (libsize.y - line_bottom_tsize.y) / 2 - FromDIP(8));
+ dc.DrawText(line_bottom, pot_bottom);
+ }
+
+
+ }
+ else {
+ auto pot = wxPoint(0, 0);
+ if (m_obj && show_k_value) {
+ pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9));
+ } else {
+ pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
+ }
+ dc.DrawText(m_info.material_name, pot);
+ }
+ }
+
+ //draw k&n
+ if (m_obj && show_k_value) {
+ if (m_show_kn) {
+ wxString str_k = wxString::Format("K %1.3f", m_info.k);
+ wxString str_n = wxString::Format("N %1.3f", m_info.n);
+ dc.SetFont(::Label::Body_11);
+ auto tsize = dc.GetMultiLineTextExtent(str_k);
+ auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y);
+ dc.DrawText(str_k, pot_k);
+ }
+ }
+ }
+
+ if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
+ auto tsize = dc.GetMultiLineTextExtent(_L("Empty"));
+ auto pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
+ dc.DrawText(_L("Empty"), pot);
+ }
+}
+
+void AMSLib::doRender(wxDC &dc)
+{
+ /*if (m_ams_model == AMSModel::GENERIC_AMS) {
+ render_generic_lib(dc);
+ }
+ else if (m_ams_model == AMSModel::EXTRA_AMS) {
+ render_extra_lib(dc);
+ }*/
+ render_generic_lib(dc);
+}
+
+void AMSLib::render_extra_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 tmp_lib_colour = m_info.material_colour;
+ change_the_opacity(tmp_lib_colour);
+
+ auto temp_bitmap_third = m_bitmap_editable_light;
+ auto temp_bitmap_brand = m_bitmap_readonly_light;
+
+ //draw road
+
+
+ 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, wxSOLID));
+ }
+
+ if (m_can_index == 0 || m_can_index == 3) {
+ dc.DrawLine(size.x / 2, size.y / 2, size.x / 2, size.y);
+ }
+ else {
+ dc.DrawLine(size.x / 2, size.y / 2, size.x / 2, 0);
+ }
+
+
+ //draw def background
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(AMS_CONTROL_DEF_LIB_BK_COLOUR));
+ dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0);
+
+ if (tmp_lib_colour.GetLuminance() < 0.6) {
+ temp_bitmap_third = m_bitmap_editable_light;
+ temp_bitmap_brand = m_bitmap_readonly_light;
+ }
+ else {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ if (m_info.material_remain < 50) {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ if (tmp_lib_colour.Alpha() == 0) {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ 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));
+ //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));
+ dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST);
+ left += gwidth;
+ }
+ }
+ else {
+ 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);
+ }
+ 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);
+ }
+ 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)
+ {
+ 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 + FromDIP(2), (size.y - FromDIP(18) - 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 + FromDIP(2), (size.y - FromDIP(18) - temp_bitmap_brand.GetBmpSize().y));
+ }
+ }
+
+ // selected & hover
+ if (m_selected) {
+ dc.DrawBitmap(tray_bitmap_selected.bmp(), (size.x - tray_bitmap_selected.GetBmpSize().x) / 2, (size.y - tray_bitmap_selected.GetBmpSize().y) / 2);
+ }
+ else if (!m_selected && m_hover) {
+ dc.DrawBitmap(tray_bitmap_hover.bmp(), (size.x - tray_bitmap_hover.GetBmpSize().x) / 2, (size.y - tray_bitmap_hover.GetBmpSize().y) / 2);
+ }
+ else {
+ dc.DrawBitmap(tray_bitmap.bmp(), (size.x - tray_bitmap.GetBmpSize().x) / 2, (size.y - tray_bitmap.GetBmpSize().y) / 2);
+ }
+}
+
+
+void AMSLib::render_generic_lib(wxDC &dc)
+{
+ wxSize size = GetSize();
+ auto tmp_lib_colour = m_info.material_colour;
+ change_the_opacity(tmp_lib_colour);
+
+ auto temp_bitmap_third = m_bitmap_editable_light;
+ auto temp_bitmap_brand = m_bitmap_readonly_light;
+
+ //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(m_radius - 2), m_radius);
+ dc.DrawRoundedRectangle(FromDIP(2), FromDIP(2), FromDIP(size.x - 4), FromDIP(size.y - 3), m_radius);
+
+ if (tmp_lib_colour.GetLuminance() < 0.6) {
+ temp_bitmap_third = m_bitmap_editable_light;
+ temp_bitmap_brand = m_bitmap_readonly_light;
+ }
+ else {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ if (m_info.material_remain < 50) {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ if (tmp_lib_colour.Alpha() == 0) {
+ temp_bitmap_third = m_bitmap_editable;
+ temp_bitmap_brand = m_bitmap_readonly;
+ }
+
+ // selected
+ if (m_selected) {
+ 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), 2, 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, 2, 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));
+ }
+ else {
+ 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;
+ int curr_height = height * float(m_info.material_remain * 1.0 / 100.0);
+ dc.SetFont(::Label::Body_13);
+
+ int top = height - curr_height;
+
+ if (m_ams_model == NO_AMS){
+ dc.SetPen(wxPen(wxTRANSPARENT));
+ dc.SetBrush(wxBrush(m_info.material_colour));
+ dc.DrawRectangle(FromDIP(2), FromDIP(2), FromDIP(size.x - 4), FromDIP(size.y - 2));
+
+ 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 (curr_height >= FromDIP(6)) {
+
+ //transparent
+ if (alpha == 0) {
+ dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(4), FromDIP(4));
+ }
+ else if (alpha != 255 && alpha != 254) {
+ if (transparent_changed) {
+ std::string rgb = (tmp_lib_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString();
+ if (rgb.size() == 9) {
+ //delete alpha value
+ rgb = rgb.substr(0, rgb.size() - 2);
+ }
+ float alpha_f = 0.7 * tmp_lib_colour.Alpha() / 255.0;
+ std::vector replace;
+ 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);
+ transparent_changed = false;
+
+ }
+ dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4));
+ }
+ //gradient
+ if (m_info.material_cols.size() > 1) {
+ int left = 2;
+ float total_width = size.x - 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)) {
+ gwidth = (size.x) - left;
+ }
+
+ 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;
+ }
+ }
+ else {
+ //multicolour
+ gwidth = std::round(total_width / m_info.material_cols.size());
+ for (int i = 0; i < m_info.material_cols.size(); i++) {
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ 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, gwidth, curr_height, m_radius);
+#else
+ dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height, m_radius - 1);
+#endif
+ //add rectangle
+ int dr_gwidth = std::round(gwidth * 0.6);
+ if (i == 0) {
+ dc.DrawRectangle(left + gwidth - dr_gwidth, height - curr_height, dr_gwidth, curr_height);
+ }
+ else {
+ dc.DrawRectangle(left + gwidth*i, height - curr_height, dr_gwidth, curr_height);
+ }
+ }
+ else {
+ dc.DrawRectangle(left + gwidth * i, height - curr_height, gwidth, curr_height);
+ }
+ }
+ //reset pen and brush
+ if (m_selected || m_hover) {
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(tmp_lib_colour));
+ }
+ else {
+ dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID));
+ dc.SetBrush(wxBrush(tmp_lib_colour));
+ }
+ }
+ }
+ else {
+ 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);
+#else
+ dc.DrawRoundedRectangle(FromDIP(2), top, FromDIP(size.x - 4), curr_height, m_radius - 1);
+#endif
+ dc.SetBrush(brush);
+ }
+ }
+
+ if (top > 2) {
+ if (curr_height >= FromDIP(6)) {
+ dc.DrawRectangle(FromDIP(2), top, FromDIP(size.x - 4), FromDIP(2));
+ if (alpha != 255 && alpha != 254) {
+ dc.SetPen(wxPen(*wxWHITE));
+ dc.SetBrush(wxBrush(*wxWHITE));
+#ifdef __APPLE__
+ dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , size.x - FromDIP(4), top, m_radius);
+#else
+ dc.DrawRoundedRectangle(FromDIP(2), FromDIP(1) , FromDIP(size.x - 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, wxSOLID));
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+ dc.DrawLine(FromDIP(2), top, FromDIP(size.x - 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, wxSOLID));
+ }
+ else {
+ 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(2), FromDIP(0 + height), FromDIP(size.x - 4), FromDIP(height));
+ dc.DrawLine(FromDIP(2), height, FromDIP(size.x - 4), height);
+#endif
+ }
+ }
+
+ //border
+ 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), FromDIP(size.x - 2), FromDIP(size.y - 1), m_radius);
+#endif
+
+ if (m_selected) {
+ 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), 2, 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, 2, 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)
+ {
+ 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));
+ }
+ }
+}
+
+void AMSLib::on_pass_road(bool pass)
+{
+ if (m_pass_road != pass) {
+ m_pass_road = pass;
+ Refresh();
+ }
+}
+
+void AMSLib::Update(Caninfo info, std::string ams_idx, bool refresh)
+{
+ DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
+ if (!dev) return;
+ if (dev->get_selected_machine() && dev->get_selected_machine() != m_obj) {
+ m_obj = dev->get_selected_machine();
+ }
+ 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;
+ Layout();
+ if (refresh) Refresh();
+}
+
+wxColour AMSLib::GetLibColour() { return m_info.material_colour; }
+
+void AMSLib::OnSelected()
+{
+ if (!wxWindow::IsEnabled()) return;
+ if (m_unable_selected) return;
+
+ post_event(wxCommandEvent(EVT_AMS_ON_SELECTED));
+ m_selected = true;
+ Refresh();
+}
+
+void AMSLib::post_event(wxCommandEvent &&event)
+{
+ int tray_id = atoi(m_ams_id.c_str()) * 4 + atoi(m_info.can_id.c_str());
+ //event.SetString(m_info.can_id);
+ event.SetInt(tray_id);
+ event.SetEventObject(m_parent);
+ wxPostEvent(m_parent, event);
+ event.Skip();
+}
+
+void AMSLib::UnSelected()
+{
+ m_selected = false;
+ Refresh();
+}
+
+bool AMSLib::Enable(bool enable) { return wxWindow::Enable(enable); }
+
+void AMSLib::msw_rescale()
+{
+ //m_bitmap_transparent.msw_rescale();
+ m_bitmap_transparent_def.msw_rescale();
+
+}
+
+/*************************************************
+Description:AMSRoad
+**************************************************/
+AMSRoad::AMSRoad() : m_road_def_color(AMS_CONTROL_GRAY500), m_road_color(AMS_CONTROL_GRAY500) {}
+AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, int maxcan, const wxPoint &pos, const wxSize &size)
+ : AMSRoad()
+{
+ m_info = info;
+ m_canindex = canindex;
+ // road type
+ auto mode = AMSRoadMode::AMS_ROAD_MODE_END;
+ if (m_canindex == 0 && maxcan == 1) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE;
+ } else if (m_canindex == 0 && maxcan > 1) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_END;
+ } else if (m_canindex < (maxcan - 1)) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT;
+ } else if (m_canindex == (maxcan - 1)) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT;
+ } else if (m_canindex == -1 && maxcan == -1) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY;
+ }
+ else {
+ 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);
+ }
+ else {
+ wxSize virtual_size(size.x - 1, size.y + 2);
+ create(parent, id, pos, virtual_size);
+
+ }
+
+ Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this);
+ 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); }
+
+void AMSRoad::Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan)
+{
+ m_amsinfo = amsinfo;
+ m_info = info;
+ m_canindex = canindex;
+ if (m_canindex == 0 && maxcan == 1) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_END_ONLY;
+ } else if (m_canindex == 0 && maxcan > 1) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_END;
+ } else if (m_canindex < (maxcan - 1)) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT;
+ } else if (m_canindex == (maxcan - 1)) {
+ m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT;
+ }
+ m_pass_rode_mode.push_back(AMSPassRoadMode::AMS_ROAD_MODE_NONE);
+ Refresh();
+}
+
+void AMSRoad::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/)
+{
+ /*m_vams_loading = load;
+ if(load)m_road_color = col;
+ Refresh();*/
+}
+
+void AMSRoad::SetPassRoadColour(wxColour col) { m_road_color = col; }
+
+void AMSRoad::SetMode(AMSRoadMode mode)
+{
+ m_rode_mode = mode;
+ Refresh();
+}
+
+void AMSRoad::paintEvent(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSRoad::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 AMSRoad::doRender(wxDC &dc)
+{
+ wxSize size = GetSize();
+
+ 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);
+ }
+
+ // end mode
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END) {
+ dc.SetBrush(wxBrush(m_road_def_color));
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+ dc.DrawLine(size.x / 2, size.y * 0.6, size.x / 2, size.y);
+ dc.DrawLine(size.x / 2, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1);
+ }
+
+ // end mode only
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) {
+ dc.SetBrush(wxBrush(m_road_def_color));
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+ dc.DrawLine(size.x / 2, size.y * 0.6, size.x / 2, size.y);
+ }
+
+ // end none
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_NONE) {
+ dc.SetBrush(wxBrush(m_road_def_color));
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1);
+ dc.DrawLine(size.x / 2, size.y * 0.6, size.x / 2, size.y);
+ // dc.DrawLine(size.x / 2, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1);
+ }
+
+ //virtual road
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY) {
+ dc.SetBrush(wxBrush(m_road_def_color));
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y - 1);
+ }
+
+ // 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, wxSOLID));}
+ else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxSOLID));}
+
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+
+ // left pass mode
+ for (auto pass_mode : m_pass_rode_mode) {
+ switch (pass_mode) {
+ case AMSPassRoadMode::AMS_ROAD_MODE_LEFT: dc.DrawRoundedRectangle(-10, -10, size.x / 2 + 10, size.y * 0.6 + 10, 4); break;
+
+ case AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT: dc.DrawLine(0, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1); break;
+
+ case AMSPassRoadMode::AMS_ROAD_MODE_END_TOP: dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); break;
+
+ case AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM: dc.DrawLine(size.x / 2, size.y * 0.6, size.x / 2, size.y); break;
+
+ case AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT: dc.DrawLine(size.x / 2, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1); break;
+
+ default: break;
+ }
+ }
+
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY && m_vams_loading) {
+ dc.DrawLine(size.x / 2, -1, size.x / 2, size.y - 1);
+ }
+
+ // end mode
+ 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) {}
+
+void AMSRoad::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,
+
+ m_pass_rode_mode.clear();
+ auto left_types = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE, AMSPassRoadMode::AMS_ROAD_MODE_LEFT};
+ auto left_right_types = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE, AMSPassRoadMode::AMS_ROAD_MODE_LEFT, AMSPassRoadMode::AMS_ROAD_MODE_LEFT_RIGHT};
+ auto end_types = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE, AMSPassRoadMode::AMS_ROAD_MODE_END_TOP, AMSPassRoadMode::AMS_ROAD_MODE_END_BOTTOM,
+ AMSPassRoadMode::AMS_ROAD_MODE_END_RIGHT};
+
+ // left
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT) {
+ for (auto i = 0; i < prord_list.size(); i++) {
+ std::vector::iterator iter = std::find(left_types.begin(), left_types.end(), prord_list[i]);
+ if (iter != left_types.end()) m_pass_rode_mode.push_back(prord_list[i]);
+
+ if (prord_list[i] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) {
+ m_pass_rode_mode = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE};
+ break;
+ }
+ }
+ }
+
+ // left right
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT) {
+ for (auto i = 0; i < prord_list.size(); i++) {
+ std::vector::iterator iter = std::find(left_right_types.begin(), left_right_types.end(), prord_list[i]);
+ if (iter != left_right_types.end()) m_pass_rode_mode.push_back(prord_list[i]);
+
+ if (prord_list[i] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) {
+ m_pass_rode_mode = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE};
+ break;
+ }
+ }
+ }
+
+ // left end
+ if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END || m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) {
+ for (auto i = 0; i < prord_list.size(); i++) {
+ std::vector::iterator iter = std::find(end_types.begin(), end_types.end(), prord_list[i]);
+ if (iter != end_types.end()) m_pass_rode_mode.push_back(prord_list[i]);
+
+ if (prord_list[i] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) {
+ m_pass_rode_mode = std::vector{AMSPassRoadMode::AMS_ROAD_MODE_NONE};
+ break;
+ }
+ }
+ }
+}
+
+/*
+
+
+/*************************************************
+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(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);
+ SetMaxSize(size);
+ SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
+ Layout();
+ Fit();
+ Refresh();
+}
+
+void AMSRoadUpPart::Update(AMSinfo amsinfo, Caninfo info)
+{
+ m_amsinfo = amsinfo;
+ m_info = info;
+ 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 == SINGLE_AMS || m_ams_model == NO_AMS){
+ dc.DrawLine(FromDIP(size.x / 2), FromDIP(0), FromDIP(size.x / 2), FromDIP(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(FromDIP(size.x / 2), FromDIP(0), FromDIP(size.x / 2), FromDIP(size.y));
+ }
+ }
+ else{
+ int x_start = 38;
+ int x = x_start;
+ int width = 64;
+ for (int i = 0; i < 4; i++)
+ {
+ dc.DrawLine(FromDIP(x), FromDIP(0), FromDIP(x), FromDIP(21));
+ x += width;
+ }
+ x -= width;
+ dc.DrawLine(FromDIP(x_start), FromDIP(21), FromDIP(x), FromDIP(21));
+ dc.DrawLine(FromDIP(size.x / 2), FromDIP(21), FromDIP(size.x / 2), FromDIP(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 * 64;
+ dc.DrawLine(FromDIP(x), FromDIP(0), FromDIP(x), FromDIP(21));
+ if (x < size.x / 2){
+ dc.DrawLine(FromDIP(x), FromDIP(21), FromDIP(size.x / 2), FromDIP(21));
+ }
+ else {
+ dc.DrawLine(FromDIP(size.x / 2), FromDIP(21), FromDIP(x), FromDIP(21));
+ }
+ if(m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_load_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){
+ dc.DrawLine(FromDIP(size.x / 2), FromDIP(21), FromDIP(size.x / 2), FromDIP(size.y));
+ }
+ }
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(wxColour(194, 194, 194)));
+ dc.DrawRectangle(FromDIP(size.x / 2 - 14), FromDIP(16), 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
+}
+
+
+
+/*************************************************
+Description:AMSRoadDownPart
+**************************************************/
+AMSRoadDownPart::AMSRoadDownPart() : m_road_def_color(AMS_CONTROL_GRAY500), m_road_color(AMS_CONTROL_GRAY500) {}
+AMSRoadDownPart::AMSRoadDownPart(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
+ : AMSRoadDownPart()
+{
+ /*m_info = info;
+ m_canindex = canindex;*/
+ // road type
+ m_left_rode_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ m_right_rode_mode = AMSRoadShowMode::AMS_ROAD_MODE_FOUR;
+ m_selected = false;
+ m_single_nozzle_no_ams = 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(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+
+}
+
+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;
+ if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE && m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE)
+ {
+ m_single_nozzle_no_ams = true;
+ }
+ Refresh();
+}
+void AMSRoadDownPart::UpdateRight(int nozzle_num, AMSRoadShowMode mode) {
+ this->m_right_rode_mode = mode;
+ m_nozzle_num = nozzle_num;
+ if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE && m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE)
+ {
+ m_single_nozzle_no_ams = true;
+ }
+ 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(wxColour col) { m_road_color = 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(FromDIP(size.x / 2 - 7), FromDIP(258));
+ wxPoint right_nozzle_pos = wxPoint(FromDIP(size.x / 2 + 7), 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));
+
+ if (m_left_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE || m_right_rode_mode == AMSRoadShowMode::AMS_ROAD_MODE_NONE)
+ {
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 56), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 56), FromDIP(0), FromDIP(left_nozzle_pos.x - 56), FromDIP(size.y / 2));
+ }
+ else{
+ switch (m_left_rode_mode)
+ {
+ case AMSRoadShowMode::AMS_ROAD_MODE_FOUR:
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 135), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 135), 0, FromDIP(left_nozzle_pos.x - 135), FromDIP(size.y / 2));
+ break;
+ case AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE:
+ dc.DrawLine(left_nozzle_pos.x - 233, FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 115), 0, FromDIP(left_nozzle_pos.x - 115), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 223), 0, FromDIP(left_nozzle_pos.x - 223), FromDIP(size.y / 2));
+ break;
+ case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE:
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 198), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - 198), 0, FromDIP(left_nozzle_pos.x - 198), FromDIP(size.y / 2));
+ break;
+ default:
+ break;
+ }
+
+ switch (m_right_rode_mode)
+ {
+ case AMSRoadShowMode::AMS_ROAD_MODE_FOUR:
+ dc.DrawLine(right_nozzle_pos.x, FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x + 135), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(right_nozzle_pos.x + 135), 0, FromDIP(right_nozzle_pos.x + 135), FromDIP(size.y / 2));
+ break;
+ case AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE:
+ dc.DrawLine(right_nozzle_pos.x, FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x + 223), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(right_nozzle_pos.x + 115), 0, FromDIP(right_nozzle_pos.x + 115), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(right_nozzle_pos.x + 223), 0, FromDIP(right_nozzle_pos.x + 223), FromDIP(size.y / 2));
+ break;
+ case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE:
+ dc.DrawLine(right_nozzle_pos.x, FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x + 72), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(right_nozzle_pos.x + 72), 0, FromDIP(right_nozzle_pos.x + 72), FromDIP(size.y / 2));
+ break;
+ default:
+ break;
+ }
+ }
+
+ 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));
+ }
+ else{
+ if (m_right_rode_mode != AMSRoadShowMode::AMS_ROAD_MODE_NONE){
+ dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2));
+ }
+ dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(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_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){
+ dc.SetPen(wxPen(m_amsinfo.cans[m_canindex].material_colour, 4, wxSOLID));
+ if (m_left_road_length > 0){
+ dc.DrawLine((FromDIP(left_nozzle_pos.x - m_left_road_length)), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x - m_left_road_length), FromDIP(0), FromDIP(left_nozzle_pos.x - m_left_road_length), FromDIP(size.y / 2));
+ }
+ else if (m_right_road_length > 0){
+ dc.DrawLine((FromDIP(left_nozzle_pos.x)), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(0), FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(size.y / 2));
+ if (m_nozzle_num == 1){
+ dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2));
+ dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y));
+ }
+ else{
+ dc.DrawLine(FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y));
+ }
+ }
+ }
+}
+
+void AMSRoadDownPart::UpdatePassRoad(string can_id, bool left, int len, AMSinfo info, AMSPassRoadSTEP step) {
+ m_pass_road_step = step;
+ if (len == -1){
+ m_left_road_length = -1;
+ m_right_road_length = -1;
+ return;
+ }
+ m_canindex = atoi(can_id.c_str());
+ if (m_canindex == -1){
+ return;
+ }
+ m_amsinfo = info;
+ m_left_road_length = left ? len : -1;
+ m_right_road_length = left ? -1 : len;
+ m_pass_road_step = step;
+}
+
+
+/*************************************************
+Description:AMSPreview
+**************************************************/
+AMSPreview::AMSPreview() {}
+
+AMSPreview::AMSPreview(wxWindow* parent, wxWindowID id, AMSinfo amsinfo, AMSModel itemType, const wxPoint& pos, const wxSize& size) : AMSPreview()
+{
+ if (itemType == AMSModel::GENERIC_AMS || itemType == AMSModel::EXTRA_AMS || itemType == AMSModel::N3F_AMS) {
+ create(parent, id, pos, AMS_ITEM_FOUR_SIZE);
+ }
+ else {
+ create(parent, id, pos, AMS_ITEM_SINGLE_SIZE);
+ }
+ m_amsinfo = amsinfo;
+ m_ams_item_type = itemType;
+ //create(parent, id, pos, AMS_PREVIEW_SIZE);
+ Bind(wxEVT_PAINT, &AMSPreview::paintEvent, this);
+ Bind(wxEVT_ENTER_WINDOW, &AMSPreview::OnEnterWindow, this);
+ Bind(wxEVT_LEAVE_WINDOW, &AMSPreview::OnLeaveWindow, this);
+}
+
+void AMSPreview::Open()
+{
+ m_open = true;
+ Show();
+}
+
+void AMSPreview::Close()
+{
+ m_open = false;
+ Hide();
+}
+
+void AMSPreview::Update(AMSinfo amsinfo)
+{
+ m_amsinfo = amsinfo;
+}
+
+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_four_slot_bitmap = new ScalableBitmap(this, "four_slot_ams_item", FromDIP(26));
+ m_single_slot_bitmap = new ScalableBitmap(this, "single_slot_ams_item", FromDIP(26));
+ m_ext_bitmap = new ScalableBitmap(this, "ext_ams_item", FromDIP(24));
+ wxWindow::Create(parent, id, pos, size);
+ SetMinSize(size);
+ SetMaxSize(size);
+ SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR);
+ Refresh();
+}
+
+void AMSPreview::OnEnterWindow(wxMouseEvent &evt)
+{
+ // m_hover = true;
+ // Refresh();
+}
+
+void AMSPreview::OnLeaveWindow(wxMouseEvent &evt)
+{
+ // m_hover = false;
+ // Refresh();
+}
+
+void AMSPreview::OnSelected()
+{
+ if (!wxWindow::IsEnabled()) { return; }
+ m_selected = true;
+ Refresh();
+}
+
+void AMSPreview::UnSelected()
+{
+ m_selected = false;
+ Refresh();
+}
+
+bool AMSPreview::Enable(bool enable) { return wxWindow::Enable(enable); }
+
+void AMSPreview::paintEvent(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSPreview::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 AMSPreview::doRender(wxDC &dc)
+{
+ wxSize size = GetSize();
+ 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);
+
+ auto left = m_padding;
+ auto color = *wxWHITE;
+ //four slot
+ if (m_ams_item_type != AMSModel::NO_AMS && m_ams_item_type != AMSModel::SINGLE_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 = left;
+ 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++) {
+ 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]));
+ float x = 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(), 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, 3);
+ dc.DrawLine(rect.GetRight() - 1, rect.GetTop() + 1, rect.GetLeft() + 1, rect.GetBottom() - 1);
+ }
+ else {
+ dc.DrawRoundedRectangle(rect, 2);
+ }
+ }
+ }
+ left += m_space;
+ }
+
+ 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];
+ 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()));
+ 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.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);
+ }
+ }
+ }
+ else {
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ if (iter.material_cols.size() > 0)
+ {
+ color = iter.material_cols[0];
+ dc.SetBrush(color);
+ }
+ 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, 0);
+ }
+ if (m_ams_item_type == AMSModel::SINGLE_AMS) {
+ auto pot = wxPoint((size.x - m_single_slot_bitmap->GetBmpSize().x) / 2, (size.y - m_single_slot_bitmap->GetBmpSize().y) / 2);
+ dc.DrawBitmap(m_single_slot_bitmap->bmp(), pot);
+ }
+ else {
+ auto pot = wxPoint((size.x - m_ext_bitmap->GetBmpSize().x) / 2, (size.y - m_ext_bitmap->GetBmpSize().y) / 2);
+ dc.DrawBitmap(m_ext_bitmap->bmp(), pot);
+
+ if ((color == *wxWHITE || color.Alpha() == 0) && iter.material_cols.size() <= 1) {
+ dc.SetPen(wxPen(AMS_CONTROL_GRAY500));
+ auto rect = wxRect(FromDIP((size.x - 6) / 2 - 1), FromDIP((size.y - 12) / 2 - 1), AMS_ITEM_CUBE_SIZE.x - FromDIP(1), AMS_ITEM_CUBE_SIZE.y - FromDIP(1));
+ dc.DrawRoundedRectangle(rect, 3);
+ }
+ auto tsize = dc.GetMultiLineTextExtent(_L("Ext"));
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetFont(Label::Body_8);
+ dc.SetTextForeground(AMS_CONTROL_BLACK_COLOUR);
+ pot = wxPoint((size.x - tsize.x) / 2 + FromDIP(3), (size.y + 12) / 2 - FromDIP(1));
+ dc.DrawText(_L("Ext"), pot);
+ }
+ }
+
+ 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.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+ dc.DrawRoundedRectangle(1, 1, size.x - 1, size.y - 1, 3);
+
+ }
+
+ if (m_selected) {
+ dc.SetPen(wxPen(border_colour, 2));
+ dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+ dc.DrawRoundedRectangle(1, 1, size.x-1, size.y-1, 3);
+ }
+}
+
+void AMSPreview::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) { wxWindow::DoSetSize(x, y, width, height, sizeFlags); }
+
+
+
+/*************************************************
+Description:AMSHumidity
+**************************************************/
+
+AMSHumidity::AMSHumidity() {}
+AMSHumidity::AMSHumidity(wxWindow* parent, wxWindowID id, AMSinfo info, const wxPoint& pos, const wxSize& size)
+ : AMSHumidity()
+{
+ m_amsinfo = info;
+ // road type
+
+ 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);
+ 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) {
+ 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);
+ wxPostEvent(GetParent()->GetParent(), show_event);
+
+#ifdef __WXMSW__
+ wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL);
+ wxPostEvent(GetParent()->GetParent(), close_event);
+#endif // __WXMSW__
+
+ }
+ }
+ });
+}
+
+void AMSHumidity::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) {
+ wxWindow::Create(parent, id, pos, size);
+ SetMinSize(size);
+ SetMaxSize(size);
+ SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR);
+ Refresh();
+}
+
+
+void AMSHumidity::Update(AMSinfo amsinfo)
+{
+ m_amsinfo = amsinfo;
+ Refresh();
+}
+
+
+void AMSHumidity::paintEvent(wxPaintEvent& evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AMSHumidity::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 AMSHumidity::doRender(wxDC& dc)
+{
+ wxSize size = GetSize();
+
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(AMS_CONTROL_DEF_BLOCK_BK_COLOUR));
+ // left mode
+ if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { m_show_humidity = true; }
+ else { m_show_humidity = false; }
+ if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) {
+
+ //background
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(AMS_CONTROL_DEF_HUMIDITY_BK_COLOUR));
+ dc.DrawRoundedRectangle(0, 0, FromDIP(size.x), FromDIP(size.y), FromDIP(size.y / 2));
+
+ //hum image
+ int hum_idx = m_amsinfo.ams_humidity - 1;
+ if (wxGetApp().dark_mode()) {
+ hum_idx += 5;
+ }
+ auto hum_img = ams_humidity_img[hum_idx];
+ auto pot = wxPoint(FromDIP(size.x * 0.1), FromDIP((size.y - hum_img.GetBmpSize().y) / 2));
+ dc.DrawBitmap(hum_img.bmp(), pot);
+
+ //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(AMS_CONTROL_BLACK_COLOUR);
+ pot = wxPoint(FromDIP(size.x * 0.3), FromDIP((size.y - tsize.y) / 2));
+ dc.DrawText(hum_percentage, pot);
+
+ pot.x += FromDIP(tsize.x + 5);
+ pot.y += FromDIP(tsize.y / 2 - 4);
+ tsize = dc.GetMultiLineTextExtent(_L("%"));
+ dc.SetFont(Label::Body_12);
+ dc.DrawText(_L("%"), pot);
+
+ //vertical line
+ 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(FromDIP(pot.x + tsize.x + 2), FromDIP(GetSize().y / 2 - 10), FromDIP(pot.x + tsize.x + 2), FromDIP(GetSize().y / 2 + 10));
+
+ //sun image
+ /*pot.x = FromDIP(size.x * 0.69);
+ pot.y = FromDIP((size.y - ams_sun_img.GetBmpHeight()) / 2);*/
+ pot.x = pot.x + tsize.x + 4;
+ pot.y = FromDIP((size.y - ams_sun_img.GetBmpHeight()) / 2);
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.DrawBitmap(ams_sun_img.bmp(), pot);
+
+ }
+ else {
+ //to do ...
+ }
+
+}
+
+
+/*************************************************
+Description:AmsItem
+**************************************************/
+
+AmsItem::AmsItem() {}
+
+AmsItem::AmsItem(wxWindow *parent,AMSinfo info, AMSModel model) : AmsItem()
+{
+ m_bitmap_extra_framework = ScalableBitmap(this, "ams_extra_framework_mid", 40);
+
+ SetDoubleBuffered(true);
+ m_ams_model = model;
+ m_info = info;
+
+ if (m_ams_model == AMSModel::GENERIC_AMS){
+ wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE);
+ }
+ else{
+ wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, AMS_SINGLE_CAN_SIZE);
+ }
+
+ create(parent);
+ SetBackgroundColour(AMS_CONTROL_DEF_LIB_BK_COLOUR);
+ Bind(wxEVT_PAINT, &AmsItem::paintEvent, this);
+}
+
+AmsItem::~AmsItem()
+{
+}
+
+void AmsItem::create(wxWindow *parent)
+{
+ Freeze();
+ //if (m_ams_model == AMSModel::GENERIC_AMS)
+ if (true) {
+ sizer_can = new wxBoxSizer(wxHORIZONTAL);
+ sizer_item = new wxBoxSizer(wxVERTICAL);
+ 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++;
+ }
+ 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_humidity = new AMSHumidity(this, wxID_ANY, m_info);
+ sizer_item->Add(m_humidity, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ }
+ else{
+ if (m_ams_model == NO_AMS){
+ auto ams_ext_image = new AMSExtImage(this, wxID_ANY);
+ sizer_item->Add(ams_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);
+
+ 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(52, 109));
+ amscan->SetMinSize(wxSize(52, 109));
+
+ amscan->SetBackgroundColour(wxColour(240, 240, 240));
+
+ wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxVERTICAL);
+
+ AMSrefresh* m_panel_refresh;
+ AMSExtText* m_panel_text;
+ if (m_ams_model != AMSModel::NO_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::NO_AMS){
+ m_panel_text = new AMSExtText(amscan, wxID_ANY);
+ }
+
+ auto m_panel_lib = new AMSLib(amscan, m_info.ams_id, caninfo);
+
+ 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_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::EXTRA_AMS && m_ams_model != AMSModel::NO_AMS) {
+ m_sizer_ams->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ m_sizer_ams->Add(m_panel_refresh, 0, wxALIGN_CENTER_HORIZONTAL | wxDOWN, 4);
+ m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ }
+ else
+ {
+ if (m_ams_model == AMSModel::NO_AMS){
+ m_sizer_ams->Add(0, 0, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ m_sizer_ams->Add(m_panel_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 4);
+ m_sizer_ams->Add(m_panel_lib, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+ }
+ }
+
+
+ amscan->SetSizer(m_sizer_ams);
+ amscan->Layout();
+ amscan->Fit();
+
+ sizer->Add(amscan, 0, wxUP | wxLEFT | wxRIGHT, 5);
+ /*if (m_ams_model == AMSModel::GENERIC_AMS) {
+ sizer->Add(amscan, 0, wxALL, 0);
+ }
+ else if (m_ams_model == AMSModel::EXTRA_AMS)
+ {
+ if (canindex > 1) {
+ sizer->Prepend(amscan, 0, wxALL, 0);
+ }
+ else {
+ sizer->Add(amscan, 0, wxALL, 0);
+ }
+ }*/
+
+ m_can_lib_list[caninfo.can_id] = m_panel_lib;
+ //m_can_road_list[caninfo.can_id] = m_panel_road;
+}
+
+void AmsItem::Update(AMSinfo info)
+{
+ m_info = info;
+ m_can_count = info.cans.size();
+
+ int i = 0;
+ for (auto refresh_it : m_can_refresh_list) {
+ AMSrefresh *refresh = refresh_it.second;
+ if (i < m_can_count) {
+ refresh->Update(info.ams_id, info.cans[i]);
+ refresh->Show();
+ } else {
+ refresh->Hide();
+ }
+ i++;
+ }
+
+ i = 0;
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ if (i < m_can_count) {
+ lib->Update(info.cans[i], info.ams_id);
+ lib->Show();
+ }
+ else {
+ lib->Hide();
+ }
+ i++;
+ }
+
+ if (true || m_ams_model == AMSModel::GENERIC_AMS) {
+ /*m_panel_road->Update(m_info, info.cans[0]);
+ m_panel_road->Show();*/
+ }
+ Layout();
+}
+
+void AmsItem::SetDefSelectCan()
+{
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ m_canlib_selection =lib->m_can_index;
+ m_canlib_id = lib->m_info.can_id;
+ SelectCan(m_canlib_id);
+ break;
+ }
+}
+
+
+void AmsItem::SelectCan(std::string canid)
+{
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ if (lib->m_info.can_id == canid) {
+ m_canlib_selection = lib->m_can_index;
+ }
+ }
+
+ m_canlib_id = canid;
+
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ if (lib->m_info.can_id == m_canlib_id) {
+ wxCommandEvent evt(EVT_AMS_UNSELETED_VAMS);
+ evt.SetString(m_info.ams_id);
+ wxPostEvent(GetParent()->GetParent(), evt);
+ lib->OnSelected();
+ } else {
+ lib->UnSelected();
+ }
+ }
+}
+
+wxColour AmsItem::GetTagColr(wxString canid)
+{
+ 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();
+ }
+ return tag_colour;
+}
+
+void AmsItem::SetAmsStepExtra(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step)
+{
+ if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) {
+ SetAmsStep(canid.ToStdString());
+ }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) {
+ SetAmsStep(canid.ToStdString());
+ }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) {
+ SetAmsStep(canid.ToStdString());
+ }else if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) {
+ SetAmsStep("");
+ }
+}
+
+void AmsItem::SetAmsStep(std::string amsid, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step)
+{
+ m_panel_road->UpdatePassRoad(amsid, canid, type, step);
+
+}
+
+//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) {
+ m_road_canid = can_id;
+ Refresh();
+ }
+}
+
+void AmsItem::PlayRridLoading(wxString canid)
+{
+ for (auto refresh_it : m_can_refresh_list) {
+ AMSrefresh* refresh = refresh_it.second;
+ if (refresh->m_info.can_id == canid) { refresh->PlayLoading(); }
+ }
+}
+
+std::string AmsItem::GetCurrentCan()
+{
+ if (m_canlib_selection < 0)
+ return "";
+
+ return wxString::Format("%d", m_canlib_selection).ToStdString();
+}
+
+void AmsItem::paintEvent(wxPaintEvent& evt)
+{
+ wxPaintDC dc(this);
+ render(dc);
+}
+
+void AmsItem::render(wxDC& dc)
+{
+ /*this->SetSize(AMS_CANS_WINDOW_SIZE);
+ this->SetMinSize(AMS_CANS_WINDOW_SIZE);*/
+#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 AmsItem::doRender(wxDC& dc)
+{
+ /*if (m_ams_model == AMSModel::GENERIC_AMS)
+ {
+
+ this->SetSize(AMS_CANS_WINDOW_SIZE);
+ this->SetMinSize(AMS_CANS_WINDOW_SIZE);
+ }
+ else
+ {
+ this->SetSize(AMS_SINGLE_CAN_SIZE);
+ this->SetMinSize(AMS_SINGLE_CAN_SIZE);
+ }*/
+ wxSize size = GetSize();
+ //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);
+
+ //road for extra
+ /*if (m_ams_model == AMSModel::EXTRA_AMS) {
+
+ auto end_top = size.x / 2 - FromDIP(99);
+ auto passroad_width = 6;
+
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+
+ if (m_road_canid.empty()) {
+ lib->on_pass_road(false);
+ }
+ else {
+ if (lib->m_info.can_id == m_road_canid) {
+ m_road_colour = lib->m_info.material_colour;
+ lib->on_pass_road(true);
+ }
+ }
+ }
+
+ }*/
+
+ // A1
+ // dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID));
+ // dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+
+ // try
+ // {
+ // auto a1_top = size.y / 2 - FromDIP(4);
+ // auto a1_left = m_can_lib_list[0]->canLib->GetScreenPosition().x + m_can_lib_list[0]->canLib->GetSize().x / 2;
+ // auto local_pos1 = GetScreenPosition().x + GetSize().x / 2;
+ // a1_left = size.x / 2 + (a1_left - local_pos1);
+ // dc.DrawLine(a1_left, FromDIP(30), a1_left, a1_top);
+ // dc.DrawLine(a1_left, a1_top, end_top, a1_top);
+
+
+ // // A2
+ // auto a2_top = size.y / 2 + FromDIP(8);
+ // auto a2_left = m_can_lib_list[1]->canLib->GetScreenPosition().x + m_can_lib_list[1]->canLib->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, a2_top, end_top, a2_top);
+
+ // // A3
+ // auto a3_top = size.y / 2 + FromDIP(4);
+ // auto a3_left = m_can_lib_list[2]->canLib->GetScreenPosition().x + m_can_lib_list[2]->canLib->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);
+ // dc.DrawLine(a3_left, a3_top, end_top, a3_top);
+
+
+ // // A4
+ // auto a4_top = size.y / 2;
+ // auto a4_left = m_can_lib_list[3]->canLib->GetScreenPosition().x + m_can_lib_list[3]->canLib->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, a4_top, end_top, a4_top);
+
+
+ // if (!m_road_canid.empty()) {
+ // if (m_road_canid == "0") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(a1_left, FromDIP(30), a1_left, a1_top);
+ // dc.DrawLine(a1_left, a1_top, end_top, a1_top);
+ // }
+
+ // if (m_road_canid == "1") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(a2_left, FromDIP(160), a2_left, a2_top);
+ // dc.DrawLine(a2_left, a2_top, end_top, a2_top);
+ // }
+
+ // if (m_road_canid == "2") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top);
+ // dc.DrawLine(a3_left, a3_top, end_top, a3_top);
+ // }
+
+ // if (m_road_canid == "3") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(a4_left, FromDIP(30), a4_left, a4_top);
+ // dc.DrawLine(a4_left, a4_top, end_top, a4_top);
+ // }
+ // }
+
+ // //to Extruder
+ // dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID));
+ // dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH));
+
+ // dc.DrawLine(end_top, a1_top, end_top, size.y);
+
+ // if (!m_road_canid.empty()) {
+ // if (!m_road_canid.empty()) {
+ // if (m_road_canid == "0") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(end_top, a1_top, end_top, size.y);
+ // }
+ // else if (m_road_canid == "1") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(end_top, a2_top, end_top, size.y);
+ // }
+ // else if (m_road_canid == "2") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(end_top, a3_top, end_top, size.y);
+ // }
+ // else if (m_road_canid == "3") {
+ // dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID));
+ // dc.DrawLine(end_top, a4_top, end_top, size.y);
+ // }
+ // }
+ // }
+ // }
+ // catch (...){}
+ //}
+}
+
+void AmsItem::StopRridLoading(wxString canid)
+{
+ for (auto refresh_it : m_can_refresh_list) {
+ AMSrefresh* refresh = refresh_it.second;
+ if (refresh->m_info.can_id == canid) { refresh->StopLoading(); }
+ }
+}
+
+void AmsItem::msw_rescale()
+{
+ for (auto refresh_it : m_can_refresh_list) {
+ AMSrefresh* refresh = refresh_it.second;
+ refresh->msw_rescale();
+ }
+
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ lib->msw_rescale();
+ }
+}
+
+void AmsItem::show_sn_value(bool show)
+{
+ for (auto lib_it : m_can_lib_list) {
+ AMSLib* lib = lib_it.second;
+ lib->show_kn_value(show);
+ }
+}
+
+}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp
new file mode 100644
index 000000000..b5dfabb31
--- /dev/null
+++ b/src/slic3r/GUI/Widgets/AMSItem.hpp
@@ -0,0 +1,728 @@
+#ifndef slic3r_GUI_AMSITEM_hpp_
+#define slic3r_GUI_AMSITEM_hpp_
+
+#include "../wxExtensions.hpp"
+#include "StaticBox.hpp"
+#include "StepCtrl.hpp"
+#include "Button.hpp"
+#include "../DeviceManager.hpp"
+#include "slic3r/GUI/Event.hpp"
+#include "slic3r/GUI/AmsMappingPopup.hpp"
+#include
+#include
+#include
+#include
+
+
+#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)
+#define AMS_CONTROL_DISABLE_COLOUR wxColour(206, 206, 206)
+#define AMS_CONTROL_DISABLE_TEXT_COLOUR wxColour(144, 144, 144)
+#define AMS_CONTROL_WHITE_COLOUR wxColour(255, 255, 255)
+#define AMS_CONTROL_BLACK_COLOUR wxColour(0, 0, 0)
+#define AMS_CONTROL_DEF_BLOCK_BK_COLOUR wxColour(238, 238, 238)
+#define AMS_CONTROL_DEF_LIB_BK_COLOUR wxColour(248, 248, 248)
+#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 {
+
+enum AMSModel {
+ NO_AMS = 0, //ext
+ GENERIC_AMS = 1,
+ EXTRA_AMS = 2, //ams-lite
+ N3F_AMS = 3,
+ SINGLE_AMS = 4 //n3s
+};
+
+enum ActionButton {
+ ACTION_BTN_CALI = 0,
+ ACTION_BTN_LOAD = 1,
+ ACTION_BTN_UNLOAD = 2,
+ ACTION_BTN_COUNT = 3
+};
+
+enum class AMSRoadMode : int {
+ AMS_ROAD_MODE_LEFT,
+ AMS_ROAD_MODE_LEFT_RIGHT,
+ AMS_ROAD_MODE_END,
+ AMS_ROAD_MODE_END_ONLY,
+ AMS_ROAD_MODE_NONE,
+ AMS_ROAD_MODE_NONE_ANY_ROAD,
+ AMS_ROAD_MODE_VIRTUAL_TRAY
+};
+
+enum class AMSRoadDownPartLoad : int {
+ AMS_ROAD_MODE_LEFT,
+ AMS_ROAD_MODE_RIGHT,
+ AMS_ROAD_MODE_NONE
+};
+
+enum class AMSRoadShowMode : int {
+ AMS_ROAD_MODE_FOUR,
+ AMS_ROAD_MODE_DOUBLE,
+ AMS_ROAD_MODE_SINGLE,
+ AMS_ROAD_MODE_NONE
+};
+
+enum class AMSPassRoadMode : int {
+ AMS_ROAD_MODE_NONE,
+ AMS_ROAD_MODE_LEFT,
+ AMS_ROAD_MODE_LEFT_RIGHT,
+ AMS_ROAD_MODE_END_TOP,
+ AMS_ROAD_MODE_END_RIGHT,
+ AMS_ROAD_MODE_END_BOTTOM,
+};
+
+enum class AMSAction : int {
+ AMS_ACTION_NONE,
+ AMS_ACTION_LOAD,
+ AMS_ACTION_UNLOAD,
+ AMS_ACTION_CALI,
+ AMS_ACTION_PRINTING,
+ AMS_ACTION_NORMAL,
+ AMS_ACTION_NOAMS,
+};
+
+enum class AMSPassRoadSTEP : int {
+ 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,
+ AMS_ROAD_STEP_COMBO_LOAD_STEP3,
+};
+
+enum class AMSPassRoadType : int {
+ AMS_ROAD_TYPE_NONE,
+ AMS_ROAD_TYPE_LOAD,
+ AMS_ROAD_TYPE_UNLOAD,
+};
+
+enum class AMSCanType : int {
+ AMS_CAN_TYPE_NONE,
+ AMS_CAN_TYPE_BRAND,
+ AMS_CAN_TYPE_THIRDBRAND,
+ AMS_CAN_TYPE_EMPTY,
+ AMS_CAN_TYPE_VIRTUAL,
+};
+
+enum FilamentStep {
+ STEP_IDLE,
+ STEP_HEAT_NOZZLE,
+ STEP_CUT_FILAMENT,
+ STEP_PULL_CURR_FILAMENT,
+ STEP_PUSH_NEW_FILAMENT,
+ STEP_PURGE_OLD_FILAMENT,
+ STEP_FEED_FILAMENT,
+ STEP_CONFIRM_EXTRUDED,
+ STEP_CHECK_POSITION,
+ STEP_COUNT,
+};
+
+
+enum FilamentStepType {
+ STEP_TYPE_LOAD = 0,
+ STEP_TYPE_UNLOAD = 1,
+ STEP_TYPE_VT_LOAD = 2,
+};
+
+#define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(8), FromDIP(14))
+#define AMS_PREVIEW_SIZE wxSize(FromDIP(82), FromDIP(27))
+#define AMS_ITEM_SIZE wxSize(FromDIP(78), FromDIP(184))
+#define AMS_ITEM_FOUR_SIZE wxSize(FromDIP(44), FromDIP(24))
+#define AMS_ITEM_SINGLE_SIZE wxSize(FromDIP(20), FromDIP(24))
+#define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27))
+#define AMS_CAN_LIB_SIZE wxSize(FromDIP(52), FromDIP(80))
+#define AMS_CAN_ROAD_SIZE wxSize(FromDIP(264), FromDIP(50))
+#define AMS_ITEMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(27))
+//#define AMS_CANS_SIZE wxSize(FromDIP(284), FromDIP(184))
+//#define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(196))
+#define AMS_STEP_SIZE wxSize(FromDIP(172), FromDIP(196))
+#define AMS_REFRESH_SIZE wxSize(FromDIP(25), FromDIP(25))
+#define AMS_EXTRUDER_SIZE wxSize(FromDIP(29), FromDIP(37))
+#define AMS_EXTRUDER_BITMAP_SIZE wxSize(FromDIP(13), FromDIP(37))
+#define AMS_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))
+
+struct Caninfo
+{
+ std::string can_id;
+ wxString material_name;
+ wxColour material_colour = {*wxWHITE};
+ AMSCanType material_state;
+ int ctype=0;
+ int material_remain = 100;
+ float k = 0.0f;
+ float n = 0.0f;
+ std::vector material_cols;
+};
+
+struct AMSinfo
+{
+public:
+ std::string ams_id;
+ std::vector cans;
+ int nozzle_id = 0;
+ std::string current_can_id;
+ AMSPassRoadSTEP current_step;
+ AMSAction current_action;
+ int curreent_filamentstep;
+ int ams_humidity = 0;
+ AMSModel ams_type = AMSModel::GENERIC_AMS;
+
+ bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false);
+ void ReadExtInfo(AmsTray tray);
+};
+
+/*************************************************
+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
+**************************************************/
+#define AMS_REFRESH_PLAY_LOADING_TIMER 100
+class AMSrefresh : public wxWindow
+{
+public:
+ AMSrefresh();
+ 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();
+ 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:
+ wxTimer *m_playing_timer= {nullptr};
+ int m_rotation_angle = 0;
+ bool m_play_loading = {false};
+ bool m_selected = {false};
+
+ std::string m_ams_id;
+ std::string m_can_id;
+
+ ScalableBitmap m_bitmap_normal;
+ ScalableBitmap m_bitmap_selected;
+ ScalableBitmap m_bitmap_ams_rfid_0;
+ ScalableBitmap m_bitmap_ams_rfid_1;
+ ScalableBitmap m_bitmap_ams_rfid_2;
+ ScalableBitmap m_bitmap_ams_rfid_3;
+ ScalableBitmap m_bitmap_ams_rfid_4;
+ ScalableBitmap m_bitmap_ams_rfid_5;
+ ScalableBitmap m_bitmap_ams_rfid_6;
+ ScalableBitmap m_bitmap_ams_rfid_7;
+ std::vector m_rfid_bitmap_list;
+
+ wxString m_refresh_id;
+ wxBoxSizer * m_size_body;
+ virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
+
+ bool m_disable_mode{ false };
+};
+
+/*************************************************
+Description:AMSextruder
+**************************************************/
+class AMSextruderImage: public wxWindow
+{
+public:
+ void OnAmsLoading(bool load, wxColour col);
+ void TurnOff();
+ void update(bool show_state) { m_show_state = show_state; };
+ void msw_rescale();
+ void paintEvent(wxPaintEvent &evt);
+
+ void render(wxDC &dc);
+ 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, string file_name, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
+ ~AMSextruderImage();
+};
+
+//AMSExtImage upon ext lib
+class AMSExtImage : public wxWindow
+{
+public:
+ void msw_rescale();
+ void paintEvent(wxPaintEvent& evt);
+
+ void render(wxDC& dc);
+ ScalableBitmap m_ams_ext;
+ void doRender(wxDC& dc);
+ AMSExtImage(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
+ ~AMSExtImage();
+};
+
+
+class AMSextruder : public wxWindow
+{
+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, 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 update(int nozzle_num) { m_nozzle_num = 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;
+ int m_nozzle_num{ 1 };
+
+ wxBoxSizer * m_bitmap_sizer{nullptr};
+ wxPanel * m_bitmap_panel{nullptr};
+ //AMSextruderImage *m_amsSextruder{nullptr};
+ AMSextruderImage* m_left_extruder;
+ AMSextruderImage* m_right_extruder;
+ AMSextruder(wxWindow *parent, wxWindowID id, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
+ ~AMSextruder();
+};
+
+class AMSVirtualRoad : public wxWindow
+{
+public:
+ AMSVirtualRoad(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
+ ~AMSVirtualRoad();
+
+private:
+ bool m_has_vams{ true };
+ bool m_vams_loading{ false };
+ wxColour m_current_color;
+
+public:
+ void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500);
+ void SetHasVams(bool hvams) { m_has_vams = hvams; };
+ void create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size);
+ void paintEvent(wxPaintEvent& evt);
+ void render(wxDC& dc);
+ void doRender(wxDC& dc);
+ void msw_rescale();
+};
+
+/*************************************************
+Description:AMSLib
+**************************************************/
+class AMSLib : public wxWindow
+{
+public:
+ AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info);
+ ~AMSLib();
+ void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
+public:
+ wxColour GetLibColour();
+ Caninfo m_info;
+ MachineObject* m_obj = { nullptr };
+
+ std::string m_ams_id;
+ std::string m_slot_id;
+
+ int m_can_index = 0;
+ bool transparent_changed = { false };
+ AMSModel m_ams_model;
+
+ void Update(Caninfo info, std::string ams_idx, bool refresh = true);
+ void UnableSelected() { m_unable_selected = true; };
+ void EableSelected() { m_unable_selected = false; };
+ void OnSelected();
+ void UnSelected();
+ bool is_selected() {return m_selected;};
+ void post_event(wxCommandEvent &&event);
+ void show_kn_value(bool show) { m_show_kn = show; };
+ void support_cali(bool sup) { m_support_cali = sup; Refresh(); };
+ virtual bool Enable(bool enable = true);
+ void set_disable_mode(bool disable) { m_disable_mode = disable; }
+ void msw_rescale();
+ void on_pass_road(bool pass);
+
+protected:
+ wxStaticBitmap *m_edit_bitmp = {nullptr};
+ wxStaticBitmap *m_edit_bitmp_light = {nullptr};
+ ScalableBitmap m_bitmap_editable;
+ ScalableBitmap m_bitmap_editable_light;
+ 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_left_hover;
+ ScalableBitmap m_bitmap_extra_tray_right_hover;
+
+ ScalableBitmap m_bitmap_extra_tray_left_selected;
+ ScalableBitmap m_bitmap_extra_tray_right_selected;
+
+ bool m_unable_selected = {false};
+ bool m_enable = {false};
+ bool m_selected = {false};
+ bool m_hover = {false};
+ bool m_show_kn = {false};
+ bool m_support_cali = {false};
+
+
+ double m_radius = {4};
+ wxColour m_border_color;
+ wxColour m_road_def_color;
+ wxColour m_lib_color;
+ bool m_disable_mode{ false };
+ bool m_pass_road{false};
+
+ void on_enter_window(wxMouseEvent &evt);
+ void on_leave_window(wxMouseEvent &evt);
+ void on_left_down(wxMouseEvent &evt);
+ void paintEvent(wxPaintEvent &evt);
+ void render(wxDC &dc);
+ void render_extra_text(wxDC& dc);
+ void render_generic_text(wxDC& dc);
+ void doRender(wxDC& dc);
+ void render_extra_lib(wxDC& dc);
+ void render_generic_lib(wxDC& dc);
+};
+
+/*************************************************
+Description:AMSRoad
+**************************************************/
+class AMSRoad : public wxWindow
+{
+public:
+ AMSRoad();
+ AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, int maxcan, 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_canindex = {0};
+ AMSRoadMode m_rode_mode = {AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT};
+ std::vector m_pass_rode_mode = {AMSPassRoadMode::AMS_ROAD_MODE_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, 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;
+
+ void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500);
+ void SetPassRoadColour(wxColour col);
+ void SetMode(AMSRoadMode mode);
+ void OnPassRoad(std::vector prord_list);
+ void UpdatePassRoad(int tag_index, AMSPassRoadType type, AMSPassRoadSTEP step);
+
+ 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, Caninfo info);
+
+ 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);
+};
+
+
+/*************************************************
+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:
+ AMSinfo m_amsinfo;
+ Caninfo m_info;
+ int m_canindex = { 0 };
+ 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 };
+ bool m_single_nozzle_no_ams = { false };
+
+ int m_left_road_length = { -1 };
+ int m_right_road_length = { -1 };
+ int m_passroad_width = { 6 };
+ double m_radius = { 4 };
+ wxColour m_road_def_color;
+ AMSPassRoadType m_pass_road_type = { AMSPassRoadType::AMS_ROAD_TYPE_NONE };
+ AMSPassRoadSTEP m_pass_road_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE };
+
+ wxColour 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);
+
+ 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(AMSRoadDownPartLoad mode);
+ void SetShowMode(AMSRoadShowMode left_mode, AMSRoadShowMode right_mode);
+ void OnPassRoad(std::vector prord_list);
+ void UpdatePassRoad(string can_id, bool left, int len, AMSinfo info, AMSPassRoadSTEP step);
+
+ void paintEvent(wxPaintEvent& evt);
+ void render(wxDC& dc);
+ void doRender(wxDC& dc);
+};
+
+/*************************************************
+Description:AMSPreview
+**************************************************/
+
+class AMSPreview : public wxWindow
+{
+public:
+ AMSPreview();
+ AMSPreview(wxWindow *parent, wxWindowID id, AMSinfo amsinfo, AMSModel itemType = AMSModel::GENERIC_AMS, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
+
+ bool m_open = {false};
+ void Open();
+ void Close();
+
+ void Update(AMSinfo amsinfo);
+ void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size);
+ void OnEnterWindow(wxMouseEvent &evt);
+ void OnLeaveWindow(wxMouseEvent &evt);
+ void OnSelected();
+ void UnSelected();
+ virtual bool Enable(bool enable = true);
+
+ AMSinfo m_amsinfo;
+
+protected:
+ wxSize m_cube_size;
+ wxColour m_background_colour = { AMS_CONTROL_DEF_LIB_BK_COLOUR };
+ float m_padding = { 4.0 };
+ float m_space = { 9.4 };
+ bool m_hover = {false};
+ bool m_selected = {false};
+ AMSModel m_ams_item_type = AMSModel::GENERIC_AMS;
+
+ 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);
+ void doRender(wxDC &dc);
+ virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
+};
+
+
+/*************************************************
+Description:AMSHumidity
+**************************************************/
+class AMSHumidity : public wxWindow
+{
+public:
+ AMSHumidity();
+ AMSHumidity(wxWindow* parent, wxWindowID id, AMSinfo info, 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;
+ int m_canindex = { 0 };
+ bool m_selected = { false };
+ double m_radius = { 12 };
+ void Update(AMSinfo amsinfo);
+
+ 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);
+};
+
+
+/*************************************************
+Description:AmsItem
+**************************************************/
+class AmsItem : public wxWindow
+{
+public:
+ AmsItem();
+ AmsItem(wxWindow *parent, AMSinfo info, AMSModel model);
+ ~AmsItem();
+
+ void Update(AMSinfo info);
+ void create(wxWindow *parent);
+ void AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer);
+ void SetDefSelectCan();
+ void SelectCan(std::string canid);
+ void PlayRridLoading(wxString canid);
+ void StopRridLoading(wxString canid);
+ void msw_rescale();
+ void show_sn_value(bool show);
+ void SetAmsStepExtra(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);
+ void doRender(wxDC& dc);
+ wxColour GetTagColr(wxString canid);
+ std::string GetCurrentCan();
+
+public:
+ ScalableBitmap m_bitmap_extra_framework;
+ int m_canlib_selection = { -1 };
+ int m_selection = { 0 };
+ int m_can_count = { 0 };
+
+ AMSModel m_ams_model;
+ 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;
+ AMSRoadUpPart* m_panel_road;
+ std::map m_can_refresh_list;
+ AMSHumidity* m_humidity;
+
+ AMSinfo m_info;
+ wxBoxSizer * sizer_can = {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};
+};
+
+wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent);
+wxDECLARE_EVENT(EVT_AMS_LOAD, SimpleEvent);
+wxDECLARE_EVENT(EVT_AMS_UNLOAD, SimpleEvent);
+wxDECLARE_EVENT(EVT_AMS_SETTINGS, SimpleEvent);
+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_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_CLEAR_SPEED_CONTROL, wxCommandEvent);
+wxDECLARE_EVENT(EVT_VAMS_ON_FILAMENT_EDIT, wxCommandEvent);
+
+
+
+}} // namespace Slic3r::GUI
+
+#endif // !slic3r_GUI_amscontrol_hpp_