From 7a3c78595078c8933fee0ff9f5fe31c4d8cc76cd Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Wed, 8 Aug 2018 20:14:40 +0200 Subject: [PATCH] ModelEditor: Fix scene boundary on export Change-Id: I93d783b2db7e65f5d7cbab2c7b2367587be320d5 Reviewed-by: Christian Stenger --- .../qmt/diagram_scene/diagramscenemodel.cpp | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp b/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp index 576fd718581..53007c7f2f6 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp @@ -36,6 +36,7 @@ #include "qmt/diagram/dobject.h" #include "qmt/diagram/drelation.h" +#include "qmt/diagram/dswimlane.h" #include "qmt/diagram_controller/diagramcontroller.h" #include "qmt/diagram_controller/dselection.h" #include "qmt/diagram_scene/items/objectitem.h" @@ -956,14 +957,26 @@ void DiagramSceneModel::saveSelectionStatusBeforeExport(bool exportSelectedEleme m_graphicsScene->clearSelection(); removeExtraSceneItems(); - if (!exportSelectedElements) { - status->m_sceneBoundingRect = m_graphicsScene->itemsBoundingRect(); - } else { - foreach (QGraphicsItem *item, m_graphicsItems) { - if (status->m_selectedItems.contains(item) || status->m_secondarySelectedItems.contains(item)) + foreach (QGraphicsItem *item, m_graphicsItems) { + if (!exportSelectedElements + || status->m_selectedItems.contains(item) + || status->m_secondarySelectedItems.contains(item)) { + // TODO introduce interface for calculating export boundary + if (SwimlaneItem *swimlane = dynamic_cast(item)) { + QRectF boundary = item->mapRectToScene(swimlane->boundingRect()); + if (swimlane->swimlane()->isHorizontal()) { + boundary.setLeft(status->m_sceneBoundingRect.left()); + boundary.setRight(status->m_sceneBoundingRect.right()); + } else { + boundary.setTop(status->m_sceneBoundingRect.top()); + boundary.setBottom(status->m_sceneBoundingRect.bottom()); + } + status->m_sceneBoundingRect |= boundary; + } else { status->m_sceneBoundingRect |= item->mapRectToScene(item->boundingRect()); - else - item->hide(); + } + } else { + item->hide(); } } }