SGL
glayout.h
1 /*
2  * File: glayout.h
3  * ---------------
4  *
5  * @author Marty Stepp
6  * @version 2021/04/09
7  * - added sgl namespace
8  * @version 2018/09/07
9  * - added doc comments for new documentation generation
10  * @version 2018/08/23
11  * - renamed to glayout.h to replace Java version
12  * @version 2018/06/25
13  * - initial version
14  */
15 
16 
17 #ifndef _glayout_h
18 #define _glayout_h
19 
20 #include <QLayout>
21 #include <QRect>
22 #include <QWidget>
23 
24 #include "ginteractor.h"
25 
26 namespace sgl {
27 
33 class GLayout {
34 public:
35 
36  enum Position { West, North, South, East, Center };
37 
38  static void clearLayout(QLayout* layout);
39  static bool contains(QLayout* layout, QWidget* widget);
40  static void forceUpdate(GInteractor* interactor);
41  static void forceUpdate(QWidget* widget);
42  static QSize getPreferredSize(QWidget* widget);
43  static QSize getProperSize(QLayout* layout);
44  static QSize getProperSize(QWidget* widget);
45  static void invalidateLayout(QLayout* layout);
46  static Position toPosition(const string& positionName);
47 
48 private:
49  GLayout(); // forbid construction
50 };
51 
62 class GBorderLayout : public QLayout {
63 public:
64  GBorderLayout(QWidget* parent, int margin = 0, int spacing = -1);
65  GBorderLayout(int spacing = -1);
66  ~GBorderLayout() override;
67 
68  void addItem(QLayoutItem* item) override;
69  void addWidget(QWidget* widget);
70  void addWidget(QWidget* widget, GLayout::Position position);
71  Qt::Orientations expandingDirections() const override;
72  bool hasHeightForWidth() const override;
73  int count() const override;
74  QLayoutItem* itemAt(int index) const override;
75  QSize minimumSize() const override;
76  void setGeometry(const QRect& rect) override;
77  QSize sizeHint() const override;
78  QLayoutItem* takeAt(int index) override;
79 
80  void add(QLayoutItem* item, GLayout::Position position);
81 
82 private:
83  Q_DISABLE_COPY(GBorderLayout)
84 
85  struct ItemWrapper {
86  ItemWrapper(QLayoutItem* i, GLayout::Position p) {
87  item = i;
88  position = p;
89  }
90 
91  QLayoutItem* item;
92  GLayout::Position position;
93  };
94 
95  enum SizeType { MinimumSize, SizeHint };
96 
97  QSize calculateSize(SizeType sizeType) const;
98 
99  QList<ItemWrapper*> list;
100 };
101 
102 } // namespace sgl
103 
104 #endif // _glayout_h
Definition: console.h:45