OpendTect  6.3
i_layoutitem.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A.H. Lammertink
8  Date: 29/06/2001
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "uibasemod.h"
14 #include "i_layout.h"
15 #include "uiobjbody.h"
16 
17 #include <QSize>
18 #include <QWidget>
19 
20 mFDQtclass(QLayoutItem)
21 
22 mExpClass(uiBase) i_LayoutItem : public uiBody, public NamedCallBacker
24 {
25  friend class i_LayoutMngr;
26  friend class i_LayoutIterator;
27 #ifdef __debug__
28  friend class uiGroupParentBody;
29 #endif
30 
31 public:
32  i_LayoutItem(i_LayoutMngr&,
33  mQtclass(QLayoutItem&));
34  virtual ~i_LayoutItem();
35 
36  virtual int horAlign(LayoutMode m ) const
37  { return curpos(m).left(); }
38  virtual int centre(LayoutMode m, bool hor=true) const
39  {
40  if( hor ) return ( curpos(m).left()
41  + curpos(m).right() ) / 2;
42  return ( curpos(m).top()
43  + curpos(m).bottom() ) / 2;
44  }
45 
46  virtual uiSize minimumsize() const
47  {
48  mQtclass(QSize) s =qwidget()->minimumSize();
49 
50  return
51  uiSize( s.width(), s.height());
52  }
53 
54  uiSize prefSize() const
55  {
56  if( prefSzDone )
57  { pErrMsg("PrefSize already done.");}
58  else
59  {
60  i_LayoutItem* self =
61  const_cast<i_LayoutItem*>(this);
62  self->prefSzDone = true;
63  mQtclass(QSize) ps( qlayoutItm().sizeHint() );
64  int width = ps.width();
65  if ( width==0 ) width = 1;
66  int height = ps.height();
67  if ( height==0 ) height = 1;
68  self->prefSz =
69  uiSize(width,height);
70  }
71 
72  return prefSz;
73  }
74 
75  virtual void invalidate();
76  virtual void updatedAlignment(LayoutMode) {}
77  virtual void initChildLayout(LayoutMode) {}
78 
79  uiSize actualsize(bool include_border = true) const;
81 
82  inline const i_LayoutMngr& mngr() const { return mngr_; }
83 
84  inline const uiRect& curpos(LayoutMode m) const
85  { return layoutpos[m];}
86  inline uiRect& curpos(LayoutMode m) { return layoutpos[m];}
87 
88  bool inited() const
89  {
90  return minimum_pos_inited
91  || preferred_pos_inited;
92  }
93 
94 protected:
95 
96  bool preferred_pos_inited;
97  bool minimum_pos_inited;
98 
99  uiRect layoutpos[ nLayoutMode ];
100 
101  int stretch( bool hor ) const;
102  virtual void commitGeometrySet(bool);
103 
104  void initLayout( LayoutMode m, int mngrTop,
105  int mngrLeft );
106  bool layout( LayoutMode m, const int, bool );
107 
108  void attach( constraintType,
109  i_LayoutItem *other, int margin,
110  bool reciprocal=true);
111 
112  virtual uiObject* objLayouted() { return 0; }
113  inline const uiObject* objLayouted() const
114  {
115  return const_cast<i_LayoutItem*>
116  (this)->objLayouted();
117  }
118 
119  virtual uiObjectBody* bodyLayouted() { return 0; }
120  inline const uiObjectBody* bodyLayouted() const
121  {
122  return const_cast<i_LayoutItem*>
123  (this)->bodyLayouted();
124  }
125 
126  inline mQtclass(QLayoutItem&) qlayoutItm() { return *qlayoutitm; }
127  inline const mQtclass(QLayoutItem&) qlayoutItm() const
128  { return *qlayoutitm; }
129 
130  // Immediately delete me if you take my
131  // qlayoutitm !!
132  inline mQtclass(QLayoutItem*) takeQlayoutItm()
133  {
134  mQtclass(QLayoutItem*) ret = qlayoutitm;
135  qlayoutitm = 0;
136  return ret;
137  }
138 
139  virtual const mQtclass(QWidget*) qwidget_() const
140  { return qlayoutitm->widget(); }
141  virtual const mQtclass(QWidget*) managewidg_() const
142  { return qlayoutitm->widget(); }
143 
144  inline i_LayoutMngr& mngr() { return mngr_; }
145 
146  bool isAligned() const;
147 
148 private:
149 
150  mQtclass(QLayoutItem*) qlayoutitm;
151  i_LayoutMngr& mngr_;
152 
153  constraintList constrList;
154 
155 #ifdef __debug__
156  int isPosOk( uiConstraint*, int, bool );
157 #endif
158  bool prefSzDone;
159  uiSize prefSz;
160  bool hsameas;
161  bool vsameas;
162 };
163 
164 
166 mExpClass(uiBase) i_uiLayoutItem : public i_LayoutItem
167 {
168 public:
169  i_uiLayoutItem( i_LayoutMngr& mgr, uiObjectBody& obj )
170  : i_LayoutItem(mgr,
171  *new mQtclass(QWidgetItem)(obj.qwidget()) )
172  , uiObjBody_(obj) {}
173 
174  virtual ~i_uiLayoutItem();
175 
176  virtual uiSize minimumsize() const
177  {
178  uiSize s = uiObjBody_.minimumsize();
179  if ( !mIsUdf(s.hNrPics()) )
180  return s;
181 
182  return i_LayoutItem::minimumsize();
183  }
184 
185  virtual uiObject* objLayouted() { return &uiObjBody_.uiObjHandle(); }
186  virtual uiObjectBody* bodyLayouted(){ return &uiObjBody_; }
187 
188 
189 protected:
190 
191  uiObjectBody& uiObjBody_;
192 
193 
194 };
#define mExpClass(module)
Definition: commondefs.h:157
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
Definition: uilayout.h:37
virtual uiObject * objLayouted()
Definition: i_layoutitem.h:185
Definition: uigeom.h:40
#define mQtclass(cls)
Definition: commondefs.h:232
Wrapper around QLayoutItem class. Stores some dGB specific layout info.
Definition: i_layoutitem.h:166
uiObjectBody & uiObjBody_
Definition: i_layoutitem.h:191
Definition: i_layout.h:26
The base class for most UI elements.
Definition: uiobj.h:35
virtual uiSize minimumsize() const
Definition: i_layoutitem.h:176
Definition: uigeom.h:23
virtual const QWidget * qwidget_() const
Definition: i_uiobjqtbody.h:27
Set of (small) copyable elements.
Definition: commontypes.h:26
i_uiLayoutItem(i_LayoutMngr &mgr, uiObjectBody &obj)
Definition: i_layoutitem.h:169
LayoutMode
Definition: i_layout.h:33
virtual uiObjectBody * bodyLayouted()
Definition: i_layoutitem.h:186
#define mFDQtclass(cls)
Definition: commondefs.h:231
constraintType
Definition: uilayout.h:17
const int nLayoutMode
Definition: i_layout.h:35
int hNrPics() const
Definition: uigeom.h:31
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:34
CallBacker object with a name. Use if you want your object to be able to send and receive CallBack&#39;s...
Definition: namedobj.h:50
dGB&#39;s layout manager
Definition: i_layout.h:68
Definition: i_layout.h:26

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017