// 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>
EFComboBox::EFComboBox(DatabaseManager *dbMan, QWidget *parent)
: QComboBox(parent), dbManager(dbMan)
{
- if (!dbManager)
- throw new EmuFrontException("Database manager is not available!");
setSizeAdjustPolicy(QComboBox::AdjustToContents);
updateDataModel();
}
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)