00001 #ifndef GAMETREE_H_
00002 #define GAMETREE_H_
00003
00004 #include <qtimer.h>
00005 #include <qmutex.h>
00006 #include <qvaluevector.h>
00007 #include <qptrvector.h>
00008
00009 #include <mythtv/mythdialogs.h>
00010 #include <mythtv/mythdbcon.h>
00011 #include <mythtv/uitypes.h>
00012
00013 #include "rominfo.h"
00014
00015
00016
00017
00018
00019 class GameTreeRoot
00020 {
00021 public:
00022 GameTreeRoot(const QString& levels, const QString& filter)
00023 : m_levels(QStringList::split(" ", levels))
00024 , m_filter(filter)
00025 {
00026 }
00027
00028 ~GameTreeRoot()
00029 {
00030 }
00031
00032 unsigned getDepth() const { return m_levels.size(); }
00033 const QString& getLevel(unsigned i) const { return m_levels[i]; }
00034 const QString& getFilter() const { return m_filter; }
00035
00036 private:
00037 QStringList m_levels;
00038 QString m_filter;
00039 };
00040
00041
00042
00043
00044
00045 class GameTreeItem : public QObject
00046 {
00047 Q_OBJECT
00048 public:
00049 GameTreeItem(GameTreeRoot* root)
00050 : m_romInfo(0)
00051 , m_root(root)
00052 , m_depth(0)
00053 , m_isFilled(false)
00054 {
00055 info_popup = NULL;
00056 m_gameShowFileName = gContext->GetSetting("GameShowFileNames").toInt();
00057 m_showHashed = false;
00058 }
00059
00060 GameTreeItem(GameTreeRoot* root, bool showHashed)
00061 : m_romInfo(0)
00062 , m_root(root)
00063 , m_depth(0)
00064 , m_isFilled(false)
00065 {
00066 info_popup = NULL;
00067 m_gameShowFileName = gContext->GetSetting("GameShowFileNames").toInt();
00068 m_showHashed = showHashed;
00069 }
00070
00071
00072 ~GameTreeItem()
00073 {
00074 if (m_romInfo)
00075 delete m_romInfo;
00076 }
00077
00078 bool isFilled() const { return m_isFilled; }
00079 bool isLeaf() const { return m_depth == m_root->getDepth(); }
00080
00081 const QString& getLevel() const { return m_root->getLevel(m_depth - 1); }
00082 RomInfo* getRomInfo() const { return m_romInfo; }
00083 QString getFillSql(QString layer) const;
00084
00085 void setFilled(bool isFilled) { m_isFilled = isFilled; }
00086
00087 GameTreeItem* createChild(QSqlQuery *query) const;
00088 void showGameInfo(RomInfo *rom);
00089
00090 RomInfo* m_romInfo;
00091
00092 protected slots:
00093 void closeGameInfo(void);
00094 void edit(void);
00095
00096 private:
00097 QButton *OKButton;
00098 MythPopupBox *info_popup;
00099 GameTreeRoot* m_root;
00100 unsigned m_depth;
00101 bool m_isFilled;
00102 int m_gameShowFileName;
00103 bool m_showHashed;
00104 };
00105
00106 class GameTree : public MythThemedDialog
00107 {
00108 Q_OBJECT
00109
00110 public:
00111 typedef QValueVector<int> IntVector;
00112
00113 GameTree(MythMainWindow *parent, QString windowName,
00114 QString themeFilename, const char *name = 0);
00115 ~GameTree();
00116
00117 public slots:
00118 void handleTreeListSelection(int, IntVector*);
00119 void handleTreeListEntry(int, IntVector*);
00120 void showImageTimeout(void);
00121
00122 protected:
00123 void keyPressEvent(QKeyEvent *e);
00124
00125 private:
00126 void updateRomInfo(RomInfo *rom);
00127 void clearRomInfo(void);
00128 void wireUpTheme(void);
00129 void fillNode(GenericTree *node);
00130 void showInfo(void);
00131 void toggleFavorite(void);
00132
00133 GenericTree *m_gameTree;
00134 GenericTree *m_favouriteNode;
00135 UIManagedTreeListType *m_gameTreeUI;
00136
00137 QValueVector<GameTreeRoot *> m_gameTreeRoots;
00138 QValueVector<GameTreeItem *> m_gameTreeItems;
00139
00140 UITextType *m_gameTitle;
00141 UITextType *m_gameSystem;
00142 UITextType *m_gameYear;
00143 UITextType *m_gameGenre;
00144 UITextType *m_gameFavourite;
00145 UIImageType *m_gameImage;
00146
00147 QTimer *timer;
00148 int m_showHashed;
00149 };
00150
00151 #endif