guit  0.1
 All Classes Functions Variables Typedefs Enumerations Friends
gflex.hpp
1 //
2 // Specifies whether a gadget is flexible.
3 // Guit GUI Toolkit
4 // Copyright © 2020 Eric Lecolinet. All rights reserved.
5 // http://www.telecom-paris.fr/~elc
6 //
7 
8 #ifndef GuitFlex_hpp
9 #define GuitFlex_hpp
10 #include <gvarprop.hpp>
11 namespace guit {
12 
13 class GFlexValue : public GDim {
14 public:
15  GFlexValue() = default;
16  GFlexValue(int8_t flex1, int8_t flex2, int8_t mode);
17  bool operator==(GFlexValue const&) const;
18  bool operator!=(GFlexValue const&) const;
19  int8_t flex1{}, flex2{}, mode{};
20 };
21 
22 inline bool gconvert(GFlexValue const& from, GFlexValue& to) {to = from; return true;}
23 bool gconvert(GString const& from, GFlexValue& to);
24 bool gconvert(GFlexValue const& from, GString& to);
25 
26 
59 class GFlex : public GVarProp_<GFlexValue> {
60 public:
62  enum {MinFlex = 0, MaxFlex = 100};
63  enum Mode : int8_t {SelfWH, SelfFlow, ParentFlow};
64 
65  GFlex();
66  GFlex(GString const& value);
67  GFlex(int8_t flex1, int8_t flex2, Mode mode);
68  GFlex(GFlex const&);
69  GFlex(GFlexValue const&);
70 
71  GFlex* clone(bool copy_value) const override;
72 
73  GFlex& operator=(GFlex const& value) {set(value); return *this;}
74  GFlex& operator=(GString const& value) {set(value); return *this;}
75 
76  using Super::set;
77  void set(int8_t flex1, int8_t flex2, Mode);
78 
79  int8_t flex1() const {return value_.flex1;}
80  int8_t flex2() const {return value_.flex2;}
81  Mode mode() const {return Mode(value_.mode);}
82 
84  static GType& Type();
85  GType& type() const override {return Type();}
86 
89  bool onAdd(Gadget*) override;
90  void onRemove(Gadget*) override;
91  void updateGadget(Gadget&) override;
92  void apply(Gadget*, GRender&, Specif) final;
94 };
95 
98 inline GFlex& Flex() {return *new GFlex();}
99 inline GFlex& Flex(GString const& value) {return *new GFlex(value);}
101 
102 }
103 #endif