Did some fast and dirty refactoring (check later that everything's ok):
authorMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 21 May 2010 21:42:26 +0000 (00:42 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 21 May 2010 21:42:26 +0000 (00:42 +0300)
moved database logic from dialog class to databasemanager and child.

src/db/databasemanager.cpp
src/db/databasemanager.h
src/db/dbplatform.cpp [new file with mode: 0644]
src/db/dbplatform.h [new file with mode: 0644]
src/dialogs/dbobjectdialog.cpp
src/dialogs/dbobjectdialog.h
src/dialogs/platformdialog.cpp
src/dialogs/platformdialog.h
src/emufront.pro
src/mainwindow.cpp

index ecaa155..bd4b435 100644 (file)
@@ -11,8 +11,6 @@
 
 const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
 
-//QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
-
 DatabaseManager::DatabaseManager(QObject *parent)
        : QObject(parent)
 {}
@@ -64,70 +62,22 @@ bool DatabaseManager::dbExists()
 bool DatabaseManager::createDB()
 {
        bool ret = false;
-    /*if (db.isOpen())
-    {*/
-               QSqlQuery query;
+    QSqlQuery query;
 
-               ret = query.exec("create table platform "
-                               "(id integer primary key, "
-                               "name varchar(30), "
-                               "filename varchar(125))");
-               /*ret = query.exec("create table media "
+    ret = query.exec("create table platform "
+                     "(id integer primary key, "
+                     "name varchar(30), "
+                     "filename varchar(125))");
+    /*ret = query.exec("create table media "
                                                "(id integer primary key, "
                                                "name varchar(30), "
                                                "filename varchar(125))");*/
-    //}
        return ret;
 }
 
-/*int DatabaseManager::insertPlatform(QString name, QString filename)
-{
-       int newId = -1;
-    bool ret = false;*/
-    /*if (db.isOpen())
-    {*/
-               //http://www.sqlite.org/autoinc.html
-               // NULL = is the keyword for the autoincrement to generate next value
-        /*QSqlQuery query;
-               query.prepare("insert into platform (id, name, filename) "
-                                               "values (NULL, :name, :filename)");
-               query.bindValue(":name", name);
-               query.bindValue(":filename", filename);
-        ret = query.exec();*/
-
-               /*ret = query.exec(QString("insert into person values(NULL,'%1','%2',%3)")
-                               .arg(firstname).arg(lastname).arg(age));*/
-               // Get database given autoincrement value
-        /*if (ret)
-               {
-                       // http://www.sqlite.org/c3ref/last_insert_rowid.html  
-                       QVariant var = query.lastInsertId();
-                       if (var.isValid()) newId = var.toInt();
-               }
-    //}
-       return newId;
-}*/
-
-/*QString DatabaseManager::getPlatform(int id)
+void DatabaseManager::resetModel()
 {
-       QString name;
-       QSqlQuery query(QString("select firstname, lastname from person where id = %1").arg(id));
-
-    if (query.next())
-       {
-               name.append(query.value(0).toString());
-               name.append(query.value(1).toString());
-       }
-       return name;
+    if (!sqlTableModel) return;
+    sqlTableModel->setFilter("");
+    sqlTableModel->select();
 }
-
-QSqlTableModel* DatabaseManager::getPlatforms()
-{
-    QSqlTableModel *model = new QSqlTableModel(this);
-    model->setTable(DB_TABLE_NAME_PLATFORM);
-    model->setSort(Platform_Name, Qt::AscendingOrder);
-    model->setHeaderData(Platform_Name, Qt::Horizontal, tr("Name"));
-    model->select();
-    return model;
-}*/
-
index c800499..65c78c2 100644 (file)
@@ -19,13 +19,17 @@ public:
     static bool dbExists();
     static QSqlError lastError();
     static bool createDB();
+    virtual QSqlTableModel* getDataModel() = 0;
+    void resetModel();
 
+protected:
+    QSqlTableModel *sqlTableModel;
 
 private:
     //static QSqlDatabase db;
        static const QString DB_FILENAME;
     static QString getDbPath();
-
+    virtual QSqlTableModel* getData() = 0;
 };
 
 #endif
diff --git a/src/db/dbplatform.cpp b/src/db/dbplatform.cpp
new file mode 100644 (file)
index 0000000..a7133e2
--- /dev/null
@@ -0,0 +1,93 @@
+#include <QSqlRecord>
+#include <QSqlQuery>
+#include <QSqlTableModel>
+#include <QDebug>
+#include "dbplatform.h"
+
+const QString DbPlatform::DB_TABLE_NAME_PLATFORM = QString("platform");
+
+DbPlatform::DbPlatform(QObject *parent) : DatabaseManager(parent)
+{
+    sqlTableModel = getData();
+}
+
+QSqlTableModel* DbPlatform::getDataModel()
+{
+    return sqlTableModel;
+}
+
+Platform* DbPlatform::getPlatformFromModel(QModelIndex index)
+{
+    QSqlRecord record = sqlTableModel->record(index.row());
+    int id = record.value(Platform_Id).toInt();
+    QString name = record.value(Platform_Name).toString();
+    QString fileName = record.value(Platform_Filename).toString();
+    qDebug() << "Name " << name << " id " << id;
+    //EmuFrontObject *plf = new Platform(id, name, fileName);
+    return new Platform(id, name, fileName);
+}
+
+bool DbPlatform::updatePlatformToModel(const Platform *ob)
+{
+    bool ret = false;
+    sqlTableModel->setFilter(QString("id = %1").arg(ob->getId()));
+    sqlTableModel->select();
+    if (sqlTableModel->rowCount() == 1)
+    {
+        QSqlRecord record = sqlTableModel->record(0);
+        record.setValue("name", ob->getName());
+        record.setValue("filename", ob->getFilename());
+        sqlTableModel->setRecord(0, record);
+        ret = sqlTableModel->submitAll();
+    }
+    resetModel();
+    return ret;
+}
+
+bool DbPlatform::insertPlatformToModel(const Platform *ob)
+{
+    qDebug() << "Inserting platform " << ob->getName();
+    int row = 0;
+    sqlTableModel->insertRows(row, 1);
+    //sqlTableModel->setData(sqlTableModel->index(row, 0), NULL);
+    sqlTableModel->setData(sqlTableModel->index(row, 1), ob->getName());
+    sqlTableModel->setData(sqlTableModel->index(row, 2),
+                            ob->getFilename());
+    return sqlTableModel->submitAll();
+}
+
+bool DbPlatform::deletePlatformFromModel(QModelIndex index)
+{
+    QSqlDatabase::database().transaction();
+    QSqlRecord record = sqlTableModel->record(index.row());
+    int id = record.value(Platform_Id).toInt();
+    /*int numEntries = 0;
+    QSqlQuery query(QString("SELECT COUNT(*) FROM imagecontainer WHERE platformid = %1").arg(id));
+    if (query.next())
+        numEntries = query.value(0).toInt();
+    if (numEntries > 0)
+    {
+        int r = QMessageBox::warning(this, tr("Delete platform"),
+                                     QString("Do you want to delete platform %1 and all the related data?")
+                                     .arg(record.value(Platform_Name).toString()), QMessageBox::Yes | QMessageBox::No);
+        if ( r == QMessageBox::No )
+        {
+            QSqlDatabase::database().rollback();
+            return false;
+        }
+        query.exec(QString("DELETE FROM imagecontainer WHERE platformid = %1").arg(id));
+    }*/
+    sqlTableModel->removeRow(index.row());
+    sqlTableModel->submitAll();
+    return QSqlDatabase::database().commit();
+}
+
+QSqlTableModel* DbPlatform::getData()
+{
+    QSqlTableModel *model = new QSqlTableModel(this);
+    model->setTable(DB_TABLE_NAME_PLATFORM);
+    model->setSort(Platform_Name, Qt::AscendingOrder);
+    model->setHeaderData(Platform_Name, Qt::Horizontal, tr("Name"));
+    model->select();
+    return model;
+}
diff --git a/src/db/dbplatform.h b/src/db/dbplatform.h
new file mode 100644 (file)
index 0000000..87984bd
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef DBPLATFORM_H
+#define DBPLATFORM_H
+
+#include "databasemanager.h"
+#include "../dataobjects/platform.h"
+
+class QModelIndex;
+
+class DbPlatform : public DatabaseManager
+{
+public:
+    DbPlatform(QObject *);
+    virtual QSqlTableModel* getDataModel();
+    Platform* getPlatformFromModel(QModelIndex);
+    bool updatePlatformToModel(const Platform *);
+    bool insertPlatformToModel(const Platform *);
+    bool deletePlatformFromModel(QModelIndex);
+
+private:
+    enum {
+        Platform_Id = 0,
+        Platform_Name = 1,
+        Platform_Filename = 2 };
+    static const QString DB_TABLE_NAME_PLATFORM;
+    virtual QSqlTableModel* getData();
+};
+
+#endif // DBPLATFORM_H
index f60e916..14e281b 100644 (file)
@@ -7,7 +7,8 @@ DbObjectDialog::DbObjectDialog(QWidget *parent)
     : EmuFrontDialog(parent)
 {
     dbObject = 0;
-    dbManager = new DatabaseManager(this);
+    dbManager = 0;
+    //dbManager = new DatabaseManager(this);
     editButton = new QPushButton(tr("&Edit")); 
     editButton->setEnabled(false);
     addButton = new QPushButton(tr("&Add"));
@@ -43,10 +44,8 @@ void DbObjectDialog::connectSignals()
 
 void DbObjectDialog::updateList() const
 {
-    sqlTableModel->setFilter("");
-    sqlTableModel->select();
-        // fetch items from database (virtual function for this)
-        // update the item list
+    if (!dbManager) return;
+    dbManager->resetModel();
 }
 
 void DbObjectDialog::addButtonClicked()
index 1300802..3f3f0ee 100644 (file)
@@ -37,13 +37,12 @@ class DbObjectDialog : public EmuFrontDialog
     NameDialog *nameDialog;
     DatabaseManager *dbManager;
     QTableView *objectList;
-    QSqlTableModel *sqlTableModel;
     EmuFrontObject *dbObject;
     void connectSignals();
     void activateNameDialog() const;
     virtual void updateDb(const EmuFrontObject*) const = 0;
     virtual void insertDb(const EmuFrontObject*) const = 0;
-    virtual QSqlTableModel* getDataObjects() = 0;
+    //virtual QSqlTableModel* getDataObjects() = 0;
 
     private:
        QDialogButtonBox *buttonBox;
index 8245fe7..d86217d 100644 (file)
@@ -2,10 +2,7 @@
 #include <QAbstractItemView>
 #include <QSqlTableModel>
 #include <QTextStream>
-#include <QSqlRecord>
-#include <QSqlQuery>
-
-#include "../db/databasemanager.h"
+#include "../db/dbplatform.h"
 #include "../dataobjects/platform.h"
 #include "platformdialog.h"
 #include "platformnamedialog.h"
 
 QTextStream cout(stdout, QIODevice::WriteOnly);
 
-const QString PlatformDialog::DB_TABLE_NAME_PLATFORM = QString("platform");
-
 PlatformDialog::PlatformDialog(QWidget *parent)
     : DbObjectDialog(parent)
 {
     setWindowTitle(tr("Set emulated platforms"));
     //nameDialog = 0;
     nameDialog = new PlatformNameDialog(this, dynamic_cast<Platform*>(dbObject));
+    dbManager = new DbPlatform(this);
 
     // let's create a table model for platforms
-    sqlTableModel = getDataObjects();
-    objectList->setModel(sqlTableModel);
+    
+    objectList->setModel(dbManager->getDataModel());
     objectList->setSelectionMode(QAbstractItemView::SingleSelection);
     //objectList->setColumnHidden(DatabaseManager::Platform_Id, true);
     objectList->resizeColumnsToContents();
@@ -67,14 +63,8 @@ void PlatformDialog::editObject()
     if (!index.isValid())
         return;
     qDebug() << "we have a valid index";
-    QSqlRecord record = sqlTableModel->record(index.row());
-    int id = record.value(Platform_Id).toInt();
-    QString name = record.value(Platform_Name).toString();
-    QString fileName = record.value(Platform_Filename).toString();
-    qDebug() << "Name " << name << " id " << id;
-    //EmuFrontObject *plf = new Platform(id, name, fileName);
     delete dbObject;
-    dbObject = new Platform(id, name, fileName);
+    dbObject = (dynamic_cast<DbPlatform*>(dbManager))->getPlatformFromModel(index);
     nameDialog->setDataObject(dbObject);
     activateNameDialog();
 }
@@ -103,69 +93,21 @@ void PlatformDialog::updateDb(const EmuFrontObject *ob) const
 {
     if (!ob) return;
     qDebug() << "Updating platform " << ob->getName();
-    sqlTableModel->setFilter(QString("id = %1").arg(ob->getId()));
-    sqlTableModel->select();
-    if (sqlTableModel->rowCount() == 1)
-    {
-        QSqlRecord record = sqlTableModel->record(0);
-        record.setValue("name", ob->getName());
-        record.setValue("filename", (dynamic_cast<const Platform *>(ob))->getFilename());
-        sqlTableModel->setRecord(0, record);
-        sqlTableModel->submitAll();
-    }
+    (dynamic_cast<DbPlatform*>(dbManager))->updatePlatformToModel(dynamic_cast<const Platform*>(ob));
 }
 
 void PlatformDialog::insertDb(const EmuFrontObject *ob) const
 {
-    qDebug() << "Inserting platform " << ob->getName();
-    int row = 0;
-    sqlTableModel->insertRows(row, 1);
-    //sqlTableModel->setData(sqlTableModel->index(row, 0), NULL);
-    sqlTableModel->setData(sqlTableModel->index(row, 1), ob->getName());
-    sqlTableModel->setData(sqlTableModel->index(row, 2),
-                            (dynamic_cast<const Platform*>(ob))->getFilename());
-    sqlTableModel->submitAll();
+    (dynamic_cast<DbPlatform*>(dbManager))->insertPlatformToModel(dynamic_cast<const Platform*>(ob));
 }
 
 bool PlatformDialog::deleteItem()
 {
     QModelIndex index = objectList->currentIndex();
     if (!index.isValid()) return false;
-
-    QSqlDatabase::database().transaction();
-    QSqlRecord record = sqlTableModel->record(index.row());
-    int id = record.value(Platform_Id).toInt();
-    int numEntries = 0;
-    QSqlQuery query(QString("SELECT COUNT(*) FROM imagecontainer WHERE platformid = %1").arg(id));
-    if (query.next())
-        numEntries = query.value(0).toInt();
-    if (numEntries > 0)
-    {
-        int r = QMessageBox::warning(this, tr("Delete platform"),
-                                     QString("Do you want to delete platform %1 and all the related data?")
-                                     .arg(record.value(Platform_Name).toString()), QMessageBox::Yes | QMessageBox::No);
-        if ( r == QMessageBox::No )
-        {
-            QSqlDatabase::database().rollback();
-            return false;
-        }
-        query.exec(QString("DELETE FROM imagecontainer WHERE platformid = %1").arg(id));
-    }
-    sqlTableModel->removeRow(index.row());
-    sqlTableModel->submitAll();
-    QSqlDatabase::database().commit();
+    (dynamic_cast<DbPlatform *>(dbManager))->deletePlatformFromModel(index);
     updateList();
     objectList->setFocus();
     return false;
 }
 
-QSqlTableModel* PlatformDialog::getDataObjects()
-{
-    QSqlTableModel *model = new QSqlTableModel(this);
-    model->setTable(DB_TABLE_NAME_PLATFORM);
-    model->setSort(Platform_Name, Qt::AscendingOrder);
-    model->setHeaderData(Platform_Name, Qt::Horizontal, tr("Name"));
-    model->select();
-    return model;
-}
-
index 9553656..5a6d008 100644 (file)
@@ -18,17 +18,11 @@ class PlatformDialog : public DbObjectDialog
     virtual bool deleteItem();
     virtual void updateDb(const EmuFrontObject*) const;
     virtual void insertDb(const EmuFrontObject*) const;
-    virtual QSqlTableModel* getDataObjects();
 
     private slots:
     virtual void updateData();
 
     private:
-    enum {
-        Platform_Id = 0,
-        Platform_Name = 1,
-        Platform_Filename = 2 };
-        static const QString DB_TABLE_NAME_PLATFORM;
         //PlatformNameDialog *nameDialog;
 };
 
index 0686005..fbcb614 100644 (file)
@@ -20,7 +20,8 @@ HEADERS += mainwindow.h \
     dialogs/platformnamedialog.h \
     dialogs/emufrontdialog.h \
     dataobjects/emufrontobject.h \
-    dataobjects/platform.h
+    dataobjects/platform.h \
+    db/dbplatform.h
 SOURCES += main.cpp \
     mainwindow.cpp \
     db/databasemanager.cpp \
@@ -30,4 +31,5 @@ SOURCES += main.cpp \
     dialogs/platformnamedialog.cpp \
     dialogs/emufrontdialog.cpp \
     dataobjects/emufrontobject.cpp \
-    dataobjects/platform.cpp
+    dataobjects/platform.cpp \
+    db/dbplatform.cpp
index 8fde801..71c2a3c 100644 (file)
@@ -11,7 +11,7 @@ MainWindow::MainWindow()
     createStatusBar();
     readSettings();
     platformDialog = 0;
-    dbManager = new DatabaseManager;
+    //dbManager = new DatabaseManager;
 }
 
 void MainWindow::createActions()