00001 #ifndef MYTHDIALOGBOX_H_
00002 #define MYTHDIALOGBOX_H_
00003
00004 #include <QDir>
00005 #include <QEvent>
00006
00007 #include "mythscreentype.h"
00008 #include "mythuitextedit.h"
00009
00010 class QString;
00011 class QStringList;
00012 class QTimer;
00013
00014 class MythUIButtonListItem;
00015 class MythUIButtonList;
00016 class MythUIButton;
00017 class MythUITextEdit;
00018 class MythUIImage;
00019 class MythUIStateType;
00020 class MythMenu;
00021
00022
00032 class MUI_PUBLIC DialogCompletionEvent : public QEvent
00033 {
00034 public:
00035 DialogCompletionEvent(const QString &id, int result, QString text,
00036 QVariant data)
00037 : QEvent(kEventType),
00038 m_id(id), m_result(result), m_resultText(text), m_resultData(data) { }
00039
00040 QString GetId() { return m_id; }
00041 int GetResult() { return m_result; }
00042 QString GetResultText() { return m_resultText; }
00043 QVariant GetData() { return m_resultData; }
00044
00045 static Type kEventType;
00046
00047 private:
00048 QString m_id;
00049 int m_result;
00050 QString m_resultText;
00051 QVariant m_resultData;
00052 };
00053
00054
00055 class MUI_PUBLIC MythMenuItem
00056 {
00057 public:
00058 MythMenuItem(const QString &text, QVariant data = 0, bool checked = false, MythMenu *subMenu = NULL) :
00059 Text(text), Data(data), Checked(checked), SubMenu(subMenu), UseSlot(false) { Init(); }
00060 MythMenuItem(const QString &text, const char *slot, bool checked = false, MythMenu *subMenu = NULL) :
00061 Text(text), Data(qVariantFromValue(slot)), Checked(checked), SubMenu(subMenu), UseSlot(true) { Init(); }
00062
00063 QString Text;
00064 QVariant Data;
00065 bool Checked;
00066 MythMenu *SubMenu;
00067 bool UseSlot;
00068
00069 private:
00070 void Init(void) { Text.detach(); }
00071 };
00072
00073 class MUI_PUBLIC MythMenu
00074 {
00075 friend class MythDialogBox;
00076
00077 public:
00078 MythMenu(const QString &text, QObject *retobject, const QString &resultid);
00079 MythMenu(const QString &title, const QString &text, QObject *retobject, const QString &resultid);
00080 ~MythMenu(void);
00081
00082 void AddItem(const QString &title, QVariant data = 0, MythMenu *subMenu = NULL,
00083 bool selected = false, bool checked = false);
00084 void AddItem(const QString &title, const char *slot, MythMenu *subMenu = NULL,
00085 bool selected = false, bool checked = false);
00086
00087 void SetParent(MythMenu *parent) { m_parentMenu = parent; }
00088
00089 private:
00090 void Init(void);
00091
00092 MythMenu *m_parentMenu;
00093 QString m_title;
00094 QString m_text;
00095 QString m_resultid;
00096 QObject *m_retObject;
00097 QList<MythMenuItem*> m_menuItems;
00098 int m_selectedItem;
00099 };
00100
00109 class MUI_PUBLIC MythDialogBox : public MythScreenType
00110 {
00111 Q_OBJECT
00112 public:
00113 MythDialogBox(const QString &text,
00114 MythScreenStack *parent, const char *name,
00115 bool fullscreen = false, bool osd = false);
00116 MythDialogBox(const QString &title, const QString &text,
00117 MythScreenStack *parent, const char *name,
00118 bool fullscreen = false, bool osd = false);
00119 MythDialogBox(MythMenu* menu, MythScreenStack *parent, const char *name,
00120 bool fullscreen = false, bool osd = false);
00121
00122 ~MythDialogBox(void);
00123
00124 virtual bool Create(void);
00125
00126 void SetMenuItems(MythMenu *menu);
00127
00128 void SetReturnEvent(QObject *retobject, const QString &resultid);
00129 void SetBackAction(const QString &text, QVariant data);
00130 void SetExitAction(const QString &text, QVariant data);
00131 void SetText(const QString &text);
00132
00133 void AddButton(const QString &title, QVariant data = 0,
00134 bool newMenu = false, bool setCurrent = false);
00135 void AddButton(const QString &title, const char *slot,
00136 bool newMenu = false, bool setCurrent = false);
00137
00138 virtual bool keyPressEvent(QKeyEvent *event);
00139 virtual bool gestureEvent(MythGestureEvent *event);
00140
00141 public slots:
00142 void Select(MythUIButtonListItem* item);
00143
00144 signals:
00145 void Selected();
00146 void Closed(QString, int);
00147
00148 protected:
00149 void SendEvent(int res, QString text = "", QVariant data = 0);
00150 void updateMenu(void);
00151
00152 MythUIText *m_titlearea;
00153 MythUIText *m_textarea;
00154 MythUIButtonList *m_buttonList;
00155 QObject *m_retObject;
00156 QString m_id;
00157 bool m_useSlots;
00158
00159 bool m_fullscreen;
00160 bool m_osdDialog;
00161 QString m_title;
00162 QString m_text;
00163
00164 QString m_backtext;
00165 QVariant m_backdata;
00166 QString m_exittext;
00167 QVariant m_exitdata;
00168
00169 MythMenu *m_menu;
00170 MythMenu *m_currentMenu;
00171 };
00172
00173
00182 class MUI_PUBLIC MythConfirmationDialog : public MythScreenType
00183 {
00184 Q_OBJECT
00185
00186 public:
00187 MythConfirmationDialog(MythScreenStack *parent, const QString &message,
00188 bool showCancel = true);
00189
00190 bool Create(void);
00191 void SetReturnEvent(QObject *retobject, const QString &resultid);
00192 void SetData(QVariant data) { m_resultData = data; }
00193 void SetMessage(const QString &message);
00194
00195 bool keyPressEvent(QKeyEvent *event);
00196
00197 signals:
00198 void haveResult(bool);
00199
00200 private:
00201 void sendResult(bool);
00202 MythUIText *m_messageText;
00203 QString m_message;
00204 bool m_showCancel;
00205 QObject *m_retObject;
00206 QString m_id;
00207 QVariant m_resultData;
00208
00209 private slots:
00210 void Confirm(void);
00211 void Cancel();
00212 };
00213
00222 class MUI_PUBLIC MythTextInputDialog : public MythScreenType
00223 {
00224 Q_OBJECT
00225
00226 public:
00227 MythTextInputDialog(MythScreenStack *parent, const QString &message,
00228 InputFilter filter = FilterNone,
00229 bool isPassword = false,
00230 const QString &defaultValue = "");
00231
00232 bool Create(void);
00233 void SetReturnEvent(QObject *retobject, const QString &resultid);
00234
00235 signals:
00236 void haveResult(QString);
00237
00238 protected:
00239 MythUITextEdit *m_textEdit;
00240 QString m_message;
00241 QString m_defaultValue;
00242 InputFilter m_filter;
00243 bool m_isPassword;
00244 QObject *m_retObject;
00245 QString m_id;
00246
00247 protected slots:
00248 void sendResult();
00249 };
00250
00251
00266 class MUI_PUBLIC MythUISearchDialog : public MythScreenType
00267 {
00268 Q_OBJECT
00269
00270 public:
00271 MythUISearchDialog(MythScreenStack *parent,
00272 const QString &message,
00273 const QStringList &list,
00274 bool matchAnywhere = false,
00275 const QString &defaultValue = "");
00276
00277 bool Create(void);
00278 void SetReturnEvent(QObject *retobject, const QString &resultid);
00279
00280 signals:
00281 void haveResult(QString);
00282
00283 private:
00284 MythUIButtonList *m_itemList;
00285 MythUITextEdit *m_textEdit;
00286 MythUIText *m_titleText;
00287 MythUIText *m_matchesText;
00288
00289 QString m_title;
00290 QString m_defaultValue;
00291 QStringList m_list;
00292 bool m_matchAnywhere;
00293
00294 QObject *m_retObject;
00295 QString m_id;
00296
00297 private slots:
00298 void slotSendResult(void);
00299 void slotUpdateList(void);
00300 };
00301
00310 class MUI_PUBLIC MythTimeInputDialog : public MythScreenType
00311 {
00312 Q_OBJECT
00313
00314 public:
00315
00316 enum TimeInputResolution {
00317
00318 kNoDate = 0x01,
00319 kYear = 0x02,
00320 kMonth = 0x04,
00321 kDay = 0x08,
00322
00323
00324 kNoTime = 0x10,
00325 kHours = 0x20,
00326 kMinutes = 0x40,
00327
00328
00329 kFutureDates = 0x100,
00330 kPastDates = 0x200,
00331 kAllDates = 0x300
00332 };
00333
00334 MythTimeInputDialog(MythScreenStack *parent, const QString &message,
00335 int resolutionFlags,
00336 QDateTime startTime = QDateTime::currentDateTime(),
00337 int dayLimit = 14);
00338
00339 bool Create();
00340 void SetReturnEvent(QObject *retobject, const QString &resultid);
00341
00342 signals:
00343 void haveResult(QDateTime time);
00344
00345 private slots:
00346 void okClicked(void);
00347
00348 private:
00349 QString m_message;
00350 QDateTime m_startTime;
00351 int m_resolution;
00352 int m_rangeLimit;
00353 QStringList m_list;
00354 QString m_currentValue;
00355
00356 MythUIButtonList *m_dateList;
00357 MythUIButtonList *m_timeList;
00358
00359 QObject *m_retObject;
00360 QString m_id;
00361 };
00362
00363 MUI_PUBLIC MythConfirmationDialog *ShowOkPopup(const QString &message, QObject *parent = NULL,
00364 const char *slot = NULL, bool showCancel = false);
00365
00366 Q_DECLARE_METATYPE(MythMenuItem*)
00367 Q_DECLARE_METATYPE(const char*)
00368 Q_DECLARE_METATYPE(QFileInfo)
00369
00370 #endif