qsizepolicy.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:8k
- /****************************************************************************
- **
- ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
- ** Contact: Qt Software Information (qt-info@nokia.com)
- **
- ** This file is part of the QtGui module of the Qt Toolkit.
- **
- ** Commercial Usage
- ** Licensees holding valid Qt Commercial licenses may use this file in
- ** accordance with the Qt Commercial License Agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and Nokia.
- **
- **
- ** GNU General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU
- ** General Public License versions 2.0 or 3.0 as published by the Free
- ** Software Foundation and appearing in the file LICENSE.GPL included in
- ** the packaging of this file. Please review the following information
- ** to ensure GNU General Public Licensing requirements will be met:
- ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
- ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
- ** exception, Nokia gives you certain additional rights. These rights
- ** are described in the Nokia Qt GPL Exception version 1.3, included in
- ** the file GPL_EXCEPTION.txt in this package.
- **
- ** Qt for Windows(R) Licensees
- ** As a special exception, Nokia, as the sole copyright holder for Qt
- ** Designer, grants users of the Qt/Eclipse Integration plug-in the
- ** right for the Qt/Eclipse Integration to link to functionality
- ** provided by Qt Designer and its related libraries.
- **
- ** If you are unsure which license is appropriate for your use, please
- ** contact the sales department at qt-sales@nokia.com.
- **
- ****************************************************************************/
- #ifndef QSIZEPOLICY_H
- #define QSIZEPOLICY_H
- #include <QtCore/qobject.h>
- QT_BEGIN_HEADER
- QT_BEGIN_NAMESPACE
- QT_MODULE(Gui)
- class QVariant;
- class Q_GUI_EXPORT QSizePolicy
- {
- Q_GADGET
- Q_ENUMS(Policy)
- private:
- enum SizePolicyMasks {
- HSize = 4,
- HMask = 0x0f,
- VMask = HMask << HSize,
- CTShift = 9,
- CTSize = 5,
- CTMask = ((0x1 << CTSize) - 1) << CTShift,
- UnusedShift = CTShift + CTSize,
- UnusedSize = 2
- };
- public:
- enum PolicyFlag {
- GrowFlag = 1,
- ExpandFlag = 2,
- ShrinkFlag = 4,
- IgnoreFlag = 8
- };
- enum Policy {
- Fixed = 0,
- Minimum = GrowFlag,
- Maximum = ShrinkFlag,
- Preferred = GrowFlag | ShrinkFlag,
- MinimumExpanding = GrowFlag | ExpandFlag,
- Expanding = GrowFlag | ShrinkFlag | ExpandFlag,
- Ignored = ShrinkFlag | GrowFlag | IgnoreFlag
- };
- enum ControlType {
- DefaultType = 0x00000001,
- ButtonBox = 0x00000002,
- CheckBox = 0x00000004,
- ComboBox = 0x00000008,
- Frame = 0x00000010,
- GroupBox = 0x00000020,
- Label = 0x00000040,
- Line = 0x00000080,
- LineEdit = 0x00000100,
- PushButton = 0x00000200,
- RadioButton = 0x00000400,
- Slider = 0x00000800,
- SpinBox = 0x00001000,
- TabWidget = 0x00002000,
- ToolButton = 0x00004000
- };
- Q_DECLARE_FLAGS(ControlTypes, ControlType)
- QSizePolicy() : data(0) { }
- // ### Qt 5: merge these two constructors (with type == DefaultType)
- QSizePolicy(Policy horizontal, Policy vertical)
- : data(horizontal | (vertical << HSize)) { }
- QSizePolicy(Policy horizontal, Policy vertical, ControlType type)
- : data(horizontal | (vertical << HSize)) { setControlType(type); }
- Policy horizontalPolicy() const { return static_cast<Policy>(data & HMask); }
- Policy verticalPolicy() const { return static_cast<Policy>((data & VMask) >> HSize); }
- ControlType controlType() const;
- void setHorizontalPolicy(Policy d) { data = (data & ~HMask) | d; }
- void setVerticalPolicy(Policy d) { data = (data & ~(HMask << HSize)) | (d << HSize); }
- void setControlType(ControlType type);
- Qt::Orientations expandingDirections() const {
- Qt::Orientations result;
- if (verticalPolicy() & ExpandFlag)
- result |= Qt::Vertical;
- if (horizontalPolicy() & ExpandFlag)
- result |= Qt::Horizontal;
- return result;
- }
- void setHeightForWidth(bool b) { data = b ? (data | (1 << 2*HSize)) : (data & ~(1 << 2*HSize)); }
- bool hasHeightForWidth() const { return data & (1 << 2*HSize); }
- bool operator==(const QSizePolicy& s) const { return data == s.data; }
- bool operator!=(const QSizePolicy& s) const { return data != s.data; }
- operator QVariant() const; // implemented in qabstractlayout.cpp
- int horizontalStretch() const { return data >> 24; }
- int verticalStretch() const { return (data >> 16) & 0xff; }
- void setHorizontalStretch(uchar stretchFactor) { data = (data&0x00ffffff) | (uint(stretchFactor)<<24); }
- void setVerticalStretch(uchar stretchFactor) { data = (data&0xff00ffff) | (uint(stretchFactor)<<16); }
- void transpose();
- #ifdef QT3_SUPPORT
- typedef Policy SizeType;
- #ifndef qdoc
- typedef Qt::Orientations ExpandData;
- enum {
- NoDirection = 0,
- Horizontally = 1,
- Vertically = 2,
- BothDirections = Horizontally | Vertically
- };
- #else
- enum ExpandData {
- NoDirection = 0x0,
- Horizontally = 0x1,
- Vertically = 0x2,
- BothDirections = 0x3
- };
- #endif // qdoc
- inline QT3_SUPPORT bool mayShrinkHorizontally() const
- { return horizontalPolicy() & ShrinkFlag; }
- inline QT3_SUPPORT bool mayShrinkVertically() const { return verticalPolicy() & ShrinkFlag; }
- inline QT3_SUPPORT bool mayGrowHorizontally() const { return horizontalPolicy() & GrowFlag; }
- inline QT3_SUPPORT bool mayGrowVertically() const { return verticalPolicy() & GrowFlag; }
- inline QT3_SUPPORT Qt::Orientations expanding() const { return expandingDirections(); }
- QT3_SUPPORT_CONSTRUCTOR QSizePolicy(Policy hor, Policy ver, bool hfw)
- : data(hor | (ver<<HSize) | (hfw ? (1U<<2*HSize) : 0)) { }
- QT3_SUPPORT_CONSTRUCTOR QSizePolicy(Policy hor, Policy ver, uchar hors, uchar vers, bool hfw = false)
- : data(hor | (ver<<HSize) | (hfw ? (1U<<2*HSize) : 0)) {
- setHorizontalStretch(hors);
- setVerticalStretch(vers);
- }
- inline QT3_SUPPORT Policy horData() const { return static_cast<Policy>(data & HMask); }
- inline QT3_SUPPORT Policy verData() const { return static_cast<Policy>((data & VMask) >> HSize); }
- inline QT3_SUPPORT void setHorData(Policy d) { setHorizontalPolicy(d); }
- inline QT3_SUPPORT void setVerData(Policy d) { setVerticalPolicy(d); }
- inline QT3_SUPPORT uint horStretch() const { return horizontalStretch(); }
- inline QT3_SUPPORT uint verStretch() const { return verticalStretch(); }
- inline QT3_SUPPORT void setHorStretch(uchar sf) { setHorizontalStretch(sf); }
- inline QT3_SUPPORT void setVerStretch(uchar sf) { setVerticalStretch(sf); }
- #endif
- private:
- #ifndef QT_NO_DATASTREAM
- friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QSizePolicy &);
- friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QSizePolicy &);
- #endif
- QSizePolicy(int i) : data(i) { }
- quint32 data;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QSizePolicy::ControlTypes)
- // implemented in qlayout.cpp
- Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QSizePolicy &);
- Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QSizePolicy &);
- inline void QSizePolicy::transpose() {
- Policy hData = horizontalPolicy();
- Policy vData = verticalPolicy();
- uchar hStretch = horizontalStretch();
- uchar vStretch = verticalStretch();
- setHorizontalPolicy(vData);
- setVerticalPolicy(hData);
- setHorizontalStretch(vStretch);
- setVerticalStretch(hStretch);
- }
- QT_END_NAMESPACE
- QT_END_HEADER
- #endif // QSIZEPOLICY_H