1 #ifndef MACHINELIST_H 2 #define MACHINELIST_H 3 4 #include <QtGui> 5 #include <QIcon> 6 #include <QTreeWidgetItem> 7 #include <QHash> 8 #include <QList> 9 10 #include "xmldbmgr.h" 11 #include "userdatadbmgr.h" 12 #include "datinfodbmgr.h" 13 #include "iconcachedbmgr.h" 14 #include "machinelistdbmgr.h" 15 #include "macros.h" 16 17 class MachineList : public QObject 18 { 19 Q_OBJECT 20 21 public: 22 int numTotalMachines; 23 int numMachines; 24 int numCorrectMachines; 25 int numMostlyCorrectMachines; 26 int numIncorrectMachines; 27 int numNotFoundMachines; 28 int numUnknownMachines; 29 int numMatchedMachines; 30 int numTaggedSets; 31 int numVerifyRoms; 32 int uncommittedXmlDbRows; 33 bool verifyCurrentOnly; 34 bool autoRomCheck; 35 bool mergeCategories; 36 bool dtdBufferReady; 37 bool initialLoad; 38 char oldRomState; 39 QIcon qmc2UnknownImageIcon; 40 QIcon qmc2UnknownBIOSImageIcon; 41 QIcon qmc2UnknownDeviceImageIcon; 42 QIcon qmc2CorrectImageIcon; 43 QIcon qmc2CorrectBIOSImageIcon; 44 QIcon qmc2CorrectDeviceImageIcon; 45 QIcon qmc2MostlyCorrectImageIcon; 46 QIcon qmc2MostlyCorrectBIOSImageIcon; 47 QIcon qmc2MostlyCorrectDeviceImageIcon; 48 QIcon qmc2IncorrectImageIcon; 49 QIcon qmc2IncorrectBIOSImageIcon; 50 QIcon qmc2IncorrectDeviceImageIcon; 51 QIcon qmc2NotFoundImageIcon; 52 QIcon qmc2NotFoundBIOSImageIcon; 53 QIcon qmc2NotFoundDeviceImageIcon; 54 QProcess *loadProc; 55 QProcess *verifyProc; 56 QTime loadTimer; 57 QTime verifyTimer; 58 QTime parseTimer; 59 QTime miscTimer; 60 QFile romStateCache; 61 QFile machineListCache; 62 QTextStream tsRomCache; 63 QTextStream tsMachineListCache; 64 QString emulatorType; 65 QString emulatorVersion; 66 QString verifyLastLine; 67 QString xmlLineBuffer; 68 QStringList emulatorIdentifiers; 69 QStringList verifiedList; 70 QHash<QString, QString> driverNameHash; 71 QHash<QString, char> machineStatusHash; 72 QHash<QString, QString *> categoryNames; 73 QHash<QString, QString *> categoryHash; 74 QHash<QString, QString *> versionNames; 75 QHash<QString, QString *> versionHash; 76 QHash<QString, bool> biosSets; 77 QHash<QString, bool> deviceSets; 78 QHash<QString, QStringList> hierarchyHash; 79 QTreeWidgetItem *checkedItem; 80 81 static QStringList romTypeNames; 82 static QStringList phraseTranslatorList; 83 static QHash<QString, QString> reverseTranslations; 84 static QHash<QString, QString> machineStateTranslations; 85 static bool creatingCatView; 86 static bool creatingVerView; 87 static QString trQuestionMark; 88 static QString trWaitingForData; 89 90 QString lookupDriverName(const QString &); 91 QString romStatus(const QString &, bool translated = false); 92 QString &status(); romState(const QString & systemName)93 char romState(const QString &systemName) { char state = machineStatusHash.value(systemName); return (state == 0 ? 'U' : state); } isBios(const QString & systemName)94 bool isBios(const QString &systemName) { return biosSets.contains(systemName); } isDevice(const QString & systemName)95 bool isDevice(const QString &systemName) { return deviceSets.contains(systemName); } rank(const QString & systemName)96 int rank(const QString &systemName) { return userDataDb()->rank(systemName); } comment(const QString systemName)97 QString comment(const QString systemName) { return userDataDb()->comment(systemName); } 98 99 void reopenIconCacheDb(); 100 bool loadIcon(const QString &, QTreeWidgetItem *); clearCategoryNames()101 void clearCategoryNames() { qDeleteAll(categoryNames); categoryNames.clear(); } clearVersionNames()102 void clearVersionNames() { qDeleteAll(versionNames); versionNames.clear(); } 103 104 QString sortCriteriaName(int); xmlDb()105 XmlDatabaseManager *xmlDb() { return m_xmlDb; } userDataDb()106 UserDataDatabaseManager *userDataDb() { return m_userDataDb; } datInfoDb()107 DatInfoDatabaseManager *datInfoDb() { return m_datInfoDb; } machineListDb()108 MachineListDatabaseManager *machineListDb() { return m_machineListDb; } iconCacheDb()109 IconCacheDatabaseManager *iconCacheDb() { return m_iconCacheDb; } 110 111 MachineList(QObject *parent = 0); 112 ~MachineList(); 113 114 public slots: 115 void load(); 116 void verify(bool currentOnly = false); 117 void loadCatverIni(); 118 void createVersionView(); 119 void loadCategoryIni(); 120 void createCategoryView(); 121 void loadFavorites(); 122 void saveFavorites(); 123 void loadPlayHistory(); 124 void savePlayHistory(); 125 126 // process management 127 void loadStarted(); 128 void loadFinished(int, QProcess::ExitStatus); 129 void loadReadyReadStandardOutput(); 130 void verifyStarted(); 131 void verifyFinished(int, QProcess::ExitStatus); 132 void verifyReadyReadStandardOutput(); 133 134 // internal methods 135 QString value(QString, QString, bool translate = false); 136 void parse(); 137 void parseMachineDetail(QTreeWidgetItem *); 138 void insertAttributeItems(QTreeWidgetItem *, QString, QStringList, QStringList, bool translate = false); 139 void insertAttributeItems(QList<QTreeWidgetItem *> *itemList, QString element, QStringList attributes, QStringList descriptions, bool translate = false); 140 void enableWidgets(bool enable = true); disableWidgets()141 void disableWidgets() { enableWidgets(false); } 142 void filter(bool initial = false); 143 void filterOne(QTreeWidgetItem *item, char romState); 144 145 signals: 146 void widgetsEnabled(bool); 147 148 private: 149 XmlDatabaseManager *m_xmlDb; 150 UserDataDatabaseManager *m_userDataDb; 151 DatInfoDatabaseManager *m_datInfoDb; 152 MachineListDatabaseManager *m_machineListDb; 153 IconCacheDatabaseManager *m_iconCacheDb; 154 QString m_trL, m_trC, m_trM, m_trI, m_trN, m_trU, m_trS, m_trT; 155 QString m_statusString, m_statusTemplate; 156 bool m_showC, m_showM, m_showI, m_showN, m_showU; 157 bool m_showDeviceSets, m_showBiosSets; 158 bool m_doFilter; 159 }; 160 161 class MachineListItem : public QTreeWidgetItem 162 { 163 public: 164 static Qt::ItemFlags defaultItemFlags; 165 QTreeWidgetItem(parentTreeWidget,QTreeWidgetItem::UserType)166 MachineListItem(QTreeWidget *parentTreeWidget = 0) : QTreeWidgetItem(parentTreeWidget, QTreeWidgetItem::UserType) {} MachineListItem(QTreeWidgetItem * parentItem)167 MachineListItem(QTreeWidgetItem *parentItem) : QTreeWidgetItem(parentItem, QTreeWidgetItem::UserType) {} 168 169 virtual bool operator<(const QTreeWidgetItem &) const; 170 id()171 QString id() { return text(QMC2_MACHINELIST_COLUMN_NAME); } name()172 QString name() { return id(); } description()173 QString description() { return text(QMC2_MACHINELIST_COLUMN_MACHINE); } manufacturer()174 QString manufacturer() { return text(QMC2_MACHINELIST_COLUMN_MANU); } year()175 QString year() { return text(QMC2_MACHINELIST_COLUMN_YEAR); } romTypes()176 QString romTypes() { return text(QMC2_MACHINELIST_COLUMN_RTYPES); } driverStatus()177 QString driverStatus() { return text(QMC2_MACHINELIST_COLUMN_DRVSTAT); } sourceFile()178 QString sourceFile() { return text(QMC2_MACHINELIST_COLUMN_SRCFILE); } category()179 QString category() { return text(QMC2_MACHINELIST_COLUMN_CATEGORY); } version()180 QString version() { return text(QMC2_MACHINELIST_COLUMN_VERSION); } machineIcon()181 QIcon machineIcon() { return icon(QMC2_MACHINELIST_COLUMN_MACHINE); } players()182 int players() { bool ok; int p = text(QMC2_MACHINELIST_COLUMN_PLAYERS).toInt(&ok); return ok ? p : -1; } rank()183 int rank() { return whatsThis(QMC2_MACHINELIST_COLUMN_RANK).toInt(); } isParent()184 bool isParent() { return parentId().isEmpty(); } isClone()185 bool isClone() { return !isParent(); } tagged()186 bool tagged() { return checkState(QMC2_MACHINELIST_COLUMN_TAG) == Qt::Checked; } 187 bool isBios(); 188 bool isDevice(); 189 char romStatus(); 190 QString parentId(); 191 }; 192 193 #endif 194