diff --git a/resources/images/advanced_option1.svg b/resources/images/advanced_option1.svg new file mode 100644 index 000000000..46a075967 --- /dev/null +++ b/resources/images/advanced_option1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/advanced_option2.svg b/resources/images/advanced_option2.svg new file mode 100644 index 000000000..353bf8d6d --- /dev/null +++ b/resources/images/advanced_option2.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/printer_preview_BL-P001.png b/resources/images/printer_preview_BL-P001.png new file mode 100644 index 000000000..47f9b41d8 Binary files /dev/null and b/resources/images/printer_preview_BL-P001.png differ diff --git a/resources/images/printer_preview_BL-P002.png b/resources/images/printer_preview_BL-P002.png new file mode 100644 index 000000000..47f9b41d8 Binary files /dev/null and b/resources/images/printer_preview_BL-P002.png differ diff --git a/resources/images/printer_preview_C11.png b/resources/images/printer_preview_C11.png new file mode 100644 index 000000000..518dfd539 Binary files /dev/null and b/resources/images/printer_preview_C11.png differ diff --git a/resources/images/printer_preview_C12.png b/resources/images/printer_preview_C12.png new file mode 100644 index 000000000..4a2e336ed Binary files /dev/null and b/resources/images/printer_preview_C12.png differ diff --git a/resources/images/printer_preview_N1.png b/resources/images/printer_preview_N1.png new file mode 100644 index 000000000..bb73fea05 Binary files /dev/null and b/resources/images/printer_preview_N1.png differ diff --git a/resources/images/printer_preview_N2S.png b/resources/images/printer_preview_N2S.png new file mode 100644 index 000000000..3cd23a5df Binary files /dev/null and b/resources/images/printer_preview_N2S.png differ diff --git a/resources/images/refresh_printer.svg b/resources/images/refresh_printer.svg new file mode 100644 index 000000000..e2e123893 --- /dev/null +++ b/resources/images/refresh_printer.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/switch_send_mode_off.svg b/resources/images/switch_send_mode_off.svg new file mode 100644 index 000000000..525b83114 --- /dev/null +++ b/resources/images/switch_send_mode_off.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/switch_send_mode_on.svg b/resources/images/switch_send_mode_on.svg new file mode 100644 index 000000000..b535b2537 --- /dev/null +++ b/resources/images/switch_send_mode_on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/switch_send_mode_tag_off.svg b/resources/images/switch_send_mode_tag_off.svg new file mode 100644 index 000000000..2127760b7 --- /dev/null +++ b/resources/images/switch_send_mode_tag_off.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/switch_send_mode_tag_on.svg b/resources/images/switch_send_mode_tag_on.svg new file mode 100644 index 000000000..39726becb --- /dev/null +++ b/resources/images/switch_send_mode_tag_on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 56d5120af..df0176e5f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -113,8 +113,8 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) ops_no_auto.left.insert(make_pair("on", "On")); ops_no_auto.left.insert(make_pair("off", "Off")); - SetMinSize(wxSize(FromDIP(688), -1)); - SetMaxSize(wxSize(FromDIP(688), -1)); + SetMinSize(wxSize(FromDIP(700), -1)); + SetMaxSize(wxSize(FromDIP(700), -1)); // bind Bind(wxEVT_CLOSE_WINDOW, &SelectMachineDialog::on_cancel, this); @@ -136,12 +136,31 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + /*mode switch*/ + auto m_sizer_mode_switch = new wxBoxSizer(wxHORIZONTAL); + m_mode_print = new SendModeSwitchButton(this, _L("Print"), true); + m_mode_send = new SendModeSwitchButton(this,_L("Save to printer"), false); + m_sizer_mode_switch->Add(m_mode_print, 0, wxALIGN_CENTER, 0); + m_sizer_mode_switch->Add(0, 0, 0, wxLEFT, FromDIP(8)); + m_sizer_mode_switch->Add(m_mode_send,0, wxALIGN_CENTER, 0); + + m_mode_print->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_mode_print->setSelected(true); + m_mode_send->setSelected(false); + e.Skip(); + }); + + m_mode_send->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_mode_print->setSelected(false); + m_mode_send->setSelected(true); + e.Skip(); + }); + m_basic_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); m_basic_panel->SetBackgroundColour(*wxWHITE); m_basicl_sizer = new wxBoxSizer(wxHORIZONTAL); /*basic info*/ - /*thumbnail*/ auto m_sizer_thumbnail_area = new wxBoxSizer(wxHORIZONTAL); @@ -178,7 +197,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) rename_sizer_h = new wxBoxSizer(wxHORIZONTAL); m_rename_text = new wxStaticText(m_rename_normal_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - m_rename_text->SetFont(::Label::Body_13); + m_rename_text->SetFont(::Label::Head_13); m_rename_text->SetBackgroundColour(*wxWHITE); m_rename_text->SetMaxSize(wxSize(FromDIP(340), -1)); rename_editable = new ScalableBitmap(this, "rename_edit", 20); @@ -255,13 +274,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_basic_weight_time->Add(weightimg, 0, wxALIGN_CENTER|wxLEFT, FromDIP(30)); m_sizer_basic_weight_time->Add(m_stext_weight, 0, wxALIGN_CENTER|wxLEFT, FromDIP(6)); - /*bed type*/ - m_text_bed_type = new Label(m_basic_panel); - m_text_bed_type->SetFont(Label::Body_13); - /*last & next page*/ - - auto last_plate_sizer = new wxBoxSizer(wxVERTICAL); m_bitmap_last_plate = new wxStaticBitmap(m_basic_panel, wxID_ANY, create_scaled_bitmap("go_last_plate", this, 25), wxDefaultPosition, wxSize(FromDIP(25), FromDIP(25)), 0); m_bitmap_last_plate->Hide(); @@ -278,7 +291,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) sizer_rename->Add(m_bitmap_next_plate, 0, wxALIGN_CENTER, 0); /*printer combobox*/ - wxBoxSizer* m_sizer_printer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* sizer_split_printer = new wxBoxSizer(wxHORIZONTAL); m_stext_printer_title = new Label(m_basic_panel, _L("Printer")); m_stext_printer_title->SetFont(::Label::Body_14); @@ -291,35 +303,76 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) sizer_split_printer->Add(m_stext_printer_title, 0, wxALIGN_CENTER, 0); sizer_split_printer->Add(m_split_line, 1, wxALIGN_CENTER_VERTICAL, 0); + wxBoxSizer* sizer_printer_area = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* sizer_bed_staticbox = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* sizer_printer_staticbox = new wxBoxSizer(wxHORIZONTAL); - m_comboBox_printer = new ::ComboBox(m_basic_panel, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(300), -1), 0, nullptr, wxCB_READONLY); - m_comboBox_printer->SetMinSize(wxSize(FromDIP(300), -1)); - m_comboBox_printer->SetMaxSize(wxSize(FromDIP(300), -1)); + /*printer area*/ + auto printer_staticbox = new StaticBox(m_basic_panel); + printer_staticbox->SetMinSize(wxSize(FromDIP(338), FromDIP(68))); + printer_staticbox->SetMaxSize(wxSize(FromDIP(338), FromDIP(68))); + printer_staticbox->SetBorderColor(wxColour(0xCECECE)); + + m_printer_image = new wxStaticBitmap(printer_staticbox, wxID_ANY, create_scaled_bitmap("printer_preview_BL-P001", this, 52)); + m_printer_image->SetMinSize(wxSize(FromDIP(52), FromDIP(52))); + m_printer_image->SetMaxSize(wxSize(FromDIP(52), FromDIP(52))); + + m_comboBox_printer = new ComboBox(printer_staticbox, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); + m_comboBox_printer->SetBorderWidth(0); + m_comboBox_printer->SetMinSize(wxSize(FromDIP(260), FromDIP(60))); + m_comboBox_printer->SetMaxSize(wxSize(FromDIP(260), FromDIP(60))); + m_comboBox_printer->SetBackgroundColor(*wxWHITE); m_comboBox_printer->Bind(wxEVT_COMBOBOX, &SelectMachineDialog::on_selection_changed, this); - m_btn_bg_enable = StateColor(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_refresh = new Button(m_basic_panel, _L("Refresh")); - m_button_refresh->SetBackgroundColor(m_btn_bg_enable); - m_button_refresh->SetBorderColor(m_btn_bg_enable); - m_button_refresh->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); - m_button_refresh->SetSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); - m_button_refresh->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); - m_button_refresh->SetCornerRadius(FromDIP(10)); + m_button_refresh = new ScalableButton(printer_staticbox, wxID_ANY, "refresh_printer", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER,true); m_button_refresh->Bind(wxEVT_BUTTON, &SelectMachineDialog::on_refresh, this); - m_sizer_printer->Add(m_comboBox_printer, 0, wxEXPAND, 0); - m_sizer_printer->Add(m_button_refresh, 0, wxALL | wxLEFT, FromDIP(5)); + sizer_printer_staticbox->Add(0, 0, 0, wxLEFT, FromDIP(7)); + sizer_printer_staticbox->Add(m_printer_image, 0, wxALIGN_CENTER, 0); + sizer_printer_staticbox->Add(m_comboBox_printer, 0, wxALIGN_CENTER, 0); + sizer_printer_staticbox->Add(m_button_refresh, 0, wxALIGN_CENTER, 0); + + printer_staticbox->SetSizer(sizer_printer_staticbox); + printer_staticbox->Layout(); + printer_staticbox->Fit(); + + /*bed area*/ + auto bed_staticbox = new StaticBox(m_basic_panel); + bed_staticbox->SetMinSize(wxSize(FromDIP(98), FromDIP(68))); + bed_staticbox->SetMaxSize(wxSize(FromDIP(98), FromDIP(68))); + bed_staticbox->SetBorderColor(wxColour(0xCECECE)); + + m_bed_image = new wxStaticBitmap(printer_staticbox, wxID_ANY, create_scaled_bitmap("printer_preview_BL-P001", this, 32)); + m_bed_image->SetBackgroundColour(*wxGREEN); + m_bed_image->SetMinSize(wxSize(FromDIP(32), FromDIP(32))); + m_bed_image->SetMaxSize(wxSize(FromDIP(32), FromDIP(32))); + + m_text_bed_type = new Label(bed_staticbox); + m_text_bed_type->SetForegroundColour(0xCECECE); + m_text_bed_type->SetMaxSize(wxSize(FromDIP(80), 0)); + m_text_bed_type->SetFont(Label::Body_13); + + sizer_bed_staticbox->Add(0, 0, 0, wxTOP, FromDIP(16)); + sizer_bed_staticbox->Add(m_bed_image, 0, wxALIGN_CENTER, 0); + sizer_bed_staticbox->Add(m_text_bed_type, 0, wxALIGN_CENTER, 0); + + bed_staticbox->SetSizer(sizer_bed_staticbox); + bed_staticbox->Layout(); + bed_staticbox->Fit(); + + sizer_printer_area->Add(printer_staticbox, 0, wxALIGN_CENTER, 0); + sizer_printer_area->Add(0, 0, 0, wxLEFT, FromDIP(4)); + sizer_printer_area->Add(bed_staticbox, 0, wxALIGN_CENTER, 0); m_text_printer_msg = new Label(m_basic_panel); - m_text_printer_msg->SetMinSize(wxSize(FromDIP(420), -1)); - m_text_printer_msg->SetMaxSize(wxSize(FromDIP(420), -1)); + m_text_printer_msg->SetMinSize(wxSize(FromDIP(420), FromDIP(24))); + m_text_printer_msg->SetMaxSize(wxSize(FromDIP(420), FromDIP(24))); m_text_printer_msg->SetFont(::Label::Body_13); m_text_printer_msg->Hide(); - sizer_basic_right_info->Add(sizer_rename, 0, wxTOP, 0); sizer_basic_right_info->Add(0, 0, 0, wxTOP, FromDIP(5)); sizer_basic_right_info->Add(m_sizer_basic_weight_time, 0, wxTOP, 0); @@ -328,7 +381,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) sizer_basic_right_info->Add(0, 0, 0, wxTOP, FromDIP(15)); sizer_basic_right_info->Add(sizer_split_printer, 1, wxEXPAND, 0); sizer_basic_right_info->Add(0, 0, 0, wxTOP, FromDIP(8)); - sizer_basic_right_info->Add(m_sizer_printer, 0, wxTOP, 0); + sizer_basic_right_info->Add(sizer_printer_area, 0, wxTOP, 0); sizer_basic_right_info->Add(0, 0, 0, wxTOP, FromDIP(4)); sizer_basic_right_info->Add(m_text_printer_msg, 0, wxLEFT, 0); @@ -689,7 +742,9 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(12)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(11)); + m_sizer_main->Add(m_sizer_mode_switch, 0, wxALIGN_CENTER, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(15)); m_sizer_main->Add(m_basic_panel, 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15)); m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14)); m_sizer_main->Add(sizer_split_filament, 1, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15)); @@ -3223,14 +3278,10 @@ void SelectMachineDialog::Enable_Refresh_Button(bool en) if (!en) { if (m_button_refresh->IsEnabled()) { m_button_refresh->Disable(); - m_button_refresh->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); - m_button_refresh->SetBorderColor(wxColour(0x90, 0x90, 0x90)); } } else { if (!m_button_refresh->IsEnabled()) { m_button_refresh->Enable(); - m_button_refresh->SetBackgroundColor(m_btn_bg_enable); - m_button_refresh->SetBorderColor(m_btn_bg_enable); } } } @@ -3265,17 +3316,10 @@ void SelectMachineDialog::on_dpi_changed(const wxRect &suggested_rect) if (img_amsmapping_tip)img_amsmapping_tip->SetBitmap(ams_mapping_help_icon->bmp()); } enable_ams->msw_rescale(); - - m_button_refresh->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); - m_button_refresh->SetCornerRadius(FromDIP(12)); m_button_ensure->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); m_button_ensure->SetCornerRadius(FromDIP(12)); m_status_bar->msw_rescale(); - //for (auto checkpire : m_checkbox_list) { - // checkpire.second->Rescale(); - //} - for (auto material1 : m_materialList) { material1.second->item->msw_rescale(); } @@ -4472,4 +4516,91 @@ std::string PrintOptionItem::getValue() return selected_key; } + SendModeSwitchButton::SendModeSwitchButton(wxWindow *parent, wxString mode, bool sel) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) + { +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + is_selected = sel; + SetLabel(mode); + Bind(wxEVT_PAINT, &SendModeSwitchButton::OnPaint, this); + Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_HAND); }); + Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_ARROW); }); + + SetBackgroundColour(*wxWHITE); + static Slic3r::GUI::BitmapCache cache; + m_img_selected = ScalableBitmap(this, "switch_send_mode_on", 28); + m_img_unselected = ScalableBitmap(this, "switch_send_mode_off", 28); + m_img_selected_tag = ScalableBitmap(this, "switch_send_mode_tag_on", 16); + m_img_unselected_tag = ScalableBitmap(this, "switch_send_mode_tag_off", 16); + + auto tagSize = wxSize(FromDIP(185), FromDIP(28)); + + SetMinSize(tagSize); + SetMaxSize(tagSize); + } + +void SendModeSwitchButton::OnPaint(wxPaintEvent &event) +{ + wxPaintDC dc(this); + doRender(dc); +} + +void SendModeSwitchButton::render(wxDC &dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({0, 0}, size, &dc, {0, 0}); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void SendModeSwitchButton::doRender(wxDC &dc) +{ + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + + auto size = GetSize(); + auto textSize = dc.GetTextExtent(GetLabel()); + auto left =(size.x - textSize.x - m_img_selected_tag.GetBmpSize().x - FromDIP(8)) / 2; + + dc.SetFont(::Label::Head_14); + + if (is_selected) { + dc.DrawBitmap(m_img_selected.bmp(), wxPoint(0, 0)); + dc.DrawBitmap(m_img_selected_tag.bmp(), wxPoint(left, (size.y - m_img_selected_tag.GetBmpSize().y) / 2)); + dc.SetTextForeground(0x00AE42); + }else { + dc.DrawBitmap(m_img_unselected.bmp(), wxPoint(0, 0)); + dc.DrawBitmap(m_img_unselected_tag.bmp(), wxPoint(left, (size.y - m_img_selected_tag.GetBmpSize().y) / 2)); + dc.SetTextForeground(0x5C5C5C); + } + dc.DrawText(GetLabel(), left + m_img_selected_tag.GetBmpSize().x + FromDIP(8), (size.y - textSize.y) / 2); +} + +void SendModeSwitchButton::on_left_down(wxMouseEvent &evt) +{ + setSelected(!is_selected); +} + +void SendModeSwitchButton::setSelected(bool selected) +{ + is_selected = selected; + Refresh(); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 951bcbd0f..f6fa39484 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -102,7 +102,7 @@ public: WX_DECLARE_HASH_MAP(int, Material *, wxIntegerHash, wxIntegerEqual, MaterialHash); -#define SELECT_MACHINE_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(23)) +#define SELECT_MACHINE_DIALOG_BUTTON_SIZE wxSize(FromDIP(57), FromDIP(32)) #define SELECT_MACHINE_DIALOG_SIMBOOK_SIZE wxSize(FromDIP(370), FromDIP(64)) static int get_brightness_value(wxImage image) { @@ -205,6 +205,25 @@ private: int m_brightness_value{-1}; }; + +class SendModeSwitchButton : public wxPanel +{ +public: + SendModeSwitchButton(wxWindow *parent, wxString mode, bool sel); + ~SendModeSwitchButton(){}; + void OnPaint(wxPaintEvent &event); + void render(wxDC &dc); + void on_left_down(wxMouseEvent &evt); + void doRender(wxDC &dc); + void setSelected(bool selected); + bool isSelected(){return is_selected;}; + bool is_selected {false}; + ScalableBitmap m_img_selected; + ScalableBitmap m_img_unselected; + ScalableBitmap m_img_selected_tag; + ScalableBitmap m_img_unselected_tag; +}; + class SelectMachineDialog : public DPIDialog { private: @@ -241,6 +260,11 @@ private: std::vector m_filaments_map; std::shared_ptr m_status_bar; + SendModeSwitchButton* m_mode_print {nullptr}; + SendModeSwitchButton* m_mode_send {nullptr}; + wxStaticBitmap* m_printer_image{nullptr}; + wxStaticBitmap* m_bed_image{nullptr}; + Slic3r::DynamicPrintConfig m_required_data_config; Slic3r::Model m_required_data_model; Slic3r::PlateDataPtrs m_required_data_plate_data_list; @@ -265,7 +289,7 @@ protected: wxBoxSizer* rename_sizer_v{ nullptr }; wxBoxSizer* rename_sizer_h{ nullptr }; wxBoxSizer* m_sizer_autorefill{ nullptr }; - Button* m_button_refresh{ nullptr }; + ScalableButton* m_button_refresh{ nullptr }; Button* m_button_ensure{ nullptr }; wxStaticBitmap * m_rename_button{nullptr}; ComboBox* m_comboBox_printer{ nullptr };