mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Merge branch 'dev_native' of https://github.com/prusa3d/Slic3r into dev_native
This commit is contained in:
		
						commit
						b788530056
					
				
					 11 changed files with 122 additions and 292 deletions
				
			
		|  | @ -1,7 +1,7 @@ | |||
| #ifndef slic3r_Events_hpp_ | ||||
| #define slic3r_Events_hpp_ | ||||
| 
 | ||||
| 
 | ||||
| #include <array> | ||||
| #include <wx/event.h> | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -684,6 +684,11 @@ ObjectList* GUI_App::obj_list() | |||
|     return sidebar().obj_list(); | ||||
| } | ||||
| 
 | ||||
| Plater* GUI_App::plater() | ||||
| { | ||||
|     return mainframe->m_plater; | ||||
| } | ||||
| 
 | ||||
| ModelObjectPtrs* GUI_App::model_objects() | ||||
| { | ||||
|     return &mainframe->m_plater->model().objects; | ||||
|  |  | |||
|  | @ -140,6 +140,7 @@ public: | |||
|     Sidebar&            sidebar(); | ||||
|     ObjectManipulation* obj_manipul(); | ||||
|     ObjectList*         obj_list(); | ||||
|     Plater*             plater(); | ||||
|     std::vector<ModelObject*> *model_objects(); | ||||
| 
 | ||||
|     AppConfig*      app_config{ nullptr }; | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ namespace GUI | |||
| { | ||||
| 
 | ||||
| ObjectList::ObjectList(wxWindow* parent) : | ||||
|     m_parent(parent) | ||||
|     wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) | ||||
| { | ||||
|     // Fill CATEGORY_ICON
 | ||||
|     { | ||||
|  | @ -39,24 +39,24 @@ ObjectList::ObjectList(wxWindow* parent) : | |||
|     create_objects_ctrl(); | ||||
| 
 | ||||
|     // describe control behavior 
 | ||||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxEvent& event) { | ||||
|     Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxEvent& event) { | ||||
|         object_ctrl_selection_changed(); | ||||
| #ifndef __WXMSW__ | ||||
|         set_tooltip_for_item(get_mouse_position_in_control()); | ||||
| #endif //__WXMSW__        
 | ||||
|     }); | ||||
| 
 | ||||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, [this](wxDataViewEvent& event) { | ||||
|     Bind(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, [this](wxDataViewEvent& event) { | ||||
|         object_ctrl_context_menu(); | ||||
|     }); | ||||
| 
 | ||||
|     m_objects_ctrl->Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { object_ctrl_key_event(event); }); // doesn't work on OSX
 | ||||
|     Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { object_ctrl_key_event(event); }); // doesn't work on OSX
 | ||||
| 
 | ||||
| #ifdef __WXMSW__ | ||||
|     // Extruder value changed
 | ||||
|     m_objects_ctrl->Bind(wxEVT_CHOICE, [this](wxCommandEvent& event) { update_extruder_in_config(event.GetString()); }); | ||||
|     Bind(wxEVT_CHOICE, [this](wxCommandEvent& event) { update_extruder_in_config(event.GetString()); }); | ||||
| 
 | ||||
|     m_objects_ctrl->GetMainWindow()->Bind(wxEVT_MOTION, [this](wxMouseEvent& event) { | ||||
|     GetMainWindow()->Bind(wxEVT_MOTION, [this](wxMouseEvent& event) { | ||||
|         set_tooltip_for_item(event.GetPosition()); | ||||
|         event.Skip(); | ||||
|     }); | ||||
|  | @ -65,9 +65,9 @@ ObjectList::ObjectList(wxWindow* parent) : | |||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, [this](wxDataViewEvent& e) { object_ctrl_item_value_change(e); }); | ||||
| #endif //__WXMSW__
 | ||||
| 
 | ||||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG,    [this](wxDataViewEvent& e) {on_begin_drag(e); }); | ||||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, [this](wxDataViewEvent& e) {on_drop_possible(e); }); | ||||
|     m_objects_ctrl->Bind(wxEVT_DATAVIEW_ITEM_DROP,          [this](wxDataViewEvent& e) {on_drop(e); }); | ||||
|     Bind(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG,    [this](wxDataViewEvent& e) {on_begin_drag(e); }); | ||||
|     Bind(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, [this](wxDataViewEvent& e) {on_drop_possible(e); }); | ||||
|     Bind(wxEVT_DATAVIEW_ITEM_DROP,          [this](wxDataViewEvent& e) {on_drop(e); }); | ||||
| } | ||||
| 
 | ||||
| ObjectList::~ObjectList() | ||||
|  | @ -78,33 +78,32 @@ ObjectList::~ObjectList() | |||
| 
 | ||||
