#ifndef slic3r_GUI_CalibrationWizardPresetPage_hpp_ #define slic3r_GUI_CalibrationWizardPresetPage_hpp_ #include "CalibrationWizardPage.hpp" namespace Slic3r { namespace GUI { enum CaliPresetStage { CALI_MANULA_STAGE_NONE = 0, CALI_MANUAL_STAGE_1, CALI_MANUAL_STAGE_2, }; enum FlowRatioCaliSource { FROM_PRESET_PAGE = 0, FROM_COARSE_PAGE, }; class CalibrationPresetPage; class CaliPresetCaliStagePanel : public wxPanel { public: CaliPresetCaliStagePanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); void create_panel(wxWindow* parent); void set_cali_stage(CaliPresetStage stage, float value); void get_cali_stage(CaliPresetStage& stage, float& value); void set_flow_ratio_value(float flow_ratio); void set_parent(CalibrationPresetPage* parent) { m_stage_panel_parent = parent; } void set_flow_ratio_calibration_type(FlowRatioCalibrationType type); protected: CaliPresetStage m_stage; wxBoxSizer* m_top_sizer; wxRadioButton* m_complete_radioBox; wxRadioButton* m_fine_radioBox; TextInput * flow_ratio_input; wxPanel* input_panel; float m_flow_ratio_value; CalibrationPresetPage* m_stage_panel_parent; }; class CaliComboBox : public wxPanel { public: CaliComboBox(wxWindow *parent, wxString title, wxArrayString values, int default_index = 0, // default delected id std::function on_value_change = nullptr, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); int get_selection() const; wxString get_value() const; void set_values(const wxArrayString& values); private: wxBoxSizer* m_top_sizer; wxString m_title; ComboBox* m_combo_box; std::function m_on_value_change_call_back; }; class CaliPresetWarningPanel : public wxPanel { public: CaliPresetWarningPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); void create_panel(wxWindow* parent); void set_warning(wxString text); protected: wxBoxSizer* m_top_sizer; Label* m_warning_text; }; class CaliPresetTipsPanel : public wxPanel { public: CaliPresetTipsPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); void create_panel(wxWindow* parent); void set_params(int nozzle_temp, int bed_temp, float max_volumetric); void get_params(int& nozzle_temp, int& bed_temp, float& max_volumetric); protected: wxBoxSizer* m_top_sizer; TextInput* m_nozzle_temp; Label* m_bed_temp; TextInput* m_max_volumetric_speed; }; class CaliPresetCustomRangePanel : public wxPanel { public: CaliPresetCustomRangePanel(wxWindow* parent, int input_value_nums = 3, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); void create_panel(wxWindow* parent); void set_unit(wxString unit); void set_titles(wxArrayString titles); void set_values(wxArrayString values); wxArrayString get_values(); protected: wxBoxSizer* m_top_sizer; int m_input_value_nums; std::vector m_title_texts; std::vector m_value_inputs; }; enum CaliPresetPageStatus { CaliPresetStatusInit = 0, CaliPresetStatusNormal, CaliPresetStatusNoUserLogin, CaliPresetStatusInvalidPrinter, CaliPresetStatusConnectingServer, CaliPresetStatusInUpgrading, CaliPresetStatusInSystemPrinting, CaliPresetStatusInPrinting, CaliPresetStatusLanModeNoSdcard, CaliPresetStatusNoSdcard, CaliPresetStatusNeedForceUpgrading, CaliPresetStatusNeedConsistencyUpgrading, CaliPresetStatusUnsupportedPrinter, CaliPresetStatusInConnecting, CaliPresetStatusFilamentIncompatible, }; class CalibrationPresetPage : public CalibrationWizardPage { public: CalibrationPresetPage(wxWindow* parent, CalibMode cali_mode, bool custom_range = false, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); void create_page(wxWindow* parent); void update_print_status_msg(wxString msg, bool is_warning); wxString format_text(wxString& m_msg); void stripWhiteSpace(std::string& str); void update_priner_status_msg(wxString msg, bool is_warning); void update(MachineObject* obj) override; void update_flow_ratio_type(FlowRatioCalibrationType type) { curr_obj->flow_ratio_calibration_type = type; } void on_device_connected(MachineObject* obj) override; void update_print_error_info(int code, const std::string& msg, const std::string& extra) { m_sending_panel->update_print_error_info(code, msg, extra); } void set_cali_filament_mode(CalibrationFilamentMode mode) override; void set_cali_method(CalibrationMethod method) override; void on_cali_start_job(); void on_cali_finished_job(); void on_cali_cancel_job(); void init_with_machine(MachineObject* obj); void sync_ams_info(MachineObject* obj); void select_default_compatible_filament(); std::vector get_selected_filament_combobox(); // key is tray_id std::map get_selected_filaments(); void get_preset_info( float& nozzle_dia, BedType& plate_type); void get_cali_stage(CaliPresetStage& stage, float& value); std::shared_ptr get_sending_progress_bar() { return m_sending_panel->get_sending_progress_bar(); } Preset* get_printer_preset(MachineObject* obj, float nozzle_value); Preset* get_print_preset(); std::string get_print_preset_name(); wxArrayString get_custom_range_values(); CalibMode get_pa_cali_method(); CaliPresetPageStatus get_page_status() { return m_page_status; } MachineObject* get_current_object() { return curr_obj; } void msw_rescale() override; void on_sys_color_changed() override; protected: void create_selection_panel(wxWindow* parent); void create_filament_list_panel(wxWindow* parent); void create_ext_spool_panel(wxWindow* parent); void init_selection_values(); void update_filament_combobox(std::string ams_id = ""); void on_select_nozzle(wxCommandEvent& evt); void on_select_plate_type(wxCommandEvent& evt); void on_choose_ams(wxCommandEvent& event); void on_choose_ext_spool(wxCommandEvent& event); void on_select_tray(wxCommandEvent& event); void on_switch_ams(std::string ams_id = ""); void on_recommend_input_value(); void check_filament_compatible(); bool is_filaments_compatiable(const std::vector& prests); bool is_filament_in_blacklist(Preset* preset, std::string& error_tips); bool is_filaments_compatiable(const std::vector& prests, int& bed_temp, std::string& incompatiable_filament_name, std::string& error_tips); float get_nozzle_value(); void update_plate_type_collection(CalibrationMethod method); void update_combobox_filaments(MachineObject* obj); void update_show_status(); void show_status(CaliPresetPageStatus status); void Enable_Send_Button(bool enable); bool is_blocking_printing(); bool need_check_sdcard(MachineObject* obj); CaliPresetPageStatus get_status() { return m_page_status; } CaliPageStepGuide* m_step_panel{ nullptr }; CaliComboBox * m_pa_cali_method_combox{nullptr}; CaliPresetCaliStagePanel* m_cali_stage_panel { nullptr }; wxPanel* m_selection_panel { nullptr }; wxPanel* m_filament_from_panel { nullptr }; Label* m_filament_list_tips{ nullptr }; wxPanel* m_multi_ams_panel { nullptr }; wxPanel* m_filament_list_panel { nullptr }; wxPanel* m_ext_spool_panel { nullptr }; CaliPresetWarningPanel* m_warning_panel { nullptr }; CaliPresetCustomRangePanel* m_custom_range_panel { nullptr }; CaliPresetTipsPanel* m_tips_panel { nullptr }; CaliPageSendingPanel* m_sending_panel { nullptr }; wxBoxSizer* m_top_sizer; // m_selection_panel widgets ComboBox* m_comboBox_nozzle_dia; ComboBox* m_comboBox_bed_type; ComboBox* m_comboBox_process; wxRadioButton* m_ams_radiobox; wxRadioButton* m_ext_spool_radiobox; ScalableButton* m_ams_sync_button; FilamentComboBoxList m_filament_comboBox_list; FilamentComboBox* m_virtual_tray_comboBox; std::vector m_ams_item_list; // for update filament combobox, key : tray_id std::map filament_ams_list; CaliPresetPageStatus m_page_status { CaliPresetPageStatus::CaliPresetStatusInit }; bool m_stop_update_page_status{ false }; bool m_show_custom_range { false }; bool m_has_filament_incompatible { false }; MachineObject* curr_obj { nullptr }; }; class MaxVolumetricSpeedPresetPage : public CalibrationPresetPage { public: MaxVolumetricSpeedPresetPage(wxWindow * parent, CalibMode cali_mode, bool custom_range = false, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = wxTAB_TRAVERSAL); }; }} // namespace Slic3r::GUI #endif