#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");
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();
}
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();
}
//}
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));
model->setHeaderData(Platform_Name, Qt::Horizontal, tr("Name"));
model->select();
return model;
-}
+}*/
+
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();
};
#include <QtGui>
+#include <QSqlTableModel>
#include "dbobjectdialog.h"
#include "../db/databasemanager.h"
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()));
void DbObjectDialog::updateList() const
{
+ sqlTableModel->setFilter("");
+ sqlTableModel->select();
// fetch items from database (virtual function for this)
// update the item list
}
void DbObjectDialog::editButtonClicked()
{
disableSelection();
+ editObject();
}
void DbObjectDialog::deleteButtonClicked()
void DbObjectDialog::updateData()
{
+ qDebug() << "DbObjectDialog::updateData()";
updateList();
}
+
+void DbObjectDialog::activateNameDialog() const
+{
+ if (!nameDialog) return;
+ nameDialog->show();
+ nameDialog->raise();
+ nameDialog->activateWindow();
+}
+
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;
QPushButton *deleteButton;
void setButtonsEnabled(bool);
- void layout();
- void disableSelection();
+ void layout();
+ void disableSelection();
};
#endif
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
QTextStream cout(stdout, QIODevice::WriteOnly);
+const QString PlatformDialog::DB_TABLE_NAME_PLATFORM = QString("platform");
+
PlatformDialog::PlatformDialog(QWidget *parent)
: DbObjectDialog(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);
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()
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())
{
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();
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 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;
};
+#include <QtGui>
#include "platformnamedialog.h"
#include "../db/databasemanager.h"
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());
}