Fixed bugs: dialogs remained disabled (signals were not attached to
[emufront] / src / dialogs / setupeditdialog.cpp
index cacb829..c6fa561 100644 (file)
@@ -21,7 +21,7 @@
 #include <QSqlTableModel>
 #include <QSqlRecord>
 #include "setupeditdialog.h"
-#include "../widgets/stringlistwidget.h"
+#include "../widgets/fileextensionwidget.h"
 #include "../widgets/effileobjectcombobox.h"
 #include "../db/dbmediatype.h"
 #include "../db/dbplatform.h"
 SetupEditDialog::SetupEditDialog(QWidget *parent, EmuFrontObject* obj)
     : DataObjectEditDialog(parent, obj)
 {
-    dbSetup = 0; //new DbSetup(this);
+    dbSetup = 0;
     dbPlatform = new DbPlatform(this);
     dbMediaType = new DbMediaType(this);
     initWidgets();
-    qDebug() << "Connecting signals";
     connectSignals();
+    emit test();
     layout();
 }
 
 void SetupEditDialog::initWidgets()
 {
-    mediaTypeComBox = new EFFileObjectComboBox(dbMediaType, this); //new QComboBox;
-    platformComBox = new EFFileObjectComboBox(dbPlatform, this); //new QComboBox;
-    supportedFileTypesList = new StringListWidget;
+    mediaTypeComBox = new EFFileObjectComboBox(dbMediaType, this);
+    platformComBox = new EFFileObjectComboBox(dbPlatform, this);
+    supportedFileTypesList = new FileExtensionWidget;
+    supportedFileTypesList->setToolTip(tr("Set the supported file types by entering the file extension(s) (no wildcards or dots!)."));
 }
 
 void SetupEditDialog::layout()
 {
-    qDebug() << "SetupEditDialog::layout";
-   QLabel *platformLabel = new QLabel(tr("&Platform"));
+   QLabel *platformLabel = new QLabel(tr("&Platform:"));
    platformLabel->setBuddy(platformComBox);
-   QLabel *mediaTypeLabel = new QLabel(tr("Media&Type"));
+   QLabel *mediaTypeLabel = new QLabel(tr("Media&Type:"));
    mediaTypeLabel->setBuddy(mediaTypeComBox);
+   QLabel *fileTypesLabel = new QLabel(tr("Supported file types:"));
    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(platformLabel, 0, 0);
    gridLayout->addWidget(platformComBox, 0, 1);
    gridLayout->addWidget(mediaTypeLabel, 1, 0);
    gridLayout->addWidget(mediaTypeComBox, 1, 1);
-   gridLayout->addWidget(supportedFileTypesList, 2, 0, 2, 2);
+   gridLayout->addWidget(fileTypesLabel, 2, 0, 1, 2);
+   gridLayout->addWidget(supportedFileTypesList, 3, 0, 2, 2);
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(gridLayout);
    mainLayout->addWidget(buttonBox);
    setLayout(mainLayout);
-    qDebug() << "SetupEditDialog::layout done";
-
    setWindowTitle(tr("Edit setup"));
 }
 
@@ -88,30 +88,46 @@ void SetupEditDialog::acceptChanges()
     qDebug() << "Media type selected " << mt->getName();
 
 
+    bool change = false;
     Platform *ptmp = sup->getPlatform();
-    if (plf != ptmp)
+    if (!ptmp || *plf != *ptmp)
     {
         delete ptmp;
         sup->setPlatform(plf);
+        change = true;
     }
     MediaType *mtmp = sup->getMediaType();
-    if (mt != mtmp)
+    if (!mtmp || *mt != *mtmp)
     {
         delete mtmp;
         sup->setMediaType(mt);
+        change = true;
+    }
+
+    // "Two lists are considered equal if they contain the same values in the same order."
+    if (supportedFileTypesList->getItems() != sup->getSupportedFileTypeExtensions()) {
+        sup->setSupportedFileTypeExtensions(supportedFileTypesList->getItems());
+        change = true;
     }
-    sup->setSupportedFileTypeExtensions(supportedFileTypesList->getItems());
-    emit dataObjectUpdated();
+    // TODO: the second time around this signal is not received!
+    if (change) emit dataObjectUpdated();
     efObject = 0;
-    qDebug() << "Closing setup edit dialog";
     close();
 }
 
 void SetupEditDialog::setDataObject(EmuFrontObject *ob)
 {
     if (!ob) return;
+    qDebug() << "Updating Setup edit dialog data object to "
+        << ob->getName() << ".";
+    if (efObject)
+        delete dynamic_cast<Setup*>(efObject); // TODO: caused crash if another instance of setupeditdialog was created and new instance destroyed object being referenced in another existing dialog.
     efObject = ob;
     Setup *sup= dynamic_cast<Setup*>(ob);
+    if (!sup) {
+        qDebug() << "Failed casting to Setup";
+        return;
+    }
     if (sup->getPlatform()) setSelectedPlatform(sup->getPlatform());
     if (sup->getMediaType()) setSelectedMediaType(sup->getMediaType());
     supportedFileTypesList->setItems(sup->getSupportedFileTypeExtensions());
@@ -119,40 +135,16 @@ void SetupEditDialog::setDataObject(EmuFrontObject *ob)
 
 void SetupEditDialog::setSelectedPlatform(const Platform *plf)
 {
-    //setSelected(platformComBox, plf, DbPlatform::EmuFrontFileObject_Id);
     platformComBox->setSelected(plf);
 }
 
 void SetupEditDialog::setSelectedMediaType(const MediaType *plf)
 {
-    //setSelected(mediaTypeComBox, plf, DbMediaType::EmuFrontFileObject_Id);
     mediaTypeComBox->setSelected(plf);
 }
 
 Platform* SetupEditDialog::getSelectedPlatform() const
 {
-    /*Platform *plf = 0;
-    int index = platformComBox->currentIndex();
-    qDebug() << "Platform from index " << index << " selected";
-    if (index < 0)
-        return plf;
-    QSqlQueryModel* platformModel
-        = dynamic_cast<QSqlQueryModel*>(platformComBox->model());
-    if (!platformModel)
-    {
-        qDebug() << "No platform model";
-        return plf;
-    }
-    QSqlRecord rec = platformModel->record(index);
-    if (!rec.isEmpty())
-    {
-        qDebug() << "Trying to fetch platform with id "
-            << rec.value(DbPlatform::EmuFrontFileObject_Id).toInt() ;
-        EmuFrontObject *o
-            = dbPlatform->getDataObject(rec.value(DbPlatform::EmuFrontFileObject_Id).toInt());
-        plf = dynamic_cast<Platform*>(o);
-    }*/
-
     EmuFrontObject *o = platformComBox->getSelected();
     if (!o) return 0;
     Platform *plf = dynamic_cast<Platform*>(o);
@@ -161,22 +153,6 @@ Platform* SetupEditDialog::getSelectedPlatform() const
 
 MediaType* SetupEditDialog::getSelectedMediaType() const
 {
-    /*MediaType *mt = 0;
-    int index = mediaTypeComBox->currentIndex();
-    if (index < 0) return mt;
-    QSqlQueryModel* mediaTypeModel = dynamic_cast<QSqlQueryModel*>(mediaTypeComBox->model());
-    if (!mediaTypeModel)
-    {
-        qDebug("Media type data model missing");
-        return mt;
-    }
-    QSqlRecord rec = mediaTypeModel->record(index);
-    if (!rec.isEmpty())
-    {
-        EmuFrontObject *o = dbMediaType->getDataObject(rec.value(DbMediaType::EmuFrontFileObject_Id).toInt());
-        mt = dynamic_cast<MediaType*>(o);
-    }
-    return mt;*/
     EmuFrontObject *o = mediaTypeComBox->getSelected();
     if (!o) return 0;
     MediaType *mt = dynamic_cast<MediaType*>(o);
@@ -185,7 +161,6 @@ MediaType* SetupEditDialog::getSelectedMediaType() const
 
 void SetupEditDialog::updateData()
 {
-    qDebug() << "Updating combobox data";
     platformComBox->updateDataModel();
     mediaTypeComBox->updateDataModel();
 }