From 81e723711afd2cae54a818069cab24804d8f93fd Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 7 Dec 2022 21:55:04 +0800 Subject: [PATCH] FIX: fix the crash issue when dragging object in seq-print Change-Id: If2fd7e2d4d41e6cde6c8d4824cf489e10700c91e --- src/slic3r/GUI/ObjectDataViewModel.cpp | 9 ++++++++- src/slic3r/GUI/ObjectDataViewModel.hpp | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 748feeede..9df38a4b8 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1720,6 +1720,7 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects( const int current_id, co return wxDataViewItem(nullptr); ObjectDataViewModelNode* deleted_node = m_objects[current_id]; + ObjectDataViewModelNode* new_node = m_objects[new_id]; ObjectDataViewModelNode* plate_node = deleted_node->m_parent; m_objects.erase(m_objects.begin() + current_id); @@ -1727,7 +1728,13 @@ wxDataViewItem ObjectDataViewModel::ReorganizeObjects( const int current_id, co ItemDeleted(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node)); m_objects.emplace(m_objects.begin() + new_id, deleted_node); - plate_node->Insert(deleted_node, new_id); + int plate_child_index = plate_node->GetChildIndex(new_node); + if (current_id < new_id) + plate_node->Insert(deleted_node, plate_child_index+1); + else { + //should not happen + plate_node->Insert(deleted_node, plate_child_index); + } ItemAdded(wxDataViewItem(deleted_node->m_parent), wxDataViewItem(deleted_node)); //ItemChanged(wxDataViewItem(nullptr)); diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index 749edae4b..ec7eac522 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -173,6 +173,18 @@ public: { return m_children.Item(n); } + + int GetChildIndex(ObjectDataViewModelNode* child) const + { + size_t child_count = GetChildCount(); + for (int index = 0; index < child_count; index++) + { + if (m_children.Item(index) == child) + return index; + } + return -1; + } + void Insert(ObjectDataViewModelNode* child, unsigned int n) { if (!m_container)