Added some exception handling. Marked all the functions throwing
[emufront] / src / db / dbexecutable.cpp
index b7c5819..9b3a5e8 100644 (file)
@@ -5,9 +5,9 @@
 //
 //
 // 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();
@@ -59,8 +65,8 @@ bool DbExecutable::updateDataObjectToModel(const EmuFrontObject* ob)
               "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());
@@ -102,12 +108,6 @@ bool DbExecutable::deleteDataObjectFromModel(QModelIndex*)
     return false;
 }
 
-int DbExecutable::countDataObjectRefs(int) const
-{
-    // TODO
-    return 0;
-}
-
 QString DbExecutable::constructSelectById(int id) const
 {
     return constructSelect(
@@ -121,35 +121,57 @@ 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, "
         "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);
+}