diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index b264030d76..95ecfe455a 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -14,6 +14,8 @@ set(SLIC3R_GUI_SOURCES GUI/Widgets/Button.hpp GUI/Widgets/CheckBox.cpp GUI/Widgets/CheckBox.hpp + GUI/Widgets/DialogButtons.cpp + GUI/Widgets/DialogButtons.hpp GUI/Widgets/RadioBox.hpp GUI/Widgets/RadioBox.cpp GUI/Widgets/ProgressDialog.hpp diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index 207139d854..893455914a 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -12,6 +12,8 @@ #include "libslic3r/Model.hpp" #include "libslic3r/Polygon.hpp" +#include "Widgets/DialogButtons.hpp" + #include #include @@ -143,7 +145,10 @@ void BedShapeDialog::build_dialog(const Pointfs& default_pt, const ConfigOptionS auto main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_panel, 1, wxEXPAND); - main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10); + + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); + + main_sizer->Add(dlg_btns, 0, wxEXPAND); wxGetApp().UpdateDlgDarkUI(this); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index c186ac518f..63e9e48525 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -684,7 +684,7 @@ CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) m_scrolled_sizer->Add(0, 0, 0, wxTOP, FromDIP(5)); m_scrolled_preset_panel->SetSizerAndFit(m_scrolled_sizer); m_main_sizer->Add(m_scrolled_preset_panel, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(10)); - m_main_sizer->Add(create_button_item(), 0, wxEXPAND | wxALL, FromDIP(10)); + m_main_sizer->Add(create_dialog_buttons(), 0, wxEXPAND); get_all_visible_printer_name(); select_curr_radiobox(m_create_type_btns, 0); @@ -709,14 +709,6 @@ CreateFilamentPresetDialog::~CreateFilamentPresetDialog() } void CreateFilamentPresetDialog::on_dpi_changed(const wxRect &suggested_rect) { - - m_button_create->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetCornerRadius(FromDIP(12)); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); - Layout(); } @@ -1018,25 +1010,13 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_for_printer_item( return vertical_sizer; } -wxBoxSizer *CreateFilamentPresetDialog::create_button_item() +wxWindow *CreateFilamentPresetDialog::create_dialog_buttons() { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - m_button_create = new Button(this, _L("Create")); - m_button_create->SetBackgroundColor(btn_bg_green); - m_button_create->SetBorderColor(*wxWHITE); - m_button_create->SetTextColor(wxColour(0xFFFFFE)); - m_button_create->SetFont(Label::Body_12); - m_button_create->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_create, 0, wxRIGHT, FromDIP(10)); - - m_button_create->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + auto btn_ok = dlg_btns->GetOK(); + btn_ok->SetLabel(_L("Create")); + btn_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { //get vendor name wxString vendor_str = m_filament_vendor_combobox->GetLabel(); std::string vendor_name; @@ -1194,23 +1174,11 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() EndModal(wxID_OK); }); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_button_cancel = new Button(this, _L("Cancel")); - m_button_cancel->SetBackgroundColor(btn_bg_white); - m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_cancel->SetFont(Label::Body_12); - m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_cancel, 0, wxRIGHT, FromDIP(10)); - - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + dlg_btns->GetCANCEL()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); - }); + }); - return bSizer_button; + return dlg_btns; } wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices() @@ -1598,7 +1566,7 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent) page_sizer->Add(m_page1, 1, wxEXPAND, 0); page_sizer->Add(m_page2, 1, wxEXPAND, 0); - m_main_sizer->Add(page_sizer, 0, wxEXPAND | wxRIGHT, FromDIP(10)); + m_main_sizer->Add(page_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(5)); // ORCA use equal border for both sides select_curr_radiobox(m_create_type_btns, 0); select_curr_radiobox(m_create_presets_btns, 0); @@ -1627,21 +1595,6 @@ CreatePrinterPresetDialog::~CreatePrinterPresetDialog() } void CreatePrinterPresetDialog::on_dpi_changed(const wxRect &suggested_rect) { - m_button_OK->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_OK->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_OK->SetCornerRadius(FromDIP(12)); - m_button_create->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetCornerRadius(FromDIP(12)); - m_button_page1_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page1_cancel->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page1_cancel->SetCornerRadius(FromDIP(12)); - m_button_page2_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_cancel->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_cancel->SetCornerRadius(FromDIP(12)); - m_button_page2_back->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_back->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_back->SetCornerRadius(FromDIP(12)); Layout(); } @@ -1702,7 +1655,7 @@ void CreatePrinterPresetDialog::create_printer_page1(wxWindow *parent) m_printer_info_sizer->Add(create_max_print_height_item(m_printer_info_panel), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_printer_info_panel->SetSizer(m_printer_info_sizer); m_page1_sizer->Add(m_printer_info_panel, 0, wxEXPAND, 0); - m_page1_sizer->Add(create_page1_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page1_sizer->Add(create_page1_dialog_buttons(parent), 0, wxEXPAND); parent->SetSizerAndFit(m_page1_sizer); Layout(); @@ -2067,45 +2020,19 @@ wxBoxSizer *CreatePrinterPresetDialog::create_max_print_height_item(wxWindow *pa return horizontal_sizer; } -wxBoxSizer *CreatePrinterPresetDialog::create_page1_btns_item(wxWindow *parent) +wxWindow *CreatePrinterPresetDialog::create_page1_dialog_buttons(wxWindow *parent) { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); - - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - m_button_OK = new Button(parent, _L("OK")); - m_button_OK->SetBackgroundColor(btn_bg_green); - m_button_OK->SetBorderColor(*wxWHITE); - m_button_OK->SetTextColor(wxColour(0xFFFFFE)); - m_button_OK->SetFont(Label::Body_12); - m_button_OK->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_OK->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_OK->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_OK, 0, wxRIGHT, FromDIP(10)); - - m_button_OK->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + auto dlg_btns = new DialogButtons(parent, {"OK", "Cancel"}); + + dlg_btns->GetOK()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { if (!validate_input_valid()) return; data_init(); show_page2(); - }); + }); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); + dlg_btns->GetCANCEL()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - m_button_page1_cancel = new Button(parent, _L("Cancel")); - m_button_page1_cancel->SetBackgroundColor(btn_bg_white); - m_button_page1_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_page1_cancel->SetFont(Label::Body_12); - m_button_page1_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page1_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page1_cancel->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_page1_cancel, 0, wxRIGHT, FromDIP(10)); - - m_button_page1_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - - return bSizer_button; + return dlg_btns; } static std::string last_directory = ""; void CreatePrinterPresetDialog::load_texture() { @@ -2498,7 +2425,7 @@ void CreatePrinterPresetDialog::create_printer_page2(wxWindow *parent) m_page2_sizer->Add(create_printer_preset_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page2_sizer->Add(create_presets_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); m_page2_sizer->Add(create_presets_template_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - m_page2_sizer->Add(create_page2_btns_item(parent), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_page2_sizer->Add(create_page2_dialog_buttons(parent), 0, wxEXPAND); parent->SetSizerAndFit(m_page2_sizer); Layout(); @@ -2648,39 +2575,15 @@ wxBoxSizer *CreatePrinterPresetDialog::create_presets_template_item(wxWindow *pa return vertical_sizer; } -wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent) +wxWindow *CreatePrinterPresetDialog::create_page2_dialog_buttons(wxWindow *parent) { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); + auto dlg_btns = new DialogButtons(parent, {"Back", "OK", "Cancel"}); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + dlg_btns->GetBACK()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { show_page1(); }); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_button_page2_back = new Button(parent, _L("Back Page 1")); - m_button_page2_back->SetBackgroundColor(btn_bg_white); - m_button_page2_back->SetBorderColor(wxColour(38, 46, 48)); - m_button_page2_back->SetFont(Label::Body_12); - m_button_page2_back->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_back->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_back->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_page2_back, 0, wxRIGHT, FromDIP(10)); - - m_button_page2_back->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { show_page1(); }); - - m_button_create = new Button(parent, _L("Create")); - m_button_create->SetBackgroundColor(btn_bg_green); - m_button_create->SetBorderColor(*wxWHITE); - m_button_create->SetTextColor(wxColour(0xFFFFFE)); - m_button_create->SetFont(Label::Body_12); - m_button_create->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_create->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_create, 0, wxRIGHT, FromDIP(10)); - - m_button_create->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + auto btn_ok = dlg_btns->GetOK(); + btn_ok->SetLabel(_L("Create")); + btn_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { PresetBundle *preset_bundle = wxGetApp().preset_bundle; const wxString curr_selected_printer_type = curr_create_printer_type(); @@ -2925,18 +2828,9 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent) }); - m_button_page2_cancel = new Button(parent, _L("Cancel")); - m_button_page2_cancel->SetBackgroundColor(btn_bg_white); - m_button_page2_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_page2_cancel->SetFont(Label::Body_12); - m_button_page2_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_page2_cancel->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_page2_cancel, 0, wxRIGHT, FromDIP(10)); + dlg_btns->GetCANCEL()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - m_button_page2_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - - return bSizer_button; + return dlg_btns; } void CreatePrinterPresetDialog::show_page1() @@ -3374,52 +3268,27 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con m_main_sizer->Add(horizontal_sizer, 0, wxALL, FromDIP(5)); - wxBoxSizer *btn_sizer = new wxBoxSizer(wxHORIZONTAL); - btn_sizer->Add(0, 0, 1, wxEXPAND, 0); - switch (create_success_type) { - case PRINTER: - m_button_ok = new Button(this, _L("Printer Setting")); - break; - case FILAMENT: m_button_ok = sync_user_preset_need_enabled ? new Button(this, _L("Sync user presets")) : new Button(this, _L("OK")); - break; - } - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); + bool is_cancel_needed = PRINTER == create_success_type || sync_user_preset_need_enabled; - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - m_button_ok->SetBackgroundColor(btn_bg_green); - m_button_ok->SetBorderColor(wxColour(*wxWHITE)); - m_button_ok->SetTextColor(wxColour(*wxWHITE)); - m_button_ok->SetFont(Label::Body_12); - m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetCornerRadius(FromDIP(12)); - btn_sizer->Add(m_button_ok, 0, wxRIGHT, FromDIP(10)); + auto dlg_btns = new DialogButtons(this, is_cancel_needed ? std::vector{"OK", "Cancel"} : std::vector{"OK"}); - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this, sync_user_preset_need_enabled](wxMouseEvent &e) { + if (create_success_type == PRINTER) + dlg_btns->GetOK()->SetLabel(_L("Printer Setting")); + else if (create_success_type == FILAMENT && sync_user_preset_need_enabled) + dlg_btns->GetOK()->SetLabel(_L("Sync user presets")); + + dlg_btns->GetOK()->Bind(wxEVT_LEFT_DOWN, [this, sync_user_preset_need_enabled](wxMouseEvent &e) { if (sync_user_preset_need_enabled) { wxGetApp().app_config->set("sync_user_preset", "true"); wxGetApp().start_sync_user_preset(); } EndModal(wxID_OK); - }); + }); - if (PRINTER == create_success_type || sync_user_preset_need_enabled) { - m_button_cancel = new Button(this, _L("Cancel")); - m_button_cancel->SetBackgroundColor(btn_bg_white); - m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_cancel->SetTextColor(wxColour(38, 46, 48)); - m_button_cancel->SetFont(Label::Body_12); - m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); - btn_sizer->Add(m_button_cancel, 0, wxRIGHT, FromDIP(10)); - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - } + if (is_cancel_needed) + dlg_btns->GetCANCEL()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - m_main_sizer->Add(btn_sizer, 0, wxEXPAND | wxALL, FromDIP(15)); - m_main_sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_main_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizer(m_main_sizer); Layout(); @@ -3430,12 +3299,6 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con CreatePresetSuccessfulDialog::~CreatePresetSuccessfulDialog() {} void CreatePresetSuccessfulDialog::on_dpi_changed(const wxRect &suggested_rect) { - m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); Layout(); } @@ -3463,7 +3326,7 @@ ExportConfigsDialog::ExportConfigsDialog(wxWindow *parent) m_main_sizer->Add(create_export_config_item(this), 0, wxEXPAND | wxALL, FromDIP(5)); m_main_sizer->Add(create_select_printer(this), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); - m_main_sizer->Add(create_button_item(this), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(5)); + m_main_sizer->Add(create_dialog_buttons(this), 0, wxEXPAND); data_init(); @@ -3517,12 +3380,6 @@ ExportConfigsDialog::~ExportConfigsDialog() } void ExportConfigsDialog::on_dpi_changed(const wxRect &suggested_rect) { - m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetCornerRadius(FromDIP(12)); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); Layout(); } @@ -4168,25 +4025,10 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_process_preset_to_f return ExportCase::EXPORT_SUCCESS; } -wxBoxSizer *ExportConfigsDialog::create_button_item(wxWindow* parent) +wxWindow *ExportConfigsDialog::create_dialog_buttons(wxWindow* parent) { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); - - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - m_button_ok = new Button(this, _L("OK")); - m_button_ok->SetBackgroundColor(btn_bg_green); - m_button_ok->SetBorderColor(*wxWHITE); - m_button_ok->SetTextColor(wxColour(0xFFFFFE)); - m_button_ok->SetFont(Label::Body_12); - m_button_ok->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_ok->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_ok, 0, wxRIGHT, FromDIP(10)); - - m_button_ok->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + auto dlg_btns = new DialogButtons(parent, {"OK", "Cancel"}); + dlg_btns->GetOK()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { if (!has_check_box_selected()) { MessageDialog dlg(this, _L("Please select at least one printer or filament."), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE); @@ -4223,21 +4065,9 @@ wxBoxSizer *ExportConfigsDialog::create_button_item(wxWindow* parent) EndModal(wxID_OK); }); - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); + dlg_btns->GetCANCEL()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - m_button_cancel = new Button(this, _L("Cancel")); - m_button_cancel->SetBackgroundColor(btn_bg_white); - m_button_cancel->SetBorderColor(wxColour(38, 46, 48)); - m_button_cancel->SetFont(Label::Body_12); - m_button_cancel->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_button_cancel->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_button_cancel, 0, wxRIGHT, FromDIP(10)); - - m_button_cancel->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_CANCEL); }); - - return bSizer_button; + return dlg_btns; } wxBoxSizer *ExportConfigsDialog::create_select_printer(wxWindow *parent) @@ -4422,7 +4252,7 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, Filamentinf m_note_text = new wxStaticText(this, wxID_ANY, _L("Note: If the only preset under this filament is deleted, the filament will be deleted after exiting the dialog.")); m_main_sizer->Add(m_note_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); m_note_text->Hide(); - m_main_sizer->Add(create_button_sizer(), 0, wxEXPAND | wxALL, 0); + m_main_sizer->Add(create_dialog_buttons(), 0, wxEXPAND); update_preset_tree(); @@ -4434,13 +4264,6 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, Filamentinf EditFilamentPresetDialog::~EditFilamentPresetDialog() {} void EditFilamentPresetDialog::on_dpi_changed(const wxRect &suggested_rect) { - /*m_add_filament_btn->Rescale(); - m_del_filament_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_filament_btn->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_filament_btn->SetCornerRadius(FromDIP(12)); - m_ok_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetCornerRadius(FromDIP(12));*/ Layout(); } @@ -4731,39 +4554,11 @@ wxBoxSizer *EditFilamentPresetDialog::create_preset_tree_sizer() return filament_preset_tree_sizer; } -wxBoxSizer *EditFilamentPresetDialog::create_button_sizer() +wxWindow *EditFilamentPresetDialog::create_dialog_buttons() { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); + auto dlg_btns = new DialogButtons(this, {"Delete", "OK"}); - m_del_filament_btn = new Button(this, _L("Delete Filament")); - m_del_filament_btn->SetBackgroundColor(*wxRED); - m_del_filament_btn->SetBorderColor(*wxWHITE); - m_del_filament_btn->SetTextColor(wxColour(0xFFFFFE)); - m_del_filament_btn->SetFont(Label::Body_12); - m_del_filament_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_filament_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_del_filament_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_del_filament_btn, 0, wxLEFT | wxBOTTOM, FromDIP(10)); - - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); - - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - m_ok_btn = new Button(this, _L("OK")); - m_ok_btn->SetBackgroundColor(btn_bg_green); - m_ok_btn->SetBorderColor(*wxWHITE); - m_ok_btn->SetTextColor(wxColour(0xFFFFFE)); - m_ok_btn->SetFont(Label::Body_12); - m_ok_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_ok_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(10)); - - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_del_filament_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) { + dlg_btns->GetButtonFromID(wxID_DELETE)->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) { WarningDialog dlg(this, _L("All the filament presets belong to this filament would be deleted.\n" "If you are using this filament on your printer, please reset the filament information for that slot."), _L("Delete filament"), wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxCENTRE); @@ -4803,10 +4598,9 @@ wxBoxSizer *EditFilamentPresetDialog::create_button_sizer() e.Skip(); })); - m_ok_btn->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_OK); }); - - return bSizer_button; + dlg_btns->GetOK()->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { EndModal(wxID_OK); }); + return dlg_btns; } CreatePresetForPrinterDialog::CreatePresetForPrinterDialog(wxWindow *parent, std::string filament_type, std::string filament_id, std::string filament_vendor, std::string filament_name) @@ -4837,7 +4631,7 @@ CreatePresetForPrinterDialog::CreatePresetForPrinterDialog(wxWindow *parent, std main_sizer->Add(create_selected_printer_preset_sizer(), 0, wxALL, FromDIP(10)); main_sizer->Add(create_selected_filament_preset_sizer(), 0, wxALL, FromDIP(10)); - main_sizer->Add(create_button_sizer(), 0, wxEXPAND | wxALL, FromDIP(10)); + main_sizer->Add(create_dialog_buttons(), 0, wxEXPAND); this->SetSizer(main_sizer); this->Layout(); @@ -4848,12 +4642,6 @@ CreatePresetForPrinterDialog::CreatePresetForPrinterDialog(wxWindow *parent, std CreatePresetForPrinterDialog::~CreatePresetForPrinterDialog() {} void CreatePresetForPrinterDialog::on_dpi_changed(const wxRect &suggested_rect) { - m_ok_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetCornerRadius(FromDIP(12)); - m_cancel_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetMaxSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetCornerRadius(FromDIP(12)); Layout(); } @@ -4943,38 +4731,10 @@ wxBoxSizer *CreatePresetForPrinterDialog::create_selected_filament_preset_sizer( return select_filament_preset_sizer; } -wxBoxSizer *CreatePresetForPrinterDialog::create_button_sizer() +wxWindow *CreatePresetForPrinterDialog::create_dialog_buttons() { - wxBoxSizer *bSizer_button = new wxBoxSizer(wxHORIZONTAL); - - bSizer_button->Add(0, 0, 1, wxEXPAND, 0); - - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - - m_ok_btn = new Button(this, _L("OK")); - m_ok_btn->SetBackgroundColor(btn_bg_green); - m_ok_btn->SetBorderColor(*wxWHITE); - m_ok_btn->SetTextColor(wxColour(0xFFFFFE)); - m_ok_btn->SetFont(Label::Body_12); - m_ok_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_ok_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_ok_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(10)); - - StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); - - m_cancel_btn = new Button(this, _L("Cancel")); - m_cancel_btn->SetBackgroundColor(btn_bg_white); - m_cancel_btn->SetBorderColor(wxColour(38, 46, 48)); - m_cancel_btn->SetFont(Label::Body_12); - m_cancel_btn->SetSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetMinSize(wxSize(FromDIP(58), FromDIP(24))); - m_cancel_btn->SetCornerRadius(FromDIP(12)); - bSizer_button->Add(m_cancel_btn, 0, wxRIGHT | wxBOTTOM, FromDIP(10)); - - m_ok_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { wxString selected_printer_name = m_selected_printer->GetStringSelection(); std::string printer_name = into_u8(selected_printer_name); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " add preset: get compatible printer name:"; @@ -5015,10 +4775,12 @@ wxBoxSizer *CreatePresetForPrinterDialog::create_button_sizer() } EndModal(wxID_OK); - }); - m_cancel_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); - - return bSizer_button; + }); + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + EndModal(wxID_CANCEL); + }); + + return dlg_btns; } PresetTree::PresetTree(EditFilamentPresetDialog * dialog) diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 50cfe5df15..d4c5797f22 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -10,6 +10,7 @@ #include "Widgets/RadioBox.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" +#include "Widgets/DialogButtons.hpp" #include "miniz.h" #include "ParamsDialog.hpp" @@ -41,7 +42,7 @@ protected: wxBoxSizer *create_serial_item(); wxBoxSizer *create_filament_preset_item(); wxBoxSizer *create_filament_preset_for_printer_item(); - wxBoxSizer *create_button_item(); + wxWindow *create_dialog_buttons(); private: void clear_filament_preset_map(); @@ -112,13 +113,13 @@ protected: wxBoxSizer *create_hot_bed_stl_item(wxWindow *parent); wxBoxSizer *create_hot_bed_svg_item(wxWindow *parent); wxBoxSizer *create_max_print_height_item(wxWindow *parent); - wxBoxSizer *create_page1_btns_item(wxWindow *parent); + wxWindow *create_page1_dialog_buttons(wxWindow *parent); //Improt Presets Page2 void create_printer_page2(wxWindow *parent); wxBoxSizer *create_printer_preset_item(wxWindow *parent); wxBoxSizer *create_presets_item(wxWindow *parent); wxBoxSizer *create_presets_template_item(wxWindow *parent); - wxBoxSizer *create_page2_btns_item(wxWindow *parent); + wxWindow *create_page2_dialog_buttons(wxWindow *parent); void show_page1(); void show_page2(); @@ -168,11 +169,6 @@ private: Preset * m_printer_preset = nullptr; wxStaticBitmap * m_step_1 = nullptr; wxStaticBitmap * m_step_2 = nullptr; - Button * m_button_OK = nullptr; - Button * m_button_create = nullptr; - Button * m_button_page1_cancel = nullptr; - Button * m_button_page2_cancel = nullptr; - Button * m_button_page2_back = nullptr; Button * m_button_bed_stl = nullptr; Button * m_button_bed_svg = nullptr; wxScrolledWindow * m_page1 = nullptr; @@ -224,9 +220,6 @@ public: protected: void on_dpi_changed(const wxRect &suggested_rect) override; -private: - Button *m_button_ok = nullptr; - Button *m_button_cancel = nullptr; }; class ExportConfigsDialog : public DPIDialog @@ -267,7 +260,7 @@ private: std::string initial_file_path(const wxString &path, const std::string &sub_file_path); std::string initial_file_name(const wxString &path, const std::string file_name); wxBoxSizer *create_export_config_item(wxWindow *parent); - wxBoxSizer *create_button_item(wxWindow *parent); + wxWindow *create_dialog_buttons(wxWindow *parent); wxBoxSizer *create_select_printer(wxWindow *parent); wxBoxSizer *create_radio_item(wxString title, wxWindow *parent, wxString tooltip, std::vector> &radiobox_list); int initial_zip_archive(mz_zip_archive &zip_archive, const std::string &file_path); @@ -292,8 +285,6 @@ private: wxScrolledWindow * m_scrolled_preset_window = nullptr; wxGridSizer * m_preset_sizer = nullptr; wxPanel * m_presets_window = nullptr; - Button * m_button_ok = nullptr; - Button * m_button_cancel = nullptr; wxStaticText * m_serial_text = nullptr; }; @@ -308,7 +299,7 @@ private: void get_visible_printer_and_compatible_filament_presets(); wxBoxSizer *create_selected_printer_preset_sizer(); wxBoxSizer *create_selected_filament_preset_sizer(); - wxBoxSizer *create_button_sizer(); + wxWindow *create_dialog_buttons(); private: std::string m_filament_id; @@ -318,11 +309,8 @@ private: std::shared_ptr m_preset_bundle; ComboBox * m_selected_printer = nullptr; ComboBox * m_selected_filament = nullptr; - Button * m_ok_btn = nullptr; - Button * m_cancel_btn = nullptr; std::unordered_map> filament_choice_to_filament_preset; std::unordered_map>> m_printer_compatible_filament_presets; // need be used when add presets - }; class EditFilamentPresetDialog; @@ -370,7 +358,7 @@ private: wxBoxSizer *create_filament_basic_info(); wxBoxSizer *create_add_filament_btn(); wxBoxSizer *create_preset_tree_sizer(); - wxBoxSizer *create_button_sizer(); + wxWindow *create_dialog_buttons(); private: PresetTree * m_preset_tree_creater = nullptr; @@ -380,8 +368,6 @@ private: std::string m_filament_type; std::string m_filament_serial; Button * m_add_filament_btn = nullptr; - Button * m_del_filament_btn = nullptr; - Button * m_ok_btn = nullptr; wxBoxSizer * m_preset_tree_sizer = nullptr; wxPanel * m_preset_tree_panel = nullptr; wxScrolledWindow * m_preset_tree_window = nullptr; diff --git a/src/slic3r/GUI/EditGCodeDialog.cpp b/src/slic3r/GUI/EditGCodeDialog.cpp index bc47cce4d9..171c0c3080 100644 --- a/src/slic3r/GUI/EditGCodeDialog.cpp +++ b/src/slic3r/GUI/EditGCodeDialog.cpp @@ -20,6 +20,8 @@ #include "MsgDialog.hpp" #include "Plater.hpp" +#include "Widgets/DialogButtons.hpp" + #include "libslic3r/PlaceholderParser.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/Print.hpp" @@ -98,10 +100,7 @@ EditGCodeDialog::EditGCodeDialog(wxWindow* parent, const std::string& key, const m_param_description = new wxStaticText(this, wxID_ANY, wxEmptyString); - //Orca: use custom buttons - auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL); - for(auto btn : m_button_list) - wxGetApp().UpdateDarkUI(btn.second); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); @@ -109,7 +108,7 @@ EditGCodeDialog::EditGCodeDialog(wxWindow* parent, const std::string& key, const topSizer->Add(grid_sizer , 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); topSizer->Add(m_param_label , 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); topSizer->Add(m_param_description , 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, border); - topSizer->Add(btn_sizer , 0, wxEXPAND | wxALL, border); + topSizer->Add(dlg_btns , 0, wxEXPAND); SetSizer(topSizer); topSizer->SetSizeHints(this); @@ -417,20 +416,6 @@ void EditGCodeDialog::bind_list_and_button() void EditGCodeDialog::on_dpi_changed(const wxRect&suggested_rect) { const int& em = em_unit(); - - //Orca: use custom buttons - for (auto button_item : m_button_list) - { - if (button_item.first == wxOK) { - button_item.second->SetMinSize(BTN_SIZE); - button_item.second->SetCornerRadius(FromDIP(12)); - } - if (button_item.first == wxCANCEL) { - button_item.second->SetMinSize(BTN_SIZE); - button_item.second->SetCornerRadius(FromDIP(12)); - } - } - const wxSize& size = wxSize(45 * em, 35 * em); SetMinSize(size); @@ -443,83 +428,6 @@ void EditGCodeDialog::on_sys_color_changed() m_add_btn->msw_rescale(); } -//Orca -wxBoxSizer* EditGCodeDialog::create_btn_sizer(long flags) -{ - auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); - btn_sizer->AddStretchSpacer(); - - StateColor ok_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor ok_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor ok_btn_text( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); - - StateColor cancel_btn_bg( - std::pair(wxColour(206, 206, 206), StateColor::Pressed), - std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(wxColour(255, 255, 255), StateColor::Normal) - ); - - StateColor cancel_btn_bd_( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); - - StateColor cancel_btn_text( - std::pair(wxColour(38, 46, 48), StateColor::Normal) - ); - - - StateColor calc_btn_bg( - std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_bd( - std::pair(wxColour(0, 150, 136), StateColor::Normal) - ); - - StateColor calc_btn_text( - std::pair(wxColour(255, 255, 254), StateColor::Normal) - ); - - if (flags & wxOK) { - Button* ok_btn = new Button(this, _L("OK")); - ok_btn->SetMinSize(BTN_SIZE); - ok_btn->SetCornerRadius(FromDIP(12)); - ok_btn->SetBackgroundColor(ok_btn_bg); - ok_btn->SetBorderColor(ok_btn_bd); - ok_btn->SetTextColor(ok_btn_text); - ok_btn->SetFocus(); - ok_btn->SetId(wxID_OK); - btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); - m_button_list[wxOK] = ok_btn; - } - if (flags & wxCANCEL) { - Button* cancel_btn = new Button(this, _L("Cancel")); - cancel_btn->SetMinSize(BTN_SIZE); - cancel_btn->SetCornerRadius(FromDIP(12)); - cancel_btn->SetBackgroundColor(cancel_btn_bg); - cancel_btn->SetBorderColor(cancel_btn_bd_); - cancel_btn->SetTextColor(cancel_btn_text); - cancel_btn->SetId(wxID_CANCEL); - btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP / 2); - m_button_list[wxCANCEL] = cancel_btn; - } - - return btn_sizer; -} - - const std::map ParamsInfo { // Type BitmapName { ParamType::Scalar, "custom-gcode_single" }, diff --git a/src/slic3r/GUI/EditGCodeDialog.hpp b/src/slic3r/GUI/EditGCodeDialog.hpp index 28cd5809f9..e6907acbf1 100644 --- a/src/slic3r/GUI/EditGCodeDialog.hpp +++ b/src/slic3r/GUI/EditGCodeDialog.hpp @@ -65,8 +65,6 @@ protected: void on_sys_color_changed() override; void selection_changed(wxDataViewEvent& evt); - - wxBoxSizer* create_btn_sizer(long flags); }; diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index ef4b91697b..5165730952 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -19,6 +19,8 @@ #include "libslic3r/PrintConfig.hpp" #include "libslic3r/PresetBundle.hpp" +#include "Widgets/DialogButtons.hpp" + #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" @@ -94,20 +96,17 @@ PhysicalPrinterDialog::PhysicalPrinterDialog(wxWindow* parent) : m_optgroup = new ConfigOptionsGroup(this, _L("Print Host upload"), m_config); build_printhost_settings(m_optgroup); - wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxOK | wxCANCEL); - btnOK = static_cast(this->FindWindowById(wxID_OK, this)); - wxGetApp().UpdateDarkUI(btnOK); - btnOK->Bind(wxEVT_BUTTON, &PhysicalPrinterDialog::OnOK, this); + auto dlg_btns = new DialogButtons(this, {"OK"}); - wxGetApp().UpdateDarkUI(static_cast(this->FindWindowById(wxID_CANCEL, this))); - (static_cast(this->FindWindowById(wxID_CANCEL, this)))->Hide(); + btnOK = dlg_btns->GetOK(); + btnOK->Bind(wxEVT_BUTTON, &PhysicalPrinterDialog::OnOK, this); wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); // topSizer->Add(label_top , 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, BORDER_W); topSizer->Add(input_sizer , 0, wxEXPAND | wxALL, BORDER_W); topSizer->Add(m_optgroup->sizer , 1, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, BORDER_W); - topSizer->Add(btns , 0, wxEXPAND | wxALL, BORDER_W); + topSizer->Add(dlg_btns, 0, wxEXPAND); Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->EndModal(wxID_NO);}); @@ -736,8 +735,6 @@ void PhysicalPrinterDialog::on_dpi_changed(const wxRect& suggested_rect) m_optgroup->msw_rescale(); - msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); - const wxSize& size = wxSize(45 * em, 35 * em); SetMinSize(size); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 102e4635f6..08b017c862 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -38,7 +38,7 @@ class PhysicalPrinterDialog : public DPIDialog RoundedRectangle* m_input_area {nullptr}; wxStaticText* m_valid_label {nullptr}; wxTextCtrl* m_input_ctrl {nullptr}; - wxButton* btnOK {nullptr}; + Button* btnOK {nullptr}; void build_printhost_settings(ConfigOptionsGroup* optgroup); void OnOK(wxEvent& event); diff --git a/src/slic3r/GUI/Widgets/DialogButtons.cpp b/src/slic3r/GUI/Widgets/DialogButtons.cpp new file mode 100644 index 0000000000..5702f9930c --- /dev/null +++ b/src/slic3r/GUI/Widgets/DialogButtons.cpp @@ -0,0 +1,247 @@ +#include "DialogButtons.hpp" + +#include "slic3r/GUI/I18N.hpp" + +namespace Slic3r { namespace GUI { + +// ORCA standardize dialog buttons +DialogButtons::DialogButtons(wxWindow* parent, std::vector non_translated_labels, const wxString& primary_btn_translated_label) + : wxWindow(parent, wxID_ANY) +{ + m_parent = parent; + m_sizer = new wxBoxSizer(wxHORIZONTAL); + m_primary = primary_btn_translated_label; + m_alert = wxEmptyString; + SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); + + // Add all to array + for (wxString label : non_translated_labels) { + Button* btn = new Button(this, _L(label)); + wxString l = label; + l.LowerCase(); + auto f = m_standardIDs.find(l); + if (f != m_standardIDs.end()) + btn->SetId(f->second); + m_buttons.push_back(btn); + } + + m_parent->Bind(wxEVT_DPI_CHANGED, &DialogButtons::on_dpi_changed, this); + + SetSizer(m_sizer); + + UpdateButtons(); +} + +DialogButtons::~DialogButtons() { + m_parent->Unbind(wxEVT_DPI_CHANGED, &DialogButtons::on_dpi_changed, this); +} + +void DialogButtons::on_dpi_changed(wxDPIChangedEvent& event) { + UpdateButtons(); + event.Skip(); +} + +Button* DialogButtons::GetButtonFromID(wxStandardID id) { + for (Button* btn : m_buttons) + if (btn->GetId() == id) + return btn; + return nullptr; +} + +Button* DialogButtons::GetButtonFromLabel(wxString translated_label) { + for (Button* btn : m_buttons) + if (btn->GetLabel() == translated_label) + return btn; + return nullptr; +} + +Button* DialogButtons::PickFromList(std::set ID_list) { + // Picks first button from given list + Button* b; + for (auto itr : ID_list) { + b = GetButtonFromID(itr); + if (b != nullptr) + return b; + } + return nullptr; +} + +// shorthands for common buttons +Button* DialogButtons::GetOK() {return GetButtonFromID(wxID_OK) ;} +Button* DialogButtons::GetYES() {return GetButtonFromID(wxID_YES) ;} +Button* DialogButtons::GetAPPLY() {return GetButtonFromID(wxID_APPLY) ;} +Button* DialogButtons::GetCONFIRM(){return GetButtonFromID(wxID_APPLY) ;} +Button* DialogButtons::GetNO() {return GetButtonFromID(wxID_NO) ;} +Button* DialogButtons::GetCANCEL() {return GetButtonFromID(wxID_CANCEL) ;} +Button* DialogButtons::GetBACK() {return GetButtonFromID(wxID_BACKWARD);} +Button* DialogButtons::GetFORWARD(){return GetButtonFromID(wxID_FORWARD) ;} + +void DialogButtons::SetPrimaryButton(wxString translated_label) { + // use _L("Create") translated text for custom buttons + // use non existing button name to disable primary styled button + Button* btn; + if(translated_label.IsEmpty()){ // prefer standard primary buttons if label empty + if(m_buttons.size() == 1) + btn = m_buttons.front(); + else + btn = PickFromList(m_primaryIDs); + }else + btn = GetButtonFromLabel(translated_label); + + if(btn == nullptr) return; + + m_primary = translated_label; + + btn->SetFocus(); + // we won't need color definations after button style management + StateColor clr_bg = StateColor( + std::pair(wxColour("#009688"), (int)StateColor::NotHovered), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), + std::pair(wxColour("#009688"), (int)StateColor::Pressed), + std::pair(wxColour("#26A69A"), (int)StateColor::Hovered), + std::pair(wxColour("#009688"), (int)StateColor::Normal), + std::pair(wxColour("#009688"), (int)StateColor::Enabled) + ); + btn->SetBackgroundColor(clr_bg); + StateColor clr_br = StateColor( + std::pair(wxColour("#009688"), (int)StateColor::NotFocused), + std::pair(wxColour("#26A69A"), (int)StateColor::Focused) + ); + btn->SetBorderColor(clr_br); + StateColor clr_tx = StateColor( + std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), + std::pair(wxColour("#FEFEFE"), (int)StateColor::Hovered), + std::pair(wxColour("#FEFEFE"), (int)StateColor::Normal) + ); + btn->SetTextColor(clr_tx); +} + +void DialogButtons::SetAlertButton(wxString translated_label) { + // use _L("Create") translated text for custom buttons + // use non existing button name to disable alert styled button + if(m_buttons.size() == 1) + return; + Button* btn; + if(translated_label.IsEmpty()){ // prefer standard alert buttons if label empty + btn = PickFromList(m_alertIDs); + }else + btn = GetButtonFromLabel(translated_label); + + if(btn == nullptr) return; + + m_alert = translated_label; + + // we won't need color definations after button style management + StateColor clr_bg = StateColor( + std::pair(wxColour("#DFDFDF"), (int)StateColor::NotHovered), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), + std::pair(wxColour("#CD1F00"), (int)StateColor::Hovered), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) + ); + btn->SetBackgroundColor(clr_bg); + StateColor clr_br = StateColor( + std::pair(wxColour("#DFDFDF"), (int)StateColor::NotFocused), + std::pair(wxColour("#26A69A"), (int)StateColor::Focused) + ); + btn->SetBorderColor(clr_br); + StateColor clr_tx = StateColor( + std::pair(wxColour("#CD1F00"), (int)StateColor::NotHovered), + std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), + std::pair(wxColour("#CD1F00"), (int)StateColor::Pressed), + std::pair(wxColour("#FFFFFD"), (int)StateColor::Hovered), + std::pair(wxColour("#CD1F00"), (int)StateColor::Focused), + std::pair(wxColour("#CD1F00"), (int)StateColor::Normal) + ); + btn->SetTextColor(clr_tx); +} + +void DialogButtons::UpdateButtons() { + m_sizer->Clear(); + SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); + // we won't need color definations after button style management + StateColor clr_bg = StateColor( + std::pair(wxColour("#DFDFDF"), (int)StateColor::NotHovered), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Disabled), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Pressed), + std::pair(wxColour("#D4D4D4"), (int)StateColor::Hovered), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Normal), + std::pair(wxColour("#DFDFDF"), (int)StateColor::Enabled) + ); + StateColor clr_br = StateColor( + std::pair(wxColour("#DFDFDF"), (int)StateColor::NotFocused), + std::pair(wxColour("#26A69A"), (int)StateColor::Focused) + ); + StateColor clr_tx = StateColor( + std::pair(wxColour("#6B6A6A"), (int)StateColor::Disabled), + std::pair(wxColour("#262E30"), (int)StateColor::Hovered), + std::pair(wxColour("#262E30"), (int)StateColor::Normal) + ); + + // Apply standard style to all + for (Button* btn : m_buttons) { + btn->SetFont(Label::Body_14); + btn->SetMinSize(wxSize(FromDIP(100),FromDIP(32))); + btn->SetPaddingSize(wxSize(FromDIP(12), FromDIP(8))); + btn->SetCornerRadius(FromDIP(4)); + btn->SetBorderWidth(FromDIP(1)); + btn->SetBackgroundColor(clr_bg); + btn->SetBorderColor(clr_br); + btn->SetTextColor(clr_tx); + btn->Bind(wxEVT_KEY_DOWN, &DialogButtons::on_keydown, this); + } + + int btn_gap = FromDIP(10); + + auto list = m_left_align_IDs; + auto on_left = [list](int id){ + return list.find(wxStandardID(id)) != list.end(); + }; + + for (Button* btn : m_buttons) // Left aligned + if(on_left(btn->GetId())) + m_sizer->Add(btn, 0, wxLEFT | wxTOP | wxBOTTOM | wxALIGN_CENTER_VERTICAL, btn_gap); + + m_sizer->AddStretchSpacer(); + + for (Button* btn : m_buttons) // Right aligned + if(!on_left(btn->GetId())) + m_sizer->Add(btn, 0, wxRIGHT | wxTOP | wxBOTTOM | wxALIGN_CENTER_VERTICAL, btn_gap); + + SetPrimaryButton(m_primary); + SetAlertButton(m_alert); + + Layout(); + Fit(); +} + +int DialogButtons::FromDIP(int d) { + return m_parent->FromDIP(d); +} + +// This might be helpful for future use + +// Append Button + +// Prepend Button + +void DialogButtons::on_keydown(wxKeyEvent& e) { + wxObject* current = e.GetEventObject(); + int key = e.GetKeyCode(); + int cnt = m_buttons.size(); + if(cnt > 1){ + int i = -1; + for (Button* btn : m_buttons){ + i++; + if(btn->HasFocus()) + break; + } + // possible issue if button hidden + if (key == WXK_LEFT) {m_buttons[i - 1 < 0 ? (cnt - 1) : i - 1]->SetFocus();} + else if (key == WXK_RIGHT) {m_buttons[i + 1 > (cnt - 1) ? 0 : i + 1]->SetFocus();} + } + e.Skip(); +} + +}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/Widgets/DialogButtons.hpp b/src/slic3r/GUI/Widgets/DialogButtons.hpp new file mode 100644 index 0000000000..63f4c9a127 --- /dev/null +++ b/src/slic3r/GUI/Widgets/DialogButtons.hpp @@ -0,0 +1,125 @@ +#ifndef slic3r_GUI_DialogButtons_hpp_ +#define slic3r_GUI_DialogButtons_hpp_ + +#include "wx/wx.h" +#include "wx/sizer.h" +#include "map" +#include "set" + +#include "Button.hpp" +#include "Label.hpp" + +#include "slic3r/GUI/GUI_App.hpp" + +namespace Slic3r { namespace GUI { + +class DialogButtons : public wxWindow{ +public: + + DialogButtons(wxWindow* parent, std::vector non_translated_labels, const wxString& primary_btn_label = ""); + + wxBoxSizer* GetSizer() const { return m_sizer; } + + Button* GetButtonFromID(wxStandardID id); + + Button* GetButtonFromLabel(wxString label); + + Button* GetOK(); + Button* GetYES(); + Button* GetAPPLY(); + Button* GetCONFIRM(); + Button* GetNO(); + Button* GetCANCEL(); + Button* GetBACK(); + Button* GetFORWARD(); + + void SetPrimaryButton(wxString label); + + void SetAlertButton(wxString label); + + void UpdateButtons(); + + ~DialogButtons(); + +private: + wxWindow* m_parent; + wxBoxSizer* m_sizer; + std::vector m_buttons; + wxString m_primary; + wxString m_alert; + + // missing ones Transfer / Update / Create + const std::map m_standardIDs = { + // Choice + {"ok" , wxID_OK}, + {"yes" , wxID_YES}, + {"apply" , wxID_APPLY}, + {"confirm" , wxID_APPLY}, // no id for confirm, reusing wxID_APPLY + {"no" , wxID_NO}, + {"cancel" , wxID_CANCEL}, + // Action + {"open" , wxID_PRINT}, + {"open" , wxID_OPEN}, + {"add" , wxID_ADD}, + {"copy" , wxID_COPY}, + {"new" , wxID_NEW}, + {"save" , wxID_SAVE}, + {"save as" , wxID_SAVEAS}, + {"refresh" , wxID_REFRESH}, + {"retry" , wxID_RETRY}, + {"ignore" , wxID_IGNORE}, + {"help" , wxID_HELP}, + {"clone" , wxID_DUPLICATE}, + {"duplicate" , wxID_DUPLICATE}, + {"select all" , wxID_SELECTALL}, + {"replace" , wxID_REPLACE}, + {"replace all", wxID_REPLACE_ALL}, + // Navigation + {"back" , wxID_BACKWARD}, + {"next" , wxID_FORWARD}, + // Alert / Negative + {"remove" , wxID_REMOVE}, + {"delete" , wxID_DELETE}, + {"abort" , wxID_ABORT}, + {"stop" , wxID_STOP}, + {"reset" , wxID_RESET}, + {"clear" , wxID_CLEAR}, + {"exit" , wxID_EXIT}, + {"quit" , wxID_EXIT} + }; + + std::set m_primaryIDs { + wxID_OK, + wxID_YES, + wxID_APPLY, + wxID_SAVE, + wxID_PRINT + }; + + std::set m_alertIDs { + wxID_REMOVE, + wxID_DELETE, + wxID_ABORT, + wxID_STOP, + wxID_RESET, + wxID_CLEAR, + wxID_EXIT + }; + + std::set m_left_align_IDs { + wxID_DELETE, + wxID_BACKWARD, + wxID_FORWARD + }; + + Button* PickFromList(std::set ID_list); + + int FromDIP(int d); + + void on_dpi_changed(wxDPIChangedEvent& event); + + void on_keydown(wxKeyEvent& event); +}; + +}} // namespace Slic3r::GUI +#endif // !slic3r_GUI_DialogButtons_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index 6f7a1c0ddd..089e664eb1 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -4,6 +4,7 @@ #include "I18N.hpp" #include #include "MainFrame.hpp" +#include "Widgets/DialogButtons.hpp" #include namespace Slic3r { namespace GUI { @@ -138,19 +139,11 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &PA_Calibration_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); + + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &PA_Calibration_Dlg::on_start, this); PA_Calibration_Dlg::reset_params(); @@ -168,7 +161,6 @@ PA_Calibration_Dlg::~PA_Calibration_Dlg() { // Disconnect Events m_rbExtruderType->Disconnect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_extruder_type_changed), NULL, this); m_rbMethod->Disconnect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(PA_Calibration_Dlg::on_method_changed), NULL, this); - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PA_Calibration_Dlg::on_start), NULL, this); } void PA_Calibration_Dlg::reset_params() { @@ -342,22 +334,13 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &Temp_Calibration_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); + + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Temp_Calibration_Dlg::on_start, this); m_rbFilamentType->Connect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(Temp_Calibration_Dlg::on_filament_type_changed), NULL, this); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Temp_Calibration_Dlg::on_start), NULL, this); //wxGetApp().UpdateDlgDarkUI(this); @@ -396,7 +379,6 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat Temp_Calibration_Dlg::~Temp_Calibration_Dlg() { // Disconnect Events m_rbFilamentType->Disconnect(wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler(Temp_Calibration_Dlg::on_filament_type_changed), NULL, this); - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Temp_Calibration_Dlg::on_start), NULL, this); } void Temp_Calibration_Dlg::on_start(wxCommandEvent& event) { @@ -521,21 +503,11 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &MaxVolumetricSpeed_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MaxVolumetricSpeed_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &MaxVolumetricSpeed_Test_Dlg::on_start, this); //wxGetApp().UpdateDlgDarkUI(this); @@ -545,7 +517,6 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin MaxVolumetricSpeed_Test_Dlg::~MaxVolumetricSpeed_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MaxVolumetricSpeed_Test_Dlg::on_start), NULL, this); } void MaxVolumetricSpeed_Test_Dlg::on_start(wxCommandEvent& event) { @@ -629,21 +600,11 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &VFA_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(VFA_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &VFA_Test_Dlg::on_start, this); // wxGetApp().UpdateDlgDarkUI(this); @@ -654,7 +615,6 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) VFA_Test_Dlg::~VFA_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(VFA_Test_Dlg::on_start), NULL, this); } void VFA_Test_Dlg::on_start(wxCommandEvent& event) @@ -738,21 +698,11 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &Retraction_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Retraction_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Retraction_Test_Dlg::on_start, this); //wxGetApp().UpdateDlgDarkUI(this); @@ -762,7 +712,6 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater Retraction_Test_Dlg::~Retraction_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Retraction_Test_Dlg::on_start), NULL, this); } void Retraction_Test_Dlg::on_start(wxCommandEvent& event) { @@ -869,21 +818,11 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &Input_Shaping_Freq_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Input_Shaping_Freq_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Input_Shaping_Freq_Test_Dlg::on_start, this); //wxGetApp().UpdateDlgDarkUI(this);//FIXME: dark mode background color @@ -893,7 +832,6 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin Input_Shaping_Freq_Test_Dlg::~Input_Shaping_Freq_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Input_Shaping_Freq_Test_Dlg::on_start), NULL, this); } void Input_Shaping_Freq_Test_Dlg::on_start(wxCommandEvent& event) { @@ -1005,21 +943,11 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &Input_Shaping_Damp_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Input_Shaping_Damp_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Input_Shaping_Damp_Test_Dlg::on_start, this); //wxGetApp().UpdateDlgDarkUI(this);//FIXME: dark mode background color @@ -1029,7 +957,6 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin Input_Shaping_Damp_Test_Dlg::~Input_Shaping_Damp_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Input_Shaping_Damp_Test_Dlg::on_start), NULL, this); } void Input_Shaping_Damp_Test_Dlg::on_start(wxCommandEvent& event) { @@ -1122,21 +1049,11 @@ Junction_Deviation_Test_Dlg::Junction_Deviation_Test_Dlg(wxWindow* parent, wxWin v_sizer->Add(settings_sizer); v_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 5); - m_btnStart = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), - std::pair(wxColour(38, 166, 154), StateColor::Hovered), - std::pair(wxColour(0, 150, 136), StateColor::Normal)); - m_btnStart->SetBackgroundColor(btn_bg_green); - m_btnStart->SetBorderColor(wxColour(0, 150, 136)); - m_btnStart->SetTextColor(wxColour("#FFFFFE")); - m_btnStart->SetSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetMinSize(wxSize(FromDIP(48), FromDIP(24))); - m_btnStart->SetCornerRadius(FromDIP(3)); - m_btnStart->Bind(wxEVT_BUTTON, &Junction_Deviation_Test_Dlg::on_start, this); - v_sizer->Add(m_btnStart, 0, wxALL | wxALIGN_RIGHT, FromDIP(5)); + auto dlg_btns = new DialogButtons(this, {"OK"}); + v_sizer->Add(dlg_btns , 0, wxEXPAND); - m_btnStart->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Junction_Deviation_Test_Dlg::on_start), NULL, this); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Junction_Deviation_Test_Dlg::on_start, this); Layout(); Fit(); @@ -1144,7 +1061,6 @@ Junction_Deviation_Test_Dlg::Junction_Deviation_Test_Dlg(wxWindow* parent, wxWin Junction_Deviation_Test_Dlg::~Junction_Deviation_Test_Dlg() { // Disconnect Events - m_btnStart->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Junction_Deviation_Test_Dlg::on_start), NULL, this); } void Junction_Deviation_Test_Dlg::on_start(wxCommandEvent& event) { diff --git a/src/slic3r/GUI/calib_dlg.hpp b/src/slic3r/GUI/calib_dlg.hpp index 52d71d1520..ea68f22d26 100644 --- a/src/slic3r/GUI/calib_dlg.hpp +++ b/src/slic3r/GUI/calib_dlg.hpp @@ -43,7 +43,6 @@ protected: CheckBox* m_cbPrintNum; TextInput* m_tiBMAccels; TextInput* m_tiBMSpeeds; - Button* m_btnStart; Plater* m_plater; }; @@ -65,7 +64,6 @@ protected: TextInput* m_tiStart; TextInput* m_tiEnd; TextInput* m_tiStep; - Button* m_btnStart; Plater* m_plater; }; @@ -84,7 +82,6 @@ protected: TextInput* m_tiStart; TextInput* m_tiEnd; TextInput* m_tiStep; - Button* m_btnStart; Plater* m_plater; }; @@ -101,7 +98,6 @@ protected: TextInput* m_tiStart; TextInput* m_tiEnd; TextInput* m_tiStep; - Button* m_btnStart; Plater* m_plater; }; @@ -121,7 +117,6 @@ protected: TextInput* m_tiStart; TextInput* m_tiEnd; TextInput* m_tiStep; - Button* m_btnStart; Plater* m_plater; }; @@ -143,7 +138,6 @@ protected: TextInput* m_tiFreqStartY; TextInput* m_tiFreqEndY; TextInput* m_tiDampingFactor; - Button* m_btnStart; Plater* m_plater; }; @@ -164,7 +158,6 @@ protected: TextInput* m_tiFreqY; TextInput* m_tiDampingFactorStart; TextInput* m_tiDampingFactorEnd; - Button* m_btnStart; Plater* m_plater; }; @@ -182,7 +175,6 @@ protected: wxRadioBox* m_rbModel; TextInput* m_tiJDStart; TextInput* m_tiJDEnd; - Button* m_btnStart; Plater* m_plater; }; }} // namespace Slic3r::GUI