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