From: Mikko Keinänen Date: Mon, 6 Dec 2010 22:46:32 +0000 (+0200) Subject: Re-used the ComboBoxDelegate created earlier for MediaTypeModel in X-Git-Url: http://git.maemo.org/git/?p=emufront;a=commitdiff_plain;h=6e043ed6c36c077e35b8beac53de1198c6e9f239 Re-used the ComboBoxDelegate created earlier for MediaTypeModel in SetupView. --- diff --git a/src/delegates/comboboxdelegate.cpp b/src/delegates/comboboxdelegate.cpp index d3993d7..0a9f925 100644 --- a/src/delegates/comboboxdelegate.cpp +++ b/src/delegates/comboboxdelegate.cpp @@ -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(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(sender()); emit commitData(editor); diff --git a/src/delegates/comboboxdelegate.h b/src/delegates/comboboxdelegate.h index 1e53762..a9c305a 100644 --- a/src/delegates/comboboxdelegate.h +++ b/src/delegates/comboboxdelegate.h @@ -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; diff --git a/src/models/setupmodel.cpp b/src/models/setupmodel.cpp index a7fe6b7..f70b5bb 100644 --- a/src/models/setupmodel.cpp +++ b/src/models/setupmodel.cpp @@ -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(); } diff --git a/src/models/setupmodel.h b/src/models/setupmodel.h index 906b5ba..df58b35 100644 --- a/src/models/setupmodel.h +++ b/src/models/setupmodel.h @@ -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 diff --git a/src/views/setupeditview.cpp b/src/views/setupeditview.cpp index 15cdeba..6ea4567 100644 --- a/src/views/setupeditview.cpp +++ b/src/views/setupeditview.cpp @@ -22,6 +22,7 @@ #include "setupmodel.h" #include "comboboxdelegate.h" #include "platformmodel.h" +#include "mediatypemodel.h" #include 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(); }