Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-15 08:30:06

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QLAYOUTITEM_H
0006 #define QLAYOUTITEM_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qsizepolicy.h>
0010 #include <QtCore/qrect.h>
0011 
0012 #include <limits.h>
0013 
0014 QT_BEGIN_NAMESPACE
0015 
0016 
0017 inline constexpr int QLAYOUTSIZE_MAX = INT_MAX/256/16;
0018 
0019 class QLayout;
0020 class QLayoutItem;
0021 class QSpacerItem;
0022 class QWidget;
0023 class QSize;
0024 
0025 class Q_WIDGETS_EXPORT QLayoutItem
0026 {
0027 public:
0028     inline explicit QLayoutItem(Qt::Alignment alignment = Qt::Alignment());
0029     virtual ~QLayoutItem();
0030     virtual QSize sizeHint() const = 0;
0031     virtual QSize minimumSize() const = 0;
0032     virtual QSize maximumSize() const = 0;
0033     virtual Qt::Orientations expandingDirections() const = 0;
0034     virtual void setGeometry(const QRect&) = 0;
0035     virtual QRect geometry() const = 0;
0036     virtual bool isEmpty() const = 0;
0037     virtual bool hasHeightForWidth() const;
0038     virtual int heightForWidth(int) const;
0039     virtual int minimumHeightForWidth(int) const;
0040     virtual void invalidate();
0041 
0042     virtual QWidget *widget() const;
0043     virtual QLayout *layout();
0044     virtual QSpacerItem *spacerItem();
0045 
0046     Qt::Alignment alignment() const { return align; }
0047     void setAlignment(Qt::Alignment a);
0048     virtual QSizePolicy::ControlTypes controlTypes() const;
0049 
0050 protected:
0051     Qt::Alignment align;
0052 };
0053 
0054 inline QLayoutItem::QLayoutItem(Qt::Alignment aalignment)
0055     : align(aalignment) { }
0056 
0057 class Q_WIDGETS_EXPORT QSpacerItem : public QLayoutItem
0058 {
0059 public:
0060     QSpacerItem(int w, int h,
0061                  QSizePolicy::Policy hData = QSizePolicy::Minimum,
0062                  QSizePolicy::Policy vData = QSizePolicy::Minimum)
0063         : width(w), height(h), sizeP(hData, vData) { }
0064     ~QSpacerItem();
0065 
0066     void changeSize(int w, int h,
0067                      QSizePolicy::Policy hData = QSizePolicy::Minimum,
0068                      QSizePolicy::Policy vData = QSizePolicy::Minimum);
0069     QSize sizeHint() const override;
0070     QSize minimumSize() const override;
0071     QSize maximumSize() const override;
0072     Qt::Orientations expandingDirections() const override;
0073     bool isEmpty() const override;
0074     void setGeometry(const QRect&) override;
0075     QRect geometry() const override;
0076     QSpacerItem *spacerItem() override;
0077     QSizePolicy sizePolicy() const { return sizeP; }
0078 
0079 private:
0080     int width;
0081     int height;
0082     QSizePolicy sizeP;
0083     QRect rect;
0084 };
0085 
0086 class Q_WIDGETS_EXPORT QWidgetItem : public QLayoutItem
0087 {
0088     Q_DISABLE_COPY(QWidgetItem)
0089 
0090 public:
0091     explicit QWidgetItem(QWidget *w) : wid(w) { }
0092     ~QWidgetItem();
0093 
0094     QSize sizeHint() const override;
0095     QSize minimumSize() const override;
0096     QSize maximumSize() const override;
0097     Qt::Orientations expandingDirections() const override;
0098     bool isEmpty() const override;
0099     void setGeometry(const QRect&) override;
0100     QRect geometry() const override;
0101     QWidget *widget() const override;
0102 
0103     bool hasHeightForWidth() const override;
0104     int heightForWidth(int) const override;
0105     int minimumHeightForWidth(int) const override;
0106     QSizePolicy::ControlTypes controlTypes() const override;
0107 protected:
0108     QWidget *wid;
0109 };
0110 
0111 class Q_WIDGETS_EXPORT QWidgetItemV2 : public QWidgetItem
0112 {
0113 public:
0114     explicit QWidgetItemV2(QWidget *widget);
0115     ~QWidgetItemV2();
0116 
0117     QSize sizeHint() const override;
0118     QSize minimumSize() const override;
0119     QSize maximumSize() const override;
0120     int heightForWidth(int width) const override;
0121 
0122 private:
0123     enum { Dirty = -123, HfwCacheMaxSize = 3 };
0124 
0125     inline bool useSizeCache() const;
0126     void updateCacheIfNecessary() const;
0127     inline void invalidateSizeCache() {
0128         q_cachedMinimumSize.setWidth(Dirty);
0129         q_hfwCacheSize = 0;
0130     }
0131 
0132     mutable QSize q_cachedMinimumSize;
0133     mutable QSize q_cachedSizeHint;
0134     mutable QSize q_cachedMaximumSize;
0135     mutable QSize q_cachedHfws[HfwCacheMaxSize];
0136     mutable short q_firstCachedHfw;
0137     mutable short q_hfwCacheSize;
0138     void *d;
0139 
0140     friend class QWidgetPrivate;
0141 
0142     Q_DISABLE_COPY(QWidgetItemV2)
0143 };
0144 
0145 QT_END_NAMESPACE
0146 
0147 #endif // QLAYOUTITEM_H