qsizepolicy.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:8k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QSIZEPOLICY_H
  38. #define QSIZEPOLICY_H
  39. #include <QtCore/qobject.h>
  40. QT_BEGIN_HEADER
  41. QT_BEGIN_NAMESPACE
  42. QT_MODULE(Gui)
  43. class QVariant;
  44. class Q_GUI_EXPORT QSizePolicy
  45. {
  46.     Q_GADGET
  47.     Q_ENUMS(Policy)
  48. private:
  49.     enum SizePolicyMasks {
  50.         HSize = 4,
  51.         HMask = 0x0f,
  52.         VMask = HMask << HSize,
  53. CTShift = 9,
  54. CTSize = 5,
  55. CTMask = ((0x1 << CTSize) - 1) << CTShift,
  56. UnusedShift = CTShift + CTSize,
  57. UnusedSize = 2
  58.     };
  59. public:
  60.     enum PolicyFlag {
  61.         GrowFlag = 1,
  62.         ExpandFlag = 2,
  63.         ShrinkFlag = 4,
  64.         IgnoreFlag = 8
  65.     };
  66.     enum Policy {
  67.         Fixed = 0,
  68.         Minimum = GrowFlag,
  69.         Maximum = ShrinkFlag,
  70.         Preferred = GrowFlag | ShrinkFlag,
  71.         MinimumExpanding = GrowFlag | ExpandFlag,
  72.         Expanding = GrowFlag | ShrinkFlag | ExpandFlag,
  73.         Ignored = ShrinkFlag | GrowFlag | IgnoreFlag
  74.     };
  75.     enum ControlType {
  76.         DefaultType      = 0x00000001,
  77.         ButtonBox        = 0x00000002,
  78.         CheckBox         = 0x00000004,
  79.         ComboBox         = 0x00000008,
  80.         Frame            = 0x00000010,
  81.         GroupBox         = 0x00000020,
  82.         Label            = 0x00000040,
  83.         Line             = 0x00000080,
  84.         LineEdit         = 0x00000100,
  85.         PushButton       = 0x00000200,
  86.         RadioButton      = 0x00000400,
  87.         Slider           = 0x00000800,
  88.         SpinBox          = 0x00001000,
  89.         TabWidget        = 0x00002000,
  90.         ToolButton       = 0x00004000
  91.     };
  92.     Q_DECLARE_FLAGS(ControlTypes, ControlType)
  93.     QSizePolicy() : data(0) { }
  94.     // ### Qt 5: merge these two constructors (with type == DefaultType)
  95.     QSizePolicy(Policy horizontal, Policy vertical)
  96.         : data(horizontal | (vertical << HSize)) { }
  97.     QSizePolicy(Policy horizontal, Policy vertical, ControlType type)
  98.         : data(horizontal | (vertical << HSize)) { setControlType(type); }
  99.     Policy horizontalPolicy() const { return static_cast<Policy>(data & HMask); }
  100.     Policy verticalPolicy() const { return static_cast<Policy>((data & VMask) >> HSize); }
  101.     ControlType controlType() const;
  102.     void setHorizontalPolicy(Policy d) { data = (data & ~HMask) | d; }
  103.     void setVerticalPolicy(Policy d) { data = (data & ~(HMask << HSize)) | (d << HSize); }
  104.     void setControlType(ControlType type);
  105.     Qt::Orientations expandingDirections() const {
  106.         Qt::Orientations result;
  107.         if (verticalPolicy() & ExpandFlag)
  108.             result |= Qt::Vertical;
  109.         if (horizontalPolicy() & ExpandFlag)
  110.             result |= Qt::Horizontal;
  111.         return result;
  112.     }
  113.     void setHeightForWidth(bool b) { data = b ? (data | (1 << 2*HSize)) : (data & ~(1 << 2*HSize));  }
  114.     bool hasHeightForWidth() const { return data & (1 << 2*HSize); }
  115.     bool operator==(const QSizePolicy& s) const { return data == s.data; }
  116.     bool operator!=(const QSizePolicy& s) const { return data != s.data; }
  117.     operator QVariant() const; // implemented in qabstractlayout.cpp
  118.     int horizontalStretch() const { return data >> 24; }
  119.     int verticalStretch() const { return (data >> 16) & 0xff; }
  120.     void setHorizontalStretch(uchar stretchFactor) { data = (data&0x00ffffff) | (uint(stretchFactor)<<24); }
  121.     void setVerticalStretch(uchar stretchFactor) { data = (data&0xff00ffff) | (uint(stretchFactor)<<16); }
  122.     void transpose();
  123. #ifdef QT3_SUPPORT
  124.     typedef Policy SizeType;
  125. #ifndef qdoc
  126.     typedef Qt::Orientations ExpandData;
  127.     enum {
  128.         NoDirection = 0,
  129.         Horizontally = 1,
  130.         Vertically = 2,
  131.         BothDirections = Horizontally | Vertically
  132.     };
  133. #else
  134.     enum ExpandData {
  135.         NoDirection = 0x0,
  136.         Horizontally = 0x1,
  137.         Vertically = 0x2,
  138.         BothDirections = 0x3
  139.     };
  140. #endif // qdoc
  141.     inline QT3_SUPPORT bool mayShrinkHorizontally() const
  142.         { return horizontalPolicy() & ShrinkFlag; }
  143.     inline QT3_SUPPORT bool mayShrinkVertically() const { return verticalPolicy() & ShrinkFlag; }
  144.     inline QT3_SUPPORT bool mayGrowHorizontally() const { return horizontalPolicy() & GrowFlag; }
  145.     inline QT3_SUPPORT bool mayGrowVertically() const { return verticalPolicy() & GrowFlag; }
  146.     inline QT3_SUPPORT Qt::Orientations expanding() const { return expandingDirections(); }
  147.     QT3_SUPPORT_CONSTRUCTOR QSizePolicy(Policy hor, Policy ver, bool hfw)
  148.         : data(hor | (ver<<HSize) | (hfw ? (1U<<2*HSize) : 0)) { }
  149.     QT3_SUPPORT_CONSTRUCTOR QSizePolicy(Policy hor, Policy ver, uchar hors, uchar vers, bool hfw = false)
  150.         : data(hor | (ver<<HSize) | (hfw ? (1U<<2*HSize) : 0)) {
  151.         setHorizontalStretch(hors);
  152.         setVerticalStretch(vers);
  153.     }
  154.     inline QT3_SUPPORT Policy horData() const { return static_cast<Policy>(data & HMask); }
  155.     inline QT3_SUPPORT Policy verData() const { return static_cast<Policy>((data & VMask) >> HSize); }
  156.     inline QT3_SUPPORT void setHorData(Policy d) { setHorizontalPolicy(d); }
  157.     inline QT3_SUPPORT void setVerData(Policy d) { setVerticalPolicy(d); }
  158.     inline QT3_SUPPORT uint horStretch() const { return horizontalStretch(); }
  159.     inline QT3_SUPPORT uint verStretch() const { return verticalStretch(); }
  160.     inline QT3_SUPPORT void setHorStretch(uchar sf) { setHorizontalStretch(sf); }
  161.     inline QT3_SUPPORT void setVerStretch(uchar sf) { setVerticalStretch(sf); }
  162. #endif
  163. private:
  164. #ifndef QT_NO_DATASTREAM
  165.     friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QSizePolicy &);
  166.     friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QSizePolicy &);
  167. #endif
  168.     QSizePolicy(int i) : data(i) { }
  169.     quint32 data;
  170. };
  171. Q_DECLARE_OPERATORS_FOR_FLAGS(QSizePolicy::ControlTypes)
  172. // implemented in qlayout.cpp
  173. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QSizePolicy &);
  174. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QSizePolicy &);
  175. inline void QSizePolicy::transpose() {
  176.     Policy hData = horizontalPolicy();
  177.     Policy vData = verticalPolicy();
  178.     uchar hStretch = horizontalStretch();
  179.     uchar vStretch = verticalStretch();
  180.     setHorizontalPolicy(vData);
  181.     setVerticalPolicy(hData);
  182.     setHorizontalStretch(vStretch);
  183.     setVerticalStretch(hStretch);
  184. }
  185. QT_END_NAMESPACE
  186. QT_END_HEADER
  187. #endif // QSIZEPOLICY_H