insilmaril@678: #include insilmaril@678: insilmaril@678: #include "attributedelegate.h" insilmaril@678: #include insilmaril@678: insilmaril@678: using namespace::std; insilmaril@678: insilmaril@678: AttributeDelegate::AttributeDelegate(QObject *parent) insilmaril@678: : QItemDelegate(parent) insilmaril@678: { insilmaril@678: } insilmaril@678: insilmaril@678: QWidget *AttributeDelegate::createEditor(QWidget *parent, insilmaril@678: const QStyleOptionViewItem &/* option */, insilmaril@678: const QModelIndex & index ) const insilmaril@678: { insilmaril@678: int col=index.column(); insilmaril@678: int row=index.row(); insilmaril@678: insilmaril@678: if (col==0 && row==index.model()->rowCount() -1 ) insilmaril@678: { insilmaril@678: //We are editing a new attribute, starting with attribute name insilmaril@678: QComboBox *editor = new QComboBox(parent); insilmaril@678: editor->insertItems (0,attributeTable->getKeys()); insilmaril@678: return editor; insilmaril@678: } insilmaril@678: if (col==1 && row==index.model()->rowCount() -1 ) insilmaril@678: { insilmaril@678: cout << "Edit value now..."<insertItems (0,attributeTable->getKeys()); insilmaril@678: return editor; insilmaril@678: insilmaril@678: } insilmaril@678: insilmaril@678: // Is there already an atttribute defined or insilmaril@678: // do we need to create a new one? insilmaril@678: insilmaril@678: QVariant var=index.model()->data(index.model()->index(row,2,QModelIndex())); insilmaril@678: QString typeName=var.toString(); insilmaril@678: cout << "AttrDel::createEditor type="<setMinimum(0); insilmaril@678: editor->setMaximum(5); insilmaril@678: return editor; insilmaril@678: } else if (typeName=="FreeInt") insilmaril@678: { insilmaril@678: QSpinBox *editor = new QSpinBox(parent); insilmaril@678: editor->setMinimum(0); insilmaril@678: editor->setMaximum(100); insilmaril@678: return editor; insilmaril@678: } else if (typeName=="FreeString") insilmaril@678: { insilmaril@678: QComboBox *editor = new QComboBox(parent); insilmaril@678: return editor; insilmaril@678: } else if (typeName=="StringList") insilmaril@678: { insilmaril@678: QComboBox *editor = new QComboBox(parent); insilmaril@678: return editor; insilmaril@678: } insilmaril@678: insilmaril@678: return NULL; insilmaril@678: } insilmaril@678: insilmaril@678: void AttributeDelegate::setEditorData(QWidget *editor, insilmaril@678: const QModelIndex &index) const insilmaril@678: { insilmaril@678: QVariant value= index.model()->data(index, Qt::DisplayRole); insilmaril@678: switch (value.type()) insilmaril@678: { insilmaril@678: case QVariant::Int: insilmaril@678: { insilmaril@678: int value = index.model()->data(index, Qt::DisplayRole).toInt(); insilmaril@678: QSpinBox *spinBox = static_cast(editor); insilmaril@678: spinBox->setValue(value); insilmaril@678: break; insilmaril@678: } insilmaril@678: /* insilmaril@678: { insilmaril@678: QString value = index.model()->data(index, Qt::DisplayRole).toString(); insilmaril@678: QLineEdit *le= static_cast(editor); insilmaril@678: le->setText(value); insilmaril@678: break; insilmaril@678: } insilmaril@678: */ insilmaril@678: case QVariant::String: insilmaril@678: { insilmaril@678: QComboBox *cb= static_cast(editor); insilmaril@678: QStringList sl; insilmaril@678: sl<< index.model()->data(index, Qt::DisplayRole).toString(); insilmaril@678: cb->insertStringList (sl); insilmaril@678: break; insilmaril@678: } insilmaril@678: default: insilmaril@678: break; insilmaril@678: } insilmaril@678: } insilmaril@678: insilmaril@678: void AttributeDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, insilmaril@678: const QModelIndex &index) const insilmaril@678: { insilmaril@678: QVariant value= index.model()->data(index, Qt::DisplayRole); insilmaril@678: switch (value.type()) insilmaril@678: { insilmaril@678: case QVariant::Int: insilmaril@678: { insilmaril@678: QSpinBox *spinBox = static_cast(editor); insilmaril@678: spinBox->interpretText(); insilmaril@678: model->setData(index, spinBox->value(), Qt::EditRole); insilmaril@678: break; insilmaril@678: } insilmaril@678: case QVariant::String: insilmaril@678: { insilmaril@678: QComboBox *cb = static_cast(editor); insilmaril@678: model->setData(index, cb->currentText(), Qt::EditRole); insilmaril@678: break; insilmaril@678: } insilmaril@678: default: insilmaril@678: break; insilmaril@678: } insilmaril@678: insilmaril@678: } insilmaril@678: insilmaril@678: void AttributeDelegate::updateEditorGeometry(QWidget *editor, insilmaril@678: const QStyleOptionViewItem &option, const QModelIndex &/* index */) const insilmaril@678: { insilmaril@678: editor->setGeometry(option.rect); insilmaril@678: } insilmaril@678: insilmaril@678: void AttributeDelegate::setAttributeTable (AttributeTable *table) insilmaril@678: { insilmaril@678: attributeTable=table; insilmaril@678: } insilmaril@678: