ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Layout.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <string>
11 
13 
14 namespace cloudViewer {
15 namespace visualization {
16 namespace gui {
17 
18 struct Margins {
19  int left;
20  int top;
21  int right;
22  int bottom;
23 
30  Margins(); // all values zero
31  Margins(int px);
32  Margins(int horiz_px, int vert_px);
33  Margins(int left_px, int top_px, int right_px, int bottom_px);
34 
36  int GetHoriz() const;
38  int GetVert() const;
39 };
40 
43 class Layout1D : public Widget {
44  using Super = Widget;
45 
46 public:
47  enum Dir { VERT, HORIZ };
48 
49  static void debug_PrintPreferredSizes(Layout1D* layout,
50  const LayoutContext& context,
51  const Constraints& constraints,
52  int depth = 0);
53 
56  Layout1D(Dir dir,
57  int spacing,
58  const Margins& margins,
59  const std::vector<std::shared_ptr<Widget>>& children);
60  virtual ~Layout1D();
61 
62  int GetSpacing() const;
63  const Margins& GetMargins() const;
66  void SetSpacing(int spacing);
69  void SetMargins(const Margins& margins);
70 
72  const Constraints& constraints) const override;
73  void Layout(const LayoutContext& context) override;
74 
76  void AddFixed(int size);
81  void AddStretch();
82 
83 public:
84  class Fixed : public Widget {
85  public:
86  Fixed(int size, Dir dir);
88  const Constraints& constraints) const override;
89 
90  private:
91  int size_;
92  Dir dir_;
93  };
94 
95  class Stretch : public Widget {
96  Size CalcPreferredSize(const LayoutContext& context,
97  const Constraints& constraints) const override;
98  };
99 
100 protected:
101  int GetMinorAxisPreferredSize() const;
103 
105 
106 private:
107  struct Impl;
108  std::unique_ptr<Impl> impl_;
109 };
110 
112 class Vert : public Layout1D {
113 public:
114  static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
115  static std::shared_ptr<Layout1D::Stretch> MakeStretch();
116 
117  Vert();
120  Vert(int spacing, const Margins& margins = Margins());
121  Vert(int spacing,
122  const Margins& margins,
123  const std::vector<std::shared_ptr<Widget>>& children);
124  virtual ~Vert();
125 
126  int GetPreferredWidth() const;
127  void SetPreferredWidth(int w);
128 };
129 
133 class CollapsableVert : public Vert {
134  using Super = Vert;
135 
136 public:
137  CollapsableVert(const char* text);
138  CollapsableVert(const char* text,
139  int spacing,
140  const Margins& margins = Margins());
141  virtual ~CollapsableVert();
142 
147  void SetIsOpen(bool is_open);
148 
150  bool GetIsOpen();
151 
152  void SetText(const char* text);
153  std::string GetText() const;
154 
155  FontId GetFontId() const;
156  void SetFontId(FontId font_id);
157 
159  const Constraints& constraints) const override;
160  void Layout(const LayoutContext& context) override;
161  Widget::DrawResult Draw(const DrawContext& context) override;
162 
163 private:
164  struct Impl;
165  std::unique_ptr<Impl> impl_;
166 };
167 
169 class ScrollableVert : public Vert {
170  using Super = Vert;
171 
172 public:
173  ScrollableVert();
174  ScrollableVert(int spacing, const Margins& margins = Margins());
175  ScrollableVert(int spacing,
176  const Margins& margins,
177  const std::vector<std::shared_ptr<Widget>>& children);
178  virtual ~ScrollableVert();
179 
180  Widget::DrawResult Draw(const DrawContext& context) override;
181 
182 private:
183  struct Impl;
184  std::unique_ptr<Impl> impl_;
185 };
186 
188 class Horiz : public Layout1D {
189 public:
190  static std::shared_ptr<Layout1D::Fixed> MakeFixed(int size);
191  static std::shared_ptr<Layout1D::Stretch> MakeStretch();
192  static std::shared_ptr<Horiz> MakeCentered(std::shared_ptr<Widget> w);
193 
194  Horiz();
197  Horiz(int spacing, const Margins& margins = Margins());
198  Horiz(int spacing,
199  const Margins& margins,
200  const std::vector<std::shared_ptr<Widget>>& children);
201  ~Horiz();
202 
203  int GetPreferredHeight() const;
204  void SetPreferredHeight(int h);
205 };
206 
210 class VGrid : public Widget {
211  using Super = Widget;
212 
213 public:
214  VGrid(int num_cols, int spacing = 0, const Margins& margins = Margins());
215  virtual ~VGrid();
216 
217  int GetSpacing() const;
218  const Margins& GetMargins() const;
219 
220  int GetPreferredWidth() const;
221  void SetPreferredWidth(int w);
222 
224  const Constraints& constraints) const override;
225  void Layout(const LayoutContext& context) override;
226 
227 private:
228  struct Impl;
229  std::unique_ptr<Impl> impl_;
230 };
231 
232 } // namespace gui
233 } // namespace visualization
234 } // namespace cloudViewer
int size
void Layout(const LayoutContext &context) override
Definition: Layout.cpp:427
bool GetIsOpen()
Returns true if open and false if collapsed.
Definition: Layout.cpp:388
Widget::DrawResult Draw(const DrawContext &context) override
Definition: Layout.cpp:442
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:403
Lays out widgets horizontally.
Definition: Layout.h:188
static std::shared_ptr< Layout1D::Fixed > MakeFixed(int size)
Definition: Layout.cpp:523
static std::shared_ptr< Layout1D::Stretch > MakeStretch()
Definition: Layout.cpp:527
static std::shared_ptr< Horiz > MakeCentered(std::shared_ptr< Widget > w)
Definition: Layout.cpp:531
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:179
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:226
void AddFixed(int size)
Adds a fixed number of pixels after the previously added widget.
Definition: Layout.cpp:212
Layout1D(Dir dir, int spacing, const Margins &margins, const std::vector< std::shared_ptr< Widget >> &children)
Definition: Layout.cpp:193
static void debug_PrintPreferredSizes(Layout1D *layout, const LayoutContext &context, const Constraints &constraints, int depth=0)
Definition: Layout.cpp:130
const Margins & GetMargins() const
Definition: Layout.cpp:206
void SetMargins(const Margins &margins)
Definition: Layout.cpp:210
void Layout(const LayoutContext &context) override
Definition: Layout.cpp:250
This a vertical layout that scrolls if it is smaller than its contents.
Definition: Layout.h:169
Widget::DrawResult Draw(const DrawContext &context) override
Definition: Layout.cpp:502
void Layout(const LayoutContext &context) override
Definition: Layout.cpp:603
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
Definition: Layout.cpp:578
const Margins & GetMargins() const
Definition: Layout.cpp:573
VGrid(int num_cols, int spacing=0, const Margins &margins=Margins())
Definition: Layout.cpp:561
Lays out widgets vertically.
Definition: Layout.h:112
static std::shared_ptr< Layout1D::Stretch > MakeStretch()
Definition: Layout.cpp:347
static std::shared_ptr< Layout1D::Fixed > MakeFixed(int size)
Definition: Layout.cpp:343
ImGuiContext * context
Definition: Window.cpp:76
Generic file read and write utility for python interface.
int GetVert() const
Convenience function that returns top + bottom.
Definition: Layout.cpp:120
int GetHoriz() const
Convenience function that returns left + right.
Definition: Layout.cpp:118