moved database logic from dialog class to databasemanager and child.
const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
-//QSqlDatabase DatabaseManager::db = QSqlDatabase::addDatabase("QSQLITE");
-
DatabaseManager::DatabaseManager(QObject *parent)
: QObject(parent)
{}
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;
-}*/
-
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
--- /dev/null
+#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;
+}
--- /dev/null
+#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
: 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"));
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()
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;
#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();
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();
}
{
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;
-}
-
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;
};
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 \
dialogs/platformnamedialog.cpp \
dialogs/emufrontdialog.cpp \
dataobjects/emufrontobject.cpp \
- dataobjects/platform.cpp
+ dataobjects/platform.cpp \
+ db/dbplatform.cpp
createStatusBar();
readSettings();
platformDialog = 0;
- dbManager = new DatabaseManager;
+ //dbManager = new DatabaseManager;
}
void MainWindow::createActions()