DockableWidgetLayout.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef DOCKABLEWIDGETLAYOUT_H
  2. #define DOCKABLEWIDGETLAYOUT_H
  3. #include <QLayout>
  4. #include <QRect>
  5. class QLayoutItem;
  6. class DockableWidget;
  7. class QStringList;
  8. class DockableWidgetLayout : public QLayout
  9. {
  10. Q_OBJECT;
  11. public:
  12. enum DockSide { TOP, LEFT, RIGHT, BOTTOM };
  13. DockableWidgetLayout(QWidget* parent = 0, int margin = 0, int spacing = -1);
  14. DockableWidgetLayout(int spacing);
  15. ~DockableWidgetLayout();
  16. void addItem(QLayoutItem* item);
  17. void addItem(QLayoutItem* item, int index, DockSide side = RIGHT,
  18. int dist = 0, int w = -1, int h = -1);
  19. void addWidget(DockableWidget* widget, const QRect& rect);
  20. void addWidget(DockableWidget* widget, DockSide side, int distance,
  21. int width = -1, int height = -1);
  22. bool insertLocation(QRect& rect, const QSizePolicy& sizePol);
  23. QLayoutItem* itemAt(int index) const;
  24. QLayoutItem* takeAt(int index);
  25. int count() const;
  26. Qt::Orientations expandingDirections() const;
  27. bool hasHeightForWidth() const;
  28. QSize minimumSize() const;
  29. QSize maximumSize() const;
  30. void setGeometry(const QRect &rect);
  31. QSize sizeHint() const;
  32. void changed();
  33. void getConfig(QStringList& list);
  34. private:
  35. class DockInfo
  36. {
  37. public:
  38. QRect bounds() const { return QRect(left, top, width, height); }
  39. int right() const { return left + width; }
  40. int bottom() const { return top + height; }
  41. DockableWidget* widget;
  42. QLayoutItem* item;
  43. DockSide dockSide;
  44. int dockDistance;
  45. int left;
  46. int top;
  47. int width;
  48. int height;
  49. bool useHintHeight;
  50. bool useHintWidth;
  51. };
  52. QList<DockInfo*> dockedWidgets;
  53. int layoutWidth, layoutHeight;
  54. int minWidth, minHeight;
  55. int maxWidth, maxHeight;
  56. int checkWidth, checkHeight;
  57. void calcSizeLimits();
  58. void sizeMove(int dx, int dy);
  59. void doLayout(bool check = false);
  60. bool insertLocation(QRect& rect, int& index, DockSide& side,
  61. const QSizePolicy& sizePol);
  62. bool overlaysWithFirstNWidgets(const QRect& r, int n) const;
  63. };
  64. #endif // DOCKABLEWIDGETLAYOUT_H