after data object editing to the main window.
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();
static const QString DB_TABLE_MEDIAIMAGECONTAINER_MEDIAIMAGE;
static const QString DB_TABLE_EXECUTABLE;
-
private:
static const QString DB_FILENAME;
static const QString DATABASE;
static QString getDbPath();
EmuFrontObject* getFilteredDataObject();
virtual QString getCountRefsSelect(int) const = 0;
-
};
#endif
" 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 "
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);
+}
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
#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)
#include <QSqlRelationalTableModel>
#include "dbfile.h"
+
DbFile::DbFile(QObject *parent) : DbQueryModelManager(parent)
{
+ tableName = DbFile::DB_TABLE_NAME_FILE;
type = -1;
}
#include "dbfilepath.h"
#include "dbsetup.h"
+
DbFilePath::DbFilePath(QObject *parent) : DbQueryModelManager(parent)
{
+ tableName = DbFilePath::DB_TABLE_NAME_FILEPATH;
dbSetup = new DbSetup(this);
}
#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)
//#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);
}
" =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");
+}
DbMediaImage *dbMediaImage;
DbFilePath *dbFilePath;
virtual QString getCountRefsSelect(int) const;
+ virtual QString getDeleteObjectSql() const;
// DbSetup *dbSetup;
// DbFile *dbFile;
- };
+};
#endif // DBMEDIAIMAGECONTAINER_H
// 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"
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);
+}
+
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
{ 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()));
mediaImagePathDialog = 0;
setupMainDialog = 0;
executableMainDialog = 0;
+ connectSignals();
+}
+
+void MainWindow::connectSignals()
+{
}
void MainWindow::createActions()
if (!platformDialog)
{
platformDialog = new PlatformDialog(this);
- }
+ connect(platformDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
+ }
activateDialog(platformDialog);
}
if (!mediaTypeDialog)
{
mediaTypeDialog = new MediaTypeDialog(this);
+ connect(mediaTypeDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
}
activateDialog(mediaTypeDialog);
}
{
if (!executableMainDialog) {
executableMainDialog = new ExecutableMainDialog(this);
+ connect(executableMainDialog, SIGNAL(finished(int)), this, SLOT(updateData()));
}
activateDialog(executableMainDialog);
executableMainDialog->refreshDataModel();
{
return true;
}
+
+void MainWindow::updateData()
+{
+ qDebug() << "MainWindow::updateData()";
+ launcher->updateData();
+}
void configureMediaImagePaths();
void configureSetups();
void configureEmulators();
+ void updateData();
private:
void createActions();
void readSettings();
void writeSettings();
bool okToContinue();
+ void connectSignals();
void activateDialog(EmuFrontDialog*) const;
PlatformDialog *platformDialog;
MediaTypeDialog *mediaTypeDialog;