Re-used the ComboBoxDelegate created earlier for MediaTypeModel in
authorMikko Keinänen <mikko.keinanen@gmail.com>
Mon, 6 Dec 2010 22:46:32 +0000 (00:46 +0200)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Mon, 6 Dec 2010 22:46:32 +0000 (00:46 +0200)
SetupView.

src/delegates/comboboxdelegate.cpp
src/delegates/comboboxdelegate.h
src/models/setupmodel.cpp
src/models/setupmodel.h
src/views/setupeditview.cpp

index d3993d7..0a9f925 100644 (file)
@@ -4,25 +4,18 @@
 #include "emufrontquerymodel.h"
 #include "emufrontobject.h"
 
-ComboBoxDelegate::ComboBoxDelegate(int viewColumn, QSqlQueryModel *cbmodel, int cbmodelIdColumn, int cbmodelDisplayColumn, QWidget *parent) :
-    QStyledItemDelegate(parent), viewColumn(viewColumn), cbmodel(cbmodel), cbmodelIdColumn(cbmodelIdColumn), cbmodelDisplayColumn(cbmodelDisplayColumn)
+ComboBoxDelegate::ComboBoxDelegate(QSqlQueryModel *cbmodel, int cbmodelIdColumn, int cbmodelDisplayColumn, QWidget *parent) :
+    QStyledItemDelegate(parent), cbmodel(cbmodel), cbmodelIdColumn(cbmodelIdColumn), cbmodelDisplayColumn(cbmodelDisplayColumn)
 { }
 
 void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
-    if (index.column() != viewColumn) {
-        QStyledItemDelegate::paint(painter, option, index);
-        return;
-    }
-
     // get the item id from the hosting view's model
     int objid = index.model()->data(index,  Qt::DisplayRole).toInt();
 
     // find matching object from QComboBox's model
     QModelIndex startInd = cbmodel->index(0, cbmodelIdColumn);
     QModelIndexList indList = cbmodel->match(startInd, Qt::DisplayRole, objid);
-
-
     QModelIndex ind = indList.empty() ?
         QModelIndex() :
         cbmodel->index(indList.first().row(), cbmodelDisplayColumn);
@@ -31,7 +24,6 @@ void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
         cbmodel->data(ind).toString() : "";
 
     painter->save();
-    //initStyleOption(&option, index);
     painter->drawText(option.rect, txt);
     painter->restore();
 }
@@ -40,24 +32,16 @@ void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
 
 QWidget* ComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
-    if (index.column() != viewColumn) {
-        return QStyledItemDelegate::createEditor(parent, option, index);
-    }
-
     QComboBox *editor = new QComboBox(parent);
     editor->setEditable(false);
     editor->setModel(cbmodel);
     editor->setModelColumn(cbmodelDisplayColumn);
-    connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
+    connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(commitAndCloseEditor(int)));
     return editor;
 }
 
 void ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
 {
-    if (index.column() != viewColumn) {
-        return QStyledItemDelegate::setEditorData(editor, index);
-    }
-
     // set the correct item selected for the editor:
     // get the item id from the parent view's model
     int id = index.model()->data(index, Qt::DisplayRole).toInt();
@@ -73,9 +57,6 @@ void ComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index)
 
 void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
 {
-    if (index.column() != viewColumn) {
-        return QStyledItemDelegate::setModelData(editor, model, index);
-    }
     QComboBox *cbox = qobject_cast<QComboBox *>(editor);
     if (cbox->currentIndex() == -1) return;
     QModelIndex mi = cbmodel->index(cbox->currentIndex(), cbmodelIdColumn);
@@ -83,7 +64,7 @@ void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
     model->setData(index, id);
 }
 
