--- /dev/null
+Setupview
+---------
+
+Test 1:
+- Add new setup when no platform or media types are yet added
+Result:
+- Shows error that no platform or media types are not added
+- New row is not created
+
+Test 2:
+- Add new setup when any platforms are not yet added
+Result:
+- Shows error that any platform is not available
+- New row is not created
+
+Test 3:
+- Add new setup when any media types are not yet added
+Result:
+- Shows error that any media type is not available
+- New row is not created
// along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
#include "setupmodel.h"
+#include "emufrontexception.h"
#include <QtSql>
const QString SetupModel::FILE_TYPE_EXTENSION_SEPARATOR = QString("|");
return query.exec();
}
+bool SetupModel::insertRows(int row, int count, const QModelIndex &parent)
+{
+ if (parent.isValid())
+ return false; // This is a flat model
+ if (rowCount() < row)
+ row = rowCount() + 1;
+ // we need a default value for platformid and mediatypeid and if none is yet
+ // available an error message must be shown!
+ int plfId = -1;
+ int mdtId = -1;
+ QSqlQuery q;
+ q.exec(QString("SELECT id FROM platform ORDER BY name LIMIT 1"));
+ if (q.first()){
+ qDebug() << "Got id " << plfId << " for default platform.";
+ plfId = q.value(0).toInt();
+ }
+ else {
+ throw EmuFrontException(tr("No platforms yet available for setup configuration!"));
+ }
+ q.exec(QString("SELECT id FROM mediatype ORDER BY name LIMIT 1"));
+ if (q.first()) {
+ qDebug() << "Got id " << mdtId << " for default media type.";
+ mdtId = q.value(0).toInt();
+ }
+ else {
+ throw EmuFrontException(tr("No media types yet available for setup configuration!"));
+ }
+ q.prepare(QString("INSERT INTO setup (id, platformid, mediatypeid, filetypeextensions) "
+ " VALUES (NULL, :plfid, :mdtid, '') "));
+ beginInsertRows(QModelIndex(), row, row + count - 1);
+ for (int i = 0; i < count; ++i) {
+ q.bindValue(":plfid", plfId);
+ q.bindValue(":mdtid", mdtId);
+ if (!q.exec()) {
+ throw EmuFrontException(tr("Failed creating new setup: %1").
+ arg(q.lastError().text()));
+ }
+ }
+ endInsertRows();
+ refresh();
+ return true;
+}
+
+bool SetupModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+}
SetupModel(QObject *parent = 0);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
+ virtual bool insertRows(int row, int count, const QModelIndex &parent);
+ virtual bool removeRows(int row, int count, const QModelIndex &parent);
enum { Setup_Id = 0,
Setup_PlatformId,
Setup_MediaTypeId,
{
int row = objectList->currentIndex().isValid() ?
objectList->currentIndex().row() : 0;
- model->insertRows(row, 1);
+ try {
+ model->insertRows(row, 1);
+ } catch(EmuFrontException e) {
+ errorMessage->showMessage(tr("Failed inserting rows: %1").arg(e.what()));
+ return;
+ }
QModelIndex ind = model->index(row, 1);
if (!ind.isValid()){
return;