00001 #ifndef SMARTPLAYLIST_H_
00002 #define SMARTPLAYLIST_H_
00003
00004
00005 #include <vector>
00006
00007 class MythUIButton;using namespace std;
00008
00009
00010 #include <QDateTime>
00011 #include <QVariant>
00012 #include <QKeyEvent>
00013
00014
00015 #include <mythscreentype.h>
00016
00017 struct SmartPLOperator;
00018 struct SmartPLField;
00019
00020 enum SmartPLFieldType
00021 {
00022 ftString = 1,
00023 ftNumeric,
00024 ftDate,
00025 ftBoolean
00026 };
00027
00028
00029 QString getCriteriaSQL(QString fieldName, QString operatorName,
00030 QString value1, QString value2);
00031
00032 QString getSQLFieldName(QString orderBy);
00033 QString getOrderBySQL(QString orderByFields);
00034
00035
00036 QString formattedFieldValue(const QVariant &value);
00037
00038
00040
00041
00042 class SmartPLCriteriaRow
00043 {
00044 public:
00045
00046 SmartPLCriteriaRow(const QString &_Field, const QString &_Operator,
00047 const QString &_Value1, const QString &_Value2);
00048 SmartPLCriteriaRow(void);
00049
00050 ~SmartPLCriteriaRow(void);
00051
00052 QString getSQL(void);
00053
00054 bool saveToDatabase(int smartPlaylistID);
00055
00056 QString toString(void);
00057
00058 public:
00059 QString Field;
00060 QString Operator;
00061 QString Value1;
00062 QString Value2;
00063 };
00064
00065 Q_DECLARE_METATYPE(SmartPLCriteriaRow *)
00066
00067 class SmartPlaylistEditor : public MythScreenType
00068 {
00069 Q_OBJECT
00070 public:
00071
00072 SmartPlaylistEditor(MythScreenStack *parent);
00073 ~SmartPlaylistEditor(void);
00074
00075 bool Create(void);
00076
00077 bool keyPressEvent(QKeyEvent *event);
00078 void customEvent(QEvent *event);
00079
00080 QString getSQL(QString fields);
00081 QString getWhereClause(void);
00082 QString getOrderByClause(void);
00083 void getCategoryAndName(QString &category, QString &name);
00084 void newSmartPlaylist(QString category);
00085 void editSmartPlaylist(QString category, QString name);
00086 static bool deleteSmartPlaylist(QString category, QString name);
00087 static bool deleteCategory(QString category);
00088 static int lookupCategoryID(QString category);
00089
00090 signals:
00091 void smartPLChanged(const QString &category, const QString &name);
00092
00093 protected slots:
00094
00095 void titleChanged(void);
00096 void updateMatches(void);
00097
00098 void saveClicked(void);
00099 void showResultsClicked(void);
00100
00101 void showCategoryMenu(void);
00102 void showCriteriaMenu(void);
00103
00104 void newCategory(const QString &category);
00105 void startDeleteCategory(const QString &category);
00106 void renameCategory(const QString &category);
00107
00108
00109 void orderByClicked(void);
00110
00111 void editCriteria(void);
00112 void addCriteria(void);
00113 void deleteCriteria(void);
00114 void doDeleteCriteria(bool doit);
00115 void criteriaChanged();
00116 void orderByChanged(QString orderBy);
00117
00118 private:
00119 void getSmartPlaylistCategories(void);
00120 void loadFromDatabase(QString category, QString name);
00121
00122 QList<SmartPLCriteriaRow*> m_criteriaRows;
00123 SmartPLCriteriaRow* m_tempCriteriaRow;
00124
00125 int m_matchesCount;
00126 bool m_newPlaylist;
00127 bool m_playlistIsValid;
00128 QString m_originalCategory;
00129 QString m_originalName;
00130
00131
00132 MythUIButtonList *m_categorySelector;
00133 MythUIButton *m_categoryButton;
00134 MythUITextEdit *m_titleEdit;
00135 MythUIButtonList *m_matchSelector;
00136 MythUIButtonList *m_criteriaList;
00137 MythUIButtonList *m_orderBySelector;
00138 MythUIButton *m_orderByButton;
00139 MythUIText *m_matchesText;
00140 MythUISpinBox *m_limitSpin;
00141 MythUIButton *m_cancelButton;
00142 MythUIButton *m_saveButton;
00143 MythUIButton *m_showResultsButton;
00144 };
00145
00146 class CriteriaRowEditor : public MythScreenType
00147 {
00148 Q_OBJECT
00149 public:
00150
00151 CriteriaRowEditor(MythScreenStack *parent, SmartPLCriteriaRow *row);
00152 ~CriteriaRowEditor(void);
00153
00154 bool Create(void);
00155
00156 protected slots:
00157 void fieldChanged(void);
00158 void operatorChanged(void);
00159 void valueEditChanged(void);
00160 void valueButtonClicked(void);
00161 void setValue(QString value);
00162 void setDate(QString date);
00163 void saveClicked(void);
00164
00165 signals:
00166 void criteriaChanged();
00167
00168 private:
00169 void updateFields(void);
00170 void updateOperators(void);
00171 void updateValues(void);
00172 void enableSaveButton(void);
00173
00174 void getOperatorList(SmartPLFieldType fieldType);
00175
00176 void editDate(void);
00177
00178 SmartPLCriteriaRow* m_criteriaRow;
00179
00180 QStringList m_searchList;
00181
00182
00183 MythUIButtonList *m_fieldSelector;
00184 MythUIButtonList *m_operatorSelector;
00185
00186 MythUITextEdit *m_value1Edit;
00187 MythUITextEdit *m_value2Edit;
00188
00189 MythUIButtonList *m_value1Selector;
00190 MythUIButtonList *m_value2Selector;
00191
00192 MythUISpinBox *m_value1Spinbox;
00193 MythUISpinBox *m_value2Spinbox;
00194
00195 MythUIButton *m_value1Button;
00196 MythUIButton *m_value2Button;
00197
00198 MythUIText *m_andText;
00199
00200 MythUIButton *m_cancelButton;
00201 MythUIButton *m_saveButton;
00202 };
00203
00204
00205 class SmartPLResultViewer : public MythScreenType
00206 {
00207 Q_OBJECT
00208
00209 public:
00210
00211 SmartPLResultViewer(MythScreenStack *parent);
00212 ~SmartPLResultViewer(void);
00213
00214 bool Create(void);
00215 bool keyPressEvent(QKeyEvent *event);
00216 void setSQL(QString sql);
00217
00218 private slots:
00219 void trackVisible(MythUIButtonListItem *item);
00220 void trackSelected(MythUIButtonListItem *item);
00221
00222 private:
00223 void showTrackInfo(void);
00224
00225 MythUIButtonList *m_trackList;
00226 MythUIText *m_positionText;
00227 };
00228
00229
00230 class SmartPLOrderByDialog: public MythScreenType
00231 {
00232 Q_OBJECT
00233
00234 public:
00235
00236 SmartPLOrderByDialog(MythScreenStack *parent);
00237 ~SmartPLOrderByDialog();
00238
00239 bool Create(void);
00240
00241 QString getFieldList(void);
00242 void setFieldList(const QString &fieldList);
00243
00244 signals:
00245 void orderByChanged(QString orderBy);
00246
00247 protected slots:
00248 void addPressed(void);
00249 void deletePressed(void);
00250 void moveUpPressed(void);
00251 void moveDownPressed(void);
00252 void ascendingPressed(void);
00253 void descendingPressed(void);
00254 void okPressed(void);
00255 void orderByChanged(void);
00256 void fieldListSelectionChanged(MythUIButtonListItem *item);
00257
00258 private:
00259 void getOrderByFields(void);
00260
00261 MythUIButtonList *m_fieldList;
00262 MythUIButtonList *m_orderSelector;
00263 MythUIButton *m_addButton;
00264 MythUIButton *m_deleteButton;
00265 MythUIButton *m_moveUpButton;
00266 MythUIButton *m_moveDownButton;
00267 MythUIButton *m_ascendingButton;
00268 MythUIButton *m_descendingButton;
00269 MythUIButton *m_cancelButton;
00270 MythUIButton *m_okButton;
00271 };
00272
00273 class SmartPLDateDialog: public MythScreenType
00274 {
00275 Q_OBJECT
00276
00277 public:
00278
00279 SmartPLDateDialog(MythScreenStack *parent);
00280 ~SmartPLDateDialog();
00281
00282 bool Create(void);
00283
00284 QString getDate(void);
00285 void setDate(QString date);
00286
00287 signals:
00288 void dateChanged(QString date);
00289
00290 protected slots:
00291 void okPressed(void);
00292 void fixedCheckToggled(bool on);
00293 void nowCheckToggled(bool on);
00294 void valueChanged(void);
00295
00296 private:
00297
00298 bool m_updating;
00299
00300 MythUICheckBox *m_fixedRadio;
00301 MythUISpinBox *m_daySpin;
00302 MythUISpinBox *m_monthSpin;
00303 MythUISpinBox *m_yearSpin;
00304
00305 MythUICheckBox *m_nowRadio;
00306 MythUISpinBox *m_addDaysSpin;
00307
00308 MythUIText *m_statusText;
00309
00310 MythUIButton *m_cancelButton;
00311 MythUIButton *m_okButton;
00312 };
00313
00314 #endif