From 036e41ae6952b84c32b93b9a2ce21741542cf7ea Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Thu, 22 Mar 2018 13:07:45 +0100 Subject: Wiping dialog - first experiments with sizers --- xs/src/slic3r/GUI/WipeTowerDialog.cpp | 140 +++++++++++++++++++--------------- xs/src/slic3r/GUI/WipeTowerDialog.hpp | 8 +- 2 files changed, 85 insertions(+), 63 deletions(-) (limited to 'xs') diff --git a/xs/src/slic3r/GUI/WipeTowerDialog.cpp b/xs/src/slic3r/GUI/WipeTowerDialog.cpp index ac35756a4..1989a82f1 100644 --- a/xs/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/xs/src/slic3r/GUI/WipeTowerDialog.cpp @@ -2,6 +2,8 @@ #include #include "WipeTowerDialog.hpp" +#include + //! macro used to mark string used at localization, //! return same string #define L(s) s @@ -22,9 +24,9 @@ RammingDialog::RammingDialog(wxWindow* parent,const std::string& parameters) SetSizer(main_sizer); SetMinSize(GetSize()); main_sizer->SetSizeHints(this); - + this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); }); - + this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) { m_output_data = m_panel_ramming->get_parameters(); EndModal(wxID_OK); @@ -101,74 +103,105 @@ std::string RammingPanel::get_parameters() - +// Parent dialog for purging volume adjustments - it fathers WipingPanel widget (that contains all controls) and a button to toggle simple/advanced mode: WipingDialog::WipingDialog(wxWindow* parent,const std::vector& matrix, const std::vector& extruders) : wxDialog(parent, -1, wxT(L("Wipe tower - Purging volume adjustment")), wxPoint(50,50), wxSize(800,550), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { this->Centre(); - - m_panel_wiping = new WipingPanel(this,matrix,extruders); - this->Show(); + + auto widget_button = new wxButton(this,wxID_ANY,"-",wxPoint(0,0),wxDefaultSize); + m_panel_wiping = new WipingPanel(this,matrix,extruders, widget_button); auto main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_panel_wiping, 1, wxEXPAND); + + + main_sizer->Add(widget_button,0,wxALIGN_CENTER_HORIZONTAL|wxCENTER,10); main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 10); SetSizer(main_sizer); SetMinSize(GetSize()); main_sizer->SetSizeHints(this); - + this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); }); - this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) { - m_output_matrix = m_panel_wiping->read_matrix_values(); - m_output_extruders = m_panel_wiping->read_extruders_values(); + this->Bind(wxEVT_BUTTON,[this](wxCommandEvent&) { // if OK button is clicked.. + m_output_matrix = m_panel_wiping->read_matrix_values(); // ..query wiping panel and save returned values + m_output_extruders = m_panel_wiping->read_extruders_values(); // so they can be recovered later by calling get_...() EndModal(wxID_OK); },wxID_OK); -} + this->Show(); +} -WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, const std::vector& extruders) +// This panel contains all control widgets for both simple and advanced mode (these reside in separate sizers) +WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, const std::vector& extruders, wxButton* widget_button) : wxPanel(parent,wxID_ANY,wxPoint(50,50), wxSize(500,350),wxBORDER_RAISED) { - m_number_of_extruders = (int)(sqrt(matrix.size())+0.001); // number of extruders - m_notadvanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString(L("Total purging volume is calculated by summing two values below, depending on which tools are loaded/unloaded.")),wxPoint(40,25) ,wxSize(500,35))); - m_notadvanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString(L("Volume to purge (mm\u00B3) when the filament is being")),wxPoint(40,85) ,wxSize(500,25))); - m_notadvanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString(L("unloaded")),wxPoint(110,105) ,wxSize(500,25))); - m_notadvanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString(L("loaded")),wxPoint(195,105) ,wxSize(500,25))); - m_widget_button = new wxButton(this,wxID_ANY,"-",wxPoint(0,0),wxSize(170,20)); + m_widget_button = widget_button; // pointer to the button in parent dialog + m_widget_button->Bind(wxEVT_BUTTON,[this](wxCommandEvent&){ toggle_advanced(true); }); + + m_number_of_extruders = (int)(sqrt(matrix.size())+0.001); + + m_sizer_simple = new wxBoxSizer(wxVERTICAL); + m_sizer_advanced = new wxBoxSizer(wxVERTICAL); + auto gridsizer_simple = new wxGridSizer(3,10,10); + auto gridsizer_advanced = new wxGridSizer(m_number_of_extruders+1,10,10); + + + // First create controls for simple mode and assign them to m_sizer_simple: + m_sizer_simple->Add(new wxStaticText(this,wxID_ANY,wxString(L("Total purging volume is calculated by summing two values below, depending on which tools are loaded/unloaded.")),wxPoint(40,25), wxSize(450,35)),-1,wxEXPAND,10); + m_sizer_simple->Add(new wxStaticText(this,wxID_ANY,wxString(L("Volume to purge (mm\u00B3) when the filament is being")),wxPoint(40,85) ,/*wxSize(500,25)*/wxDefaultSize,wxALIGN_LEFT),-1,wxEXPAND|wxALIGN_CENTER,10); + + gridsizer_simple->Add(0,-1,wxALL,10); + gridsizer_simple->Add(new wxStaticText(this,wxID_ANY,wxString(L("unloaded")),wxPoint(110,105) ,/*wxSize(80,25)*/wxDefaultSize,wxALIGN_CENTER),-1,wxALIGN_CENTER,10); + gridsizer_simple->Add(new wxStaticText(this,wxID_ANY,wxString(L("loaded")),wxPoint(195,105) ,/*wxSize(80,25)*/wxDefaultSize,wxALIGN_CENTER),-1,wxALIGN_CENTER,10); for (unsigned int i=0;iAdd(new wxStaticText(this,wxID_ANY,wxString(L("Tool #"))<Add(m_old.back(),-1,wxALIGN_CENTER,10); + gridsizer_simple->Add(m_new.back(),-1,wxALIGN_CENTER,10); } + // Now the same for advanced mode: wxPoint origin(50,85); - m_advanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString(L("Here you can adjust required purging volume (mm\u00B3) for any given pair of tools.")),wxPoint(40,25) ,wxSize(500,35))); + m_sizer_advanced->Add(new wxStaticText(this,wxID_ANY,wxString(L("Here you can adjust required purging volume (mm\u00B3) for any given pair of tools.")),wxPoint(40,25) ,/*wxSize(500,35)*/wxDefaultSize),-1,wxALL,10); + m_sizer_advanced->Add(new wxStaticText(this,wxID_ANY,wxString(L("Filament changed to")),origin+wxPoint(75,0) ,/*wxSize(500,25)*/wxDefaultSize),-1,wxALL,10); + for (unsigned int i=0;i(0)); - m_advanced_widgets.push_back(new wxStaticText(this,wxID_ANY,wxString("")<Disable(); else edit_boxes[i][j]->SetValue(wxString("")<Bind(wxEVT_BUTTON,[this](wxCommandEvent&){toggle_advanced(true);}); - toggle_advanced(); -} + gridsizer_advanced->Add(0,-1,wxALL,10); + for (unsigned int i=0;iAdd(new wxStaticText(this,wxID_ANY,wxString("")<Add(new wxStaticText(this,wxID_ANY,wxString("")<Add(edit_boxes[j][i],-1,wxALL,10); + } + m_sizer_simple->Add(gridsizer_simple,-1,wxALL,10); + m_sizer_advanced->Add(gridsizer_advanced,-1,wxALL,10); + toggle_advanced(); // to show/hide what is appropriate +} + +// Reads values from the (advanced) wiping matrix: std::vector WipingPanel::read_matrix_values() { if (!m_advanced) fill_in_matrix(); @@ -183,7 +216,7 @@ std::vector WipingPanel::read_matrix_values() { return output; } - +// Reads values from simple mode to save them for next time: std::vector WipingPanel::read_extruders_values() { std::vector output; for (unsigned int i=0;i WipingPanel::read_extruders_values() { return output; } - +// This updates the "advanced" matrix based on values from "simple" mode void WipingPanel::fill_in_matrix() { for (unsigned i=0;i toggle + else { + m_advanced = !advanced_matches_simple(); // if called from constructor, show what is appropriate + (m_advanced ? m_sizer_advanced : m_sizer_simple)->SetSizeHints(this); + SetSizer(m_advanced ? m_sizer_advanced : m_sizer_simple); } - for (unsigned i=0;iShow(m_advanced); - m_old[i]->Show(!m_advanced); - m_new[i]->Show(!m_advanced); - } - for (const auto& widget : m_advanced_widgets) // shows/hides other widgets - widget->Show(m_advanced); - for (const auto& widget : m_notadvanced_widgets) - widget->Show(!m_advanced); - - if (m_advanced) { - if (user_button) fill_in_matrix(); // otherwise keep values loaded from config - m_widget_button->SetLabel(L("Show simplified settings")); - } - else - m_widget_button->SetLabel(L("Show advanced settings")); + m_sizer_simple->Show(!m_advanced); + m_sizer_advanced->Show(m_advanced); + + m_widget_button->SetLabel(m_advanced ? L("Show simplified settings") : L("Show advanced settings")); + if (m_advanced) + if (user_action) fill_in_matrix(); // otherwise keep values loaded from config this->Refresh(); } \ No newline at end of file diff --git a/xs/src/slic3r/GUI/WipeTowerDialog.hpp b/xs/src/slic3r/GUI/WipeTowerDialog.hpp index 54ae9596d..c8e7bd480 100644 --- a/xs/src/slic3r/GUI/WipeTowerDialog.hpp +++ b/xs/src/slic3r/GUI/WipeTowerDialog.hpp @@ -46,13 +46,13 @@ private: class WipingPanel : public wxPanel { public: - WipingPanel(wxWindow* parent, const std::vector& matrix, const std::vector& extruders); + WipingPanel(wxWindow* parent, const std::vector& matrix, const std::vector& extruders, wxButton* widget_button); std::vector read_matrix_values(); std::vector read_extruders_values(); + void toggle_advanced(bool user_action = false); private: void fill_in_matrix(); - void toggle_advanced(bool user_button = false); bool advanced_matches_simple(); std::vector m_old; @@ -60,9 +60,11 @@ private: std::vector m_advanced_widgets; std::vector m_notadvanced_widgets; std::vector> edit_boxes; - wxButton* m_widget_button = nullptr; unsigned int m_number_of_extruders = 0; bool m_advanced = false; + wxBoxSizer*m_sizer_simple = nullptr; + wxBoxSizer*m_sizer_advanced = nullptr; + wxButton* m_widget_button = nullptr; }; -- cgit v1.2.3