diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index d8b2b50e64..0171e96c5e 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -11,6 +11,9 @@ #include "Widgets/RoundedRectangle.hpp" #include "Widgets/StaticBox.hpp" +static wxColour FG_COLOR = wxColour(0x32, 0x3A, 0x3D); +static wxColour BG_COLOR = wxColour(0xF8, 0xF8, 0xF8); + namespace Slic3r { namespace GUI { CalibrationDialog::CalibrationDialog(Plater *plater) @@ -31,17 +34,39 @@ CalibrationDialog::CalibrationDialog(Plater *plater) body_panel->SetBackgroundColour(*wxWHITE); auto cali_left_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(303), FromDIP(243))); - cali_left_panel->SetBackgroundColor(wxColour(0xF8, 0xF8, 0xF8)); - cali_left_panel->SetBorderColor(wxColour(0xF8, 0xF8, 0xF8)); + cali_left_panel->SetBackgroundColor(BG_COLOR); + cali_left_panel->SetBorderColor(BG_COLOR); wxBoxSizer *cali_left_sizer = new wxBoxSizer(wxVERTICAL); cali_left_sizer->Add(0, 0, 0, wxTOP, FromDIP(25)); + // calibration step selection + auto cali_step_select_title = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration step selection"), wxDefaultPosition, wxDefaultSize, 0); + cali_step_select_title->SetFont(::Label::Head_14); + cali_step_select_title->Wrap(-1); + cali_step_select_title->SetForegroundColour(FG_COLOR); + cali_step_select_title->SetBackgroundColour(BG_COLOR); + cali_left_sizer->Add(cali_step_select_title, 0, wxLEFT, FromDIP(15)); + + select_xcam_cali = create_check_option(_L("Micro lidar calibration"), cali_left_panel, _L("Micro lidar calibration"), "xcam_cali"); + select_bed_leveling = create_check_option(_L("Bed leveling"), cali_left_panel, _L("Bed leveling"), "bed_leveling"); + select_vibration = create_check_option(_L("Resonance frequency identification"), cali_left_panel, _L("Resonance frequency identification"), "vibration"); + + m_checkbox_list["xcam_cali"]->SetValue(true); + m_checkbox_list["bed_leveling"]->SetValue(true); + m_checkbox_list["vibration"]->SetValue(true); + + cali_left_sizer->Add(0, FromDIP(18), 0, wxEXPAND, 0); + cali_left_sizer->Add(select_xcam_cali, 0, wxLEFT, FromDIP(15)); + cali_left_sizer->Add(select_bed_leveling, 0, wxLEFT, FromDIP(15)); + cali_left_sizer->Add(select_vibration, 0, wxLEFT, FromDIP(15)); + cali_left_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0); + auto cali_left_text_top = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration program"), wxDefaultPosition, wxDefaultSize, 0); cali_left_text_top->SetFont(::Label::Head_14); cali_left_text_top->Wrap(-1); - cali_left_text_top->SetForegroundColour(wxColour(0x32, 0x3A, 0x3D)); - cali_left_text_top->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + cali_left_text_top->SetForegroundColour(FG_COLOR); + cali_left_text_top->SetBackgroundColour(BG_COLOR); cali_left_sizer->Add(cali_left_text_top, 0, wxLEFT, FromDIP(15)); @@ -53,7 +78,7 @@ CalibrationDialog::CalibrationDialog(Plater *plater) wxDefaultPosition, wxSize(FromDIP(260), -1), 0); cali_left_text_body->Wrap(FromDIP(260)); cali_left_text_body->SetForegroundColour(wxColour(0x6B, 0x6B, 0x6B)); - cali_left_text_body->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + cali_left_text_body->SetBackgroundColour(BG_COLOR); cali_left_text_body->SetFont(::Label::Body_13); cali_left_sizer->Add(cali_left_text_body, 0, wxLEFT, FromDIP(15)); @@ -86,25 +111,25 @@ CalibrationDialog::CalibrationDialog(Plater *plater) wxBoxSizer *cali_right_sizer_v = new wxBoxSizer(wxVERTICAL); auto cali_right_panel = new StaticBox(body_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(182), FromDIP(160))); - cali_right_panel->SetBackgroundColor(wxColour(0xF8, 0xF8, 0xF8)); - cali_right_panel->SetBorderColor(wxColour(0xF8, 0xF8, 0xF8)); + cali_right_panel->SetBackgroundColor(BG_COLOR); + cali_right_panel->SetBorderColor(BG_COLOR); auto cali_text_right_top = new wxStaticText(cali_right_panel, wxID_ANY, _L("Calibration Flow"), wxDefaultPosition, wxDefaultSize, 0); cali_text_right_top->Wrap(-1); cali_text_right_top->SetFont(::Label::Head_14); cali_text_right_top->SetForegroundColour(wxColour(0x00, 0xAE, 0x42)); - cali_text_right_top->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + cali_text_right_top->SetBackgroundColour(BG_COLOR); auto staticline = new ::StaticLine(cali_right_panel); staticline->SetLineColour(wxColour(0x00, 0xAE, 0x42)); auto calibration_panel = new wxPanel(cali_right_panel); - calibration_panel->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + calibration_panel->SetBackgroundColour(BG_COLOR); auto calibration_sizer = new wxBoxSizer(wxVERTICAL); calibration_panel->SetMinSize(wxSize(FromDIP(170), FromDIP(160))); calibration_panel->SetSize(wxSize(FromDIP(170), FromDIP(160))); m_calibration_flow = new StepIndicator(calibration_panel, wxID_ANY); - StateColor bg_color(std::pair(wxColour(248, 248, 248), StateColor::Normal)); + StateColor bg_color(std::pair(BG_COLOR, StateColor::Normal)); m_calibration_flow->SetBackgroundColor(bg_color); m_calibration_flow->SetFont(Label::Body_12); @@ -155,9 +180,48 @@ CalibrationDialog::~CalibrationDialog() {} void CalibrationDialog::on_dpi_changed(const wxRect &suggested_rect) {} +wxWindow* CalibrationDialog::create_check_option(wxString title, wxWindow* parent, wxString tooltip, std::string param) +{ + auto checkbox = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + checkbox->SetBackgroundColour(BG_COLOR); + + wxBoxSizer* sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_check = new wxBoxSizer(wxVERTICAL); + + auto check = new ::CheckBox(checkbox); + + sizer_check->Add(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, wxST_ELLIPSIZE_END); + text->SetFont(::Label::Body_13); + text->SetForegroundColour(wxColour(107, 107, 107)); + text->Wrap(-1); + sizer_checkbox->Add(text, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5)); + + checkbox->SetSizer(sizer_checkbox); + checkbox->Layout(); + sizer_checkbox->Fit(checkbox); + + checkbox->SetToolTip(tooltip); + text->SetToolTip(tooltip); + + text->Bind(wxEVT_LEFT_DOWN, [this, check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); }); + m_checkbox_list[param] = check; + return checkbox; +} + void CalibrationDialog::update_cali(MachineObject *obj) { if (!obj) return; + if (obj->is_function_supported(PrinterFunction::FUNC_AI_MONITORING)) { + select_xcam_cali->Show(); + } else { + select_xcam_cali->Hide(); + } + if (obj->is_calibration_running() || obj->is_calibration_done()) { if (obj->is_calibration_done()) { m_calibration_btn->Enable(); @@ -218,8 +282,11 @@ void CalibrationDialog::on_start_calibration(wxMouseEvent &event) Close(); } else { BOOST_LOG_TRIVIAL(info) << "on_start_calibration"; - //TODO set checkbox value here - m_obj->command_start_calibration(true, true, true); + m_obj->command_start_calibration( + m_checkbox_list["vibration"]->GetValue(), + m_checkbox_list["bed_leveling"]->GetValue(), + m_checkbox_list["xcam_cali"]->GetValue() + ); } } } diff --git a/src/slic3r/GUI/Calibration.hpp b/src/slic3r/GUI/Calibration.hpp index 84ff0f2f93..db01e59555 100644 --- a/src/slic3r/GUI/Calibration.hpp +++ b/src/slic3r/GUI/Calibration.hpp @@ -30,11 +30,21 @@ #include "Widgets/Label.hpp" #include "Widgets/Button.hpp" #include "Widgets/StepCtrl.hpp" +#include "Widgets/CheckBox.hpp" namespace Slic3r { namespace GUI { class CalibrationDialog : public DPIDialog { +private: + std::map m_checkbox_list; + + wxWindow* select_xcam_cali { nullptr }; + wxWindow* select_bed_leveling { nullptr }; + wxWindow* select_vibration { nullptr }; + + wxWindow* create_check_option(wxString title, wxWindow *parent, wxString tooltip, std::string param); + public: CalibrationDialog(Plater *plater = nullptr); ~CalibrationDialog(); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index fa4ce0d395..8e8e713b26 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1491,6 +1491,7 @@ int MachineObject::command_set_printing_option(bool auto_recovery) j["print"]["command"] = "print_option"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["option"] = print_option; + j["print"]["auto_recovery"] = auto_recovery; return this->publish_json(j.dump()); } @@ -2750,6 +2751,9 @@ int MachineObject::parse_json(std::string payload) _parse_print_option_ack(option); } } + if (jj.contains("auto_recovery")) { + xcam_auto_recovery_step_loss = jj["auto_recovery"].get(); + } } catch(...) { } diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 8a93cc1c96..cdf6879f0f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1322,7 +1322,7 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par 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); + auto checkbox = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); checkbox->SetBackgroundColour(m_colour_def_color); wxBoxSizer *sizer_checkbox = new wxBoxSizer(wxHORIZONTAL);