diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-06-08 15:16:57 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-06-08 12:47:54 +0000 |
commit | d2c299786b7367ddd88a1e3bab7900a366c728a0 (patch) | |
tree | 17b01ffa8ded9a530a09b15e06b77abc02084af3 /editorlib/src/editorscene.cpp | |
parent | e6868e1a207c4887de68048b2b6c4e59fef29ccf (diff) |
Group box changed to encompass all grouped entities
Related changes also included:
- When grouping items, the new group will be centered to items
- Fixes to missing drag handles on group box and extra selection boxes
after multiselection.
Change-Id: I323324d674021a5487fed0953bea67012cb73abf
Reviewed-by: Titta Heikkala <titta.heikkala@qt.io>
Diffstat (limited to 'editorlib/src/editorscene.cpp')
-rw-r--r-- | editorlib/src/editorscene.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/editorlib/src/editorscene.cpp b/editorlib/src/editorscene.cpp index 19f51ff..ce870ee 100644 --- a/editorlib/src/editorscene.cpp +++ b/editorlib/src/editorscene.cpp @@ -201,6 +201,7 @@ void EditorScene::addEntity(Qt3DCore::QEntity *entity, int index, Qt3DCore::QEnt if (!m_selectedEntityNameList.isEmpty()) { // Clear multiselection list, otherwise treeview gets messed up m_selectedEntityNameList.clear(); + m_multiSelect = false; emit multiSelectionChanged(m_selectedEntityNameList); } } @@ -1724,6 +1725,8 @@ void EditorScene::setSelection(Qt3DCore::QEntity *entity) // Emit signal to highlight the entity from the list emit selectionChanged(m_selectedEntity); + } else if (!m_multiSelect) { + clearSelectionBoxes(m_selectedEntity); } m_dragHandlesTransform->setEnabled(item->isSelectionBoxShowing() && !m_multiSelect); @@ -1820,6 +1823,19 @@ void EditorScene::addToMultiSelection(const QString &name) } } +QVector3D EditorScene::getMultiSelectionCenter() +{ + QVector3D pos; + for (int i = 0; i < m_selectedEntityNameList.size(); i++) { + EditorSceneItem *item = m_sceneModel->getItemByName(m_selectedEntityNameList.at(i)); + if (item) { + item->doUpdateSelectionBoxTransform(); + pos += item->selectionBoxCenter(); + } + } + return m_selectedEntityNameList.size() ? (pos / m_selectedEntityNameList.size()) : QVector3D(); +} + void EditorScene::setClipboardOperation(ClipboardOperation operation) { if (operation != m_clipboardOperation) { @@ -1915,10 +1931,12 @@ void EditorScene::setViewport(EditorViewportItem *viewport) } } -void EditorScene::clearSelectionBoxes() +void EditorScene::clearSelectionBoxes(Qt3DCore::QEntity *skipEntity) { - Q_FOREACH (EditorSceneItem *item, m_sceneItems.values()) - item->setShowSelectionBox(false); + Q_FOREACH (EditorSceneItem *item, m_sceneItems.values()) { + if (item->entity() != skipEntity) + item->setShowSelectionBox(false); + } } void EditorScene::endSelectionHandling() @@ -1940,6 +1958,7 @@ void EditorScene::endSelectionHandling() Qt3DRender::QCamera *cameraEntity = qobject_cast<Qt3DRender::QCamera *>(m_pickedEntity); bool viewCenterDrag = cameraEntity && m_cameraViewCenterSelected && !m_viewCenterLocked; bool entityDrag = m_dragHandleTranslateTransform->isEnabled() + && m_dragHandlesTransform->isEnabled() && (!cameraEntity || !m_cameraViewCenterSelected); if (viewCenterDrag || entityDrag) { m_dragMode = DragTranslate; |