diff options
author | Jochen Becher <[email protected]> | 2018-08-08 20:14:40 +0200 |
---|---|---|
committer | Jochen Becher <[email protected]> | 2018-08-26 15:54:49 +0000 |
commit | 7a3c78595078c8933fee0ff9f5fe31c4d8cc76cd (patch) | |
tree | 43c7f48a50f6f77c9ac2982689138d7b52e559fe /src/libs/modelinglib | |
parent | 3b5d74c6c4a4582dbb61fb9699c7d039bc794ce7 (diff) |
ModelEditor: Fix scene boundary on export
Change-Id: I93d783b2db7e65f5d7cbab2c7b2367587be320d5
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/libs/modelinglib')
-rw-r--r-- | src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp | 27 |
1 files 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<SwimlaneItem *>(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(); } } } |