ModelEditor: Fix scene boundary on export

Change-Id: I93d783b2db7e65f5d7cbab2c7b2367587be320d5
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Jochen Becher
2018-08-08 20:14:40 +02:00
parent 3b5d74c6c4
commit 7a3c785950

View File

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