diff --git a/resources/images/disable_ams_demo_icon.svg b/resources/images/disable_ams_demo_icon.svg
new file mode 100644
index 000000000..25022741c
--- /dev/null
+++ b/resources/images/disable_ams_demo_icon.svg
@@ -0,0 +1,110 @@
+
diff --git a/resources/images/enable_ams.svg b/resources/images/enable_ams.svg
new file mode 100644
index 000000000..22c049e77
--- /dev/null
+++ b/resources/images/enable_ams.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp
index 03efacdf9..d24338c9d 100644
--- a/src/slic3r/GUI/AmsMappingPopup.cpp
+++ b/src/slic3r/GUI/AmsMappingPopup.cpp
@@ -514,4 +514,101 @@ void MappingItem::doRender(wxDC &dc)
}
}
+AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent)
+ :wxPopupTransientWindow(parent, wxBORDER_NONE)
+{
+ SetBackgroundColour(*wxWHITE);
+ wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL);
+
+ m_sizer_main->Add(0, 0, 1, wxTOP, FromDIP(28));
+
+ wxBoxSizer *m_sizer_body = new wxBoxSizer(wxHORIZONTAL);
+
+ m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(20));
+
+ m_panel_enable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, -1), wxTAB_TRAVERSAL);
+ m_panel_enable_ams->SetBackgroundColour(*wxWHITE);
+ wxBoxSizer *sizer_enable_ams = new wxBoxSizer(wxVERTICAL);
+
+ m_title_enable_ams = new wxStaticText(m_panel_enable_ams, wxID_ANY, _L("Enable AMS"), wxDefaultPosition, wxDefaultSize, 0);
+ m_title_enable_ams->SetBackgroundColour(*wxWHITE);
+ m_title_enable_ams->Wrap(-1);
+ sizer_enable_ams->Add(m_title_enable_ams, 0, 0, 0);
+
+ m_tip_enable_ams = new wxStaticText(m_panel_enable_ams, wxID_ANY, _L("Print with filaments in the AMS"), wxDefaultPosition, wxDefaultSize, 0);
+ m_tip_enable_ams->SetBackgroundColour(*wxWHITE);
+ m_tip_enable_ams->Wrap(-1);
+ sizer_enable_ams->Add(m_tip_enable_ams, 0, wxTOP, 8);
+
+ wxBoxSizer *sizer_enable_ams_img;
+ sizer_enable_ams_img = new wxBoxSizer(wxVERTICAL);
+
+ auto img_enable_ams = new wxStaticBitmap(m_panel_enable_ams, wxID_ANY, create_scaled_bitmap("monitor_upgrade_ams", this, 108), wxDefaultPosition,
+ wxSize(FromDIP(118), FromDIP(108)), 0);
+ sizer_enable_ams_img->Add(img_enable_ams, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+
+ sizer_enable_ams->Add(sizer_enable_ams_img, 1, wxEXPAND | wxTOP, FromDIP(20));
+
+ m_panel_enable_ams->SetSizer(sizer_enable_ams);
+ m_panel_enable_ams->Layout();
+ m_sizer_body->Add(m_panel_enable_ams, 0, 0, 0);
+
+ m_split_lines = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(1, FromDIP(150)), wxTAB_TRAVERSAL);
+ m_split_lines->SetBackgroundColour(wxColour(238, 238, 238));
+
+ m_sizer_body->Add(m_split_lines, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, FromDIP(10));
+
+ m_panel_disable_ams = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200, -1), wxTAB_TRAVERSAL);
+ m_panel_disable_ams->SetBackgroundColour(*wxWHITE);
+ wxBoxSizer *sizer_disable_ams;
+ sizer_disable_ams = new wxBoxSizer(wxVERTICAL);
+
+ m_title_disable_ams = new wxStaticText(m_panel_disable_ams, wxID_ANY, _L("Disable AMS"), wxDefaultPosition, wxDefaultSize, 0);
+ m_title_disable_ams->SetBackgroundColour(*wxWHITE);
+ m_title_disable_ams->Wrap(-1);
+ sizer_disable_ams->Add(m_title_disable_ams, 0, 0, 0);
+
+ m_tip_disable_ams = new wxStaticText(m_panel_disable_ams, wxID_ANY, _L("Print with the filament mounted on the back of chassis"), wxDefaultPosition, wxDefaultSize, 0);
+ m_tip_disable_ams->SetBackgroundColour(*wxWHITE);
+ m_tip_disable_ams->Wrap(-1);
+ sizer_disable_ams->Add(m_tip_disable_ams, 0, wxTOP, FromDIP(8));
+
+ wxBoxSizer *sizer_disable_ams_img;
+ sizer_disable_ams_img = new wxBoxSizer(wxVERTICAL);
+
+ auto img_disable_ams = new wxStaticBitmap(m_panel_disable_ams, wxID_ANY, create_scaled_bitmap("disable_ams_demo_icon", this, 95), wxDefaultPosition,
+ wxSize(FromDIP(95), FromDIP(109)), 0);
+ sizer_disable_ams_img->Add(img_disable_ams, 0, wxALIGN_CENTER_HORIZONTAL, 0);
+
+ sizer_disable_ams->Add(sizer_disable_ams_img, 1, wxEXPAND | wxTOP, FromDIP(20));
+
+ m_panel_disable_ams->SetSizer(sizer_disable_ams);
+ m_panel_disable_ams->Layout();
+ m_sizer_body->Add(m_panel_disable_ams, 0, 0, 0);
+
+ m_sizer_body->Add(0, 0, 0, wxEXPAND | wxRIGHT, FromDIP(20));
+
+ m_sizer_main->Add(m_sizer_body, 0, wxEXPAND, 0);
+
+ m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(28));
+
+ this->SetSizer(m_sizer_main);
+ this->Layout();
+ this->Fit();
+ Bind(wxEVT_PAINT, &AmsMapingTipPopup::paintEvent, this);
+}
+
+void AmsMapingTipPopup::paintEvent(wxPaintEvent &evt)
+{
+ wxPaintDC dc(this);
+ dc.SetPen(wxColour(0xAC, 0xAC, 0xAC));
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
+}
+
+void AmsMapingTipPopup::OnDismiss() {}
+
+bool AmsMapingTipPopup::ProcessLeftDown(wxMouseEvent &event) {
+ return wxPopupTransientWindow::ProcessLeftDown(event); }
+
}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp
index 450b1bf9e..a81883d19 100644
--- a/src/slic3r/GUI/AmsMappingPopup.hpp
+++ b/src/slic3r/GUI/AmsMappingPopup.hpp
@@ -137,6 +137,27 @@ public:
void paintEvent(wxPaintEvent &evt);
};
+class AmsMapingTipPopup : public wxPopupTransientWindow
+{
+public:
+ AmsMapingTipPopup(wxWindow *parent);
+ ~AmsMapingTipPopup(){};
+ void paintEvent(wxPaintEvent &evt);
+
+ virtual void OnDismiss() wxOVERRIDE;
+ virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE;
+
+public:
+ wxPanel * m_panel_enable_ams;
+ wxStaticText * m_title_enable_ams;
+ wxStaticText * m_tip_enable_ams;
+ wxPanel * m_split_lines;
+ wxPanel * m_panel_disable_ams;
+ wxStaticText * m_title_disable_ams;
+ wxStaticText * m_tip_disable_ams;
+};
+
+
wxDECLARE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent);
}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp
index 715bbdf20..f56c8e546 100644
--- a/src/slic3r/GUI/Jobs/PrintJob.cpp
+++ b/src/slic3r/GUI/Jobs/PrintJob.cpp
@@ -152,6 +152,7 @@ void PrintJob::process()
params.task_record_timelapse= this->task_record_timelapse;
params.ams_mapping = this->task_ams_mapping;
params.connection_type = this->connection_type;
+ params.task_use_ams = this->task_use_ams;
// local print access
params.dev_ip = m_dev_ip;
diff --git a/src/slic3r/GUI/Jobs/PrintJob.hpp b/src/slic3r/GUI/Jobs/PrintJob.hpp
index dae9d1ea5..86b13fa58 100644
--- a/src/slic3r/GUI/Jobs/PrintJob.hpp
+++ b/src/slic3r/GUI/Jobs/PrintJob.hpp
@@ -50,6 +50,7 @@ public:
std::string connection_type;
bool cloud_print_only { false };
bool has_sdcard { false };
+ bool task_use_ams { true };
void set_print_config(std::string bed_type, bool bed_leveling, bool flow_cali, bool vabration_cali, bool record_timelapse, bool layer_inspect)
{
diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp
index c33f1b2ba..214757421 100644
--- a/src/slic3r/GUI/SelectMachine.cpp
+++ b/src/slic3r/GUI/SelectMachine.cpp
@@ -822,6 +822,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
: DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Send print job to"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
, m_plater(plater), m_export_3mf_cancel(false)
, m_mapping_popup(AmsMapingPopup(this))
+ , m_mapping_tip_popup(AmsMapingTipPopup(this))
{
#ifdef __WINDOWS__
SetDoubleBuffered(true);
@@ -928,13 +929,15 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_select = new wxGridSizer(1, 2, 0, 0);
select_bed = create_item_checkbox(_L("Bed Leveling"), this, _L("Bed Leveling"), "bed_leveling");
select_flow = create_item_checkbox(_L("Flow Calibration"), this, _L("Flow Calibration"), "flow_cali");
-
-
- select_bed->Show(true);
- select_flow->Show(true);
+ select_use_ams = create_ams_checkbox(_L("Enable AMS"), this, _L("Enable AMS"));
m_sizer_select->Add(select_bed);
m_sizer_select->Add(select_flow);
+ m_sizer_select->Add(select_use_ams);
+
+ select_bed->Show(true);
+ select_flow->Show(true);
+ select_use_ams->Show(true);
// line schedule
m_line_schedule = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
@@ -1046,6 +1049,52 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
Centre(wxBOTH);
}
+wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip)
+{
+ auto checkbox = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
+ checkbox->SetBackgroundColour(m_colour_def_color);
+
+ wxBoxSizer *sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);
+ wxBoxSizer *sizer_check = new wxBoxSizer(wxVERTICAL);
+
+ ams_check = new ::CheckBox(checkbox);
+
+ sizer_check->Add(ams_check, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5));
+
+ sizer_checkbox->Add(sizer_check, 0, wxEXPAND, FromDIP(5));
+ sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(11));
+
+ auto text = new wxStaticText(checkbox, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0);
+ text->SetFont(::Label::Body_13);
+ text->SetForegroundColour(wxColour(107, 107, 107));
+ text->Wrap(-1);
+ sizer_checkbox->Add(text, 0, wxALIGN_CENTER, FromDIP(5));
+
+ auto img_ams_tip = new wxStaticBitmap(checkbox, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0);
+ sizer_checkbox->Add(img_ams_tip, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5));
+
+ img_ams_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_ams_tip](auto &e) {
+ wxPoint pos = img_ams_tip->ClientToScreen(wxPoint(0, 0));
+ pos.y += img_ams_tip->GetRect().height;
+ m_mapping_tip_popup.Position(pos, wxSize(0, 0));
+ m_mapping_tip_popup.Popup();
+ });
+
+ img_ams_tip->Bind(wxEVT_LEAVE_WINDOW, [this, img_ams_tip](auto &e) {
+ m_mapping_tip_popup.Dismiss();
+ });
+
+ checkbox->SetSizer(sizer_checkbox);
+ checkbox->Layout();
+ sizer_checkbox->Fit(checkbox);
+
+ checkbox->SetToolTip(tooltip);
+ text->SetToolTip(tooltip);
+
+ text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &) { ams_check->SetValue(ams_check->GetValue() ? false : true); });
+ return checkbox;
+}
+
wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, std::string param)
{
auto checkbox = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
@@ -1614,6 +1663,12 @@ void SelectMachineDialog::on_ok(wxCommandEvent &event)
false,
true);
+ if (obj_->has_ams()) {
+ m_print_job->task_use_ams = ams_check->GetValue();
+ } else {
+ m_print_job->task_use_ams = false;
+ }
+
m_print_job->on_success([this]() { finish_mode(); });
wxCommandEvent evt(m_plater->get_print_finished_event());
@@ -2067,6 +2122,7 @@ void SelectMachineDialog::set_default()
// checkbox default values
m_checkbox_list["bed_leveling"]->SetValue(true);
m_checkbox_list["flow_cali"]->SetValue(true);
+ ams_check->SetValue(true);
// thumbmail
//wxBitmap bitmap;
diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp
index c74d3a499..7d4a649c2 100644
--- a/src/slic3r/GUI/SelectMachine.hpp
+++ b/src/slic3r/GUI/SelectMachine.hpp
@@ -319,6 +319,8 @@ protected:
wxWindow *select_bed{nullptr};
wxWindow *select_flow{nullptr};
+ wxWindow *select_use_ams{nullptr};
+ CheckBox *ams_check{nullptr};
void stripWhiteSpace(std::string& str);
@@ -329,6 +331,7 @@ protected:
public:
SelectMachineDialog(Plater *plater = nullptr);
+ wxWindow *create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip);
~SelectMachineDialog();
wxWindow *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, std::string param);
@@ -361,6 +364,7 @@ protected:
wxPanel * m_panel_status{nullptr};
wxButton * m_button_cancel{nullptr};
AmsMapingPopup m_mapping_popup{nullptr};
+ AmsMapingTipPopup m_mapping_tip_popup{nullptr};
std::string m_print_info;
int timeout_count = 0;
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index aea9c13de..89a70ebe7 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -1472,7 +1472,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons
m_button_ams_setting->SetBackgroundColor(btn_bg_white);
m_button_ams_setting->SetBorderColor(btn_bd_white);
m_button_ams_setting->SetFont(Label::Body_13);
- m_button_ams_setting->Hide();
+ //m_button_ams_setting->Hide();
m_sizer_right_bottom->Add(m_button_ams_setting, 0, wxTOP, FromDIP(20));
m_sizer_right->Add(m_sizer_right_bottom, 0, wxEXPAND, FromDIP(5));
m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, FromDIP(5));