Data object removal implemented in the db layer. UI refreshing added
authorMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 10 Oct 2010 20:36:06 +0000 (23:36 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 10 Oct 2010 20:36:06 +0000 (23:36 +0300)
after data object editing to the main window.

16 files changed:
doc/uml-db_layer.dia
src/db/databasemanager.h
src/db/dbcreator.cpp
src/db/dbemufrontfileobject.cpp
src/db/dbemufrontfileobject.h
src/db/dbexecutable.cpp
src/db/dbfile.cpp
src/db/dbfilepath.cpp
src/db/dbmediaimage.cpp
src/db/dbmediaimagecontainer.cpp
src/db/dbmediaimagecontainer.h
src/db/dbquerymodelmanager.cpp
src/db/dbquerymodelmanager.h
src/dialogs/dbobjectdialog.cpp
src/mainwindow.cpp
src/mainwindow.h

index 906b5e2..e3c661d 100644 (file)
Binary files a/doc/uml-db_layer.dia and b/doc/uml-db_layer.dia differ
index 0d6f16d..d9ac18a 100644 (file)
@@ -43,6 +43,7 @@ public:
     virtual bool updateDataObjectToModel(const EmuFrontObject*) = 0;
     virtual int insertDataObjectToModel(const EmuFrontObject*) = 0;
     virtual bool deleteDataObjectFromModel(QModelIndex*) = 0;
+    virtual bool deleteDataObject(int id) const = 0;
     int countDataObjectRefs(int id) const;
     static int getCurrentTimeStamp();
     static bool openDB();
@@ -69,7 +70,6 @@ protected:
     static const QString DB_TABLE_MEDIAIMAGECONTAINER_MEDIAIMAGE;
     static const QString DB_TABLE_EXECUTABLE;
 
-
 private:
        static const QString DB_FILENAME;
     static const QString DATABASE;
@@ -77,7 +77,6 @@ private:
     static QString getDbPath();
     EmuFrontObject* getFilteredDataObject();
     virtual QString getCountRefsSelect(int) const = 0;
-
 };
 
 #endif
index 23202e0..a726ca2 100644 (file)
@@ -161,21 +161,30 @@ bool DbCreator::createDB()
             "   DELETE FROM executable WHERE executable.setupid = old.id; "
             "END;"
             );
-        query.exec(
+
+        // NOTE:
+        // media image container is not explicitily deleted,
+        // mediaimagecontainer entry should be deleted implicitely with
+        // file tables trigger!
+        /*query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onmediaimagecontainerdelete "
             "AFTER DELETE ON mediaimagecontainer "
             "BEGIN "
             "    DELETE FROM file WHERE id=old.fileid; "
             "    DELETE FROM mediaimagecontainer_mediaimage WHERE mediaimagecontainerid=old.fileid; "
             "END;"
-        );
-        query.exec(
+        );*/
+
+        /* NOTE: Entries from mediaimagecontainer_mediaimage are not explicitily deleted, they
+            are deleted implicitely using file tables trigger. */
+        /*query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onmediaimagecontainer_mediaimagedelete "
             "AFTER DELETE ON mediaimagecontainer_mediaimage "
             "BEGIN "
             "    DELETE FROM file WHERE id=old.mediaimageid; "
             "    DELETE FROM mediaimagecontainer WHERE fileid=old.mediaimagecontainerid; "
-        );
+        );*/
+
         query.exec(
             "CREATE TRIGGER IF NOT EXISTS trg_onfiledelete "
             "AFTER DELETE ON file "
index 940d98f..0ee19a5 100644 (file)
@@ -169,3 +169,8 @@ QSqlQueryModel* DbEmuFrontFileObject::getData()
     model->setHeaderData(EmuFrontFileObject_FileUpdateTime, Qt::Horizontal, tr("File update time"));*/
     return model;
 }
+
+QString DbEmuFrontFileObject::getDeleteObjectSql() const
+{
+    return QString("DELETE FROM %1 WHERE id=:id").arg(tableName);
+}
index 9cd2b1a..d863a9b 100644 (file)
@@ -47,13 +47,13 @@ protected:
    virtual QString constructSelectById(int id) const;
    virtual QString constructFilterById(int id) const;
    virtual EmuFrontObject* recordToDataObject(const QSqlRecord* );
-   QString tableName;
    virtual EmuFrontObject* createEmuFrontFileObject(int id, QString name, EmuFrontFile *f) = 0;
    virtual bool deleteDataObject(int id) const;
 
 private:
     virtual QSqlQueryModel* getData();
     DbFile *dbFile;
+    virtual QString getDeleteObjectSql() const;
 };
 
 #endif // DBEMUFRONTFILEOBJECT_H
