Implemented insertRows for SetupModel.
authorMikko Keinänen <mikko.keinanen@gmail.com>
Wed, 8 Dec 2010 22:11:40 +0000 (00:11 +0200)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Wed, 8 Dec 2010 22:11:40 +0000 (00:11 +0200)
doc/tests.txt [new file with mode: 0644]
src/models/setupmodel.cpp
src/models/setupmodel.h
src/views/emufronteditview.cpp

diff --git a/doc/tests.txt b/doc/tests.txt
new file mode 100644 (file)
index 0000000..8eac9fd
--- /dev/null
@@ -0,0 +1,20 @@
+Setupview
+---------
+
+Test 1:
+- Add new setup when no platform or media types are yet added
+Result:
+- Shows error that no platform or media types are not added
+- New row is not created
+
+Test 2:
+- Add new setup when any platforms are not yet added
+Result:
+- Shows error that any platform is not available 
+- New row is not created
+
+Test 3:
+- Add new setup when any media types are not yet added
+Result:
+- Shows error that any media type is not available 
+- New row is not created
index f1cdc0d..3f1c836 100644 (file)
@@ -18,6 +18,7 @@
 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "setupmodel.h"
+#include "emufrontexception.h"
 #include <QtSql>
 
 const QString SetupModel::FILE_TYPE_EXTENSION_SEPARATOR = QString("|");
@@ -128,4 +129,50 @@ bool SetupModel::setSupportedExtensions(int id, QString exts)
     return query.exec();
 }
 
+bool SetupModel::insertRows(int row, int count, const QModelIndex &parent)
+{
+    if (parent.isValid())
+        return false; // This is a flat model
+    if (rowCount() < row)
+        row = rowCount() + 1;
+    // we need a default value for platformid and mediatypeid and if none is yet
+    // available an error message must be shown!
+    int plfId = -1;
+    int mdtId = -1;
+    QSqlQuery q;
+    q.exec(QString("SELECT id FROM platform ORDER BY name LIMIT 1"));
+    if (q.first()){
+        qDebug() << "Got id " << plfId << " for default platform.";
+        plfId = q.value(0).toInt();
+    }
+    else {
+        throw EmuFrontException(tr("No platforms yet available for setup configuration!"));
+    }
+    q.exec(QString("SELECT id FROM mediatype ORDER BY name LIMIT 1"));
+    if (q.first()) {
+        qDebug() << "Got id " << mdtId << " for default media type.";
+        mdtId = q.value(0).toInt();
+    }
+    else {
+        throw EmuFrontException(tr("No media types yet available for setup configuration!"));
+    }
+    q.prepare(QString("INSERT INTO setup (id, platformid, mediatypeid, filetypeextensions) "
+        " VALUES (NULL, :plfid, :mdtid, '') "));
+    beginInsertRows(QModelIndex(), row, row + count - 1);
+    for (int i = 0; i < count; ++i) {
+        q.bindValue(":plfid", plfId);
+        q.bindValue(":mdtid", mdtId);
+        if (!q.exec()) {
+            throw EmuFrontException(tr("Failed creating new setup: %1").
+                arg(q.lastError().text()));
+        }
+    }
+    endInsertRows();
+    refresh();
+    return true;
+}
+
+bool SetupModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+}
 
index 6ea93d3..f2f3ec8 100644 (file)
@@ -29,6 +29,8 @@ public:
     SetupModel(QObject *parent = 0);
     virtual Qt::ItemFlags flags(const QModelIndex &index) const;
     virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
+    virtual bool insertRows(int row, int count, const QModelIndex &parent);
+    virtual bool removeRows(int row, int count, const QModelIndex &parent);
     enum { Setup_Id = 0,
            Setup_PlatformId,
            Setup_MediaTypeId,
index d5f1be8..2512571 100644 (file)
@@ -91,7 +91,12 @@ void EmuFrontEditView::addButtonClicked()
 {
     int row = objectList->currentIndex().isValid() ?
         objectList->currentIndex().row() : 0;
-    model->insertRows(row, 1);
+    try {
+        model->insertRows(row, 1);
+    } catch(EmuFrontException e) {
+        errorMessage->showMessage(tr("Failed inserting rows: %1").arg(e.what()));
+        return;
+    }
     QModelIndex ind = model->index(row, 1);
     if (!ind.isValid()){
         return;