Adding now adds an empty string to list and starts edit for that string.
[emufront] / src / widgets / efcombobox.cpp
index 15769c0..07cda9f 100644 (file)
@@ -18,8 +18,8 @@
 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "efcombobox.h"
-#include "../exceptions/emufrontexception.h"
-#include "../dataobjects/emufrontobject.h"
+#include "emufrontexception.h"
+#include "emufrontobject.h"
 #include <QSqlQueryModel>
 #include <QSqlRecord>
 #include <QDebug>
@@ -29,8 +29,6 @@
 EFComboBox::EFComboBox(DatabaseManager *dbMan, QWidget *parent)
     : QComboBox(parent), dbManager(dbMan)
 {
-    if (!dbManager)
-        throw new EmuFrontException("Database manager is not available!");
     setSizeAdjustPolicy(QComboBox::AdjustToContents);
     updateDataModel();
 }
@@ -46,31 +44,40 @@ void EFComboBox::updateDataModel(bool reset)
         setModel(model);
 }
 
-EmuFrontObject* EFComboBox::getSelected() const
+/*
+    Returns a pointer to EmuFrontObject which should be deleted
+    later by calling code!
+
+    Throws EmuFrontException
+*/
+EmuFrontObject* EFComboBox::getSelected()
 {
     EmuFrontObject *efo = 0;
     int index = currentIndex();
-    qDebug() << "Selected index " << index << ".";
     if (index < 0)
         return 0;
     QSqlQueryModel *qmodel
         = dynamic_cast<QSqlQueryModel*>(model());
     if (!qmodel) {
-        qDebug() << "No data model available!";
-        return 0;
+        throw EmuFrontException(tr("No data model available!"));
     }
     QSqlRecord rec = qmodel->record(index);
     if (rec.isEmpty()) {
-        qDebug() << "No record available!";
-        return efo;
+        throw EmuFrontException(tr("No data available for selected item!"));
     }
-    qDebug() << "Fetching a data object with id "
-        << rec.value(dataModelIndex_id).toInt();
-    EmuFrontObject *o
-        = dbManager->getDataObject(rec.value(dataModelIndex_id).toInt());
+    int id = rec.value(dataModelIndex_id).toInt();
+    EmuFrontObject *o = dbManager->getDataObject(id); /* Throws EmuFrontException */
+    reset();
+    setCurrentIndex(index);
+    if (!o) throw EmuFrontException(tr("Failed creating selected data object!"));
     return o;
 }
 
+void EFComboBox::reset()
+{
+    dbManager->resetModel();
+}
+
 void EFComboBox::setSelected(const EmuFrontObject *efo)
 {
     if (!efo)