diff --git a/xs/src/slic3r/GUI/GUI.cpp b/xs/src/slic3r/GUI/GUI.cpp index 0be77b6ba..0e2893b57 100644 --- a/xs/src/slic3r/GUI/GUI.cpp +++ b/xs/src/slic3r/GUI/GUI.cpp @@ -809,17 +809,25 @@ wxString from_u8(const std::string &str) void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer) { + sizer->SetMinSize(-1, 300); + auto main_sizer = new wxBoxSizer(wxVERTICAL); + auto main_page = new wxScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + main_page->SetSizer(main_sizer); + main_page->SetScrollbars(1, 1, 1, 1); + sizer->Add(main_page, 1, wxEXPAND | wxALL, 1); + // Experiments with new UI - wxCollapsiblePane *collpane = new wxCollapsiblePane(parent, wxID_ANY, "Print settings:"); - collpane->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, ([parent, collpane](wxCommandEvent e){ + wxCollapsiblePane *collpane = new wxCollapsiblePane(main_page, wxID_ANY, "Frequently Changing Parameters:"); + collpane->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, ([parent, main_page, collpane](wxCommandEvent e){ wxWindowUpdateLocker noUpdates_cp(collpane); - wxWindowUpdateLocker noUpdates(parent); - parent->Layout(); + wxWindowUpdateLocker noUpdates(main_page); + parent->Layout(); + main_page->Layout(); collpane->Refresh(); })); // add the pane with a zero proportion value to the sizer which contains it - sizer->Add(collpane, 0, wxGROW | wxALL, 0); + main_sizer->Add(collpane, 0, wxGROW | wxALL, 0); wxWindow *win = collpane->GetPane(); #ifdef __WXMSW__ @@ -943,8 +951,36 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl }; m_optgroup->append_line(line); - auto common_sizer = new wxBoxSizer(wxVERTICAL); - common_sizer->Add(m_optgroup->sizer); + wxSizer *paneSz = new wxBoxSizer(wxVERTICAL); + paneSz->Add(m_optgroup->sizer, 1, wxGROW | wxEXPAND | /*wxBOTTOM*/wxALL, /*2*/5); + win->SetSizer(paneSz); + paneSz->SetSizeHints(win); + + + + + wxCollapsiblePane *collpane_objects = new wxCollapsiblePane(main_page, wxID_ANY, "Objects List:"); + collpane_objects->Bind(wxEVT_COLLAPSIBLEPANE_CHANGED, ([parent, main_page, collpane_objects](wxCommandEvent e){ + wxWindowUpdateLocker noUpdates_cp(collpane_objects); + wxWindowUpdateLocker noUpdates(main_page); + parent->Layout(); + main_page->Layout(); + collpane_objects->Refresh(); + })); + + // add the pane with a zero proportion value to the sizer which contains it + main_sizer->Add(collpane_objects, 0, wxGROW | wxALL, 0); + + wxWindow *win_objects = collpane_objects->GetPane(); +#ifdef __WXMSW__ + collpane_objects->GetControlWidget()->SetWindowStyleFlag(wxNO_BORDER); + collpane_objects->GetControlWidget()->SetBackgroundColour(clr); + collpane_objects->SetBackgroundColour(clr); + win_objects->SetBackgroundColour(clr); +#endif //__WXMSW__ + +// auto common_sizer = new wxBoxSizer(wxVERTICAL); +// common_sizer->Add(m_optgroup->sizer); // auto listctrl = new wxDataViewListCtrl(win, wxID_ANY, wxDefaultPosition, wxSize(-1, 100)); // listctrl->AppendToggleColumn("Toggle"); @@ -964,9 +1000,10 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl // common_sizer->Add(listctrl, 0, wxEXPAND | wxALL, 1); // ********************************************************************************************** - auto objects_ctrl = new wxDataViewCtrl(win, wxID_ANY, wxDefaultPosition, wxDefaultSize); + auto objects_ctrl = new wxDataViewCtrl(win_objects, wxID_ANY, wxDefaultPosition, wxDefaultSize); wxSizer *objects_sz = new wxBoxSizer(wxVERTICAL); - objects_ctrl->SetMinSize(wxSize(-1, 200)); + objects_ctrl->SetBestFittingSize(wxSize(-1, 200)); +// objects_ctrl->SetMinSize(wxSize(-1, 200)); objects_sz->Add(objects_ctrl, 1, wxGROW | wxALL, 5); auto objects_model = new MyObjectTreeModel; @@ -979,108 +1016,31 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl // column 0 of the view control: wxDataViewTextRenderer *tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT); - wxDataViewColumn *column00 = new wxDataViewColumn("Name", tr, 0, 150, wxALIGN_LEFT, + wxDataViewColumn *column00 = new wxDataViewColumn("Name", tr, 0, 140, wxALIGN_LEFT, wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE); objects_ctrl->AppendColumn(column00); // column 1 of the view control: tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT); - wxDataViewColumn *column01 = new wxDataViewColumn("Copy", tr, 1, 95, wxALIGN_CENTER_HORIZONTAL, + wxDataViewColumn *column01 = new wxDataViewColumn("Copy", tr, 1, 75, wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE); objects_ctrl->AppendColumn(column01); // column 2 of the view control: tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT); - wxDataViewColumn *column02 = new wxDataViewColumn("Scale", tr, 2, 95, wxALIGN_CENTER_HORIZONTAL, + wxDataViewColumn *column02 = new wxDataViewColumn("Scale", tr, 2, 80, wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE); objects_ctrl->AppendColumn(column02); - common_sizer->Add(objects_sz, 0, wxEXPAND | wxALL, 1); +// common_sizer->Add(objects_sz, 0, wxEXPAND | wxALL, 1); - // ********************************************************************************************** -/* auto view_ctrl = new wxDataViewCtrl(win, wxID_ANY, wxDefaultPosition, wxDefaultSize); - wxSizer *PanelSz = new wxBoxSizer(wxVERTICAL); - view_ctrl->SetMinSize(wxSize(-1, 200)); - PanelSz->Add(view_ctrl, 1, wxGROW | wxALL, 5); - PanelSz->Add( new wxStaticText(win, wxID_ANY, "Most of the cells above are editable!"), 0, wxGROW | wxALL, 5); - - auto m_music_model = new MyMusicTreeModel; - view_ctrl->AssociateModel(m_music_model); + wxSizer *paneSz_objects = new wxBoxSizer(wxVERTICAL); + paneSz_objects->Add(objects_sz, 1, wxGROW | wxEXPAND | wxBOTTOM, 2); + win_objects->SetSizer(paneSz_objects); + paneSz_objects->SetSizeHints(win_objects); -#if wxUSE_DRAG_AND_DROP && wxUSE_UNICODE - view_ctrl->EnableDragSource(wxDF_UNICODETEXT); - view_ctrl->EnableDropTarget(wxDF_UNICODETEXT); -#endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE - - // column 0 of the view control: - - tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT); - wxDataViewColumn *column0 = - new wxDataViewColumn("title", tr, 0, 150, wxALIGN_LEFT, - wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE); - view_ctrl->AppendColumn(column0); -#if 0 - // Call this and sorting is enabled - // immediately upon start up. - column0->SetAsSortKey(); -#endif - - // column 1 of the view control: - - tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_EDITABLE); - wxDataViewColumn *column1 = - new wxDataViewColumn("artist", tr, 1, 150, wxALIGN_LEFT, - wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE | - wxDATAVIEW_COL_RESIZABLE); - column1->SetMinWidth(100); // this column can't be resized to be smaller - view_ctrl->AppendColumn(column1); - - // column 2 of the view control: - - wxDataViewSpinRenderer *sr = - new wxDataViewSpinRenderer(0, 2010, wxDATAVIEW_CELL_EDITABLE, - wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); - wxDataViewColumn *column2 = - new wxDataViewColumn("year", sr, 2, 60, wxALIGN_LEFT, - wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_REORDERABLE); - view_ctrl->AppendColumn(column2); - - // column 3 of the view control: - - wxArrayString choices; - choices.Add("good"); - choices.Add("bad"); - choices.Add("lousy"); - wxDataViewChoiceRenderer *c = - new wxDataViewChoiceRenderer(choices, wxDATAVIEW_CELL_EDITABLE, - wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); - wxDataViewColumn *column3 = - new wxDataViewColumn("rating", c, 3, 100, wxALIGN_LEFT, - wxDATAVIEW_COL_REORDERABLE | wxDATAVIEW_COL_RESIZABLE); - view_ctrl->AppendColumn(column3); - - // column 4 of the view control: - - view_ctrl->AppendProgressColumn("popularity", 4, wxDATAVIEW_CELL_INERT, 80); - - // column 5 of the view control: - - MyCustomRenderer *cr = new MyCustomRenderer(wxDATAVIEW_CELL_ACTIVATABLE); - wxDataViewColumn *column5 = - new wxDataViewColumn("custom", cr, 5, -1, wxALIGN_LEFT, - wxDATAVIEW_COL_RESIZABLE); - view_ctrl->AppendColumn(column5); - - // ********************************************************************************************** - common_sizer->Add(PanelSz, 0, wxEXPAND | wxALL, 1); -*/ - - wxSizer *paneSz = new wxBoxSizer(wxVERTICAL); - paneSz->Add(common_sizer/*m_optgroup->sizer*/, 1, wxGROW | wxEXPAND | wxBOTTOM, 2); - win->SetSizer(paneSz); - paneSz->SetSizeHints(win); } ConfigOptionsGroup* get_optgroup() diff --git a/xs/src/slic3r/GUI/wxExtensions.cpp b/xs/src/slic3r/GUI/wxExtensions.cpp index 9d691b1aa..0fb335118 100644 --- a/xs/src/slic3r/GUI/wxExtensions.cpp +++ b/xs/src/slic3r/GUI/wxExtensions.cpp @@ -186,9 +186,9 @@ MyObjectTreeModel::MyObjectTreeModel() m_objects.emplace(root3); auto root4 = new MyObjectTreeModelNode("Object4"); m_objects.emplace(root4); - root4->Append(new MyObjectTreeModelNode(root2, "SubObject1")); - root4->Append(new MyObjectTreeModelNode(root2, "SubObject2")); - root4->Append(new MyObjectTreeModelNode(root2, "SubObject3")); + root4->Append(new MyObjectTreeModelNode(root4, "SubObject1")); + root4->Append(new MyObjectTreeModelNode(root4, "SubObject2")); + root4->Append(new MyObjectTreeModelNode(root4, "SubObject3")); } wxString MyObjectTreeModel::GetName(const wxDataViewItem &item) const @@ -200,7 +200,7 @@ wxString MyObjectTreeModel::GetName(const wxDataViewItem &item) const return node->m_name; } -wxString MyObjectTreeModel::GetCopyCnt(const wxDataViewItem &item) const +wxString MyObjectTreeModel::GetCopy(const wxDataViewItem &item) const { MyObjectTreeModelNode *node = (MyObjectTreeModelNode*)item.GetID(); if (!node) // happens if item.IsOk()==false @@ -302,8 +302,8 @@ unsigned int MyObjectTreeModel::GetChildren(const wxDataViewItem &parent, wxData MyObjectTreeModelNode *node = (MyObjectTreeModelNode*)parent.GetID(); if (!node) { - for (auto object: m_objects) - array.Add(wxDataViewItem((void*)object)); + for (auto object : m_objects) + array.Add(wxDataViewItem((void*)object)); return m_objects.size(); } diff --git a/xs/src/slic3r/GUI/wxExtensions.hpp b/xs/src/slic3r/GUI/wxExtensions.hpp index 0ed27ab74..6ebdbe8b2 100644 --- a/xs/src/slic3r/GUI/wxExtensions.hpp +++ b/xs/src/slic3r/GUI/wxExtensions.hpp @@ -148,7 +148,7 @@ public: // helper method for wxLog wxString GetName(const wxDataViewItem &item) const; - wxString GetCopyCnt(const wxDataViewItem &item) const; + wxString GetCopy(const wxDataViewItem &item) const; wxString GetScale(const wxDataViewItem &item) const; // helper methods to change the model @@ -172,6 +172,10 @@ public: virtual bool IsContainer(const wxDataViewItem &item) const override; virtual unsigned int GetChildren(const wxDataViewItem &parent, wxDataViewItemArray &array) const override; + + // Is the container just a header or an item with all columns + // In our case it is an item with all columns + virtual bool HasContainerColumns(const wxDataViewItem& WXUNUSED(item)) const override { return true; } };