index 58ebe38..8baabf2 100644 (file)
 #include "dbsetup.h"
 #include "../dataobjects/executable.h"
 
+
 DbExecutable::DbExecutable(QObject *parent)
     : DbQueryModelManager(parent)
 {
     dbSetup = new DbSetup(this);
+    tableName = DbExecutable::DB_TABLE_EXECUTABLE;
 }
 
 EmuFrontObject* DbExecutable::recordToDataObject(const QSqlRecord* rec)
index b9ab3dd..5a02d18 100644 (file)
 #include <QSqlRelationalTableModel>
 #include "dbfile.h"
 
+
 DbFile::DbFile(QObject *parent) : DbQueryModelManager(parent)
 {
+    tableName = DbFile::DB_TABLE_NAME_FILE;
     type = -1;
 }
 
index 24e62fe..26c7334 100644 (file)
 #include "dbfilepath.h"
 #include "dbsetup.h"
 
+
 DbFilePath::DbFilePath(QObject *parent) : DbQueryModelManager(parent)
 {
+    tableName = DbFilePath::DB_TABLE_NAME_FILEPATH;
     dbSetup = new DbSetup(this);
 }
 
index c741dd2..c4a4f5b 100644 (file)
 #include <QSqlRecord>
 #include "dbmediaimage.h"
 
