1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/attributedelegate.cpp Mon Mar 03 09:25:40 2008 +0000
1.3 @@ -0,0 +1,138 @@
1.4 +#include <QtGui>
1.5 +
1.6 +#include "attributedelegate.h"
1.7 +#include <iostream>
1.8 +
1.9 +using namespace::std;
1.10 +
1.11 +AttributeDelegate::AttributeDelegate(QObject *parent)
1.12 + : QItemDelegate(parent)
1.13 +{
1.14 +}
1.15 +
1.16 +QWidget *AttributeDelegate::createEditor(QWidget *parent,
1.17 + const QStyleOptionViewItem &/* option */,
1.18 + const QModelIndex & index ) const
1.19 +{
1.20 + int col=index.column();
1.21 + int row=index.row();
1.22 +
1.23 + if (col==0 && row==index.model()->rowCount() -1 )
1.24 + {
1.25 + //We are editing a new attribute, starting with attribute name
1.26 + QComboBox *editor = new QComboBox(parent);
1.27 + editor->insertItems (0,attributeTable->getKeys());
1.28 + return editor;
1.29 + }
1.30 + if (col==1 && row==index.model()->rowCount() -1 )
1.31 + {
1.32 + cout << "Edit value now..."<<endl;
1.33 + //We are editing a new attribute, starting with attribute name
1.34 + QComboBox *editor = new QComboBox(parent);
1.35 + editor->insertItems (0,attributeTable->getKeys());
1.36 + return editor;
1.37 +
1.38 + }
1.39 +
1.40 + // Is there already an atttribute defined or
1.41 + // do we need to create a new one?
1.42 +
1.43 + QVariant var=index.model()->data(index.model()->index(row,2,QModelIndex()));
1.44 + QString typeName=var.toString();
1.45 + cout << "AttrDel::createEditor type="<<qPrintable (typeName)<<endl;
1.46 +
1.47 + if (typeName=="IntList")
1.48 + {
1.49 + QSpinBox *editor = new QSpinBox(parent);
1.50 + editor->setMinimum(0);
1.51 + editor->setMaximum(5);
1.52 + return editor;
1.53 + } else if (typeName=="FreeInt")
1.54 + {
1.55 + QSpinBox *editor = new QSpinBox(parent);
1.56 + editor->setMinimum(0);
1.57 + editor->setMaximum(100);
1.58 + return editor;
1.59 + } else if (typeName=="FreeString")
1.60 + {
1.61 + QComboBox *editor = new QComboBox(parent);
1.62 + return editor;
1.63 + } else if (typeName=="StringList")
1.64 + {
1.65 + QComboBox *editor = new QComboBox(parent);
1.66 + return editor;
1.67 + }
1.68 +
1.69 + return NULL;
1.70 +}
1.71 +
1.72 +void AttributeDelegate::setEditorData(QWidget *editor,
1.73 + const QModelIndex &index) const
1.74 +{
1.75 + QVariant value= index.model()->data(index, Qt::DisplayRole);
1.76 + switch (value.type())
1.77 + {
1.78 + case QVariant::Int:
1.79 + {
1.80 + int value = index.model()->data(index, Qt::DisplayRole).toInt();
1.81 + QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
1.82 + spinBox->setValue(value);
1.83 + break;
1.84 + }
1.85 + /*
1.86 + {
1.87 + QString value = index.model()->data(index, Qt::DisplayRole).toString();
1.88 + QLineEdit *le= static_cast<QLineEdit*>(editor);
1.89 + le->setText(value);
1.90 + break;
1.91 + }
1.92 + */
1.93 + case QVariant::String:
1.94 + {
1.95 + QComboBox *cb= static_cast<QComboBox*>(editor);
1.96 + QStringList sl;
1.97 + sl<< index.model()->data(index, Qt::DisplayRole).toString();
1.98 + cb->insertStringList (sl);
1.99 + break;
1.100 + }
1.101 + default:
1.102 + break;
1.103 + }
1.104 +}
1.105 +
1.106 +void AttributeDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
1.107 + const QModelIndex &index) const
1.108 +{
1.109 + QVariant value= index.model()->data(index, Qt::DisplayRole);
1.110 + switch (value.type())
1.111 + {
1.112 + case QVariant::Int:
1.113 + {
1.114 + QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
1.115 + spinBox->interpretText();
1.116 + model->setData(index, spinBox->value(), Qt::EditRole);
1.117 + break;
1.118 + }
1.119 + case QVariant::String:
1.120 + {
1.121 + QComboBox *cb = static_cast<QComboBox*>(editor);
1.122 + model->setData(index, cb->currentText(), Qt::EditRole);
1.123 + break;
1.124 + }
1.125 + default:
1.126 + break;
1.127 + }
1.128 +
1.129 +}
1.130 +
1.131 +void AttributeDelegate::updateEditorGeometry(QWidget *editor,
1.132 + const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
1.133 +{
1.134 + editor->setGeometry(option.rect);
1.135 +}
1.136 +
1.137 +void AttributeDelegate::setAttributeTable (AttributeTable *table)
1.138 +{
1.139 + attributeTable=table;
1.140 +}
1.141 +
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/attributedelegate.h Mon Mar 03 09:25:40 2008 +0000
2.3 @@ -0,0 +1,37 @@
2.4 +
2.5 +#ifndef ATTRIBUTEDELEGATE_H
2.6 +#define ATTRIBUTEDELEGATE_H
2.7 +
2.8 +#include <QItemDelegate>
2.9 +#include <QModelIndex>
2.10 +#include <QObject>
2.11 +#include <QSize>
2.12 +#include <QSpinBox>
2.13 +#include <QLineEdit>
2.14 +
2.15 +#include "attribute.h"
2.16 +
2.17 +class AttributeDelegate : public QItemDelegate
2.18 +{
2.19 + Q_OBJECT
2.20 +
2.21 +enum EditorType {Undefined,SpinBox,LineEdit,ComboBox};
2.22 +
2.23 +public:
2.24 + AttributeDelegate(QObject *parent = 0);
2.25 +
2.26 + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
2.27 + const QModelIndex &index) const;
2.28 +
2.29 + void setEditorData(QWidget *editor, const QModelIndex &index) const ;
2.30 + void setModelData(QWidget *editor, QAbstractItemModel *model,
2.31 + const QModelIndex &index) const ;
2.32 +
2.33 + void updateEditorGeometry(QWidget *editor,
2.34 + const QStyleOptionViewItem &option, const QModelIndex &index) const;
2.35 + void setAttributeTable(AttributeTable *table);
2.36 +private:
2.37 + AttributeTable *attributeTable;
2.38 +};
2.39 +
2.40 +#endif