SetupView.
#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);
cbmodel->data(ind).toString() : "";
painter->save();
- //initStyleOption(&option, index);
painter->drawText(option.rect, txt);
painter->restore();
}
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();
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);
model->setData(index, id);
}
-void ComboBoxDelegate::commitAndCloseEditor()
+void ComboBoxDelegate::commitAndCloseEditor(int)
{
QComboBox *editor = qobject_cast<QComboBox *>(sender());
emit commitData(editor);
{
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;
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;
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;
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
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();
}
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
#include "setupmodel.h"
#include "comboboxdelegate.h"
#include "platformmodel.h"
+#include "mediatypemodel.h"
#include <QSqlTableModel>
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();
}