Updating existsing platforms now functional
authorMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 21 May 2010 20:17:51 +0000 (23:17 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Fri, 21 May 2010 20:17:51 +0000 (23:17 +0300)
src/db/databasemanager.cpp
src/db/databasemanager.h
src/dialogs/dbobjectdialog.cpp
src/dialogs/dbobjectdialog.h
src/dialogs/namedialog.cpp
src/dialogs/platformdialog.cpp
src/dialogs/platformdialog.h
src/dialogs/platformnamedialog.cpp

index 8cf5087..ecaa155 100644 (file)
@@ -10,7 +10,6 @@
 #include <iostream>
 
 const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
-const QString DatabaseManager::DB_TABLE_NAME_PLATFORM = QString("platform");
 
 //QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
 
@@ -58,7 +57,7 @@ QString DatabaseManager::getDbPath()
 bool DatabaseManager::dbExists()
 {
        QSqlQuery query;
-    query.exec("SELECT name FROM sqlite_master WHERE name='" + DB_TABLE_NAME_PLATFORM + "'");
+    query.exec("SELECT name FROM sqlite_master WHERE name='platform'");
     return query.next();
 }
 
@@ -81,25 +80,25 @@ bool DatabaseManager::createDB()
        return ret;
 }
 
-int DatabaseManager::insertPlatform(QString name, QString filename)
+/*int DatabaseManager::insertPlatform(QString name, QString filename)
 {
        int newId = -1;
-       bool ret = false;
+    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;
+        /*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();*/
 
                /*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)
+        /*if (ret)
                {
                        // http://www.sqlite.org/c3ref/last_insert_rowid.html  
                        QVariant var = query.lastInsertId();
@@ -107,9 +106,9 @@ int DatabaseManager::insertPlatform(QString name, QString filename)
                }
     //}
        return newId;
-}
+}*/
 
-QString DatabaseManager::getPlatform(int id)
+/*QString DatabaseManager::getPlatform(int id)
 {
        QString name;
        QSqlQuery query(QString("select firstname, lastname from person where id = %1").arg(id));
@@ -130,4 +129,5 @@ QSqlTableModel* DatabaseManager::getPlatforms()
     model->setHeaderData(Platform_Name, Qt::Horizontal, tr("Name"));
     model->select();
     return model;
-}
+}*/
+
index 921804d..c800499 100644 (file)
@@ -19,20 +19,11 @@ public:
     static bool dbExists();
     static QSqlError lastError();
     static bool createDB();
-    static int insertPlatform(QString name, QString filename = "");
-    static QString getPlatform(int id);
-    QSqlTableModel* getPlatforms();
 
-    enum {
-    Platform_Id = 0,
-    Platform_Name = 1,
-    Platform_Filename = 2
-    };
 
 private:
     //static QSqlDatabase db;
        static const QString DB_FILENAME;
-    static const QString DB_TABLE_NAME_PLATFORM;
     static QString getDbPath();
 
 };
index 1ceebb5..f60e916 100644 (file)
@@ -1,4 +1,5 @@
 #include <QtGui>
+#include <QSqlTableModel>
 #include "dbobjectdialog.h"
 #include "../db/databasemanager.h"
 
@@ -33,7 +34,7 @@ void DbObjectDialog::connectSignals()
     connect(buttonBox, SIGNAL(accepted()), this, SLOT(close()));
     connect(objectList, SIGNAL(clicked(const QModelIndex &)),
         this, SLOT(listObjectClicked(const QModelIndex &)));
-    //connect(editButton, SIGNAL(clicked()), this, SLOT(editButtonClicked()));
+    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()));
@@ -42,6 +43,8 @@ void DbObjectDialog::connectSignals()
 
 void DbObjectDialog::updateList() const
 {
+    sqlTableModel->setFilter("");
+    sqlTableModel->select();
         // fetch items from database (virtual function for this)
         // update the item list
 }
@@ -55,6 +58,7 @@ void DbObjectDialog::addButtonClicked()
 void DbObjectDialog::editButtonClicked()
 {
     disableSelection();
+    editObject();
 }
 
 void DbObjectDialog::deleteButtonClicked()
@@ -108,5 +112,15 @@ void DbObjectDialog::disableSelection()
 
 void DbObjectDialog::updateData()
 {
+    qDebug() << "DbObjectDialog::updateData()";
     updateList();
 }
+
+void DbObjectDialog::activateNameDialog() const
+{
+    if (!nameDialog) return;
+    nameDialog->show();
+    nameDialog->raise();
+    nameDialog->activateWindow();
+}
+
index b182976..1300802 100644 (file)
@@ -40,6 +40,10 @@ class DbObjectDialog : public EmuFrontDialog
     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;
 
     private:
        QDialogButtonBox *buttonBox;
@@ -48,8 +52,8 @@ class DbObjectDialog : public EmuFrontDialog
        QPushButton *deleteButton;
 
        void setButtonsEnabled(bool);
