//
//
// EmuFront is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
+// it under the terms of the GNU General Public License version 2 as published by
+// the Free Software Foundation and appearing in the file gpl.txt included in the
+// packaging of this file.
//
// EmuFront is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY{} without even the implied warranty of
#include "dbsetup.h"
#include "../dataobjects/executable.h"
+
DbExecutable::DbExecutable(QObject *parent)
: DbQueryModelManager(parent)
{
dbSetup = new DbSetup(this);
+ tableName = DbExecutable::DB_TABLE_EXECUTABLE;
}
+
+/* Throws EmuFrontException */
EmuFrontObject* DbExecutable::recordToDataObject(const QSqlRecord* rec)
{
Executable *ex = 0;
if (!rec) return ex;
int id = rec->value(Executable_Id).toInt();
int supid = rec->value(Executable_SetupId).toInt();
- Setup *sup = dynamic_cast<Setup*>(dbSetup->getDataObject(supid));
+ EmuFrontObject *ob = dbSetup->getDataObject(supid); /* Throws EmuFrontException */
+ Setup *sup = dynamic_cast<Setup*>(ob);
+ qDebug() << "Setup id " << sup->getId() << ", platform " << sup->getPlatform()->getName();
QString name = rec->value(Executable_Name).toString();
QString exec = rec->value(Executable_Executable).toString();
QString opts = rec->value(Executable_Options).toString();
"setupid=:setupid, "
"type=:type "
"WHERE id=:id");
- q.bindValue(":setupid", ex->getSetup()
- ? QString(ex->getSetup()->getId()) : "NULL"); // TODO: null shouln't be allowed here
+ // TODO: null check
+ q.bindValue(":setupid", ex->getSetup()->getId());
q.bindValue(":name", ex->getName());
q.bindValue(":executable", ex->getExecutable());
q.bindValue(":options", ex->getOptions());
return false;
}
-int DbExecutable::countDataObjectRefs(int) const
-{
- // TODO
- return 0;
-}
-
QString DbExecutable::constructSelectById(int id) const
{
return constructSelect(
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, "
"executable.options AS ExecutableOptions, "
"executable.type AS ExecutableType, "
- "setup.id As ExecutableSetupId "
+ "setup.id As ExecutableSetupId, "
"platform.name || ' ' || mediatype.name AS SetupName "
"FROM executable "
"INNER JOIN setup ON executable.setupid = setup.id "
"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
+/*bool DbExecutable::deleteDataObject(int id) const
{
// TODO
return false;
-}
+}*/
QSqlQueryModel* DbExecutable::getData()
{
- QSqlQueryModel *model = new QSqlQueryModel;
+ QSqlQueryModel *model = new QSqlQueryModel(this);
QString select = constructSelect();
- // TODO ...
+ qDebug() << select;
+ model->setHeaderData(Executable_Id, Qt::Horizontal, tr("Id"));
+ model->setHeaderData(Executable_Name, Qt::Horizontal, tr("Name"));
+ model->setHeaderData(Executable_Executable, Qt::Horizontal, tr("Executable"));
+ model->setHeaderData(Executable_Options, Qt::Horizontal, tr("Options"));
+ model->setHeaderData(Executable_TypeId, Qt::Horizontal, tr("Type"));
+ model->setHeaderData(Executable_SetupId, Qt::Horizontal, tr("Setup id"));
+ model->setHeaderData(Executable_SetupName, Qt::Horizontal, tr("Setup"));
model->setQuery(select);
return model;
}
+QString DbExecutable::getCountRefsSelect(int id) const
+{
+ // These objects don't have references from other objects
+ // 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);
+}