Reading platforms from database and creating a table to platform dialog.
authorMikko Keinänen <mikko.keinanen@gmail.com>
Sat, 15 May 2010 21:50:32 +0000 (00:50 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Sat, 15 May 2010 21:50:32 +0000 (00:50 +0300)
src/db/databasemanager.cpp
src/db/databasemanager.h
src/dialogs/dbobjectdialog.cpp
src/dialogs/dbobjectdialog.h
src/dialogs/platformdialog.cpp
src/main.cpp

index 61da4e0..8cf5087 100644 (file)
@@ -1,6 +1,7 @@
 #include "databasemanager.h"
 #include <QObject>
 #include <QSqlDatabase>
+#include <QSqlTableModel>
 #include <QSqlError>
 #include <QSqlQuery>
 #include <QFile>
@@ -9,7 +10,9 @@
 #include <iostream>
 
 const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
-QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
+const QString DatabaseManager::DB_TABLE_NAME_PLATFORM = QString("platform");
+
+//QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
 
 DatabaseManager::DatabaseManager(QObject *parent)
        : QObject(parent)
@@ -20,23 +23,21 @@ DatabaseManager::~DatabaseManager()
 
 bool DatabaseManager::openDB()
 {
-    if (DatabaseManager::db.databaseName().isEmpty())
-    {
-        DatabaseManager::db.setDatabaseName(DatabaseManager::getDbPath());
-    }
-    return DatabaseManager::db.open();
+    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
+    db.setDatabaseName(DatabaseManager::getDbPath());
+    return db.open();
 }
 
-QSqlError DatabaseManager::lastError()
+/*QSqlError DatabaseManager::lastError()
 {
        return db.lastError();
-}
+}*/
 
-bool DatabaseManager::deleteDB()
+/*bool DatabaseManager::deleteDB()
 {
        db.close();
        return QFile::remove(getDbPath());
-}
+}*/
 
 QString DatabaseManager::getDbPath()
 {
@@ -54,25 +55,20 @@ QString DatabaseManager::getDbPath()
  * Check if database already exists.
  * Returns false if doesn't or we don't have a connection.
 */ 
-bool DatabaseManager::dbExists() const
+bool DatabaseManager::dbExists()
 {
-       using namespace std;
-       if (!db.isOpen()) 
-       {
-               cerr << "Database is not connected!" << endl;
-               return false;
-       }
        QSqlQuery query;
-       query.exec("SELECT name FROM sqlite_master WHERE name='person'");
-       return query.next();
+    query.exec("SELECT name FROM sqlite_master WHERE name='" + DB_TABLE_NAME_PLATFORM + "'");
+    return query.next();
 }
 
-bool DatabaseManager::createDB() const
+bool DatabaseManager::createDB()
 {
        bool ret = false;
-       if (db.isOpen())
-       {
+    /*if (db.isOpen())
+    {*/
                QSqlQuery query;
+
                ret = query.exec("create table platform "
                                "(id integer primary key, "
                                "name varchar(30), "
@@ -81,7 +77,7 @@ bool DatabaseManager::createDB() const
                                                "(id integer primary key, "
                                                "name varchar(30), "
                                                "filename varchar(125))");*/
-       }
+    //}
        return ret;
 }
 
@@ -89,8 +85,8 @@ int DatabaseManager::insertPlatform(QString name, QString filename)
 {
        int newId = -1;
        bool ret = false;
-       if (db.isOpen())
-       {
+    /*if (db.isOpen())
+    {*/
                //http://www.sqlite.org/autoinc.html
                // NULL = is the keyword for the autoincrement to generate next value
                QSqlQuery query;
@@ -109,16 +105,16 @@ int DatabaseManager::insertPlatform(QString name, QString filename)
                        QVariant var = query.lastInsertId();
                        if (var.isValid()) newId = var.toInt();
                }
-       }
+    //}
        return newId;
 }
 
-QString DatabaseManager::getPlatform(int id) const
+QString DatabaseManager::getPlatform(int id)
 {
        QString name;
        QSqlQuery query(QString("select firstname, lastname from person where id = %1").arg(id));
 
-       if (query.next())
+    if (query.next())
        {
                name.append(query.value(0).toString());
                name.append(query.value(1).toString());
@@ -126,3 +122,12 @@ QString DatabaseManager::getPlatform(int id) const
        return name;
 }
 
+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 8604982..4d84cc7 100644 (file)
@@ -6,6 +6,7 @@
 
 class QSqlError;
 class QFile;
+class QSqlTableModel;
 
 class DatabaseManager : public QObject
 {
@@ -13,18 +14,27 @@ public:
        DatabaseManager(QObject *parent = 0);
        ~DatabaseManager();
 
-        static bool openDB();
-       bool deleteDB();
-       bool dbExists() const;
-       QSqlError lastError();
-       bool createDB() const;
-        static int insertPlatform(QString name, QString filename = "");
-       QString getPlatform(int id) const;
+    static bool openDB();
+    static bool deleteDB();
+    static bool dbExists();
+    static QSqlError lastError();
+    static bool createDB();
+    static int insertPlatform(QString name, QString filename = "");
+    static QString getPlatform(int id);
+    QSqlTableModel* getPlatforms();
 
 private:
-        static QSqlDatabase db;
+    //static QSqlDatabase db;
        static const QString DB_FILENAME;
-        static QString getDbPath();
+    static const QString DB_TABLE_NAME_PLATFORM;
+    static QString getDbPath();
+
+    enum {
+    Platform_Id = 0,
+    Platform_Name = 1,
+    Platform_Filename = 2
+    };
+
 };
 
 #endif
index 2894d3d..8e45ea2 100644 (file)
@@ -1,13 +1,15 @@
 #include <QtGui>
 #include "dbobjectdialog.h"
+#include "../db/databasemanager.h"
 
 DbObjectDialog::DbObjectDialog(QWidget *parent)
     : EmuFrontDialog(parent)
 {
+    dbManager = new DatabaseManager(this);
     editButton = new QPushButton(tr("&Edit")); 
     addButton = new QPushButton(tr("&Add"));
     deleteButton = new QPushButton(tr("&Delete"));
-    objectList = new QListView();
+    objectList = new QTableView(this);
     buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Vertical);
     buttonBox->addButton(editButton, QDialogButtonBox::ActionRole);
     buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
@@ -26,6 +28,13 @@ void DbObjectDialog::connectSignals()
     connect(editButton, SIGNAL(clicked()), this, SLOT(editButtonClicked()));
     connect(addButton, SIGNAL(clicked()), this, SLOT(addButtonClicked()));
     connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteButtonClicked()));
