Media image path dialog crash fixed (was not initialized properly).
authorMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 30 May 2010 21:15:59 +0000 (00:15 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 30 May 2010 21:15:59 +0000 (00:15 +0300)
Added new functionality to media image path editor.

src/db/dbplatform.h
src/dialogs/dataobjecteditdialog.h
src/dialogs/mediaimagepathdialog.cpp
src/dialogs/mediaimagepathdialog.h
src/dialogs/mediaimagepathmaindialog.cpp
src/dialogs/namedialog.h
src/dialogs/platformdialog.cpp
src/mainwindow.cpp

index 06f5f2c..5d50db0 100644 (file)
@@ -35,12 +35,12 @@ public:
     bool insertDataObjectToModel(const EmuFrontObject*);
     bool deleteDataObjectFromModel(QModelIndex*);
     int countDataObjectRefs(int) const;
-
-private:
     enum {
         Platform_Id = 0,
         Platform_Name = 1,
         Platform_Filename = 2 };
+
+private:
     virtual QSqlTableModel* getData();
 };
 
index 6bc938f..dc669dd 100644 (file)
@@ -31,6 +31,10 @@ public:
     DataObjectEditDialog(QWidget *parent, EmuFrontObject *ob);
     virtual void setDataObject(EmuFrontObject *) = 0;
 
+signals:
+    void dataObjectUpdated();
+    void updateRejected();
+
 protected:
     EmuFrontObject *efObject;
 
index 88ecf18..2d184e8 100644 (file)
 
 #include <QtGui>
 #include <QSqlTableModel>
+#include <QSqlRecord>
 #include "../db/dbplatform.h"
 #include "../db/dbmediatype.h"
 #include "mediaimagepathdialog.h"
+#include "../dataobjects/platform.h"
+#include "../dataobjects/mediatype.h"
+#include "../dataobjects/filepathobject.h"
 
 MediaImagePathDialog::MediaImagePathDialog(QWidget *parent, EmuFrontObject *efObject)
     : DataObjectEditDialog(parent, efObject)
@@ -35,8 +39,6 @@ MediaImagePathDialog::MediaImagePathDialog(QWidget *parent, EmuFrontObject *efOb
 
 MediaImagePathDialog::~MediaImagePathDialog()
 {
-    delete mediaTypeComBox;
-    delete platformModel;
 }
 
 void MediaImagePathDialog::connectSignals()
@@ -62,6 +64,9 @@ void MediaImagePathDialog::populateMediaTypeComBox()
 
 void MediaImagePathDialog::populatePlatformComBox()
 {
+    dbPlatform = new DbPlatform(this);
+    platformComBox->setModel(dbPlatform->getDataModel());
+    platformComBox->setModelColumn(DbPlatform::Platform_Name);
 }
 
 void MediaImagePathDialog::layout()
@@ -84,10 +89,43 @@ void MediaImagePathDialog::layout()
    setWindowTitle(tr("Set media image paths"));
 }
 
-void MediaImagePathDialog::setDataObject(EmuFrontObject *)
+void MediaImagePathDialog::setDataObject(EmuFrontObject *ob)
 {
+    if (!ob) return;
+    efObject = ob;
+    FilePathObject *fpo = dynamic_cast<FilePathObject*>(ob);
+    QString fpath = fpo->getName();
+    filePathLabel->setText(fpath);
+    setSelectedPlatform(fpo->getPlatform());
+    setSelectedMediaType(fpo->getMediaType());
 }
 
+void MediaImagePathDialog::setSelectedPlatform(const Platform *plf)
+{
+    setSelected(platformModel, platformComBox, plf, DbPlatform::Platform_Id);
+}
+
+void MediaImagePathDialog::setSelectedMediaType(const MediaType *plf)
+{
+    setSelected(mediaTypeModel, mediaTypeComBox, plf, DbMediaType::MediaType_Id);
+}
+
+// TODO: this might be useful to lever to upper classes
+void MediaImagePathDialog::setSelected(const QSqlTableModel *model, QComboBox *cbox, const EmuFrontObject *ob, int idIndex)
+{
+    if (!ob) return;
+    for (int i = 0; i < model->rowCount(); ++i)
+    {
+        QSqlRecord rec = model->record(i);
+        if (rec.value(idIndex) == ob->getId())
+        {
+            cbox->setCurrentIndex(i);
+            break;
+        }
+    }
+}
+
+
 void MediaImagePathDialog::acceptChanges()
 {
 }
index 34769cb..353a40d 100644 (file)
@@ -29,6 +29,8 @@ class QPushButton;
 class QSqlTableModel;
 class DbMediaType;
 class DbPlatform;
+class MediaType;
+class Platform;
 
 class MediaImagePathDialog : public DataObjectEditDialog
 {
@@ -59,6 +61,9 @@ private:
     void connectSignals();
     void populateMediaTypeComBox();
     void populatePlatformComBox();
+    void setSelectedMediaType(const MediaType *);
+    void setSelectedPlatform(const Platform *);
+    void setSelected(const QSqlTableModel*, QComboBox*, const EmuFrontObject*, int idIndex);
 };
 
 #endif // MEDIAIMAGEPATHDIALOG_H
index 6c5144e..a57445d 100644 (file)
 
 #include <QtGui>
 
-#include "mediaimagepathmaindialog.h"
-#include "mediaimagepathdialog.h"
 #include "../dataobjects/filepathobject.h"
 #include "../db/dbfilepath.h"
-
+#include "mediaimagepathmaindialog.h"
+#include "mediaimagepathdialog.h"
 
 MediaImagePathMainDialog::MediaImagePathMainDialog(QWidget *parent)
     : DbObjectDialog(parent)
 {
+    qDebug() << "MediaImagePathMainDialog";
     setWindowTitle(tr("Set media image paths"));
+    qDebug() << "Creating MediaImagePathDialog";
     nameDialog = new MediaImagePathDialog(this, dynamic_cast<FilePathObject*>(dbObject));
+    qDebug() << "Creating DbFilePath";
     dbManager = new DbFilePath(this);
-    //initDataTable();
+    qDebug() << "Initializing data table";
+    initDataTable();
+
+    qDebug() << "Connecting signals";
     // do not move to parent class:
-    //connectSignals();
+    connectSignals();
 }
 
 EmuFrontObject* MediaImagePathMainDialog::createObject()
index 8974070..1a113f2 100644 (file)
@@ -37,10 +37,6 @@ public:
     ~NameDialog();
     virtual void setDataObject(EmuFrontObject *) = 0;
 
-signals:
-    void dataObjectUpdated();
-    void updateRejected();
-
 protected slots:
     virtual void acceptChanges();
     virtual void rejectChanges();
index afd50bd..edb64d6 100644 (file)
@@ -18,9 +18,6 @@
 // along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <QtGui>
-#include <QAbstractItemView>
-#include <QSqlTableModel>
-#include <QTextStream>
 #include "../db/dbplatform.h"
 #include "../dataobjects/platform.h"
 #include "platformdialog.h"
index b6334fa..5605e25 100644 (file)
@@ -33,6 +33,7 @@ MainWindow::MainWindow()
     readSettings();
     platformDialog = 0;
     mediaTypeDialog = 0;
+    mediaImagePathDialog = 0;
 }
 
 void MainWindow::createActions()