diff options
author | YuSanka <yusanka@gmail.com> | 2020-02-20 16:19:00 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2020-02-20 16:19:00 +0300 |
commit | 5e4a0b96b791f4ed72ae84b5f672a11ac174b12e (patch) | |
tree | 9f96a0a8e6c8b1ee99975bb4ada5556abfe489fc /src/slic3r/GUI/ObjectDataViewModel.cpp | |
parent | 74d3ca23508ba53638ad0fd4365b4a6f30fccf1f (diff) |
Linux issue: fixed Object's DnD with sub items
Diffstat (limited to 'src/slic3r/GUI/ObjectDataViewModel.cpp')
-rw-r--r-- | src/slic3r/GUI/ObjectDataViewModel.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index b49b27e33..649b3c32e 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1185,6 +1185,26 @@ void ObjectDataViewModel::SetExtruder(const wxString& extruder, wxDataViewItem i SetValue(value, item, colExtruder); } +void ObjectDataViewModel::AddAllChildren(const wxDataViewItem& parent) +{ + ObjectDataViewModelNode* node = (ObjectDataViewModelNode*)parent.GetID(); + if (!node || node->GetChildCount() == 0) + return; + + wxDataViewItemArray array; + const size_t count = node->GetChildCount(); + for (size_t pos = 0; pos < count; pos++) { + ObjectDataViewModelNode* child = node->GetChildren().Item(pos); + array.Add(wxDataViewItem((void*)child)); + ItemAdded(parent, wxDataViewItem((void*)child)); + } + + for (const auto item : array) + AddAllChildren(item); + + m_ctrl->Expand(parent); +}; + wxDataViewItem ObjectDataViewModel::ReorganizeChildren( const int current_volume_id, const int new_volume_id, const wxDataViewItem &parent) @@ -1205,6 +1225,10 @@ wxDataViewItem ObjectDataViewModel::ReorganizeChildren( const int current_volume node_parent->Insert(deleted_node, new_volume_id+shift); ItemAdded(parent, wxDataViewItem(deleted_node)); + // If some item has a children, just to add a deleted item is not enough on Linux + // We should to add all its children separately + AddAllChildren(wxDataViewItem(deleted_node)); + //update volume_id value for child-nodes auto children = node_parent->GetChildren(); int id_frst = current_volume_id < new_volume_id ? current_volume_id : new_volume_id; @@ -1227,6 +1251,10 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects( const int current_id, co m_objects.emplace(m_objects.begin() + new_id, deleted_node); ItemAdded(wxDataViewItem(nullptr), wxDataViewItem(deleted_node)); + // If some item has a children, just to add a deleted item is not enough on Linux + // We should to add all its children separately + AddAllChildren(wxDataViewItem(deleted_node)); + return wxDataViewItem(deleted_node); } |