VR-Forces 4.7 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 setFixedButtonWidth(int);
188  int fixedButtonWidth() const
189  {
190  return myFixedButtonWidth;
191  }
192 
195  virtual void setFixedButtonHeight(int);
196  int fixedButtonHeight() const
197  {
198  return myFixedButtonHeight;
199  }
200 
202  virtual void setShowMaximum(int);
203  int showMaximum() const
204  {
205  return myShowMaximum;
206  }
207 
209  virtual void setMaximumLines(int);
210  int maximumLines() const
211  {
212  return myMaximumLines;
213  }
214 
215  bool reachedMaximum() const
216  {
217  return myReachedMaximum;
218  }
219 
220  int numRows() const
221  {
222  return myLayouts.size();
223  }
224 
225  const std::vector<Layout>& layouts() const
226  {
227  return myLayouts;
228  }
229 
230  std::vector<Layout>& layouts()
231  {
232  return myLayouts;
233  }
234 
236  virtual void setBlockResizeLayout(bool);
237  bool blockResizeLayout() const
238  {
239  return myBlockResizeLayout;
240  }
241 
243  virtual void setSignalResizeLayout(bool);
244  bool signalResizeLayout() const
245  {
246  return mySignalResizeLayout;
247  }
248 
249  boost::signal<void ()> signal_resizeLayout;
250 
251  public:
252  boost::signal<void ()> signal_buttonsLayedOut;
253  boost::signal<void (Layout&, QAbstractButton*)> signal_buttonLayedOut;
254 
255  protected slots:
256  virtual void layoutFromTimer();
257 
258  protected:
259  virtual void resizeEvent(QResizeEvent*);
260  virtual void showEvent(QShowEvent*);
261  virtual void addToLayout(QAbstractButton*);
262 
263  protected:
264  std::vector<Layout> myLayouts;
265  std::vector<QAbstractButton*> myButtons;
266  std::map<int, int> myRightMarginForLine;
267 
268  QSize myIconSize;
283  };
284 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)