VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
toolButtonWrapperWidget.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrvUtil/signalslib.h>
15 #include <QWidget>
16 
17 class QAction;
18 class QHBoxLayout;
19 class QAbstractButton;
20 class QSpacerItem;
21 
22 namespace makVrf
23 {
30  {
31  Q_OBJECT
32 
33  public:
34  struct Layout
35  {
36  QHBoxLayout* layout;
37  std::vector<QAbstractButton*> buttons;
39  QSpacerItem* spacerItem;
40  };
41 
42  public:
43  DtToolButtonWrapperWidget(QWidget* parent, const Qt::WindowFlags& flags = 0);
44 
45  //DTOR
46  virtual ~DtToolButtonWrapperWidget();
47 
48  template <typename T> T* createPrototype()
49  {
50  T* b = new T(this);
51 
52  b->setFocusPolicy( Qt::NoFocus );
53  b->setIconSize(myIconSize);
54  b->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
55 
56  return b;
57  }
58 
59  template <typename T> T* createButton()
60  {
61  T* b = createPrototype<T>();
62 
63  this->myButtons.push_back(b);
64 
65  return b;
66  }
67 
69  template <typename T> T* addAction(const QString& action, bool resetLayout = true)
70  {
71  T* b = createButton<T>();
72  b->setText(action);
73 
74  if (resetLayout)
75  {
76  this->addToLayout(b);
77  }
78 
79  return b;
80  }
81 
83  template <typename T> T* addAction(const QIcon& icon, bool resetLayout = true)
84  {
85  T* b = createButton<T>();
86  b->setIcon(icon);
87 
88  if (resetLayout)
89  {
90  this->addToLayout(b);
91  }
92 
93  return b;
94  }
95 
97  template <typename T> T* addAction(QAction* act, bool resetLayout = true)
98  {
99  T* b = createButton<T>();
100  b->setAutoRaise(true);
101  b->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
102  b->setDefaultAction(act);
103 
104  if (resetLayout)
105  {
106  this->addToLayout(b);
107  }
108 
109  return b;
110  }
111 
113  virtual int rightMarginForLine(int) const;
114 
117  virtual void setRightMarginForLine(int margin, int line = -1);
118 
120  virtual void removeRightMarginForLine(int line = -1);
121 
123  virtual void removeButton(QAbstractButton*, bool resetLayout = true);
124 
126  virtual void layoutButtons(bool force = false);
127 
130  virtual void setButtons(const std::vector<QAbstractButton*>& buttons, bool deleteCurrentButtons = false);
131 
133  virtual void setLeftToRightLayout(bool);
134  bool leftToRightLayout() const
135  {
136  return myLeftToRightLayout;
137  }
138 
139  bool needsLayout() const
140  {
141  return myNeedsLayout;
142  }
143 
146  virtual void setSizeToFit(bool);
147  bool sizeToFit() const
148  {
149  return mySizeToFit;
150  }
151 
152  int buttonsShown() const
153  {
154  return myButtonsShown;
155  }
156 
157  const std::vector<QAbstractButton*>& buttons() const
158  {
159  return myButtons;
160  }
161 
162  std::vector<QAbstractButton*>& buttons()
163  {
164  return myButtons;
165  }
166 
167  virtual bool hasButton(QAbstractButton*) const;
168 
170  virtual void setIconSize(const QSize&);
171  const QSize& iconSize() const
172  {
173  return myIconSize;
174  }
175 
177  virtual void setIconSpacing(int);
178  int iconSpacing() const
179  {
180  return myIconSpacing;
181  }
182 
184  virtual void clear();
185 
187  virtual void setUseFixedWidth(bool);
188  bool useFixedWidth() const
189  {
190  return myUseFixedWidth;
191  }
192 
193  virtual void fixWidth();
194 
196  virtual void setFixedButtonWidth(int);
197  int fixedButtonWidth() const
198  {
199  return myFixedButtonWidth;
200  }
201 
204  virtual void setFixedButtonHeight(int);
205  int fixedButtonHeight() const
206  {
207  return myFixedButtonHeight;
208  }
209 
211  virtual void setShowMaximum(int);
212  int showMaximum() const
213  {
214  return myShowMaximum;
215  }
216 
218  virtual void setMaximumLines(int);
219  int maximumLines() const
220  {
221  return myMaximumLines;
222  }
223 
224  bool reachedMaximum() const
225  {
226  return myReachedMaximum;
227  }
228 
229  int numRows() const
230  {
231  return myLayouts.size();
232  }
233 
234  const std::vector<Layout>& layouts() const
235  {
236  return myLayouts;
237  }
238 
239  std::vector<Layout>& layouts()
240  {
241  return myLayouts;
242  }
243 
245  virtual void setBlockResizeLayout(bool);
246  bool blockResizeLayout() const
247  {
248  return myBlockResizeLayout;
249  }
250 
252  virtual void setSignalResizeLayout(bool);
253  bool signalResizeLayout() const
254  {
255  return mySignalResizeLayout;
256  }
257 
258  boost::signals2::signal<void ()> signal_resizeLayout;
259  boost::signals2::signal<void (bool)> signal_maximumReached;
260 
261  public:
262  boost::signals2::signal<void ()> signal_buttonsLayedOut;
263  boost::signals2::signal<void (Layout&, QAbstractButton*)> signal_buttonLayedOut;
264 
265  protected slots:
266  virtual void layoutFromTimer();
267 
268  protected:
269  virtual void resizeEvent(QResizeEvent*);
270  virtual void showEvent(QShowEvent*);
271  virtual void addToLayout(QAbstractButton*, bool forceLayout = false);
272 
273  protected:
274  std::vector<Layout> myLayouts;
275  std::vector<QAbstractButton*> myButtons;
276  std::map<int, int> myRightMarginForLine;
277 
278  QSize myIconSize;
294  };
295 }
const std::vector< Layout > & layouts() const
Definition: toolButtonWrapperWidget.h:234
bool signalResizeLayout() const
Definition: toolButtonWrapperWidget.h:253
int myShowMaximum
Definition: toolButtonWrapperWidget.h:287
bool mySetTimer
Definition: toolButtonWrapperWidget.h:290
T * addAction(const QIcon &icon, bool resetLayout=true)
Adds a new button with an icon.
Definition: toolButtonWrapperWidget.h:83
const std::vector< QAbstractButton * > & buttons() const
Definition: toolButtonWrapperWidget.h:157
int numRows() const
Definition: toolButtonWrapperWidget.h:229
int myIconSpacing
Definition: toolButtonWrapperWidget.h:279
This class will try and space out items such that they will wrap to multiple rows if buttons (or text...
Definition: toolButtonWrapperWidget.h:29
int myButtonsShown
Definition: toolButtonWrapperWidget.h:288
std::vector< Layout > myLayouts
Definition: toolButtonWrapperWidget.h:274
int maximumLines() const
Definition: toolButtonWrapperWidget.h:219
bool sizeToFit() const
Definition: toolButtonWrapperWidget.h:147
int iconSpacing() const
Definition: toolButtonWrapperWidget.h:178
const QSize & iconSize() const
Definition: toolButtonWrapperWidget.h:171
Definition: toolButtonWrapperWidget.h:34
std::vector< QAbstractButton * > & buttons()
Definition: toolButtonWrapperWidget.h:162
bool myLeftToRightLayout
Definition: toolButtonWrapperWidget.h:286
T * addAction(const QString &action, bool resetLayout=true)
Adds a new button with text. Up to caller to determine what to do with the returned tool button...
Definition: toolButtonWrapperWidget.h:69
bool myUseFixedWidth
Definition: toolButtonWrapperWidget.h:293
bool leftToRightLayout() const
Definition: toolButtonWrapperWidget.h:134
QSpacerItem * spacerItem
Definition: toolButtonWrapperWidget.h:39
std::vector< Layout > & layouts()
Definition: toolButtonWrapperWidget.h:239
bool myInResize
Definition: toolButtonWrapperWidget.h:289
bool needsLayout() const
Definition: toolButtonWrapperWidget.h:139
int myFixedButtonHeight
Definition: toolButtonWrapperWidget.h:284
bool myBlockResizeLayout
Definition: toolButtonWrapperWidget.h:291
bool mySignalResizeLayout
Definition: toolButtonWrapperWidget.h:292
bool myNeedsLayout
Definition: toolButtonWrapperWidget.h:281
bool useFixedWidth() const
Definition: toolButtonWrapperWidget.h:188
boost::signals2::signal< void(Layout &, QAbstractButton *)> signal_buttonLayedOut
Definition: toolButtonWrapperWidget.h:263
int fixedButtonHeight() const
Definition: toolButtonWrapperWidget.h:205
QHBoxLayout * layout
Definition: toolButtonWrapperWidget.h:36
T * createPrototype()
Definition: toolButtonWrapperWidget.h:48
int buttonsShown() const
Definition: toolButtonWrapperWidget.h:152
#define DT_DLL_VRFGUICOMMONQT
Definition: vrfGuiCommonQt.h:22
boost::signals2::signal< void(bool)> signal_maximumReached
Definition: toolButtonWrapperWidget.h:259
std::map< int, int > myRightMarginForLine
Definition: toolButtonWrapperWidget.h:276
boost::signals2::signal< void()> signal_buttonsLayedOut
Definition: toolButtonWrapperWidget.h:262
bool reachedMaximum() const
Definition: toolButtonWrapperWidget.h:224
bool blockResizeLayout() const
Definition: toolButtonWrapperWidget.h:246
int showMaximum() const
Definition: toolButtonWrapperWidget.h:212
std::vector< QAbstractButton * > buttons
Definition: toolButtonWrapperWidget.h:37
boost::signals2::signal< void()> signal_resizeLayout
Definition: toolButtonWrapperWidget.h:258
bool myReachedMaximum
Definition: toolButtonWrapperWidget.h:282
int myFixedButtonWidth
Definition: toolButtonWrapperWidget.h:283
int currentWidth
Definition: toolButtonWrapperWidget.h:38
bool mySizeToFit
Definition: toolButtonWrapperWidget.h:285
T * addAction(QAction *act, bool resetLayout=true)
Adds a new action into the dialog for sizing.
Definition: toolButtonWrapperWidget.h:97
QSize myIconSize
Definition: toolButtonWrapperWidget.h:278
int fixedButtonWidth() const
Definition: toolButtonWrapperWidget.h:197
std::vector< QAbstractButton * > myButtons
Definition: toolButtonWrapperWidget.h:275
T * createButton()
Definition: toolButtonWrapperWidget.h:59
int myMaximumLines
Definition: toolButtonWrapperWidget.h:280

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)