4#ifndef QGRAPHICSANCHORLAYOUT_P_H
5#define QGRAPHICSANCHORLAYOUT_P_H
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include <QGraphicsWidget>
20#include <private/qobject_p.h>
27#include <QtGui/private/qgridlayoutengine_p.h>
105 void dump(
int indent = 2);
149inline QString AnchorData::toString()
const
235inline QString AnchorVertex::toString()
const
248 edge =
"HorizontalCenter"_L1;
257 edge =
"VerticalCenter"_L1;
268 itemName =
"layout"_L1;
275 return edge.
arg(itemName);
326 {
return q->d_func(); }
357 MinimumToMinPreferred = 0,
360 MaxPreferredToMaximum
371 return q ?
q->d_func() :
nullptr;
390 void createLayoutEdges();
391 void deleteLayoutEdges();
400 if (!
data->graphicsAnchor) {
402 data->graphicsAnchor->d_func()->data =
data;
404 return data->graphicsAnchor;
441 void calculateGraphs();
447 bool simplifyGraphIteration(
Qt::Orientation orientation,
bool *feasible);
454 void restoreSimplifiedAnchor(
AnchorData *edge);
459 const QList<QSimplexConstraint *> &constraints,
460 const QList<AnchorData *> &variables);
461 bool calculateNonTrunk(
const QList<QSimplexConstraint *> &constraints,
462 const QList<AnchorData *> &variables);
469 QList<QSimplexConstraint *> constraintsFromSizeHints(
const QList<AnchorData *> &
anchors);
475 void identifyFloatItems(
const QSet<AnchorData *> &visited,
Qt::Orientation orientation);
476 void identifyNonFloatItems_helper(
const AnchorData *ad, QSet<QGraphicsLayoutItem *> *nonFloatingItemsIdentifiedSoFar);
480 return m_vertexList.value(itemEdge).first;
490 if (layoutFirstVertex[orientation] == oldV)
491 layoutFirstVertex[orientation] = newV;
492 else if (layoutCentralVertex[orientation] == oldV)
493 layoutCentralVertex[orientation] = newV;
494 else if (layoutLastVertex[orientation] == oldV)
495 layoutLastVertex[orientation] = newV;
503 void setItemsGeometries(
const QRectF &geom);
510 bool solveMinMax(
const QList<QSimplexConstraint *> &constraints,
512 bool solvePreferred(
const QList<QSimplexConstraint *> &constraints,
513 const QList<AnchorData *> &variables);
514 bool hasConflicts()
const;
521 QHVContainer<qreal> spacings = {-1, -1};
523 QHVContainer<std::array<qreal, 3>> sizeHints = {{-1, -1, -1}, {-1, -1, -1}};
531 QHash<QPair<QGraphicsLayoutItem*, Qt::AnchorPoint>, QPair<AnchorVertex *, int> >
m_vertexList;
534 QHVContainer<Graph<AnchorVertex, AnchorData>>
graph;
536 QHVContainer<AnchorVertex *> layoutFirstVertex = {};
537 QHVContainer<AnchorVertex *> layoutCentralVertex = {};
538 QHVContainer<AnchorVertex *> layoutLastVertex = {};
545 QHVContainer<QMultiHash<AnchorVertex *, GraphPath>>
graphPaths;
552 QHVContainer<qreal> interpolationProgress = {-1, -1};
554 QHVContainer<bool> graphHasConflicts = {};
557#if defined(QT_DEBUG) || defined(QT_BUILD_INTERNAL)
558 QHVContainer<bool> lastCalculationUsedSimplex;
uint calculateGraphCacheDirty
QHVContainer< Interval > interpolationInterval
QHVContainer< Graph< AnchorVertex, AnchorData > > graph
QHVContainer< QList< QSimplexConstraint * > > constraints
QHash< QPair< QGraphicsLayoutItem *, Qt::AnchorPoint >, QPair< AnchorVertex *, int > > m_vertexList
QHVContainer< QList< AnchorData * > > anchorsFromSimplifiedVertices
QHVContainer< QList< AnchorVertexPair * > > simplifiedVertices
static Qt::AnchorPoint pickEdge(Qt::AnchorPoint edge, Qt::Orientation orientation)
QHVContainer< QMultiHash< AnchorVertex *, GraphPath > > graphPaths
static QGraphicsAnchorLayoutPrivate * get(QGraphicsAnchorLayout *q)
QGraphicsAnchor * acquireGraphicsAnchor(AnchorData *data)
void changeLayoutVertex(Qt::Orientation orientation, AnchorVertex *oldV, AnchorVertex *newV)
QLayoutStyleInfo cachedStyleInfo
QHVContainer< QList< QSimplexConstraint * > > itemCenterConstraints
@ PreferredToMaxPreferred
@ MinPreferredToPreferred
QHVContainer< QSet< QGraphicsLayoutItem * > > m_floatItems
QList< QGraphicsLayoutItem * > items
AnchorVertex * internalVertex(const QGraphicsLayoutItem *item, Qt::AnchorPoint edge) const
AnchorVertex * internalVertex(const QPair< QGraphicsLayoutItem *, Qt::AnchorPoint > &itemEdge) const
The QGraphicsAnchorLayout class provides a layout where one can anchor widgets together in Graphics V...
void setSizePolicy(QSizePolicy::Policy policy)
~QGraphicsAnchorPrivate()
QSizePolicy::Policy sizePolicy
QGraphicsAnchorPrivate(int version=QObjectPrivateVersion)
static QGraphicsAnchorPrivate * get(QGraphicsAnchor *q)
QGraphicsAnchorLayoutPrivate * layoutPrivate
void setSpacing(qreal value)
The QGraphicsAnchor class represents an anchor between two items in a QGraphicsAnchorLayout.
The QGraphicsItem class is the base class for all graphical items in a QGraphicsScene.
QVariant data(int key) const
Returns this item's custom data for the key key as a QVariant.
The QGraphicsLayoutItem class can be inherited to allow your custom items to be managed by layouts.
QGraphicsItem * graphicsItem() const
Returns the QGraphicsItem that this layout item represents.
bool isLayout() const
Returns true if this QGraphicsLayoutItem is a layout (e.g., is inherited by an object that arranges o...
\inmodule QtCore\reentrant
Policy
This enum describes the various per-dimension sizing types used when constructing a QSizePolicy.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
QString & insert(qsizetype i, QChar c)
QString toString() const
Returns the variant as a QString if the variant has a userType() including, but not limited to:
QSet< AnchorData * > negatives
QSet< AnchorData * > positives
QSimplexConstraint * constraint(const GraphPath &path) const
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLint GLfloat GLfloat GLfloat v2
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLchar *const * path
QT_BEGIN_NAMESPACE constexpr decltype(auto) qMakePair(T1 &&value1, T2 &&value2) noexcept(noexcept(std::make_pair(std::forward< T1 >(value1), std::forward< T2 >(value2))))
QQuickAnchors * anchors(QQuickItem *item)
static QString dump(const QByteArray &)
#define Q_AUTOTEST_EXPORT
#define QT_REQUIRE_CONFIG(feature)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
char * toString(const MyType &t)
[31]
QList< QSimplexConstraint * > nonTrunkConstraints
QList< QSimplexConstraint * > trunkConstraints
virtual void updateChildrenSizes()
void refreshSizeHints(const QLayoutStyleInfo *styleInfo=nullptr)
QGraphicsLayoutItem * item
QGraphicsAnchor * graphicsAnchor
AnchorVertexPair(AnchorVertex *v1, AnchorVertex *v2, AnchorData *data)
AnchorData * m_removedAnchor
QList< AnchorData * > m_secondAnchors
QList< AnchorData * > m_firstAnchors
AnchorVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge)
virtual ~AnchorVertex()=default
QGraphicsLayoutItem * m_item
virtual void updateChildrenSizes() override
ParallelAnchorData(AnchorData *first, AnchorData *second)
QList< QSimplexConstraint * > m_secondConstraints
bool calculateSizeHints()
QList< QSimplexConstraint * > m_firstConstraints
bool secondForward() const
virtual void updateChildrenSizes() override
const QList< AnchorData * > m_edges
SequentialAnchorData(const QList< AnchorVertex * > &vertices, const QList< AnchorData * > &edges)
void calculateSizeHints()