#ifndef slic3r_GUI_PlateSettingsDialog_hpp_ #define slic3r_GUI_PlateSettingsDialog_hpp_ #include "Plater.hpp" #include "PartPlate.hpp" #include "Widgets/Button.hpp" #include "Widgets/RadioBox.hpp" #include "Widgets/ComboBox.hpp" #include "DragCanvas.hpp" #include "libslic3r/ParameterUtils.hpp" namespace Slic3r { namespace GUI { wxDECLARE_EVENT(EVT_SET_BED_TYPE_CONFIRM, wxCommandEvent); wxDECLARE_EVENT(EVT_NEED_RESORT_LAYERS, wxCommandEvent); struct LayerSeqInfo { int begin_layer_number; int end_layer_number; std::vector print_sequence; bool operator<(const LayerSeqInfo& another) const; }; class LayerNumberTextInput : public ComboBox { public: enum class Type { Begin, End }; enum class ValueType { Custom, End }; LayerNumberTextInput(wxWindow* parent, int layer_number, wxSize size, Type type, ValueType value_type = ValueType::Custom); void link(LayerNumberTextInput* layer_input) { if (m_another_layer_input) return; m_another_layer_input = layer_input; layer_input->link(this); } void set_layer_number(int layer_number); int get_layer_number(); Type get_input_type() { return m_type; } ValueType get_value_type() { return m_value_type; } bool is_layer_number_valid(); protected: void update_label(); private: LayerNumberTextInput* m_another_layer_input{ nullptr }; int m_layer_number; Type m_type; ValueType m_value_type; }; class OtherLayersSeqPanel : public wxPanel { public: OtherLayersSeqPanel(wxWindow* parent); void sync_layers_print_seq(int selection, const std::vector& seq); int get_layers_print_seq_choice() { return m_other_layer_print_seq_choice->GetSelection(); }; std::vector get_layers_print_seq_infos() { return m_layer_seq_infos; } protected: void append_layer(const LayerSeqInfo* layer_info = nullptr); void popup_layer(); void clear_all_layers(); private: ScalableBitmap m_bmp_delete; ScalableBitmap m_bmp_add; ComboBox* m_other_layer_print_seq_choice{ nullptr }; wxPanel* m_layer_input_panel{ nullptr }; std::vector m_layer_input_sizer_list; std::vector m_begin_layer_input_list; std::vector m_end_layer_input_list; std::vector m_drag_canvas_list; std::vector m_layer_seq_infos; }; class PlateSettingsDialog : public DPIDialog { public: enum ButtonStyle { ONLY_CONFIRM = 0, CONFIRM_AND_CANCEL = 1, MAX_STYLE_NUM = 2 }; PlateSettingsDialog( wxWindow* parent, const wxString& title = wxEmptyString, bool only_layer_seq = false, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLOSE_BOX | wxCAPTION ); ~PlateSettingsDialog(); void sync_bed_type(BedType type); void sync_print_seq(int print_seq = 0); void sync_first_layer_print_seq(int selection, const std::vector& seq = std::vector()); void sync_other_layers_print_seq(int selection, const std::vector& seq); void sync_spiral_mode(bool spiral_mode, bool as_global); wxString to_bed_type_name(BedType bed_type); wxString to_print_sequence_name(PrintSequence print_seq); void on_dpi_changed(const wxRect& suggested_rect) override; int get_print_seq_choice() { int choice = 0; if (m_print_seq_choice != nullptr) choice = m_print_seq_choice->GetSelection(); return choice; }; int get_bed_type_choice() { int choice = 0; if (m_bed_type_choice != nullptr) choice = m_bed_type_choice->GetSelection(); return choice; }; int get_first_layer_print_seq_choice() { int choice = 0; if (m_first_layer_print_seq_choice != nullptr) choice = m_first_layer_print_seq_choice->GetSelection(); return choice; }; int get_other_layers_print_seq_choice() { if (m_other_layers_seq_panel) return m_other_layers_seq_panel->get_layers_print_seq_choice(); return 0; }; std::vector get_first_layer_print_seq(); std::vector get_other_layers_print_seq_infos() { const std::vector& layer_seq_infos = m_other_layers_seq_panel->get_layers_print_seq_infos(); std::vector result; result.reserve(layer_seq_infos.size()); for (int i = 0; i < layer_seq_infos.size(); i++) { LayerPrintSequence item = std::make_pair(std::make_pair(layer_seq_infos[i].begin_layer_number, layer_seq_infos[i].end_layer_number), layer_seq_infos[i].print_sequence); result.push_back(item); } return result; } int get_spiral_mode_choice() { int choice = 0; if (m_spiral_mode_choice != nullptr) choice = m_spiral_mode_choice->GetSelection(); return choice; }; bool get_spiral_mode(){ return false; } protected: void add_layers(); void delete_layers(); protected: ComboBox* m_bed_type_choice { nullptr }; ComboBox* m_print_seq_choice { nullptr }; ComboBox* m_first_layer_print_seq_choice { nullptr }; ComboBox* m_spiral_mode_choice { nullptr }; DragCanvas* m_drag_canvas; OtherLayersSeqPanel* m_other_layers_seq_panel; Button* m_button_ok; Button* m_button_cancel; }; class PlateNameEditDialog : public DPIDialog { public: enum ButtonStyle { ONLY_CONFIRM = 0, CONFIRM_AND_CANCEL = 1, MAX_STYLE_NUM = 2 }; PlateNameEditDialog(wxWindow * parent, wxWindowID id = wxID_ANY, const wxString &title = wxEmptyString, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = wxCLOSE_BOX | wxCAPTION); ~PlateNameEditDialog(); void on_dpi_changed(const wxRect &suggested_rect) override; wxString get_plate_name() const; void set_plate_name(const wxString &name); protected: Button * m_button_ok; Button * m_button_cancel; TextInput *m_ti_plate_name; }; }} // namespace Slic3r::GUI #endif