+
 DbMediaImage::DbMediaImage(QObject *parent)
     : DbFile(parent)
 {
     type = EmuFrontFile::FileType_MediaImage;
+    tableName = DbMediaImage::DB_TABLE_NAME_FILE;
 }
 
 /*bool DbMediaImage::updateDataObjectToModel(const EmuFrontObject *efo)
index 2d54917..da6f7ec 100644 (file)
 //#include "dbsetup.h"
 #include "dbfilepath.h"
 
+
 DbMediaImageContainer::DbMediaImageContainer(QObject *parent)
     : DbFile(parent) // DbQueryModelManager(parent)
 {
     dbMediaImage = new DbMediaImage(parent);
     dbFilePath = new DbFilePath(parent);
+    tableName = DbMediaImageContainer::DB_TABLE_MEDIAIMAGECONTAINER;
     //dbFile = new DbFile(parent);
 }
 
@@ -273,3 +275,15 @@ QString DbMediaImageContainer::getCountRefsSelect(int id) const
               "    =mediaimagecontainer.fileid "
               "WHERE mediaimagecontainer.fileid=%1").arg(id);
 }
+
+QString DbMediaImageContainer::getDeleteObjectSql() const
+{
+       // The trigger will take care of deleting
+       // the reference from the mediaimagecontainer
+       // and mediaimage_mediaimagecontainer tables.
+       // there is also a trigger that will delete
+       // all the files linked to mediaimagecontainer
+       // using mediaimage_mediaimagecontainer (the actual
+       // mediaimages).
+       return QString("DELETE FROM file WHERE id=:id");
+}
index fa6488e..bbfdcd7 100644 (file)
@@ -67,8 +67,9 @@ private:
     DbMediaImage *dbMediaImage;
     DbFilePath *dbFilePath;
     virtual QString getCountRefsSelect(int) const;
+    virtual QString getDeleteObjectSql() const;
     // DbSetup *dbSetup;
     // DbFile *dbFile;
- };
+};
 
 #endif // DBMEDIAIMAGECONTAINER_H
index 27485d8..94faead 100644 (file)
@@ -17,6 +17,7 @@
 // You should have received a cyopy of the GNU General Public License
 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
 
+#include <QSqlQuery>
 #include <QSqlQueryModel>
 #include <QDebug>
 #include "dbquerymodelmanager.h"
@@ -62,3 +63,16 @@ void DbQueryModelManager::clearFilters()
     sqlTableModel->setQuery(constructSelect());
 }
 
+bool DbQueryModelManager::deleteDataObject(int id) const
+{
+    QSqlQuery q;
+    q.prepare(getDeleteObjectSql());
+    q.bindValue(":id", id);
+    return q.exec();
+}
+
+QString DbQueryModelManager::getDeleteObjectSql() const
+{
+    return QString("DELETE FROM %1 WHERE id=:id").arg(tableName);
+}
+
index bed6546..c750b6e 100644 (file)
@@ -34,7 +34,10 @@ protected:
     virtual QString constructSelectById(int id) const = 0;
     virtual QString constructFilterById(int id) const = 0;
     virtual QString constructSelect(QString whereClause = "") const = 0;
-    virtual bool deleteDataObject(int id) const = 0;
+    bool deleteDataObject(int id) const;
+    QString tableName;
+private:
+    virtual QString getDeleteObjectSql() const;
 };
 
 #endif // DBQUERYMODELMANAGER_H
index 46cb0a1..9c08a65 100644 (file)
@@ -121,7 +121,7 @@ bool DbObjectDialog::deleteItem()
         { return false; }
         deleteCurrentObject();
 
-        bool delOk = dbManager->deleteDataObjectFromModel(&index);
+        bool delOk = dbManager->deleteDataObject(ob->getId());
         if (!delOk)
         {
             errorMessage->showMessage(tr("Deleting data object %1 failed!").arg(ob->getName()));
index 8fdddbb..3c009c7 100644 (file)
@@ -41,6 +41,11 @@ MainWindow::MainWindow()
     mediaImagePathDialog = 0;
     setupMainDialog = 0;
     executableMainDialog = 0;
+    connectSignals();
+}
+
+void MainWindow::connectSignals()
+{
 }
 
 void MainWindow::createActions()
@@ -78,7 +83,8 @@ void MainWindow::configurePlatforms()
    if (!platformDialog)
    {
        platformDialog = new PlatformDialog(this);
-   } 
+       connect(platformDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
+   }
    activateDialog(platformDialog);
 }
 
@@ -87,6 +93,7 @@ void MainWindow::configureMediaTypes()
     if (!mediaTypeDialog)
     {
         mediaTypeDialog = new MediaTypeDialog(this);
+        connect(mediaTypeDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
    }
    activateDialog(mediaTypeDialog);
 }
@@ -115,6 +122,7 @@ void MainWindow::configureEmulators()
 {
     if (!executableMainDialog) {
         executableMainDialog = new ExecutableMainDialog(this);
+        connect(executableMainDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
     }
     activateDialog(executableMainDialog);
     executableMainDialog->refreshDataModel();
@@ -165,3 +173,9 @@ bool MainWindow::okToContinue()
 {
     return true;
 }
+
+void MainWindow::updateData()
+{
+    qDebug() << "MainWindow::updateData()";
+    launcher->updateData();
+}
index c569f76..84b1b1f 100644 (file)
@@ -50,6 +50,7 @@ private slots:
     void configureMediaImagePaths();
     void configureSetups();
     void configureEmulators();
+    void updateData();
 
 private:
        void createActions();
@@ -58,6 +59,7 @@ private:
        void readSettings();
        void writeSettings();
        bool okToContinue();
+    void connectSignals();
     void activateDialog(EmuFrontDialog*) const;
        PlatformDialog *platformDialog;
     MediaTypeDialog *mediaTypeDialog;