diff options
Diffstat (limited to 'src/gui/graphicsview')
-rw-r--r-- | src/gui/graphicsview/qgraphicsanchorlayout.cpp | 39 | ||||
-rw-r--r-- | src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 2 | ||||
-rw-r--r-- | src/gui/graphicsview/qgraphicslayout.cpp | 4 | ||||
-rw-r--r-- | src/gui/graphicsview/qgraphicslinearlayout.cpp | 3 | ||||
-rw-r--r-- | src/gui/graphicsview/qgridlayoutengine.cpp | 22 | ||||
-rw-r--r-- | src/gui/graphicsview/qgridlayoutengine_p.h | 4 |
6 files changed, 57 insertions, 17 deletions
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout.cpp b/src/gui/graphicsview/qgraphicsanchorlayout.cpp index b088f12..95561b7 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout.cpp +++ b/src/gui/graphicsview/qgraphicsanchorlayout.cpp @@ -84,6 +84,10 @@ QT_BEGIN_NAMESPACE +/*! + Constructs a QGraphicsAnchorLayout instance. \a parent is passed to + QGraphicsLayout's constructor. + */ QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent) : QGraphicsLayout(*new QGraphicsAnchorLayoutPrivate(), parent) { @@ -91,6 +95,9 @@ QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent) d->createLayoutEdges(); } +/*! + Destroys the QGraphicsAnchorLayout object. +*/ QGraphicsAnchorLayout::~QGraphicsAnchorLayout() { Q_D(QGraphicsAnchorLayout); @@ -188,32 +195,41 @@ void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, } /*! - \fn QGraphicsAnchorLayout::addLeftAndRightAnchors(QGraphicsLayoutItem *firstEdge, QGraphicsLayoutItem *secondEdge) + \fn QGraphicsAnchorLayout::addLeftAndRightAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem) + + Anchors the left and right edges of \a firstItem to the same edges of + \a secondItem. This convenience function is equivalent to calling \code - l->addAnchor(firstEdge, Qt::AnchorLeft, secondEdge, Qt::AnchorLeft); - l->addAnchor(firstEdge, Qt::AnchorRight, secondEdge, Qt::AnchorRight); + l->addAnchor(firstItem, Qt::AnchorLeft, secondItem, Qt::AnchorLeft); + l->addAnchor(firstItem, Qt::AnchorRight, secondItem, Qt::AnchorRight); \endcode */ /*! - \fn QGraphicsAnchorLayout::addTopAndBottomAnchors(QGraphicsLayoutItem *firstEdge, QGraphicsLayoutItem *secondEdge) + \fn QGraphicsAnchorLayout::addTopAndBottomAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem) + + Anchors the top and bottom edges of \a firstItem to the same edges of + \a secondItem. This convenience function is equivalent to calling \code - l->addAnchor(firstEdge, Qt::AnchorTop, secondEdge, Qt::AnchorTop); - l->addAnchor(firstEdge, Qt::AnchorBottom, secondEdge, Qt::AnchorBottom); + l->addAnchor(firstItem, Qt::AnchorTop, secondItem, Qt::AnchorTop); + l->addAnchor(firstItem, Qt::AnchorBottom, secondItem, Qt::AnchorBottom); \endcode */ /*! - \fn QGraphicsAnchorLayout::addAllAnchors(QGraphicsLayoutItem *firstEdge, QGraphicsLayoutItem *secondEdge) + \fn QGraphicsAnchorLayout::addAllAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem) + + Anchors all edges (left, right, top and bottom) of \a firstItem to the same edges of + \a secondItem. This convenience function is equivalent to calling \code - l->addLeftAndRightAnchors(firstEdge, secondEdge); - l->addTopAndBottomAnchors(firstEdge, secondEdge); + l->addLeftAndRightAnchors(firstItem, secondItem); + l->addTopAndBottomAnchors(firstItem, secondItem); \endcode */ @@ -371,7 +387,12 @@ void QGraphicsAnchorLayout::setGeometry(const QRectF &geom) } /*! + Removes the layout item at \a index without destroying it. Ownership of + the item is transferred to the caller. + Removing an item will also remove any of the anchors associated with it. + + \sa itemAt(), count() */ void QGraphicsAnchorLayout::removeAt(int index) { diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp index c965712..d4afa5b 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp @@ -554,7 +554,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP qDebug("candidate list for sequential simplification:\n[%s]", qPrintable(strPath)); #endif - bool forward; + bool forward = true; AnchorVertex *prev = beforeSequence; int intervalFrom = 0; diff --git a/src/gui/graphicsview/qgraphicslayout.cpp b/src/gui/graphicsview/qgraphicslayout.cpp index 58c174c..df6be90 100644 --- a/src/gui/graphicsview/qgraphicslayout.cpp +++ b/src/gui/graphicsview/qgraphicslayout.cpp @@ -390,8 +390,10 @@ void QGraphicsLayout::widgetEvent(QEvent *e) QGraphicsLayout to return a pointer to the item at index \a i. The reimplementation can assume that \a i is valid (i.e., it respects the value of count()). + Together with count(), it is provided as a means of iterating over all items in a layout. - The subclass is free to decide how to store the items. + The subclass is free to decide how to store the items, and the visual arrangement + does not have to be reflected through this function. \sa count(), removeAt() */ diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp index 185780a..1b271e5 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.cpp +++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp @@ -277,7 +277,7 @@ void QGraphicsLinearLayout::insertItem(int index, QGraphicsLayoutItem *item) Q_ASSERT(item); d->fixIndex(&index); d->engine.insertRow(index, d->orientation); - new QGridLayoutItem(&d->engine, item, d->gridRow(index), d->gridColumn(index)); + new QGridLayoutItem(&d->engine, item, d->gridRow(index), d->gridColumn(index), 1, 1, 0, index); invalidate(); } @@ -471,6 +471,7 @@ int QGraphicsLinearLayout::count() const /*! \reimp + When iterating from 0 and up, it will return the items in the visual arranged order. */ QGraphicsLayoutItem *QGraphicsLinearLayout::itemAt(int index) const { diff --git a/src/gui/graphicsview/qgridlayoutengine.cpp b/src/gui/graphicsview/qgridlayoutengine.cpp index 5ad6ac9..beb9cb0 100644 --- a/src/gui/graphicsview/qgridlayoutengine.cpp +++ b/src/gui/graphicsview/qgridlayoutengine.cpp @@ -461,7 +461,7 @@ void QGridLayoutRowData::dump(int indent) const QGridLayoutItem::QGridLayoutItem(QGridLayoutEngine *engine, QGraphicsLayoutItem *layoutItem, int row, int column, int rowSpan, int columnSpan, - Qt::Alignment alignment) + Qt::Alignment alignment, int itemAtIndex) : q_engine(engine), q_layoutItem(layoutItem), q_alignment(alignment) { q_firstRows[Hor] = column; @@ -471,7 +471,7 @@ QGridLayoutItem::QGridLayoutItem(QGridLayoutEngine *engine, QGraphicsLayoutItem q_stretches[Hor] = -1; q_stretches[Ver] = -1; - q_engine->addItem(this); + q_engine->insertItem(this, itemAtIndex); } int QGridLayoutItem::firstRow(Qt::Orientation orientation) const @@ -937,11 +937,20 @@ Qt::Alignment QGridLayoutEngine::effectiveAlignment(const QGridLayoutItem *layou return align; } -void QGridLayoutEngine::addItem(QGridLayoutItem *item) +/*! + \internal + The \a index is only used by QGraphicsLinearLayout to ensure that itemAt() reflects the order + of visual arrangement. Strictly speaking it does not have to, but most people expect it to. + (And if it didn't we would have to add itemArrangedAt(int index) or something..) + */ +void QGridLayoutEngine::insertItem(QGridLayoutItem *item, int index) { maybeExpandGrid(item->lastRow(), item->lastColumn()); - q_items.append(item); + if (index == -1) + q_items.append(item); + else + q_items.insert(index, item); for (int i = item->firstRow(); i <= item->lastRow(); ++i) { for (int j = item->firstColumn(); j <= item->lastColumn(); ++j) { @@ -952,6 +961,11 @@ void QGridLayoutEngine::addItem(QGridLayoutItem *item) } } +void QGridLayoutEngine::addItem(QGridLayoutItem *item) +{ + insertItem(item, -1); +} + void QGridLayoutEngine::removeItem(QGridLayoutItem *item) { Q_ASSERT(q_items.contains(item)); diff --git a/src/gui/graphicsview/qgridlayoutengine_p.h b/src/gui/graphicsview/qgridlayoutengine_p.h index 8f3eb13..aab695a 100644 --- a/src/gui/graphicsview/qgridlayoutengine_p.h +++ b/src/gui/graphicsview/qgridlayoutengine_p.h @@ -267,7 +267,8 @@ class QGridLayoutItem { public: QGridLayoutItem(QGridLayoutEngine *engine, QGraphicsLayoutItem *layoutItem, int row, int column, - int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = 0); + int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = 0, + int itemAtIndex = -1); inline int firstRow() const { return q_firstRows[Ver]; } inline int firstColumn() const { return q_firstRows[Hor]; } @@ -378,6 +379,7 @@ public: Qt::Alignment effectiveAlignment(const QGridLayoutItem *layoutItem) const; + void insertItem(QGridLayoutItem *item, int index); void addItem(QGridLayoutItem *item); void removeItem(QGridLayoutItem *item); QGridLayoutItem *findLayoutItem(QGraphicsLayoutItem *layoutItem) const; |