Emulator selector is updated with only emulators to selected setup
authorMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 29 Oct 2010 22:47:04 +0000 (01:47 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 29 Oct 2010 22:47:04 +0000 (01:47 +0300)
(platform-media type combination).

src/db/databasemanager.cpp
src/db/dbexecutable.cpp
src/db/dbexecutable.h
src/db/dbquerymodelmanager.cpp
src/emulauncher.cpp
src/widgets/efcombobox.cpp
src/widgets/efcombobox.h
src/widgets/executablecombobox.cpp
src/widgets/executablecombobox.h

index e5d1dad..bd8e501 100644 (file)
@@ -54,9 +54,17 @@ DatabaseManager::~DatabaseManager()
     // be destroyed when parent is destroyed
 }
 
+/*
+ You may wanna set the possible filters (filterDataObjects) before calling getDataModel.
+ After filtering do not set update to true. Data model is already updated.
+*/
 QSqlQueryModel* DatabaseManager::getDataModel(bool update)
 {
-    if (!sqlTableModel || (sqlTableModel && !update)) sqlTableModel = getData();
+    if (!sqlTableModel) {
+        sqlTableModel = getData();
+    }
+    else if (update)
+        clearFilters();
     return sqlTableModel;
 }
 
index c0c1c13..b0bb849 100644 (file)
@@ -119,7 +119,7 @@ QString DbExecutable::constructFilterById(int id) const
 
 QString DbExecutable::constructSelect(QString whereClause) const
 {
-    return QString("SELECT "
+    QString sql = QString("SELECT "
         "executable.id AS ExecutableId, "
         "executable.name AS ExecutableName, "
         "executable.executable AS Executable, "
@@ -132,8 +132,9 @@ QString DbExecutable::constructSelect(QString whereClause) const
         "INNER JOIN platform ON setup.platformid=platform.id "
         "INNER JOIN mediatype ON setup.mediatypeid=mediatype.id "
         "%1 "
-        "ORDER BY executable.name ")
-        .arg(whereClause);
+        "ORDER BY executable.name ").arg(whereClause);
+    qDebug() << sql;
+    return sql;
 }
 
 /*bool DbExecutable::deleteDataObject(int id) const
@@ -164,3 +165,11 @@ QString DbExecutable::getCountRefsSelect(int id) const
     // currently.
     return QString("SELECT 0");
 }
+
+void DbExecutable::filterByPlatformMediaType(int platformId, int mediaTypeId)
+{
+    QList<QString> filters;
+    filters.append(QString("setup.platformid=%1").arg(platformId));
+    filters.append(QString("setup.mediatypeid=%1").arg(mediaTypeId));
+    filterDataObjects(filters);
+}
index 9aa7987..b6afe98 100644 (file)
@@ -31,6 +31,7 @@ public:
      virtual bool updateDataObjectToModel(const EmuFrontObject*);
     int insertDataObjectToModel(const EmuFrontObject*);
     bool deleteDataObjectFromModel(QModelIndex*);
+    void filterByPlatformMediaType(int platformId, int mediaTypeId);
     enum {
         Executable_Id = 0,
         Executable_Name,
index dac0326..237cad1 100644 (file)
@@ -38,7 +38,9 @@ void DbQueryModelManager::filterById(int id)
 /* filters is a list of SQL conditions e.g. setup.id=1 */
 void DbQueryModelManager::filterDataObjects(QList<QString> filters)
 {
-   if (!sqlTableModel) sqlTableModel = getDataModel();
+    //if (!sqlTableModel) sqlTableModel = getDataModel();
+    if (!sqlTableModel)
+        getDataModel();
     QString where = constructWhereByFilters(filters);
     qDebug() << "Constructing SQL with " << where;
     QString query = constructSelect(where);
index 6e0af93..6ca23d5 100644 (file)
@@ -59,7 +59,7 @@ void EmuLauncher::updateData()
 {
     platformSelectBox->updateDataModel();
     mediaTypeSelectBox->updateDataModel();
-    execSelectBox->updateDataModel();
+    //execSelectBox->updateDataModel();
 }
 
 void EmuLauncher::initWidgets()
@@ -120,6 +120,7 @@ void EmuLauncher::updateMediaImageContainers()
     micTable->resizeColumnsToContents();
     platformSelectBox->updateDataModel();
     mediaTypeSelectBox->updateDataModel();
+    execSelectBox->updateToSetup(plfid, mtid);
 }
 
 void EmuLauncher::launchEmu()
index c30a371..15769c0 100644 (file)
@@ -39,9 +39,9 @@ EFComboBox::~EFComboBox()
 {
 }
 
-void EFComboBox::updateDataModel()
+void EFComboBox::updateDataModel(bool reset)
 {
-    QSqlQueryModel *model = dbManager->getDataModel();
+    QSqlQueryModel *model = dbManager->getDataModel(reset);
     if (model)
         setModel(model);
 }
index 2936ca4..944e94a 100644 (file)
@@ -31,7 +31,7 @@ public:
     EmuFrontObject* getSelected() const;
     // This will replace DataObjectEditDialog::setSelected!
     void setSelected(const EmuFrontObject*);
-    void updateDataModel();
+    void updateDataModel(bool reset = true);
 protected:
     DatabaseManager *dbManager;
     int dataModelIndex_id;
index 9c63aa3..37b7cb8 100644 (file)
@@ -27,3 +27,10 @@ ExecutableComboBox::ExecutableComboBox(DatabaseManager *dbMan, QWidget *parent)
     dataModelIndex_id = DbExecutable::Executable_Id;
     setModelColumn(dataModelIndex_name);
 }
+
+void ExecutableComboBox::updateToSetup(int platformId, int mediaTypeId)
+{
+    DbExecutable *dbExe = dynamic_cast<DbExecutable *>(dbManager);
+    dbExe->filterByPlatformMediaType(platformId, mediaTypeId);
+    EFComboBox::updateDataModel(false);
+}
index 86d57da..998fed0 100644 (file)
@@ -26,6 +26,7 @@ class ExecutableComboBox : public EFComboBox
 {
 public:
     ExecutableComboBox(DatabaseManager *dbMan, QWidget *parent);
+    void updateToSetup(int platformId, int mediaTypeId);
 };
 
 #endif // EXECUTABLECOMBOBOX_H