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(); } } }