rock_widget_collection  0.1
WidgetButton.cc
Go to the documentation of this file.
1 /*
2  * File: WidgetButton.cc
3  * Author: blueck
4  *
5  * Created on 11. Februar 2011, 12:01
6  */
7 
8 #include <QtGui/qwidget.h>
9 #include <QtGui/qlayout.h>
10 #include <QtGui/qabstractbutton.h>
11 #include <QtCore/qtimer.h>
12 #include <QtGui/qlabel.h>
13 
14 #include "WidgetButton.h"
15 #include "MultiWidget.h"
16 
17 #include <stdio.h>
18 #include <typeinfo>
19 
20 #include <QHBoxLayout>
21 #include <QVBoxLayout>
22 
23 WidgetButton::WidgetButton(QWidget *widget, Qt::Orientations dir,int width,int height) :
24  QPushButton(widget),
25  redPalette(QPalette(Qt::red)),
26  dir(dir)
27 {
28  if(dir == Qt::Horizontal){
29  layout = new QHBoxLayout(this);
30  }else{
31  layout = new QVBoxLayout(this);
32  }
33  mainWidget=0;
34 
35  setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
36 
37 
38  setFixedSize(width,height);
39  isAlternative = false;
40  paletteTimer.setInterval(750);
41  connect(&paletteTimer, SIGNAL(timeout()), this, SLOT(changePalette()));
42  defaultPalette = this->palette();
43  layout->setContentsMargins(3,3,3,3);
44  position = Left;
45  qRegisterMetaType<WidgetButton::Position>("WidgetButton::Position");
46 }
47 
49 {
50 }
51 
52 
54  return position;
55 }
56 
58 {
59  std::cout << (this == NULL) << std::endl;
60  std::cout << "Alt: " << isAlternative << std::endl;
61 }
62 
63 
64 void WidgetButton::setActive(bool active){
65  isActive=false;
66  MultiWidget *widget = dynamic_cast<MultiWidget*>(mainWidget);
67  if(widget > 0){
68  widget->setActive(active);
69  }else{
70  //printf("Not updateing from class: %s %i\n",typeid(mainWidget).name(),widget);
71  }
72 
73 }
74 
75 
77  //The next lines will fail if the objects was constructed by rubqt ui loder because all objects are recognized as qwidget
78  MultiWidget *w = dynamic_cast<MultiWidget*>(mainWidget);
79  if(w > 0){
80  name = w->getMinimizedLabel();
81  }
82 
83  if(isActive)
84  {
85  if(isAlternative == false)
86  {
87  setIcon(QIcon());
88  }
89  else
90  {
91  if(!icon.isNull())
92  {
93  setText("");
94  setIcon(icon);
95  }
96  else
97  {
98  setText(name);
99  setIcon(QIcon());
100  }
101  }
102  }
103  else
104  {
105  if(icon.isNull() || isAlternative == false)
106  {
107  setText(name);
108  }
109  else
110  {
111  setText("");
112  setIcon(icon);
113  }
114  setPalette(QPalette(QColor(0, 255, 0)));
115  }
116  /*
117  const QMetaObject* meta = mainWidget->metaObject();
118  int index = meta->indexOfMethod("notifyUpdate(int)");
119  if(index > -1)
120  {
121  connect(mainWidget, SIGNAL(notifyUpdate(int)), this, SLOT(widgetUpdate(int)));
122  }
123  else
124  {
125  std::cout << "No notifyUpdate(int) method found, updates will not be displayed for: " << name.toStdString() << std::endl;
126  }
127  */
128 }
129 
130 void WidgetButton::setWidget(const QString &name_, QWidget* widget, bool shown)
131 {
132 
133  //The next lines will fail if the objects was constructed by rubqt ui loder because all objects are recognized as qwidget
134  QString name = name_;
135  MultiWidget *w = dynamic_cast<MultiWidget*>(widget);
136  if(w > 0){
137  name = w->getMinimizedLabel();
138  }
139 
140 
141  this->name = name;
142  mainWidget = widget;
143  if(shown)
144  {
145  setEnabled(true);
146  if(isAlternative == false)
147  {
148  setIcon(QIcon());
149  layout->addWidget(mainWidget);
150  }
151  else
152  {
153  if(!icon.isNull())
154  {
155  setText("");
156  setIcon(icon);
157  }
158  else
159  {
160  setText(name);
161  setIcon(QIcon());
162  }
163  }
164  mainWidget->setEnabled(false);
165  }
166  else
167  {
168  if(icon.isNull() || isAlternative == false)
169  {
170  setText(name);
171  }
172  else
173  {
174  setText("");
175  setIcon(icon);
176  }
177  setEnabled(false);
178  setPalette(QPalette(QColor(0, 255, 0)));
179  }
180  const QMetaObject* meta = widget->metaObject();
181  int index = meta->indexOfMethod("notifyUpdate(int)");
182  if(index > -1)
183  {
184  connect(widget, SIGNAL(notifyUpdate(int)), this, SLOT(widgetUpdate(int)));
185  }
186  else
187  {
188  std::cout << "No notifyUpdate(int) method found, updates will not be displayed for: " << name.toStdString() << std::endl;
189  }
190 
191  setActive(shown);
192 }
193 
194 void WidgetButton::showWidget(bool shown)
195 {
196  if(shown)
197  {
198  setText("");
199  setPalette(defaultPalette);
200  if(isAlternative == false)
201  {
202  layout->addWidget(mainWidget);
203  }
204  else
205  {
206  if(!icon.isNull())
207  {
208  setText("");
209  setIcon(icon);
210  }
211  else
212  {
213  setText(name);
214  setIcon(QIcon());
215  }
216  }
217  mainWidget->setEnabled(false);
218  setEnabled(true);
219  }
220  else
221  {
222  paletteTimer.stop();
223  setPalette(QPalette(QColor(0, 255, 0)));
224  layout->removeWidget(mainWidget);
225  if(icon.isNull())
226  {
227  setText(name);
228  }
229  else
230  {
231  setIcon(icon);
232  }
233  setEnabled(false);
234  }
235  repaint();
236 }
237 
238 void WidgetButton::setIconAlternative(const QIcon& icon, bool isAlternative)
239 {
240  this->icon = icon;
241  this->isAlternative = isAlternative;
242 }
243 
245 {
246  return mainWidget;
247 }
248 
250 {
251  return name;
252 }
253 
255 {
256  if(!mainWidget->isEnabled())
257  {
258  setPalette(redPalette);
259  paletteTimer.start();
260  }
261 }
262 
264 {
265  if(palette().color(QPalette::Background).red() == 255)
266  {
267  setPalette(defaultPalette);
268  }
269  else
270  {
271  setPalette(redPalette);
272  }
273 }
274 
275 
276 
QBoxLayout * layout
Definition: WidgetButton.h:126
QPalette redPalette
Definition: WidgetButton.h:130
void widgetUpdate(int type=0)
void setActive(bool b)
Definition: MultiWidget.h:27
bool isAlternative
Definition: WidgetButton.h:136
void changePalette()
void setActive(bool active)
Definition: WidgetButton.cc:64
void setIconAlternative(const QIcon &icon, bool isAlternative=false)
void setWidget(const QString &name, QWidget *widget, bool shown=true)
WidgetButton(QWidget *widget=0, Qt::Orientations dir=Qt::Horizontal, int width=150, int height=150)
Definition: WidgetButton.cc:23
QPalette defaultPalette
Definition: WidgetButton.h:128
QString getMinimizedLabel()
Definition: MultiWidget.h:50
QString getWidgetName()
const Position getPosition() const
Definition: WidgetButton.cc:53
QString name
Definition: WidgetButton.h:124
void showWidget(bool shown)
Position position
Definition: WidgetButton.h:35
virtual ~WidgetButton()
Definition: WidgetButton.cc:48
QWidget * getWidget()
void corrcetName()
Definition: WidgetButton.cc:76
QTimer paletteTimer
Definition: WidgetButton.h:132
void printStatus()
Definition: WidgetButton.cc:57
QWidget * mainWidget
Definition: WidgetButton.h:117