-void ComboBoxDelegate::commitAndCloseEditor()
+void ComboBoxDelegate::commitAndCloseEditor(int)
 {
     QComboBox *editor = qobject_cast<QComboBox *>(sender());
     emit commitData(editor);
index 1e53762..a9c305a 100644 (file)
@@ -9,11 +9,12 @@ class ComboBoxDelegate : public QStyledItemDelegate
 {
     Q_OBJECT
 public:
-    ComboBoxDelegate(int column,
+    ComboBoxDelegate(
         QSqlQueryModel *,
         int cbmodelIdColumn,
         int cbmodelDisplayColumn,
-        QWidget *parent = 0);
+        QWidget *parent = 0
+    );
 
     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
     //QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
@@ -22,9 +23,8 @@ public:
     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
 
 private slots:
-    void commitAndCloseEditor();
+    void commitAndCloseEditor(int);
 private:
-    int viewColumn;
     QSqlQueryModel *cbmodel;
     int cbmodelIdColumn;
     int cbmodelDisplayColumn;
index a7fe6b7..f70b5bb 100644 (file)
@@ -54,7 +54,7 @@ QString SetupModel::constructSelect(QString where) const
 Qt::ItemFlags SetupModel::flags(const QModelIndex &index) const
 {
     Qt::ItemFlags flags = QSqlQueryModel::flags(index);
-    if (index.column() == Setup_PlatformId) {
+    if (index.column() == Setup_PlatformId || index.column() == Setup_MediaTypeId) {
         flags |= Qt::ItemIsEditable;
     }
     return flags;
@@ -62,7 +62,7 @@ Qt::ItemFlags SetupModel::flags(const QModelIndex &index) const
 
 bool SetupModel::setData(const QModelIndex &index, const QVariant &value, int /*role*/)
 {
-    if(index.column() != Setup_PlatformId)
+    if(index.column() != Setup_PlatformId && index.column() != Setup_MediaTypeId)
         return false;
 
     QModelIndex primaryKeyIndex
@@ -72,22 +72,34 @@ bool SetupModel::setData(const QModelIndex &index, const QVariant &value, int /*
     clear();
 
     bool ok;
-    if (index.column() == Setup_PlatformId) {
+    switch(index.column()) {
+
+    case Setup_PlatformId:
         ok = setPlatform(id, value.toInt());
-    }
+        break;
 
+    case Setup_MediaTypeId:
+        ok = setMediaType(id, value.toInt());
+        break;
+    };
     refresh();
     return ok;
 }
 
 bool SetupModel::setPlatform(int id, int platformId)
 {
-    qDebug() << "updating setup " << id << " to platform " << platformId;
     QSqlQuery query;
     query.prepare(QString("update setup set platformid = :platformid where id = :id"));
     query.bindValue(":platformid", platformId);
     query.bindValue(":id", id);
-    qDebug() << query.lastQuery();
-    qDebug() << query.lastError();
+    return query.exec();
+}
+
+bool SetupModel::setMediaType(int id, int mediaTypeId)
+{
+    QSqlQuery query;
+    query.prepare(QString("update setup set mediatypeid = :mediatypeid where id = :id"));
+    query.bindValue(":mediatypeid", mediaTypeId);
+    query.bindValue(":id", id);
     return query.exec();
 }
index 906b5ba..df58b35 100644 (file)
@@ -40,6 +40,7 @@ protected:
     virtual void refresh();
     virtual QString constructSelect(QString where = "") const;
     virtual bool setPlatform(int id, int platformId);
+    virtual bool setMediaType(int id, int platformId);
 };
 
 #endif // SETUPMODEL_H
index 15cdeba..6ea4567 100644 (file)
@@ -22,6 +22,7 @@
 #include "setupmodel.h"
 #include "comboboxdelegate.h"
 #include "platformmodel.h"
+#include "mediatypemodel.h"
 #include <QSqlTableModel>
 
 SetupEditView::SetupEditView(QWidget *parent) :
@@ -29,11 +30,21 @@ SetupEditView::SetupEditView(QWidget *parent) :
 {
     model = new SetupModel(this);
     objectList->setModel(model);
-    /*QSqlTableModel *platformModel = new QSqlTableModel(this);
-    platformModel->setTable("platform");
-    platformModel->removeColumn(Plat)*/
     PlatformModel *plfModel = new PlatformModel(this);
-    ComboBoxDelegate *platformDelegate = new ComboBoxDelegate(SetupModel::Setup_PlatformId, plfModel, PlatformModel::EmuFrontFileObject_Id, PlatformModel::EmuFrontFileObject_Name, this);
-    objectList->setItemDelegate(platformDelegate);
+    ComboBoxDelegate *platformDelegate = new ComboBoxDelegate(
+            plfModel,
+            PlatformModel::EmuFrontFileObject_Id,
+            PlatformModel::EmuFrontFileObject_Name,
+            this
+        );
+    objectList->setItemDelegateForColumn(SetupModel::Setup_PlatformId, platformDelegate);
+    MediaTypeModel *mdtModel = new MediaTypeModel(this);
+    ComboBoxDelegate *mediatypeDelegate = new ComboBoxDelegate(
+            mdtModel,
+            MediaTypeModel::EmuFrontFileObject_Id,
+            MediaTypeModel::EmuFrontFileObject_Name,
+            this
+        );
+    objectList->setItemDelegateForColumn(SetupModel::Setup_MediaTypeId, mediatypeDelegate);
     postInit();
 }