MythTV  0.27pre
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Groups Pages
mythwidgets.h
Go to the documentation of this file.
1 #ifndef MYTHWIDGETS_H_
2 #define MYTHWIDGETS_H_
3 
4 #include <QComboBox>
5 #include <QSpinBox>
6 #include <QSlider>
7 #include <QLineEdit>
8 #include <QPushButton>
9 #include <QToolButton>
10 #include <QDialog>
11 #include <QCheckBox>
12 #include <QRadioButton>
13 #include <QImage>
14 #include <QLabel>
15 #include <QTimer>
16 #include <QFocusEvent>
17 #include <QMouseEvent>
18 #include <QHideEvent>
19 #include <QKeyEvent>
20 #include <QEvent>
21 #include <QTextEdit>
22 #include <QListWidget>
23 
24 #include <vector>
25 
26 using namespace std;
27 
28 #include "virtualkeyboard_qt.h"
29 
30 #include "mythexp.h"
31 
32 // These widgets follow these general navigation rules:
33 //
34 // - Up and Down shift focus to the previous/next widget in the tab
35 // order
36 // - Left and Right adjust the current setting
37 // - Space selects
38 
39 
40 class MPUBLIC MythComboBox: public QComboBox
41 {
42  Q_OBJECT
43 
44  public:
45  MythComboBox(bool rw, QWidget* parent=0, const char* name="MythComboBox");
46 
47  void setHelpText(const QString &help);
48 
49  void setAcceptOnSelect(bool Accept) { AcceptOnSelect = Accept; }
50  void setStep(int _step = 1) { step = _step; }
51  void setAllowVirtualKeyboard(bool allowKbd = true)
52  { allowVirtualKeyboard = allowKbd; }
53  void setPopupPosition(PopupPositionQt pos) { popupPosition = pos; }
54  PopupPositionQt getPopupPosition(void) { return popupPosition; }
55 
56  signals:
57  void changeHelpText(QString);
58  void accepted(int);
59  void gotFocus();
60 
61  public slots:
62  virtual void deleteLater(void);
63  void insertItem(const QString &item)
64  {
65  QComboBox::insertItem(count()+1, item);
66  }
67 
68  protected:
69  void Teardown(void);
70  virtual ~MythComboBox(); // use deleteLater for thread safety
71  virtual void keyPressEvent (QKeyEvent *e);
72  virtual void focusInEvent(QFocusEvent *e);
73  virtual void focusOutEvent(QFocusEvent *e);
74  void Init(void);
75  virtual void popupVirtualKeyboard(void);
76 
77  private:
79  QString helptext;
84  int step;
85 };
86 
87 class MPUBLIC MythSpinBox: public QSpinBox
88 {
89  Q_OBJECT
90 
91  public:
92  MythSpinBox(QWidget* parent = NULL, const char* name = "MythSpinBox",
93  bool allow_single_step = false)
94  : QSpinBox(parent), allowsinglestep(allow_single_step)
95  {
96  setObjectName(name);
97  if (allowsinglestep)
98  setSingleStep(10);
99  }
100 
101  void setHelpText(const QString&);
102 
103  bool allowSingleStep(void) { return allowsinglestep; }
104  void setAllowSingleStep(bool arg = true) { allowsinglestep = arg; }
105 
106  signals:
107  void changeHelpText(QString);
108 
109  protected:
110  virtual void keyPressEvent(QKeyEvent* e);
111  virtual void focusInEvent(QFocusEvent *e);
112  virtual void focusOutEvent(QFocusEvent *e);
113 
114  private:
115  QString helptext;
117 };
118 
119 class MPUBLIC MythSlider: public QSlider
120 {
121  Q_OBJECT
122 
123  public:
124  MythSlider(QWidget* parent=0, const char* name="MythSlider")
125  : QSlider(parent) { setObjectName(name); };
126 
127  void setHelpText(const QString&);
128 
129  signals:
130  void changeHelpText(QString);
131 
132  protected:
133  virtual void keyPressEvent (QKeyEvent* e);
134  virtual void focusInEvent(QFocusEvent *e);
135  virtual void focusOutEvent(QFocusEvent *e);
136 
137  private:
138  QString helptext;
139 };
140 
141 class MPUBLIC MythLineEdit : public QLineEdit
142 {
143  Q_OBJECT
144 
145  public:
146  MythLineEdit(QWidget *parent=NULL, const char *name="MythLineEdit");
147  MythLineEdit(const QString &text,
148  QWidget *parent=NULL, const char *name="MythLineEdit");
149 
150  void setHelpText(const QString&);;
151  void setRW(bool readwrite = true) { rw = readwrite; };
152  void setRO() { rw = false; };
153  void setAllowVirtualKeyboard(bool allowKbd = true)
154  { allowVirtualKeyboard = allowKbd; }
155  // muthui's MythUITextEdit m_Filter & FilterNumeric
156  // may be a better way to do it
157  //void setSmartVirtualKeyboard(bool allowKbd = true)
158  // { allowSmartKeyboard = allowKbd; }
159  void setPopupPosition(PopupPositionQt pos) { popupPosition = pos; }
160  PopupPositionQt getPopupPosition(void) { return popupPosition; }
161 
162  virtual QString text();
163 
164  public slots:
165  virtual void deleteLater(void);
166  virtual void setText(const QString &text);
167 
168  signals:
169  void changeHelpText(QString);
170 
171  protected:
172  void Teardown(void);
173  virtual ~MythLineEdit(); // use deleteLater for thread safety
174 
175  virtual void keyPressEvent(QKeyEvent *e);
176  virtual void focusInEvent(QFocusEvent *e);
177  virtual void focusOutEvent(QFocusEvent *e);
178  virtual void hideEvent(QHideEvent *e);
179  virtual void mouseDoubleClickEvent(QMouseEvent *e);
180  virtual void popupVirtualKeyboard(void);
181 
182  private:
184  QString helptext;
185  bool rw;
189 };
190 
195 class MPUBLIC MythRemoteLineEdit : public QTextEdit
196 {
197  Q_OBJECT
198 
199  public:
200  MythRemoteLineEdit(QWidget *parent,
201  const char *name = "MythRemoteLineEdit");
202  MythRemoteLineEdit(const QString &contents, QWidget *parent,
203  const char *name = "MythRemoteLineEdit");
204  MythRemoteLineEdit(QFont *a_font, QWidget *parent,
205  const char *name = "MythRemoteLineEdit");
206  MythRemoteLineEdit(int lines, QWidget *parent,
207  const char *name = "MythRemoteLineEdit");
208 
209  void setHelpText(const QString&);
210  void setCycleTime(float desired_interval); // in seconds
211  void setCharacterColors(QColor unselected, QColor selected, QColor special);
212  void insert(QString text);
213  void backspace();
214  void del();
215  void setPopupPosition(PopupPositionQt pos) { popupPosition = pos; };
216  PopupPositionQt getPopupPosition(void) { return popupPosition; };
217 
218  virtual QString text();
219 
220  signals:
221  void shiftState(bool);
222  void cycleState(QString current_choice, QString set);
223  void changeHelpText(QString);
224  void gotFocus();
225  void lostFocus();
226  void tryingToLooseFocus(bool up_or_down);
227  void textChanged(QString);
228 
229  public slots:
230  virtual void deleteLater(void);
231  virtual void setText(const QString& text);
232 
233  protected:
234  void Teardown(void);
235  virtual ~MythRemoteLineEdit(); // use deleteLater for thread safety
236  virtual void focusInEvent(QFocusEvent *e);
237  virtual void focusOutEvent(QFocusEvent *e);
238  virtual void keyPressEvent(QKeyEvent *e);
239  virtual void popupVirtualKeyboard(void);
240 
241  private slots:
242  void startCycle(QString current_choice, QString set);
243  void updateCycle(QString current_choice, QString set);
244  void endCycle(bool select);
245  void endCycle(void) { endCycle(true); }
246 
247  private:
248  QFont *my_font;
249  void Init(void);
250  void cycleKeys(QString cycleList);
251  void toggleShift(void);
252 
253  bool shift;
254  QTimer *cycle_timer;
256  QString current_choice;
257  QString current_set;
259  QString helptext;
260 
264 
266  QColor col_selected;
267  QColor col_special;
268 
269  QString hex_unselected;
270  QString hex_selected;
271  QString hex_special;
272 
273  int m_lines;
274 
278 };
279 
280 class MPUBLIC MythPushButton : public QPushButton
281 {
282  Q_OBJECT
283 
284  public:
285  MythPushButton(QWidget *parent, const char *name = "MythPushButton")
286  : QPushButton(parent)
287  {
288  setObjectName(name);
289  setCheckable(false);
290  }
291 
292  MythPushButton(const QString &text, QWidget *parent)
293  : QPushButton(text, parent)
294  {
295  setObjectName("MythPushButton");
296  setCheckable(false);
297  }
298 
299  MythPushButton(const QString &ontext, const QString &offtext,
300  QWidget *parent, bool isOn = true);
301 
302  void setHelpText(const QString &help);
303 
304  void keyPressEvent(QKeyEvent *e);
305  void keyReleaseEvent(QKeyEvent *e);
306 
307  void toggleText(void);
308 
309  signals:
310  void changeHelpText(QString);
311 
312  protected:
313  void focusInEvent(QFocusEvent *e);
314  void focusOutEvent(QFocusEvent *e);
315 
316  private:
317  QColor origcolor;
318  QString helptext;
319  QString onText;
320  QString offText;
321 
322  QStringList keyPressActions;
323 };
324 
325 class MPUBLIC MythCheckBox: public QCheckBox
326 {
327  Q_OBJECT
328 
329  public:
330  MythCheckBox(QWidget *parent = 0, const char *name = "MythCheckBox")
331  : QCheckBox(parent) { setObjectName(name); };
332  MythCheckBox(const QString &text,
333  QWidget *parent = 0, const char *name = "MythCheckBox")
334  : QCheckBox(text, parent) { setObjectName(name); };
335 
336  void setHelpText(const QString&);
337 
338  signals:
339  void changeHelpText(QString);
340 
341  protected:
342  virtual void keyPressEvent(QKeyEvent* e);
343  virtual void focusInEvent(QFocusEvent *e);
344  virtual void focusOutEvent(QFocusEvent *e);
345 
346  private:
347  QString helptext;
348 };
349 
350 class MPUBLIC MythRadioButton: public QRadioButton
351 {
352  Q_OBJECT
353 
354  public:
355  MythRadioButton(QWidget* parent = 0, const char* name = "MythRadioButton")
356  : QRadioButton(parent) { setObjectName(name); };
357 
358  void setHelpText(const QString&);
359 
360  signals:
361  void changeHelpText(QString);
362 
363  protected:
364  virtual void keyPressEvent(QKeyEvent* e);
365  virtual void focusInEvent(QFocusEvent *e);
366  virtual void focusOutEvent(QFocusEvent *e);
367 
368  private:
369  QString helptext;
370 };
371 
372 class MPUBLIC MythListBox: public QListWidget
373 {
374  Q_OBJECT
375 
376  public:
377  MythListBox(QWidget *parent,
378  const QString &name = QString("MythListBox"));
379 
380  virtual void keyPressEvent(QKeyEvent* e);
381 
382 #if QT_VERSION < 0x040400
383  void setCurrentRow(int row) { QListWidget::setCurrentRow(row); }
384  void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)
385  {
386  selectionModel()->setCurrentIndex(indexFromItem(item(row)), command);
387  }
388 #endif
389 
390  QString currentText(void) const { return text(currentRow()); }
391 
392  void setTopRow(uint row);
393  void insertItem(const QString&);
394  void insertStringList(const QStringList&);
395  void removeRow(uint row);
396  void changeItem(const QString&, uint row);
397  int getIndex(const QList<QListWidgetItem*>&);
398  QList<QListWidgetItem*> findItems(
399  const QString &text, Qt::MatchFlags flags = Qt::MatchStartsWith) const
400  {
401  return QListWidget::findItems(text, flags);
402  }
403 
404 
405  void setHelpText(const QString&);
406 
407  protected:
408  void focusInEvent(QFocusEvent *e);
409  void focusOutEvent(QFocusEvent *e);
410  virtual void ensurePolished(void) const;
411 
412  bool itemVisible(uint row) const;
413  QString text(uint row) const;
414 
415  public slots:
416  void setCurrentItem(const QString& matchText, bool caseSensitive = true,
417  bool partialMatch = false);
418 
419  signals:
420  void changeHelpText(QString);
421  void accepted(int);
422  void menuButtonPressed(int);
423  void editButtonPressed(int);
424  void deleteButtonPressed(int);
425  void highlighted(int);
426 
427  private slots:
428  void HandleItemSelectionChanged(void);
429 
430  private:
431  QString helptext;
432 };
433 
434 #endif
435 
436 /* vim: set expandtab tabstop=4 shiftwidth=4: */