-       void layout();
-       void disableSelection();
+    void layout();
+    void disableSelection();
 };
 
 #endif
index dd225ca..64f3ddc 100644 (file)
@@ -67,6 +67,7 @@ void NameDialog::enableSaveButton(const QString &text)
 
 void NameDialog::setDataObject(EmuFrontObject *ob)
 {
+    if (!ob) return;
     // delete efObject; -> we should not delete the previously referenced data object here, it may be still used in the parent widget
     // the parent widget will take of destruction
     // we'll just refresh the name dialog pointer to a new object
index 8643585..8245fe7 100644 (file)
@@ -13,6 +13,8 @@
 
 QTextStream cout(stdout, QIODevice::WriteOnly);
 
+const QString PlatformDialog::DB_TABLE_NAME_PLATFORM = QString("platform");
+
 PlatformDialog::PlatformDialog(QWidget *parent)
     : DbObjectDialog(parent)
 {
@@ -21,7 +23,7 @@ PlatformDialog::PlatformDialog(QWidget *parent)
     nameDialog = new PlatformNameDialog(this, dynamic_cast<Platform*>(dbObject));
 
     // let's create a table model for platforms
-    sqlTableModel = dbManager->getPlatforms();
+    sqlTableModel = getDataObjects();
     objectList->setModel(sqlTableModel);
     objectList->setSelectionMode(QAbstractItemView::SingleSelection);
     //objectList->setColumnHidden(DatabaseManager::Platform_Id, true);
@@ -55,33 +57,74 @@ void PlatformDialog::addObject()
     dbObject = new Platform;
     // we need to fetch a new id for this platform
     nameDialog->setDataObject(dbObject);
-    nameDialog->show();
-    nameDialog->raise();
-    nameDialog->activateWindow();
+    activateNameDialog();
 }
 
 void PlatformDialog::editObject()
 {
+    qDebug() << "editObject called_";
+    QModelIndex index = objectList->currentIndex();
+    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);
+    nameDialog->setDataObject(dbObject);
+    activateNameDialog();
 }
 
 void PlatformDialog::updateData()
 {
+    qDebug() << "Update data";
     // update data model
     if (!dbObject) return;
 
+    qDebug() << "dbObject is not 0";
 
     QMessageBox::information(this, "Test", "We have a " + dbObject->getName());
 
+    qDebug() << "Data will be inserted/updated...";
+
+    // if data object id > -1 we are updating the data otherwise we are inserting new data
+    if (dbObject->getId() > -1) updateDb(dbObject);
+    else insertDb(dbObject);
+
+    // refresh...
+    DbObjectDialog::updateData();
+}
+
+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();
+    }
+}
+
+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), dbObject->getName());
+    sqlTableModel->setData(sqlTableModel->index(row, 1), ob->getName());
     sqlTableModel->setData(sqlTableModel->index(row, 2),
-                            (dynamic_cast<Platform*>(dbObject))->getFilename());
+                            (dynamic_cast<const Platform*>(ob))->getFilename());
     sqlTableModel->submitAll();
-
-    // refresh...
-    DbObjectDialog::updateData();
 }
 
 bool PlatformDialog::deleteItem()
@@ -91,7 +134,7 @@ bool PlatformDialog::deleteItem()
 
     QSqlDatabase::database().transaction();
     QSqlRecord record = sqlTableModel->record(index.row());
-    int id = record.value(DatabaseManager::Platform_Id).toInt();
+    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())
@@ -100,7 +143,7 @@ bool PlatformDialog::deleteItem()
     {
         int r = QMessageBox::warning(this, tr("Delete platform"),
                                      QString("Do you want to delete platform %1 and all the related data?")
-                                     .arg(record.value(DatabaseManager::Platform_Name).toString()), QMessageBox::Yes | QMessageBox::No);
+                                     .arg(record.value(Platform_Name).toString()), QMessageBox::Yes | QMessageBox::No);
         if ( r == QMessageBox::No )
         {
             QSqlDatabase::database().rollback();
@@ -115,3 +158,14 @@ bool PlatformDialog::deleteItem()
     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 4559028..9553656 100644 (file)
@@ -16,10 +16,19 @@ class PlatformDialog : public DbObjectDialog
        virtual void addObject();
        virtual void editObject();
     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 27ca04b..80617cd 100644 (file)
@@ -1,3 +1,4 @@
+#include <QtGui>
 #include "platformnamedialog.h"
 #include "../db/databasemanager.h"
 
@@ -15,6 +16,11 @@ void PlatformNameDialog::setDataObject(QString name)
 
 void PlatformNameDialog::setDataObject(EmuFrontObject *ob)
 {
+    if (!ob) return;
+    efObject = dynamic_cast<Platform*>(ob);    
+    QString name = efObject->getName();
+    nameEdit->setText(name);
 
-    efObject = dynamic_cast<Platform*>(ob);
+    qDebug() << "Setting name to " << efObject->getName();
+    nameEdit->setText(efObject->getName());
 }