1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtWidgets module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #include "qgraphicsgridlayoutengine_p.h"
41 
42 #include "qgraphicslayoutitem_p.h"
43 #include "qgraphicslayout_p.h"
44 #include "qgraphicswidget.h"
45 #include <private/qgraphicswidget_p.h>
46 
47 QT_BEGIN_NAMESPACE
48 
isHidden() const49 bool QGraphicsGridLayoutEngineItem::isHidden() const
50 {
51     if (QGraphicsItem *item = q_layoutItem->graphicsItem())
52         return QGraphicsItemPrivate::get(item)->explicitlyHidden;
53     return false;
54 }
55 
56 /*!
57   \internal
58 
59   If this returns true, the layout will arrange just as if the item was never added to the layout.
60   (Note that this shouldn't lead to a "double spacing" where the item was hidden)
61   ### Qt6: Move to QGraphicsLayoutItem and make virtual
62 */
isIgnored() const63 bool QGraphicsGridLayoutEngineItem::isIgnored() const
64 {
65     return isHidden() && !q_layoutItem->sizePolicy().retainSizeWhenHidden();
66 }
67 
68 /*
69   returns \c true if the size policy returns \c true for either hasHeightForWidth()
70   or hasWidthForHeight()
71  */
hasDynamicConstraint() const72 bool QGraphicsGridLayoutEngineItem::hasDynamicConstraint() const
73 {
74     return QGraphicsLayoutItemPrivate::get(q_layoutItem)->hasHeightForWidth()
75         || QGraphicsLayoutItemPrivate::get(q_layoutItem)->hasWidthForHeight();
76 }
77 
dynamicConstraintOrientation() const78 Qt::Orientation QGraphicsGridLayoutEngineItem::dynamicConstraintOrientation() const
79 {
80     if (QGraphicsLayoutItemPrivate::get(q_layoutItem)->hasHeightForWidth())
81         return Qt::Vertical;
82     else //if (QGraphicsLayoutItemPrivate::get(q_layoutItem)->hasWidthForHeight())
83         return Qt::Horizontal;
84 }
85 
86 
setAlignment(QGraphicsLayoutItem * graphicsLayoutItem,Qt::Alignment alignment)87 void QGraphicsGridLayoutEngine::setAlignment(QGraphicsLayoutItem *graphicsLayoutItem, Qt::Alignment alignment)
88 {
89     if (QGraphicsGridLayoutEngineItem *gridEngineItem = findLayoutItem(graphicsLayoutItem)) {
90         gridEngineItem->setAlignment(alignment);
91         invalidate();
92     }
93 }
94 
alignment(QGraphicsLayoutItem * graphicsLayoutItem) const95 Qt::Alignment QGraphicsGridLayoutEngine::alignment(QGraphicsLayoutItem *graphicsLayoutItem) const
96 {
97     if (QGraphicsGridLayoutEngineItem *gridEngineItem = findLayoutItem(graphicsLayoutItem))
98         return gridEngineItem->alignment();
99     return { };
100 }
101 
102 
setStretchFactor(QGraphicsLayoutItem * layoutItem,int stretch,Qt::Orientation orientation)103 void QGraphicsGridLayoutEngine::setStretchFactor(QGraphicsLayoutItem *layoutItem, int stretch,
104                                          Qt::Orientation orientation)
105 {
106     Q_ASSERT(stretch >= 0);
107 
108     if (QGraphicsGridLayoutEngineItem *item = findLayoutItem(layoutItem))
109         item->setStretchFactor(stretch, orientation);
110 }
111 
stretchFactor(QGraphicsLayoutItem * layoutItem,Qt::Orientation orientation) const112 int QGraphicsGridLayoutEngine::stretchFactor(QGraphicsLayoutItem *layoutItem, Qt::Orientation orientation) const
113 {
114     if (QGraphicsGridLayoutEngineItem *item = findLayoutItem(layoutItem))
115         return item->stretchFactor(orientation);
116     return 0;
117 }
118 
119 QT_END_NAMESPACE
120