+    connect(nameDialog, SIGNAL(accepted()), this, SLOT(updateList()));
+}
+
+void DbObjectDialog::updateList() const
+{
+        // fetch items from database (virtual function for this)
+        // update the item list
 }
 
 void DbObjectDialog::addButtonClicked()
index ea6c740..5da62eb 100644 (file)
@@ -3,11 +3,12 @@
 
 #include "emufrontdialog.h"
 #include "namedialog.h"
+#include "../db/databasemanager.h"
 
 class QPushButton;
 class QModelIndex;
 class QDialogButtonBox;
-class QListView;
+class QTableView;
 
 class DbObjectDialog : public EmuFrontDialog
 {
@@ -23,19 +24,21 @@ class DbObjectDialog : public EmuFrontDialog
        //void enableEditButton();
        //void enableDeleteButton();
        void listObjectClicked(const QModelIndex &);
+    void updateList() const;
 
     protected:
        virtual int deleteObject() =0;
        virtual void addObject() =0;
        virtual void editObject() =0;
-        NameDialog *nameDialog;
-       
+    NameDialog *nameDialog;
+    DatabaseManager *dbManager;
+    QTableView *objectList;
+
     private:
        QDialogButtonBox *buttonBox;
        QPushButton *editButton;
        QPushButton *addButton;
        QPushButton *deleteButton;
-       QListView *objectList;
 
        void setButtonsEnabled(bool);
        void connectSignals();
index 971763b..2332b8f 100644 (file)
@@ -1,3 +1,7 @@
+#include <QtGui>
+#include <QAbstractItemView>
+#include <QSqlTableModel>
+
 #include "platformdialog.h"
 #include "platformnamedialog.h"
 
@@ -6,7 +10,10 @@ PlatformDialog::PlatformDialog(QWidget *parent)
 {
     setWindowTitle(tr("Set emulated platforms"));
     nameDialog = 0;
-    
+
+    QSqlTableModel *model = dbManager->getPlatforms();
+    objectList->setModel(model);
+    objectList->setSelectionMode(QAbstractItemView::SingleSelection);
 }
 
 int PlatformDialog::deleteObject()
index ba1c867..6a3edc2 100644 (file)
@@ -2,7 +2,7 @@
 #include <QTextStream>
 #include <iostream>
 #include "mainwindow.h"
-//#include "db/databasemanager.h"
+#include "db/databasemanager.h"
 //#include "dialogs/platformnamedialog.h"
 
 int main(int argc, char *argv[])
@@ -10,23 +10,23 @@ int main(int argc, char *argv[])
        QApplication app(argc, argv);
        QTextStream cout(stdout, QIODevice::WriteOnly);
 
-       /*DatabaseManager dbm;
-       if (dbm.openDB())
-               cout << " Database opened succesfully!" << endl;
+    if (DatabaseManager::openDB())
+        cout << " Database opened succesflly!" << endl;
        else cout << " Database connection failed!" << endl;
 
-       if (dbm.dbExists())
+    if (DatabaseManager::dbExists())
                cout << " Database exists!" << endl;
        else 
        {
                cout << " Database is missing!" << endl;
-               if (dbm.createDB())
+        if (DatabaseManager::createDB())
                        cout << " Database created succesfully!" << endl;
                else {
                        cout << "Failed creating database!" << endl;
                        exit(1);
                }
         }
+     /*
 
        if (dbm.insertPerson("Testi","Tapaus",1) > 0)
                cout << "Database insert successfull!" << endl;