CGAL::Three::Scene_item* Scene::replaceItem(Scene::Item_id index, CGAL::Three::Scene_item* item, bool emit_item_about_to_be_destroyed) { if(index < 0 || index >= m_entries.size()) return 0; if(emit_item_about_to_be_destroyed) { Q_EMIT itemAboutToBeDestroyed(m_entries[index]); } connect(item, SIGNAL(itemChanged()), this, SLOT(itemChanged())); std::swap(m_entries[index], item); if ( item->isFinite() && !item->isEmpty() && m_entries[index]->isFinite() && !m_entries[index]->isEmpty() && item->bbox()!=m_entries[index]->bbox() ) { Q_EMIT updated_bbox(); } Q_EMIT updated(); itemChanged(index); Q_EMIT restoreCollapsedState(); group_added(); return item; }
int Scene::erase(int index) { clear(); index_map.clear(); if(index < 0 || index >= m_entries.size()) return -1; CGAL::Three::Scene_item* item = m_entries[index]; CGAL::Three::Scene_group_item* group = qobject_cast<CGAL::Three::Scene_group_item*>(item); if(group) { m_group_entries.removeAll(group); } Q_FOREACH(CGAL::Three::Scene_group_item* group, m_group_entries) { if(group->getChildren().contains(item)) group->removeChild(item); } Q_EMIT itemAboutToBeDestroyed(item); delete item; m_entries.removeAll(item); selected_item = -1; Q_FOREACH(Scene_item* item, m_entries) { organize_items(item, invisibleRootItem(), 0); }
Scene_item* Scene::replaceItem(Scene::Item_id index, Scene_item* item, bool emit_item_about_to_be_destroyed) { item->changed(); if(index < 0 || index >= m_entries.size()) return 0; if(emit_item_about_to_be_destroyed) { Q_EMIT itemAboutToBeDestroyed(m_entries[index]); } connect(item, SIGNAL(itemChanged()), this, SLOT(itemChanged())); std::swap(m_entries[index], item); if ( item->isFinite() && !item->isEmpty() && m_entries[index]->isFinite() && !m_entries[index]->isEmpty() && item->bbox()!=m_entries[index]->bbox() ) { Q_EMIT updated_bbox(); } Q_EMIT updated(); itemChanged(index); // QAbstractListModel::reset(); return item; }
Scene::Item_id Scene::erase(Scene::Item_id index) { CGAL::Three::Scene_item* item = m_entries[index]; if(item->parentGroup() && item->parentGroup()->isChildLocked(item)) return -1; //clears the Scene_view clear(); index_map.clear(); if(index < 0 || index >= m_entries.size()) return -1; if(item->parentGroup()) item->parentGroup()->removeChild(item); //removes the item from all groups that contain it Q_EMIT itemAboutToBeDestroyed(item); item->deleteLater(); m_entries.removeAll(item); selected_item = -1; //re-creates the Scene_view Q_FOREACH(Scene_item* item, m_entries) { organize_items(item, invisibleRootItem(), 0); }
int Scene::erase(QList<int> indices) { QList<Scene_item*> to_be_removed; int max_index = -1; Q_FOREACH(int index, indices) { if(index < 0 || index >= m_entries.size()) continue; max_index = (std::max)(max_index, index); Scene_item* item = m_entries[index]; to_be_removed.push_back(item); } Q_FOREACH(Scene_item* item, to_be_removed) { Q_EMIT itemAboutToBeDestroyed(item); delete item; m_entries.removeAll(item); }
int Scene::erase(int index) { if(index < 0 || index >= entries.size()) return -1; Scene_item* item = entries[index]; emit itemAboutToBeDestroyed(item); delete item; entries.removeAt(index); selected_item = -1; emit updated(); QAbstractListModel::reset(); if(--index >= 0) return index; if(!entries.isEmpty()) return 0; return -1; }
int Scene::erase(int index) { if(index < 0 || index >= m_entries.size()) return -1; Scene_item* item = m_entries[index]; Q_EMIT itemAboutToBeDestroyed(item); delete item; m_entries.removeAt(index); selected_item = -1; QAbstractListModel::beginResetModel(); Q_EMIT updated(); QAbstractListModel::endResetModel(); if(--index >= 0) return index; if(!m_entries.isEmpty()) return 0; return -1; }