#include "AMSSetting.hpp" #include "I18N.hpp" namespace Slic3r { namespace GUI { AMSSetting::AMSSetting(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style) : DPIDialog(parent, id, wxEmptyString, pos, size, style) { create(); } AMSSetting::~AMSSetting() {} void AMSSetting::create() { wxBoxSizer *m_sizer_main; m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_static_ams_settings = new wxStaticText(this, wxID_ANY, _L("AMS Settings"), wxDefaultPosition, wxDefaultSize, 0); m_static_ams_settings->SetFont(::Label::Head_14); m_static_ams_settings->SetForegroundColour(AMS_SETTING_GREY800); m_sizer_main->Add(m_static_ams_settings, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(24)); m_panel_body = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxTAB_TRAVERSAL); wxBoxSizer *m_sizerl_body; m_sizerl_body = new wxBoxSizer(wxVERTICAL); // checkbox area 1 wxBoxSizer *m_sizer_Insert_material = new wxBoxSizer(wxHORIZONTAL); m_checkbox_Insert_material_auto_read = new ::CheckBox(m_panel_body); m_checkbox_Insert_material_auto_read->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_insert_material_read, this); m_sizer_Insert_material->Add(m_checkbox_Insert_material_auto_read, 0, wxTOP, 1); m_sizer_Insert_material->Add(0, 0, 0, wxLEFT, 12); m_title_Insert_material_auto_read = new wxStaticText(m_panel_body, wxID_ANY, _L("Insertion update"), wxDefaultPosition, wxDefaultSize, 0); m_title_Insert_material_auto_read->SetFont(::Label::Head_13); m_title_Insert_material_auto_read->SetForegroundColour(AMS_SETTING_GREY800); m_title_Insert_material_auto_read->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_Insert_material->Add(m_title_Insert_material_auto_read, 1, wxALL | wxEXPAND, 0); m_sizerl_body->Add(m_sizer_Insert_material, 0, wxEXPAND, 0); m_sizerl_body->Add(0, 0, 0, wxTOP, 8); wxBoxSizer *m_sizer_Insert_material_tip = new wxBoxSizer(wxHORIZONTAL); m_sizer_Insert_material_tip_inline = new wxBoxSizer(wxVERTICAL); m_sizer_Insert_material_tip->Add(0, 0, 0, wxLEFT, 10); // tip line1 m_tip_Insert_material_line1 = new wxStaticText(m_panel_body, wxID_ANY, _L("The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds."), wxDefaultPosition, wxDefaultSize, 0); m_tip_Insert_material_line1->SetFont(::Label::Body_13); m_tip_Insert_material_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_Insert_material_line1->Wrap(AMS_SETTING_BODY_WIDTH); m_tip_Insert_material_line1->Hide(); m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line1, 0, wxEXPAND, 0); // tip line2 m_tip_Insert_material_line2 = new wxStaticText(m_panel_body, wxID_ANY, _L("Note: if new filament is inserted during printing, the AMS will not automatically read any information until printing is completed."), wxDefaultPosition, wxDefaultSize, 0); m_tip_Insert_material_line2->SetFont(::Label::Body_13); m_tip_Insert_material_line2->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line2->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_Insert_material_line2->Wrap(AMS_SETTING_BODY_WIDTH); m_tip_Insert_material_line2->Hide(); m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line2, 0, wxEXPAND | wxTOP, 8); // tip line2 m_tip_Insert_material_line3 = new wxStaticText(m_panel_body, wxID_ANY, _L("When inserting a new filament, the AMS will not automatically read its information, leaving it blank for you to enter manually."), wxDefaultPosition, wxDefaultSize, 0); m_tip_Insert_material_line3->SetFont(::Label::Body_13); m_tip_Insert_material_line3->SetForegroundColour(AMS_SETTING_GREY700); m_tip_Insert_material_line3->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_Insert_material_line3->Wrap(AMS_SETTING_BODY_WIDTH); m_tip_Insert_material_line3->Hide(); m_sizer_Insert_material_tip_inline->Add(m_tip_Insert_material_line3, 0, wxEXPAND, 0); m_sizer_Insert_material_tip->Add(m_sizer_Insert_material_tip_inline, 1, wxALIGN_CENTER, 0); m_sizerl_body->Add(m_sizer_Insert_material_tip, 0, wxEXPAND | wxLEFT, 18); // checkbox area 2 m_sizerl_body->Add(0, 0, 0, wxTOP, 15); wxBoxSizer *m_sizer_starting = new wxBoxSizer(wxHORIZONTAL); m_checkbox_starting_auto_read = new ::CheckBox(m_panel_body); m_checkbox_starting_auto_read->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_starting_read, this); m_sizer_starting->Add(m_checkbox_starting_auto_read, 0, wxTOP, 1); m_sizer_starting->Add(0, 0, 0, wxLEFT, 12); m_title_starting_auto_read = new wxStaticText(m_panel_body, wxID_ANY, _L("Power on update"), wxDefaultPosition, wxDefaultSize, 0); m_title_starting_auto_read->SetFont(::Label::Head_13); m_title_starting_auto_read->SetForegroundColour(AMS_SETTING_GREY800); m_title_starting_auto_read->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_starting->Add(m_title_starting_auto_read, 1, wxEXPAND, 0); m_sizerl_body->Add(m_sizer_starting, 0, wxEXPAND|wxTOP, FromDIP(8)); m_sizerl_body->Add(0, 0, 0, wxTOP, 8); wxBoxSizer *m_sizer_starting_tip = new wxBoxSizer(wxHORIZONTAL); m_sizer_starting_tip->Add(0, 0, 0, wxLEFT, 10); // tip line m_sizer_starting_tip_inline = new wxBoxSizer(wxVERTICAL); m_tip_starting_line1 = new wxStaticText(m_panel_body, wxID_ANY, _L("The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute.The reading process will roll filament spools."), wxDefaultPosition, wxDefaultSize, 0); m_tip_starting_line1->SetFont(::Label::Body_13); m_tip_starting_line1->SetForegroundColour(AMS_SETTING_GREY700); m_tip_starting_line1->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_starting_line1->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_starting_tip_inline->Add(m_tip_starting_line1, 0, wxEXPAND, 0); m_tip_starting_line2 = new wxStaticText(m_panel_body, wxID_ANY, _L("The AMS will not automatically read information from inserted filament during startup and will continue to use the information recorded before the last shutdown."), wxDefaultPosition, wxDefaultSize, 0); m_tip_starting_line2->SetFont(::Label::Body_13); m_tip_starting_line2->SetForegroundColour(AMS_SETTING_GREY700); m_tip_starting_line2->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); m_tip_starting_line2->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_starting_tip_inline->Add(m_tip_starting_line2, 0, wxEXPAND,0); m_sizer_starting_tip->Add(m_sizer_starting_tip_inline, 1, wxALIGN_CENTER, 0); m_sizerl_body->Add(m_sizer_starting_tip, 0, wxLEFT, 18); m_sizerl_body->Add(0, 0, 0, wxTOP, 6); // panel img m_panel_img = new wxPanel(m_panel_body, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); m_panel_img->SetBackgroundColour(AMS_SETTING_GREY200); wxBoxSizer *m_sizer_img = new wxBoxSizer(wxVERTICAL); auto img = new wxStaticBitmap(m_panel_img, wxID_ANY, create_scaled_bitmap("ams_icon", nullptr, 126), wxDefaultPosition, wxDefaultSize); m_sizer_img->Add(img, 0, wxALIGN_CENTER | wxTOP, 26); m_sizer_img->Add(0, 0, 0, wxTOP, 18); /* wxBoxSizer *m_sizer_ams_img_tip = new wxBoxSizer(wxVERTICAL); m_tip_ams_img = new wxStaticText(m_panel_img, wxID_ANY, _L("Click the automatic calibration button to enter the AMS initialization setup program"), wxDefaultPosition, wxDefaultSize, 0); m_tip_ams_img->SetFont(::Label::Body_13); m_tip_ams_img->SetForegroundColour(AMS_SETTING_GREY700); m_tip_ams_img->Wrap(AMS_SETTING_BODY_WIDTH); m_sizer_ams_img_tip->Add(m_tip_ams_img, 0, wxALIGN_CENTER, 0); m_button_auto_demarcate = new Button(m_panel_img, _L("Auto Calibration")); StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_auto_demarcate->SetBackgroundColor(btn_bg_green); m_button_auto_demarcate->SetBorderColor(wxColour(0, 174, 66)); m_button_auto_demarcate->SetTextColor(AMS_SETTING_GREY200); m_button_auto_demarcate->SetMinSize(AMS_SETTING_BUTTON_SIZE); m_button_auto_demarcate->SetCornerRadius(12); m_button_auto_demarcate->Bind(wxEVT_LEFT_DOWN, &AMSSetting::on_select_ok, this); m_sizer_img->Add(m_sizer_ams_img_tip, 1, wxALIGN_CENTER, 0); m_sizer_img->Add(0, 0, 0, wxTOP, 12); m_sizer_img->Add(m_button_auto_demarcate, 0, wxALIGN_CENTER, 0); m_sizer_img->Add(0, 0, 0, wxBOTTOM, 17);*/ m_panel_img->SetSizer(m_sizer_img); m_panel_img->Layout(); m_sizer_img->Fit(m_panel_img); m_sizerl_body->Add(0,0,0,wxTOP, FromDIP(5)); m_sizerl_body->Add(m_panel_img, 1, wxEXPAND | wxALL, FromDIP(5)); m_panel_body->SetSizer(m_sizerl_body); m_panel_body->Layout(); m_sizerl_body->Fit(m_panel_body); m_sizer_main->Add(m_panel_body, 1, wxALL | wxEXPAND, FromDIP(24)); this->SetSizer(m_sizer_main); this->Layout(); m_sizer_main->Fit(this); this->Centre(wxBOTH); // set mode update_insert_material_read_mode(true); update_starting_read_mode(false); } void AMSSetting::update_insert_material_read_mode(bool selected) { m_checkbox_Insert_material_auto_read->SetValue(selected); if (selected) { m_tip_Insert_material_line1->Show(); m_tip_Insert_material_line2->Show(); m_tip_Insert_material_line3->Hide(); } else { m_tip_Insert_material_line1->Hide(); m_tip_Insert_material_line2->Hide(); m_tip_Insert_material_line3->Show(); } m_sizer_Insert_material_tip_inline->Layout(); Layout(); Fit(); } void AMSSetting::update_starting_read_mode(bool selected) { m_checkbox_starting_auto_read->SetValue(selected); if (selected) { // selected m_tip_starting_line1->Show(); m_tip_starting_line2->Hide(); } else { // unselected m_tip_starting_line1->Hide(); m_tip_starting_line2->Show(); } m_sizer_starting_tip_inline->Layout(); Layout(); Fit(); } void AMSSetting::on_select_ok(wxMouseEvent &event) { if (obj) { obj->command_ams_calibrate(ams_id); } } void AMSSetting::on_insert_material_read(wxCommandEvent &event) { // send command if (m_checkbox_Insert_material_auto_read->GetValue()) { // checked m_tip_Insert_material_line1->Show(); m_tip_Insert_material_line2->Show(); m_tip_Insert_material_line3->Hide(); } else { // unchecked m_tip_Insert_material_line1->Hide(); m_tip_Insert_material_line2->Hide(); m_tip_Insert_material_line3->Show(); } m_checkbox_Insert_material_auto_read->SetValue(event.GetInt()); bool start_read_opt = m_checkbox_starting_auto_read->GetValue(); bool tray_read_opt = m_checkbox_Insert_material_auto_read->GetValue(); obj->command_ams_user_settings(ams_id, start_read_opt, tray_read_opt); m_sizer_Insert_material_tip_inline->Layout(); Layout(); Fit(); } void AMSSetting::on_starting_read(wxCommandEvent &event) { if (m_checkbox_starting_auto_read->GetValue()) { // checked m_tip_starting_line1->Show(); m_tip_starting_line2->Hide(); } else { // unchecked m_tip_starting_line1->Hide(); m_tip_starting_line2->Show(); } m_checkbox_starting_auto_read->SetValue(event.GetInt()); bool start_read_opt = m_checkbox_starting_auto_read->GetValue(); bool tray_read_opt = m_checkbox_Insert_material_auto_read->GetValue(); obj->command_ams_user_settings(ams_id, start_read_opt, tray_read_opt); m_sizer_starting_tip_inline->Layout(); Layout(); Fit(); } wxString AMSSetting::append_title(wxString text) { wxString lab; auto * widget = new wxStaticText(m_panel_body, wxID_ANY, text, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); widget->Wrap(AMS_SETTING_BODY_WIDTH); widget->SetMinSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); lab = widget->GetLabel(); widget->Destroy(); return lab; } wxStaticText *AMSSetting::append_text(wxString text) { auto *widget = new wxStaticText(m_panel_body, wxID_ANY, text, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); widget->Wrap(250); widget->SetMinSize(wxSize(250, -1)); return widget; } void AMSSetting::on_dpi_changed(const wxRect &suggested_rect) { m_button_auto_demarcate->SetMinSize(AMS_SETTING_BUTTON_SIZE); } }} // namespace Slic3r::GUI