| void ObjectList::create_objects_ctrl() | ||||
| { | ||||
|     m_objects_ctrl = new wxDataViewCtrl(m_parent, wxID_ANY, wxDefaultPosition, wxDefaultSize); | ||||
|     m_objects_ctrl->SetMinSize(wxSize(-1, 150)); // TODO - Set correct height according to the opened/closed objects
 | ||||
|     SetMinSize(wxSize(-1, 150)); // TODO - Set correct height according to the opened/closed objects
 | ||||
| 
 | ||||
|     m_sizer = new wxBoxSizer(wxVERTICAL); | ||||
|     m_sizer->Add(m_objects_ctrl, 1, wxGROW | wxLEFT, 20); | ||||
|     m_sizer->Add(this, 1, wxGROW | wxLEFT, 20); | ||||
| 
 | ||||
|     m_objects_model = new PrusaObjectDataViewModel; | ||||
|     m_objects_ctrl->AssociateModel(m_objects_model); | ||||
|     AssociateModel(m_objects_model); | ||||
| #if wxUSE_DRAG_AND_DROP && wxUSE_UNICODE | ||||
|     m_objects_ctrl->EnableDragSource(wxDF_UNICODETEXT); | ||||
|     m_objects_ctrl->EnableDropTarget(wxDF_UNICODETEXT); | ||||
|     EnableDragSource(wxDF_UNICODETEXT); | ||||
|     EnableDropTarget(wxDF_UNICODETEXT); | ||||
| #endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
 | ||||
| 
 | ||||
|     // column 0(Icon+Text) of the view control: 
 | ||||
|     // And Icon can be consisting of several bitmaps
 | ||||
|     m_objects_ctrl->AppendColumn(new wxDataViewColumn(_(L("Name")), new PrusaBitmapTextRenderer(), | ||||
|     AppendColumn(new wxDataViewColumn(_(L("Name")), new PrusaBitmapTextRenderer(), | ||||
|         0, 200, wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE)); | ||||
| 
 | ||||
|     // column 1 of the view control:
 | ||||
|     m_objects_ctrl->AppendTextColumn(_(L("Copy")), 1, wxDATAVIEW_CELL_INERT, 45, | ||||
|     AppendTextColumn(_(L("Copy")), 1, wxDATAVIEW_CELL_INERT, 45, | ||||
|         wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE); | ||||
| 
 | ||||
|     // column 2 of the view control:
 | ||||
|     m_objects_ctrl->AppendColumn(create_objects_list_extruder_column(4)); | ||||
|     AppendColumn(create_objects_list_extruder_column(4)); | ||||
| 
 | ||||
|     // column 3 of the view control:
 | ||||
|     m_objects_ctrl->AppendBitmapColumn(" ", 3, wxDATAVIEW_CELL_INERT, 25, | ||||
|     AppendBitmapColumn(" ", 3, wxDATAVIEW_CELL_INERT, 25, | ||||
|         wxALIGN_CENTER_HORIZONTAL, wxDATAVIEW_COL_RESIZABLE); | ||||
| } | ||||
| 
 | ||||
|  | @ -112,11 +111,11 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt) | |||
| { | ||||
|     wxDataViewItem item; | ||||
|     wxDataViewColumn* col; | ||||
|     m_objects_ctrl->HitTest(pt, item, col); | ||||
|     HitTest(pt, item, col); | ||||
|     if (!item) return; | ||||
| 
 | ||||
|     if (col->GetTitle() == " ") | ||||
|         m_objects_ctrl->GetMainWindow()->SetToolTip(_(L("Right button click the icon to change the object settings"))); | ||||
|         GetMainWindow()->SetToolTip(_(L("Right button click the icon to change the object settings"))); | ||||
|     else if (col->GetTitle() == _("Name") && | ||||
|         m_objects_model->GetIcon(item).GetRefData() == m_icon_manifold_warning.GetRefData()) { | ||||
|         int obj_idx = m_objects_model->GetIdByItem(item); | ||||
|  | @ -148,17 +147,17 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt) | |||
|         if (is_windows10()) | ||||
|             tooltip += _(L("Right button click the icon to fix STL through Netfabb")); | ||||
| 
 | ||||
|         m_objects_ctrl->GetMainWindow()->SetToolTip(tooltip); | ||||
|         GetMainWindow()->SetToolTip(tooltip); | ||||
|     } | ||||
|     else | ||||
|         m_objects_ctrl->GetMainWindow()->SetToolTip(""); // hide tooltip
 | ||||
|         GetMainWindow()->SetToolTip(""); // hide tooltip
 | ||||
| } | ||||
| 
 | ||||
| wxPoint ObjectList::get_mouse_position_in_control() { | ||||
|     const wxPoint& pt = wxGetMousePosition(); | ||||
|     wxWindow* win = m_objects_ctrl->GetMainWindow(); | ||||
|     return wxPoint(pt.x - win->GetScreenPosition().x, | ||||
|         pt.y - win->GetScreenPosition().y); | ||||
| //     wxWindow* win = GetMainWindow();
 | ||||
| //     wxPoint screen_pos = win->GetScreenPosition();
 | ||||
|     return wxPoint(pt.x - /*win->*/GetScreenPosition().x, pt.y - /*win->*/GetScreenPosition().y); | ||||
| } | ||||
| 
 | ||||
| wxDataViewColumn* ObjectList::create_objects_list_extruder_column(int extruders_count) | ||||
|  | @ -175,21 +174,21 @@ wxDataViewColumn* ObjectList::create_objects_list_extruder_column(int extruders_ | |||
| 
 | ||||
| void ObjectList::update_objects_list_extruder_column(int extruders_count) | ||||
| { | ||||
|     if (!m_objects_ctrl) return; // #ys_FIXME
 | ||||
|     if (!this) return; // #ys_FIXME
 | ||||
|     if (wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA) | ||||
|         extruders_count = 1; | ||||
| 
 | ||||
|     // delete old 3rd column
 | ||||
|     m_objects_ctrl->DeleteColumn(m_objects_ctrl->GetColumn(2)); | ||||
|     DeleteColumn(GetColumn(2)); | ||||
|     // insert new created 3rd column
 | ||||
|     m_objects_ctrl->InsertColumn(2, create_objects_list_extruder_column(extruders_count)); | ||||
|     InsertColumn(2, create_objects_list_extruder_column(extruders_count)); | ||||
|     // set show/hide for this column 
 | ||||
|     set_extruder_column_hidden(extruders_count <= 1); | ||||
| } | ||||
| 
 | ||||
| void ObjectList::set_extruder_column_hidden(bool hide) | ||||
| { | ||||
|     m_objects_ctrl->GetColumn(2)->SetHidden(hide); | ||||
|     GetColumn(2)->SetHidden(hide); | ||||
| } | ||||
| 
 | ||||
| void ObjectList::update_extruder_in_config(const wxString& selection) | ||||
|  | @ -201,7 +200,7 @@ void ObjectList::update_extruder_in_config(const wxString& selection) | |||
|     m_config->set_key_value("extruder", new ConfigOptionInt(extruder)); | ||||
| 
 | ||||
| // #ys_FIXME_events  
 | ||||
|     // call function to update the scene after extruder changing
 | ||||
| //     wxGetApp().plater()->update();
 | ||||
| } | ||||
| 
 | ||||
| void ObjectList::init_icons(){ | ||||
|  | @ -231,7 +230,7 @@ void ObjectList::object_ctrl_selection_changed() | |||
|     int obj_idx, vol_idx = -1; | ||||
|     obj_idx = m_selected_object_id; | ||||
| 
 | ||||
|     const wxDataViewItem item = m_objects_ctrl->GetSelection(); | ||||
|     const wxDataViewItem item = GetSelection(); | ||||
|     if (!item || m_objects_model->GetParent(item) == wxDataViewItem(0)) | ||||
|         vol_idx = -1; | ||||
|     else { | ||||
|  | @ -250,11 +249,11 @@ void ObjectList::object_ctrl_context_menu() | |||
|     wxDataViewItem item; | ||||
|     wxDataViewColumn* col; | ||||
|     const wxPoint pt = get_mouse_position_in_control(); | ||||
|     m_objects_ctrl->HitTest(pt, item, col); | ||||
|     HitTest(pt, item, col); | ||||
|     if (!item) | ||||
| #ifdef __WXOSX__ // #ys_FIXME temporary workaround for OSX 
 | ||||
|         // after Yosemite OS X version, HitTest return undefined item
 | ||||
|         item = m_objects_ctrl->GetSelection(); | ||||
|         item = GetSelection(); | ||||
|     if (item) | ||||
|         show_context_menu(); | ||||
|     else | ||||
|  | @ -275,13 +274,13 @@ void ObjectList::object_ctrl_context_menu() | |||
|                 /*fix_through_netfabb()*/;// #ys_FIXME
 | ||||
|         } | ||||
| #ifndef __WXMSW__ | ||||
|     m_objects_ctrl->GetMainWindow()->SetToolTip(""); // hide tooltip
 | ||||
|     GetMainWindow()->SetToolTip(""); // hide tooltip
 | ||||
| #endif //__WXMSW__
 | ||||
| } | ||||
| 
 | ||||
| void ObjectList::show_context_menu() | ||||
| { | ||||
|     const auto item = m_objects_ctrl->GetSelection(); | ||||
|     const auto item = GetSelection(); | ||||
|     if (item) | ||||
|     { | ||||
|         if (m_objects_model->IsSettingsItem(item)) | ||||
|  | @ -297,7 +296,7 @@ void ObjectList::show_context_menu() | |||
| void ObjectList::object_ctrl_key_event(wxKeyEvent& event) | ||||
| { | ||||
|     if (event.GetKeyCode() == WXK_TAB) | ||||
|         m_objects_ctrl->Navigate(event.ShiftDown() ? wxNavigationKeyEvent::IsBackward : wxNavigationKeyEvent::IsForward); | ||||
|         Navigate(event.ShiftDown() ? wxNavigationKeyEvent::IsBackward : wxNavigationKeyEvent::IsForward); | ||||
|     else if (event.GetKeyCode() == WXK_DELETE | ||||
| #ifdef __WXOSX__ | ||||
|         || event.GetKeyCode() == WXK_BACK | ||||
|  | @ -382,7 +381,7 @@ void ObjectList::on_drop(wxDataViewEvent &event) | |||
|     if (to_volume_id > from_volume_id) to_volume_id--; | ||||
| #endif // __WXGTK__
 | ||||
| 
 | ||||
|     m_objects_ctrl->Select(m_objects_model->ReorganizeChildren(from_volume_id, to_volume_id, | ||||
|     Select(m_objects_model->ReorganizeChildren(from_volume_id, to_volume_id, | ||||
|         m_objects_model->GetParent(item))); | ||||
| 
 | ||||
|     auto& volumes = (*m_objects)[m_selected_object_id]->volumes; | ||||
|  | @ -490,10 +489,10 @@ void ObjectList::get_settings_choice(wxMenu *menu, int id, bool is_part) | |||
| 
 | ||||
| 
 | ||||
|     // Add settings item for object
 | ||||
|     const auto item = m_objects_ctrl->GetSelection(); | ||||
|     const auto item = GetSelection(); | ||||
|     if (item) { | ||||
|         const auto settings_item = m_objects_model->HasSettings(item); | ||||
|         m_objects_ctrl->Select(settings_item ? settings_item : | ||||
|         Select(settings_item ? settings_item : | ||||
|             m_objects_model->AddSettingsChild(item)); | ||||
| #ifndef __WXOSX__ | ||||
|         part_selection_changed(); | ||||
|  | @ -644,7 +643,7 @@ wxMenu* ObjectList::create_add_settings_popupmenu(bool is_part) | |||
| // Load SubObjects (parts and modifiers)
 | ||||
| void ObjectList::load_subobject(bool is_modifier /*= false*/, bool is_lambda/* = false*/) | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     if (!item) | ||||
|         return; | ||||
|     int obj_idx = -1; | ||||
|  | @ -663,7 +662,7 @@ void ObjectList::load_subobject(bool is_modifier /*= false*/, bool is_lambda/* = | |||
|     parts_changed(obj_idx); | ||||
| 
 | ||||
|     for (int i = 0; i < part_names.size(); ++i) | ||||
|         m_objects_ctrl->Select(m_objects_model->AddChild(item, part_names.Item(i), | ||||
|         Select(m_objects_model->AddChild(item, part_names.Item(i), | ||||
|         is_modifier ? m_icon_modifiermesh : m_icon_solidmesh)); | ||||
| #ifndef __WXOSX__ //#ifdef __WXMSW__ // #ys_FIXME
 | ||||
|     object_ctrl_selection_changed(); | ||||
|  | @ -725,7 +724,7 @@ void ObjectList::load_lambda(   ModelObject* model_object, | |||
|                                 wxArrayString& part_names,  | ||||
|                                 const bool is_modifier) | ||||
| { | ||||
|     auto dlg = new LambdaObjectDialog(m_objects_ctrl->GetMainWindow()); | ||||
|     auto dlg = new LambdaObjectDialog(GetMainWindow()); | ||||
|     if (dlg->ShowModal() == wxID_CANCEL) { | ||||
|         return; | ||||
|     } | ||||
|  | @ -776,7 +775,7 @@ void ObjectList::load_lambda(const std::string& type_name) | |||
| { | ||||
|     if (m_selected_object_id < 0) return; | ||||
| 
 | ||||
|     auto dlg = new LambdaObjectDialog(m_objects_ctrl->GetMainWindow(), type_name); | ||||
|     auto dlg = new LambdaObjectDialog(GetMainWindow(), type_name); | ||||
|     if (dlg->ShowModal() == wxID_CANCEL) | ||||
|         return; | ||||
| 
 | ||||
|  | @ -808,7 +807,7 @@ void ObjectList::load_lambda(const std::string& type_name) | |||
|     m_parts_changed = true; | ||||
|     parts_changed(m_selected_object_id); | ||||
| 
 | ||||
|     m_objects_ctrl->Select(m_objects_model->AddChild(m_objects_ctrl->GetSelection(), | ||||
|     Select(m_objects_model->AddChild(GetSelection(), | ||||
|         name, m_icon_modifiermesh)); | ||||
| #ifndef __WXOSX__ //#ifdef __WXMSW__ // #ys_FIXME
 | ||||
|     object_ctrl_selection_changed(); | ||||
|  | @ -820,7 +819,7 @@ void ObjectList::load_lambda(const std::string& type_name) | |||
| 
 | ||||
| void ObjectList::del_subobject() | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     if (!item) return; | ||||
| 
 | ||||
|     const auto volume_id = m_objects_model->GetVolumeIdByItem(item); | ||||
|  | @ -832,7 +831,7 @@ void ObjectList::del_subobject() | |||
|     else if (!del_subobject_from_object(volume_id)) | ||||
|         return; | ||||
| 
 | ||||
|     m_objects_ctrl->Select(m_objects_model->Delete(item)); | ||||
|     Select(m_objects_model->Delete(item)); | ||||
|     part_selection_changed(); | ||||
| } | ||||
| 
 | ||||
|  | @ -875,7 +874,7 @@ bool ObjectList::del_subobject_from_object(const int volume_id) | |||
| 
 | ||||
| void ObjectList::split(const bool split_part) | ||||
| { | ||||
|     const auto item = m_objects_ctrl->GetSelection(); | ||||
|     const auto item = GetSelection(); | ||||
|     if (!item || m_selected_object_id < 0) | ||||
|         return; | ||||
|     ModelVolume* volume; | ||||
|  | @ -900,7 +899,7 @@ void ObjectList::split(const bool split_part) | |||
|             model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0, | ||||
|             false); | ||||
| 
 | ||||
|         m_objects_ctrl->Expand(parent); | ||||
|         Expand(parent); | ||||
|     } | ||||
|     else { | ||||
|         for (auto id = 0; id < model_object->volumes.size(); id++) | ||||
|  | @ -909,7 +908,7 @@ void ObjectList::split(const bool split_part) | |||
|             model_object->volumes[id]->config.has("extruder") ? | ||||
|             model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value : 0, | ||||
|             false); | ||||
|         m_objects_ctrl->Expand(item); | ||||
|         Expand(item); | ||||
|     } | ||||
| 
 | ||||
|     m_parts_changed = true; | ||||
|  | @ -934,7 +933,7 @@ bool ObjectList::get_volume_by_item(const bool split_part, const wxDataViewItem& | |||
| 
 | ||||
| bool ObjectList::is_splittable_object(const bool split_part) | ||||
| { | ||||
|     const wxDataViewItem item = m_objects_ctrl->GetSelection(); | ||||
|     const wxDataViewItem item = GetSelection(); | ||||
|     if (!item) return false; | ||||
| 
 | ||||
|     wxDataViewItemArray children; | ||||
|  | @ -956,18 +955,14 @@ bool ObjectList::is_splittable_object(const bool split_part) | |||
| 
 | ||||
| void ObjectList::parts_changed(int obj_idx) | ||||
| { | ||||
| // #ys_FIXME_events
 | ||||
| // call function to update scene after some changes in ObjectList
 | ||||
| //     auto event_str = wxString::Format("%d %d %d", obj_idx,
 | ||||
| //         is_parts_changed() ? 1 : 0,
 | ||||
| //         is_part_settings_changed() ? 1 : 0);
 | ||||
|     wxGetApp().mainframe->m_plater->changed_object_settings(obj_idx); | ||||
| } | ||||
| 
 | ||||
| void ObjectList::part_selection_changed() | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     int obj_idx = -1; | ||||
|     ConfigOptionsGroup* og = wxGetApp().obj_manipul()->get_og();// get_optgroup(ogFrequentlyObjectSettings);
 | ||||
|     ConfigOptionsGroup* og = wxGetApp().obj_manipul()->get_og(); | ||||
|     m_config = nullptr; | ||||
|     wxString object_name = wxEmptyString; | ||||
|     if (item) | ||||
|  | @ -1022,22 +1017,23 @@ void ObjectList::part_selection_changed() | |||
| 
 | ||||
| void ObjectList::update_manipulation_sizer(const bool is_simple_mode) | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     if (!item || !is_simple_mode) | ||||
|         return; | ||||
| 
 | ||||
|     if (m_objects_model->IsSettingsItem(item)) { | ||||
|         m_objects_ctrl->Select(m_objects_model->GetParent(item)); | ||||
|         Select(m_objects_model->GetParent(item)); | ||||
|         part_selection_changed(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ObjectList::add_object_to_list(const std::string &name, ModelObject* model_object) | ||||
| void ObjectList::add_object_to_list(size_t obj_idx) | ||||
| { | ||||
|     wxString item_name = name; | ||||
|     auto model_object = (*m_objects)[obj_idx]; | ||||
|     wxString item_name = model_object->name; | ||||
|     auto item = m_objects_model->Add(item_name, model_object->instances.size()); | ||||
| #if !ENABLE_EXTENDED_SELECTION | ||||
|     m_objects_ctrl->Select(item); | ||||
|     Select(item); | ||||
| #endif // !ENABLE_EXTENDED_SELECTION
 | ||||
| 
 | ||||
|     // Add error icon if detected auto-repaire
 | ||||
|  | @ -1058,7 +1054,7 @@ void ObjectList::add_object_to_list(const std::string &name, ModelObject* model_ | |||
|             m_icon_solidmesh, | ||||
|             model_object->volumes[id]->config.option<ConfigOptionInt>("extruder")->value, | ||||
|             false); | ||||
|         m_objects_ctrl->Expand(item); | ||||
|         Expand(item); | ||||
|     } | ||||
| 
 | ||||
| #ifndef __WXOSX__  | ||||
|  | @ -1068,10 +1064,10 @@ void ObjectList::add_object_to_list(const std::string &name, ModelObject* model_ | |||
| 
 | ||||
| void ObjectList::delete_object_from_list() | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     if (!item || m_objects_model->GetParent(item) != wxDataViewItem(0)) | ||||
|         return; | ||||
|     // 	m_objects_ctrl->Select(m_objects_model->Delete(item));
 | ||||
|     // 	Select(m_objects_model->Delete(item));
 | ||||
|     m_objects_model->Delete(item); | ||||
| 
 | ||||
|     part_selection_changed(); | ||||
|  | @ -1086,16 +1082,16 @@ void ObjectList::delete_all_objects_from_list() | |||
| void ObjectList::set_object_count(int idx, int count) | ||||
| { | ||||
|     m_objects_model->SetValue(wxString::Format("%d", count), idx, 1); | ||||
|     m_objects_ctrl->Refresh(); | ||||
|     Refresh(); | ||||
| } | ||||
| 
 | ||||
| void ObjectList::unselect_objects() | ||||
| { | ||||
|     if (!m_objects_ctrl->GetSelection()) | ||||
|     if (!GetSelection()) | ||||
|         return; | ||||
| 
 | ||||
|     m_prevent_list_events = true; | ||||
|     m_objects_ctrl->UnselectAll(); | ||||
|     UnselectAll(); | ||||
|     part_selection_changed(); | ||||
|     m_prevent_list_events = false; | ||||
| } | ||||
|  | @ -1103,9 +1099,9 @@ void ObjectList::unselect_objects() | |||
| void ObjectList::select_current_object(int idx) | ||||
| { | ||||
|     m_prevent_list_events = true; | ||||
|     m_objects_ctrl->UnselectAll(); | ||||
|     UnselectAll(); | ||||
|     if (idx >= 0) | ||||
|         m_objects_ctrl->Select(m_objects_model->GetItemById(idx)); | ||||
|         Select(m_objects_model->GetItemById(idx)); | ||||
|     part_selection_changed(); | ||||
|     m_prevent_list_events = false; | ||||
| } | ||||
|  | @ -1117,16 +1113,16 @@ void ObjectList::select_current_volume(int idx, int vol_idx) | |||
|         return; | ||||
|     } | ||||
|     m_prevent_list_events = true; | ||||
|     m_objects_ctrl->UnselectAll(); | ||||
|     UnselectAll(); | ||||
|     if (idx >= 0) | ||||
|         m_objects_ctrl->Select(m_objects_model->GetItemByVolumeId(idx, vol_idx)); | ||||
|         Select(m_objects_model->GetItemByVolumeId(idx, vol_idx)); | ||||
|     part_selection_changed(); | ||||
|     m_prevent_list_events = false; | ||||
| } | ||||
| 
 | ||||
| void ObjectList::remove() | ||||
| { | ||||
|     auto item = m_objects_ctrl->GetSelection(); | ||||
|     auto item = GetSelection(); | ||||
|     if (!item) | ||||
|         return; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,15 +1,11 @@ | |||
| #ifndef slic3r_GUI_ObjectList_hpp_ | ||||
| #define slic3r_GUI_ObjectList_hpp_ | ||||
| 
 | ||||
| #include <wx/panel.h> | ||||
| #include <wx/bitmap.h> | ||||
| #include <wx/dataview.h> | ||||
| #include <map> | ||||
| 
 | ||||
| class wxBoxSizer; | ||||
| class wxDataViewCtrl; | ||||
| class wxDataViewColumn; | ||||
| class wxDataViewEvent;  | ||||
| class wxDataViewItem; | ||||
| class PrusaObjectDataViewModel; | ||||
| 
 | ||||
| namespace Slic3r { | ||||
|  | @ -20,10 +16,9 @@ class ModelVolume; | |||
| 
 | ||||
| namespace GUI { | ||||
| 
 | ||||
| class ObjectList | ||||
| class ObjectList : public wxDataViewCtrl | ||||
| { | ||||
|     wxBoxSizer          *m_sizer {nullptr}; | ||||
|     wxWindow            *m_parent{ nullptr }; | ||||
| 
 | ||||
|     DynamicPrintConfig  *m_default_config {nullptr}; | ||||
| 
 | ||||
|  | @ -50,11 +45,10 @@ public: | |||
| 
 | ||||
|     std::map<std::string, wxBitmap> CATEGORY_ICON; | ||||
| 
 | ||||
|     wxDataViewCtrl				*m_objects_ctrl{ nullptr }; | ||||
|     PrusaObjectDataViewModel	*m_objects_model{ nullptr }; | ||||
|     DynamicPrintConfig          *m_config {nullptr}; | ||||
| 
 | ||||
|     std::vector<ModelObject*>     *m_objects{ nullptr }; | ||||
|     std::vector<ModelObject*>   *m_objects{ nullptr }; | ||||
| 
 | ||||
| 
 | ||||
|     void                create_objects_ctrl(); | ||||
|  | @ -110,7 +104,7 @@ public: | |||
|     void                 update_manipulation_sizer(const bool is_simple_mode); | ||||
| 
 | ||||
|     // Add object to the list
 | ||||
|     void add_object_to_list(const std::string &name, ModelObject* model_object); | ||||
|     void add_object_to_list(size_t obj_idx); | ||||
|     // Delete object from the list
 | ||||
|     void delete_object_from_list(); | ||||
|     // Delete all objects from the list
 | ||||
|  |  | |||
|  | @ -171,7 +171,7 @@ void ObjectManipulation::update_settings_list() | |||
|     m_settings_list_sizer->Clear(true); | ||||
|     bool show_manipulations = true; | ||||
| 
 | ||||
|     auto objects_ctrl   = wxGetApp().obj_list()->m_objects_ctrl; | ||||
|     auto objects_ctrl   = wxGetApp().obj_list(); | ||||
|     auto objects_model  = wxGetApp().obj_list()->m_objects_model; | ||||
|     auto config         = wxGetApp().obj_list()->m_config; | ||||
| 
 | ||||
|  | @ -259,7 +259,7 @@ void ObjectManipulation::update_settings_list() | |||
| #endif | ||||
| 
 | ||||
|     parent->Layout(); | ||||
|     /*wxGetApp().sidebar().*/parent->GetParent()->Layout(); | ||||
|     parent->GetParent()->Layout(); | ||||
| } | ||||
| 
 | ||||
| #if ENABLE_EXTENDED_SELECTION | ||||
|  |  | |||
|  | @ -171,25 +171,6 @@ void MainFrame::init_tabpanel() | |||
| //         m_plater->select_object_from_cpp(obj_idx < 0 ? undef : obj_idx, vol_idx < 0 ? -1 : vol_idx);
 | ||||
| //     });
 | ||||
| 
 | ||||
|     // The following event is emited by the C++ GUI implementation on object settings change.
 | ||||
| //     EVT_COMMAND($self, -1, $OBJECT_SETTINGS_CHANGED_EVENT, sub {
 | ||||
| //         auto line = event->GetString();
 | ||||
| //         my($obj_idx, $parts_changed, $part_settings_changed) = split('', $line);
 | ||||
| // 
 | ||||
| //         m_plater->changed_object_settings(obj_idx, parts_changed, part_settings_changed);
 | ||||
| //     });
 | ||||
| 
 | ||||
|     // The following event is emited by the C++ GUI implementation on object remove.
 | ||||
| //     EVT_COMMAND($self, -1, $OBJECT_REMOVE_EVENT, sub {
 | ||||
| //         m_plater->remove();
 | ||||
| //     });
 | ||||
| // 
 | ||||
| //     // The following event is emited by the C++ GUI implementation on extruder change for object.
 | ||||
| //     EVT_COMMAND($self, -1, $UPDATE_SCENE_EVENT, sub {
 | ||||
| //         m_plater->update();
 | ||||
| //     });
 | ||||
| 
 | ||||
| 
 | ||||
|     create_preset_tabs(); | ||||
|     std::vector<std::string> tab_names = { "print", "filament", "sla_material", "printer" };     | ||||
|     for (auto tab_name : tab_names) | ||||
|  |  | |||
|  | @ -370,6 +370,9 @@ struct Sidebar::priv | |||
|     wxButton *btn_send_gcode; | ||||
| 
 | ||||
|     priv(Plater *plater) : plater(plater) {} | ||||
| 
 | ||||
|     bool show_manifold_warning_icon = false; | ||||
|     bool show_print_info = false; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -550,8 +553,8 @@ int Sidebar::get_ol_selection() | |||
| void Sidebar::show_info_sizers(const bool show) | ||||
| { | ||||
|     p->object_info->Show(show); | ||||
|     p->object_info->manifold_warning_icon->Show(show/* && g_show_manifold_warning_icon*/); // where is g_show_manifold_warning_icon updating? #ys_FIXME
 | ||||
|     p->sliced_info->Show(show /*&& g_show_print_info*/); // where is g_show_print_info updating? #ys_FIXME
 | ||||
|     p->object_info->manifold_warning_icon->Show(show && p->show_manifold_warning_icon); // where is g_show_manifold_warning_icon updating? #ys_FIXME
 | ||||
|     p->sliced_info->Show(show && p->show_print_info); // where is g_show_print_info updating? #ys_FIXME
 | ||||
| } | ||||
| 
 | ||||
| void Sidebar::show_buttons(const bool show) | ||||
|  | @ -1052,11 +1055,7 @@ std::vector<size_t> Plater::priv::load_model_objects(const ModelObjectPtrs &mode | |||
|     } | ||||
| 
 | ||||
|     for (const size_t idx : obj_idxs) { | ||||
|         const PlaterObject &object = objects[idx]; | ||||
|         ModelObject *model_object = model.objects[idx]; | ||||
| 
 | ||||
|         // FIXME: ObjetParts not initialized (via add_frequently_changed_parameters)
 | ||||
|         // GUI::add_object_to_list(object.name, model_object);
 | ||||
|         wxGetApp().obj_list()->add_object_to_list(idx); | ||||
|     } | ||||
| 
 | ||||
|     if (need_arrange) { | ||||
|  | @ -1617,5 +1616,36 @@ void Plater::send_gcode() | |||
|     p->send_gcode_file = export_gcode(); | ||||
| } | ||||
| 
 | ||||
| void Plater::changed_object_settings(int obj_idx) | ||||
| { | ||||
|     if (obj_idx < 0) | ||||
|         return; | ||||
|     auto list = wxGetApp().obj_list(); | ||||
|     wxASSERT(list != nullptr); | ||||
|     if (list == nullptr) | ||||
|         return; | ||||
| 
 | ||||
|     if (list->is_parts_changed()) { | ||||
|         // recenter and re - align to Z = 0
 | ||||
|         auto model_object = p->model.objects[list->get_sel_obj_id()]; | ||||
|         model_object->center_around_origin(); | ||||
|     } | ||||
| 
 | ||||
|     // update print
 | ||||
|     if (list->is_parts_changed() || list->is_part_settings_changed()) { | ||||
| //         stop_background_process();
 | ||||
| //         $self->{print}->reload_object($obj_idx);
 | ||||
| //         schedule_background_process();
 | ||||
|         if (p->canvas3D) _3DScene::reload_scene(p->canvas3D, true); | ||||
|         auto selections = p->collect_selections(); | ||||
|         _3DScene::set_objects_selections(p->canvas3D, selections); | ||||
|         _3DScene::reload_scene(p->canvas3D, false); | ||||
|     } | ||||
|     else { | ||||
| //         schedule_background_process();
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| }}    // namespace Slic3r::GUI
 | ||||
|  |  | |||
|  | @ -81,6 +81,7 @@ public: | |||
|     void export_amf(); | ||||
|     void export_3mf(); | ||||
|     void reslice(); | ||||
|     void changed_object_settings(int obj_idx); | ||||
|     void send_gcode(); | ||||
| private: | ||||
|     struct priv; | ||||
|  |  | |||
|  | @ -152,7 +152,6 @@ void Tab::create_preset_tab() | |||
| 	m_hsizer->Add(m_undo_btn, 0, wxALIGN_CENTER_VERTICAL); | ||||
| 	m_hsizer->AddSpacer(32); | ||||
| 	m_hsizer->Add(m_question_btn, 0, wxALIGN_CENTER_VERTICAL); | ||||
| // 	m_hsizer->Add(m_cc_presets_choice, 1, wxLEFT | wxRIGHT | wxTOP | wxALIGN_CENTER_VERTICAL, 3);
 | ||||
| 
 | ||||
| 	//Horizontal sizer to hold the tree and the selected page.
 | ||||
| 	m_hsizer = new wxBoxSizer(wxHORIZONTAL); | ||||
|  | @ -518,7 +517,7 @@ void Tab::update_changed_tree_ui() | |||
| 			break; | ||||
| 		} | ||||
|         auto next_item = m_treectrl->GetNextVisible(cur_item); | ||||
|         cur_item = !m_treectrl->IsVisible(cur_item) ? m_treectrl->GetNextVisible(cur_item) : nullptr;// next_item;
 | ||||
|         cur_item = next_item; | ||||
| 	} | ||||
| 	update_undo_buttons(); | ||||
| } | ||||
|  | @ -590,14 +589,11 @@ void Tab::update_dirty(){ | |||
| 	m_presets->update_dirty_ui(m_presets_choice); | ||||
| 	on_presets_changed();	 | ||||
| 	update_changed_ui(); | ||||
| //	update_dirty_presets(m_cc_presets_choice);
 | ||||
| } | ||||
| 
 | ||||
| void Tab::update_tab_ui() | ||||
| { | ||||
| 	m_selected_preset_item = m_presets->update_tab_ui(m_presets_choice, m_show_incompatible_presets); | ||||
| // 	update_tab_presets(m_cc_presets_choice, m_show_incompatible_presets);
 | ||||
| // 	update_presetsctrl(m_presetctrl, m_show_incompatible_presets);
 | ||||
| } | ||||
| 
 | ||||
| // Load a provied DynamicConfig into the tab, modifying the active preset.
 | ||||
|  | @ -2611,173 +2607,6 @@ wxSizer* Tab::compatible_printers_widget(wxWindow* parent, wxCheckBox** checkbox | |||
| 	return sizer;  | ||||
| } | ||||
| 
 | ||||
| void Tab::update_presetsctrl(wxDataViewTreeCtrl* ui, bool show_incompatible) | ||||
| { | ||||
| 	if (ui == nullptr) | ||||
| 		return; | ||||
| 	ui->Freeze(); | ||||
| 	ui->DeleteAllItems(); | ||||
| 	auto presets = m_presets->get_presets(); | ||||
| 	auto idx_selected = m_presets->get_idx_selected(); | ||||
| 	auto suffix_modified = m_presets->get_suffix_modified(); | ||||
| 	int icon_compatible = 0; | ||||
| 	int icon_incompatible = 1; | ||||
| 	int cnt_items = 0; | ||||
| 
 | ||||
| 	auto root_sys = ui->AppendContainer(wxDataViewItem(0), _(L("System presets"))); | ||||
| 	auto root_def = ui->AppendContainer(wxDataViewItem(0), _(L("Default presets"))); | ||||
| 
 | ||||
| 	auto show_def = wxGetApp().app_config->get("no_defaults")[0] != '1'; | ||||
| 
 | ||||
| 	for (size_t i = presets.front().is_visible ? 0 : 1; i < presets.size(); ++i) { | ||||
| 		const Preset &preset = presets[i]; | ||||
| 		if (!preset.is_visible || (!show_incompatible && !preset.is_compatible && i != idx_selected)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		auto preset_name = wxString::FromUTF8((preset.name + (preset.is_dirty ? suffix_modified : "")).c_str()); | ||||
| 
 | ||||
| 		wxDataViewItem item; | ||||
| 		if (preset.is_system) | ||||
| 			item = ui->AppendItem(root_sys, preset_name, | ||||
| 			preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 		else if (show_def && preset.is_default) | ||||
| 			item = ui->AppendItem(root_def, preset_name, | ||||
| 			preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 		else | ||||
| 		{ | ||||
| 			auto parent = m_presets->get_preset_parent(preset); | ||||
| 			if (parent == nullptr) | ||||
| 				item = ui->AppendItem(root_def, preset_name, | ||||
| 				preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 			else | ||||
| 			{ | ||||
| 				auto parent_name = parent->name; | ||||
| 
 | ||||
| 				wxDataViewTreeStoreContainerNode *node = ui->GetStore()->FindContainerNode(root_sys); | ||||
| 				if (node) | ||||
| 				{ | ||||
| 					wxDataViewTreeStoreNodes::iterator iter; | ||||
| 					for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++) | ||||
| 					{ | ||||
| 						wxDataViewTreeStoreNode* child = *iter; | ||||
| 						auto child_item = child->GetItem(); | ||||
| 						auto item_text = ui->GetItemText(child_item); | ||||
| 						if (item_text == parent_name) | ||||
| 						{ | ||||
| 							auto added_child = ui->AppendItem(child->GetItem(), preset_name, | ||||
| 								preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 							if (!added_child){ | ||||
| 								ui->DeleteItem(child->GetItem()); | ||||
| 								auto new_parent = ui->AppendContainer(root_sys, parent_name, | ||||
| 									preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 								ui->AppendItem(new_parent, preset_name, | ||||
| 									preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 							} | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		cnt_items++; | ||||
| 		if (i == idx_selected){ | ||||
| 			ui->Select(item); | ||||
| 			m_cc_presets_choice->SetText(preset_name); | ||||
| 		} | ||||
| 	} | ||||
| 	if (ui->GetStore()->GetChildCount(root_def) == 0) | ||||
| 		ui->DeleteItem(root_def); | ||||
| 
 | ||||
| 	ui->Thaw(); | ||||
| } | ||||
| 
 | ||||
| void Tab::update_tab_presets(wxComboCtrl* ui, bool show_incompatible) | ||||
| { | ||||
| 	if (ui == nullptr) | ||||
| 		return; | ||||
| 	ui->Freeze(); | ||||
| 	ui->Clear(); | ||||
| 	auto presets = m_presets->get_presets(); | ||||
| 	auto idx_selected = m_presets->get_idx_selected(); | ||||
| 	auto suffix_modified = m_presets->get_suffix_modified(); | ||||
| 	int icon_compatible = 0; | ||||
| 	int icon_incompatible = 1; | ||||
| 	int cnt_items = 0; | ||||
| 
 | ||||
| 	wxDataViewTreeCtrlComboPopup* popup = wxDynamicCast(m_cc_presets_choice->GetPopupControl(), wxDataViewTreeCtrlComboPopup); | ||||
| 	if (popup != nullptr) | ||||
| 	{ | ||||
| 		popup->DeleteAllItems(); | ||||
| 
 | ||||
| 		auto root_sys = popup->AppendContainer(wxDataViewItem(0), _(L("System presets"))); | ||||
| 		auto root_def = popup->AppendContainer(wxDataViewItem(0), _(L("Default presets"))); | ||||
| 
 | ||||
| 		auto show_def = wxGetApp().app_config->get("no_defaults")[0] != '1'; | ||||
| 
 | ||||
| 		for (size_t i = presets.front().is_visible ? 0 : 1; i < presets.size(); ++i) { | ||||
| 			const Preset &preset = presets[i]; | ||||
| 			if (!preset.is_visible || (!show_incompatible && !preset.is_compatible && i != idx_selected)) | ||||
| 				continue; | ||||
| 
 | ||||
| 			auto preset_name = wxString::FromUTF8((preset.name + (preset.is_dirty ? suffix_modified : "")).c_str()); | ||||
| 
 | ||||
| 			wxDataViewItem item; | ||||
| 			if (preset.is_system) | ||||
| 				item = popup->AppendItem(root_sys, preset_name,  | ||||
| 										 preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 			else if (show_def && preset.is_default) | ||||
| 				item = popup->AppendItem(root_def, preset_name,  | ||||
| 										 preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 			else  | ||||
| 			{ | ||||
| 				auto parent = m_presets->get_preset_parent(preset); | ||||
| 				if (parent == nullptr) | ||||
| 					item = popup->AppendItem(root_def, preset_name, | ||||
| 											 preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 				else | ||||
| 				{ | ||||
| 					auto parent_name = parent->name; | ||||
| 
 | ||||
| 					wxDataViewTreeStoreContainerNode *node = popup->GetStore()->FindContainerNode(root_sys); | ||||
| 					if (node)  | ||||
| 					{ | ||||
| 						wxDataViewTreeStoreNodes::iterator iter; | ||||
| 						for (iter = node->GetChildren().begin(); iter != node->GetChildren().end(); iter++) | ||||
| 						{ | ||||
| 							wxDataViewTreeStoreNode* child = *iter; | ||||
| 							auto child_item = child->GetItem(); | ||||
| 							auto item_text = popup->GetItemText(child_item); | ||||
| 							if (item_text == parent_name) | ||||
| 							{ | ||||
| 								auto added_child = popup->AppendItem(child->GetItem(), preset_name, | ||||
| 									preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 								if (!added_child){ | ||||
| 									popup->DeleteItem(child->GetItem()); | ||||
| 									auto new_parent = popup->AppendContainer(root_sys, parent_name, | ||||
| 										preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 									popup->AppendItem(new_parent, preset_name, | ||||
| 										preset.is_compatible ? icon_compatible : icon_incompatible); | ||||
| 								} | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			cnt_items++; | ||||
| 			if (i == idx_selected){ | ||||
| 				popup->Select(item); | ||||
| 				m_cc_presets_choice->SetText(preset_name); | ||||
| 			} | ||||
| 		} | ||||
| 		if (popup->GetStore()->GetChildCount(root_def) == 0) | ||||
| 			popup->DeleteItem(root_def); | ||||
| 	} | ||||
| 	ui->Thaw(); | ||||
| } | ||||
| 
 | ||||
| void Tab::fill_icon_descriptions() | ||||
| { | ||||
| 	m_icon_descriptions.push_back(t_icon_description(&m_bmp_value_lock, L("LOCKED LOCK;" | ||||
|  |  | |||
|  | @ -23,9 +23,6 @@ | |||
| #include <wx/bmpbuttn.h> | ||||
| #include <wx/treectrl.h> | ||||
| #include <wx/imaglist.h> | ||||
| #include <wx/statbox.h> | ||||
| #include <wx/dataview.h> | ||||
| #include <wx/event.h> | ||||
| 
 | ||||
| #include <map> | ||||
| #include <vector> | ||||
|  | @ -126,8 +123,6 @@ protected: | |||
| 	wxButton*			m_undo_btn; | ||||
| 	wxButton*			m_undo_to_sys_btn; | ||||
| 	wxButton*			m_question_btn; | ||||
| 	wxComboCtrl*		m_cc_presets_choice; | ||||
| 	wxDataViewTreeCtrl*	m_presetctrl; | ||||
| 	wxImageList*		m_preset_icons; | ||||
| 
 | ||||
| 	// Cached bitmaps.
 | ||||
|  | @ -218,7 +213,6 @@ public: | |||
| 	bool		may_discard_current_dirty_preset(PresetCollection* presets = nullptr, const std::string& new_printer_name = ""); | ||||
| 	wxSizer*	compatible_printers_widget(wxWindow* parent, wxCheckBox** checkbox, wxButton** btn); | ||||
| 
 | ||||
| 	void		update_presetsctrl(wxDataViewTreeCtrl* ui, bool show_incompatible); | ||||
| 	void		load_key_value(const std::string& opt_key, const boost::any& value, bool saved_value = false); | ||||
| 	void		reload_compatible_printers_widget(); | ||||
| 
 | ||||
|  | @ -267,7 +261,6 @@ protected: | |||
| 	void			on_presets_changed(); | ||||
| 	void			update_preset_description_line(); | ||||
| 	void			update_frequently_changed_parameters(); | ||||
| 	void			update_tab_presets(wxComboCtrl* ui, bool show_incompatible); | ||||
| 	void			fill_icon_descriptions(); | ||||
| 	void			set_tooltips_text(); | ||||
| }; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Enrico Turri
						Enrico Turri