From: Mikko Keinänen Date: Fri, 29 Oct 2010 22:47:04 +0000 (+0300) Subject: Emulator selector is updated with only emulators to selected setup X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=29697deb572d9541694267d92ff48ea1691d31b1;p=emufront Emulator selector is updated with only emulators to selected setup (platform-media type combination). --- diff --git a/src/db/databasemanager.cpp b/src/db/databasemanager.cpp index e5d1dad..bd8e501 100644 --- a/src/db/databasemanager.cpp +++ b/src/db/databasemanager.cpp @@ -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; } diff --git a/src/db/dbexecutable.cpp b/src/db/dbexecutable.cpp index c0c1c13..b0bb849 100644 --- a/src/db/dbexecutable.cpp +++ b/src/db/dbexecutable.cpp @@ -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 filters; + filters.append(QString("setup.platformid=%1").arg(platformId)); + filters.append(QString("setup.mediatypeid=%1").arg(mediaTypeId)); + filterDataObjects(filters); +} diff --git a/src/db/dbexecutable.h b/src/db/dbexecutable.h index 9aa7987..b6afe98 100644 --- a/src/db/dbexecutable.h +++ b/src/db/dbexecutable.h @@ -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, diff --git a/src/db/dbquerymodelmanager.cpp b/src/db/dbquerymodelmanager.cpp index dac0326..237cad1 100644 --- a/src/db/dbquerymodelmanager.cpp +++ b/src/db/dbquerymodelmanager.cpp @@ -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 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); diff --git a/src/emulauncher.cpp b/src/emulauncher.cpp index 6e0af93..6ca23d5 100644 --- a/src/emulauncher.cpp +++ b/src/emulauncher.cpp @@ -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() diff --git a/src/widgets/efcombobox.cpp b/src/widgets/efcombobox.cpp index c30a371..15769c0 100644 --- a/src/widgets/efcombobox.cpp +++ b/src/widgets/efcombobox.cpp @@ -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); } diff --git a/src/widgets/efcombobox.h b/src/widgets/efcombobox.h index 2936ca4..944e94a 100644 --- a/src/widgets/efcombobox.h +++ b/src/widgets/efcombobox.h @@ -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; diff --git a/src/widgets/executablecombobox.cpp b/src/widgets/executablecombobox.cpp index 9c63aa3..37b7cb8 100644 --- a/src/widgets/executablecombobox.cpp +++ b/src/widgets/executablecombobox.cpp @@ -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(dbManager); + dbExe->filterByPlatformMediaType(platformId, mediaTypeId); + EFComboBox::updateDataModel(false); +} diff --git a/src/widgets/executablecombobox.h b/src/widgets/executablecombobox.h index 86d57da..998fed0 100644 --- a/src/widgets/executablecombobox.h +++ b/src/widgets/executablecombobox.h @@ -26,6 +26,7 @@ class ExecutableComboBox : public EFComboBox { public: ExecutableComboBox(DatabaseManager *dbMan, QWidget *parent); + void updateToSetup(int platformId, int mediaTypeId); }; #endif // EXECUTABLECOMBOBOX_H