Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2020-02-20 16:19:00 +0300
committerYuSanka <yusanka@gmail.com>2020-02-20 16:19:00 +0300
commit5e4a0b96b791f4ed72ae84b5f672a11ac174b12e (patch)
tree9f96a0a8e6c8b1ee99975bb4ada5556abfe489fc /src/slic3r/GUI/ObjectDataViewModel.cpp
parent74d3ca23508ba53638ad0fd4365b4a6f30fccf1f (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.cpp28
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);
}