Own includes. More...
#include <QmitkPropertyDelegate.h>
Public Member Functions | |
| QmitkPropertyDelegate (QObject *parent=0) | |
| void | paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const |
| QWidget * | createEditor (QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const |
| void | setEditorData (QWidget *editor, const QModelIndex &index) const |
| void | setModelData (QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const |
| void | updateEditorGeometry (QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const |
| Fit an editor to some geometry (overwritten from QItemDelegate) | |
Protected Member Functions | |
| bool | eventFilter (QObject *o, QEvent *e) |
Own includes.
Toolkit includes. Forward declarations.
An item delegate for rendering and editing mitk::Properties in a QTableView.
Definition at line 34 of file QmitkPropertyDelegate.h.
| QmitkPropertyDelegate::QmitkPropertyDelegate | ( | QObject * | parent = 0 ) |
| QWidget * QmitkPropertyDelegate::createEditor | ( | QWidget * | parent, |
| const QStyleOptionViewItem & | option, | ||
| const QModelIndex & | index | ||
| ) | const |
Create an editor for a specific property (overwritten from QItemDelegate)
Definition at line 73 of file QmitkPropertyDelegate.cpp.
References QuadProgPP::max(), and min.
{
QVariant data = index.data(Qt::EditRole);
QVariant displayData = index.data(Qt::DisplayRole);
QString name = index.model()->data(index.model()->index(index.row(), index.column()-1)).value<QString>();
if(data.isValid())
{
QWidget* editorWidget = NULL;
if(data.type() == QVariant::Color)
{
QPushButton* colorBtn = new QPushButton(parent);
QColor color = data.value<QColor>();
QColor result = QColorDialog::getColor(color);
if(result.isValid())
{
QPalette palette = colorBtn->palette();
palette.setColor(QPalette::Button, result);
colorBtn->setPalette(palette);
colorBtn->setStyleSheet(QString("background-color: %1;foreground-color: %1; border-style: none;").arg(result.name()));
//colorBtn->setFlat(true);
}
// QColorDialog closed by 'Cancel' button, use the old property color
else
{
QPalette palette = colorBtn->palette();
palette.setColor(QPalette::Button, color);
colorBtn->setPalette(palette);
colorBtn->setStyleSheet(QString("background-color: %1;foreground-color: %1; border-style: none;").arg(color.name()));
}
connect(colorBtn, SIGNAL(pressed()), this, SLOT(commitAndCloseEditor()));
editorWidget = colorBtn;
}
/*
else if(data.type() == QVariant::Bool)
{
QCheckBox *visibilityCheckBox = new QCheckBox(parent);
connect(visibilityCheckBox, SIGNAL(editingFinished()),
this, SLOT(commitAndCloseEditor()));
return visibilityCheckBox;
}*/
else if(data.type() == QVariant::Int)
{
QSpinBox* spinBox = new QSpinBox(parent);
spinBox->setSingleStep(1);
spinBox->setMinimum(std::numeric_limits<int>::min());
spinBox->setMaximum(std::numeric_limits<int>::max());
editorWidget = spinBox;
}
// see qt documentation. cast is correct, it would be obsolete if we
// store doubles
else if(static_cast<QMetaType::Type>(data.type()) == QMetaType::Float)
{
QDoubleSpinBox* spinBox = new QDoubleSpinBox(parent);
spinBox->setDecimals(2);
spinBox->setSingleStep(0.1);
if(name == "opacity")
{
spinBox->setMinimum(0.0);
spinBox->setMaximum(1.0);
}
else
{
spinBox->setMinimum(std::numeric_limits<float>::min());
spinBox->setMaximum(std::numeric_limits<float>::max());
}
editorWidget = spinBox;
}
else if(data.type() == QVariant::StringList)
{
QStringList entries = data.value<QStringList>();
QComboBox* comboBox = new QComboBox(parent);
comboBox->setEditable(false);
comboBox->addItems(entries);
editorWidget = comboBox;
}
else
{
editorWidget = QStyledItemDelegate::createEditor(parent, option, index);
}
if ( editorWidget )
{
// install event filter
editorWidget->installEventFilter( const_cast<QmitkPropertyDelegate*>(this) );
}
return editorWidget;
}
else
return new QLabel(displayData.toString(), parent);
}
| bool QmitkPropertyDelegate::eventFilter | ( | QObject * | o, |
| QEvent * | e | ||
| ) | [protected] |
Definition at line 382 of file QmitkPropertyDelegate.cpp.
References mitk::RenderingManager::GetInstance().
{
// filter all kind of events on our editor widgets
// when certain events occur, repaint all render windows, because rendering relevant properties might have changed
switch ( e->type() )
{
case QEvent::KeyRelease:
case QEvent::MouseButtonRelease:
case QEvent::MouseButtonDblClick:
case QEvent::Wheel:
case QEvent::FocusIn:
{
if( QWidget* editor = dynamic_cast<QWidget*>(o) )
{
emit commitData(editor);
}
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
break;
}
default:
{
break;
}
}
return false;
}
| void QmitkPropertyDelegate::paint | ( | QPainter * | painter, |
| const QStyleOptionViewItem & | option, | ||
| const QModelIndex & | index | ||
| ) | const |
Renders a specific property (overwritten from QItemDelegate)
Definition at line 43 of file QmitkPropertyDelegate.cpp.
{
QVariant data = index.data(Qt::DisplayRole);
QString name = data.value<QString>();
if(index.column() == 1 && data.type() == QVariant::Color)
{
QColor qcol = data.value<QColor>();
painter->save();
painter->fillRect(option.rect, qcol);
QRect rect = option.rect;
rect.setWidth(rect.width()-1);
rect.setHeight(rect.height()-1);
QPen pen;
pen.setWidth(1);
painter->setPen(pen);
painter->drawRect(rect);
painter->restore();
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
}
| void QmitkPropertyDelegate::setEditorData | ( | QWidget * | editor, |
| const QModelIndex & | index | ||
| ) | const |
Create an editor for a specific property (overwritten from QItemDelegate)
Definition at line 184 of file QmitkPropertyDelegate.cpp.
{
QVariant data = index.data(Qt::EditRole);
QVariant displayData = index.data(Qt::DisplayRole);
if(data.isValid())
{
if(data.type() == QVariant::Color)
{
/*
QPushButton *colorBtn = qobject_cast<QPushButton *>(editor);
QColor qcol = data.value<QColor>();
colorBtn->setPalette(QPalette(qcol));
QColor result = QColorDialog::getColor(qcol);
if(result.isValid())
{
colorBtn->setPalette(QPalette(result));
}
*/
}
/*
else if(data.type() == QVariant::Bool)
{
QCheckBox *visibilityCheckBox = qobject_cast<QCheckBox *>(editor);
visibilityCheckBox->setChecked(data.toBool());
}*/
/*else*/ if(data.type() == QVariant::Int)
{
QSpinBox* spinBox = qobject_cast<QSpinBox *>(editor);
spinBox->setValue(data.toInt());
}
// see qt documentation. cast is correct, it would be obsolete if we
// store doubles
else if(static_cast<QMetaType::Type>(data.type()) == QMetaType::Float)
{
QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox *>(editor);
spinBox->setValue(data.toDouble());
}
else if(data.type() == QVariant::StringList)
{
QComboBox* comboBox = qobject_cast<QComboBox *>(editor);
QString displayString = displayData.value<QString>();
comboBox->setCurrentIndex(comboBox->findData(displayString));
// connect(comboBox, SIGNAL(currentIndexChanged(int)),
// this, SLOT(ComboBoxCurrentIndexChanged(int)));
}
else
return QStyledItemDelegate::setEditorData(editor, index);
}
}
| void QmitkPropertyDelegate::setModelData | ( | QWidget * | editor, |
| QAbstractItemModel * | model, | ||
| const QModelIndex & | index | ||
| ) | const |
When the user accepts input this func commits the data to the model (overwritten from QItemDelegate)
Definition at line 247 of file QmitkPropertyDelegate.cpp.
{
QVariant data = index.data(Qt::EditRole);
QVariant displayData = index.data(Qt::DisplayRole);
if(data.isValid())
{
if(data.type() == QVariant::Color)
{
QWidget *colorBtn = qobject_cast<QWidget *>(editor);
QVariant colorVariant;
colorVariant.setValue<QColor>(colorBtn->palette().color(QPalette::Button));
model->setData(index, colorVariant);
}
else if(data.type() == QVariant::Int)
{
QSpinBox* spinBox = qobject_cast<QSpinBox *>(editor);
int intValue = spinBox->value();
QVariant intValueVariant;
intValueVariant.setValue<float>(static_cast<float>(intValue));
model->setData(index, intValueVariant);
}
else if(static_cast<QMetaType::Type>(data.type()) == QMetaType::Float)
{
QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox *>(editor);
double doubleValue = spinBox->value();
QVariant doubleValueVariant;
doubleValueVariant.setValue<float>(static_cast<float>(doubleValue));
model->setData(index, doubleValueVariant);
}
else if(data.type() == QVariant::StringList)
{
QString displayData = data.value<QString>();
QComboBox* comboBox = qobject_cast<QComboBox *>(editor);
QString comboBoxValue = comboBox->currentText();
QVariant comboBoxValueVariant;
comboBoxValueVariant.setValue<QString>(comboBoxValue);
model->setData(index, comboBoxValueVariant);
}
else
QStyledItemDelegate::setModelData(editor, model, index);
}
}
| void QmitkPropertyDelegate::updateEditorGeometry | ( | QWidget * | editor, |
| const QStyleOptionViewItem & | option, | ||
| const QModelIndex & | index | ||
| ) | const |
Fit an editor to some geometry (overwritten from QItemDelegate)
Definition at line 335 of file QmitkPropertyDelegate.cpp.
{
/*
QRect rect = option.rect;
if (QCheckBox* checkBoxEditor = qobject_cast<QCheckBox*>(editor))
{
const QStyle *style = QApplication::style();
const int indicatorWidth = style->pixelMetric(QStyle::PM_IndicatorWidth, &option);
const int indicatorHeight = style->pixelMetric(QStyle::PM_IndicatorHeight, &option);
rect = QRect(option.rect.x()+ option.rect.width()/2-indicatorWidth/2,
option.rect.y()+ option.rect.height()/2-indicatorHeight/2,
indicatorWidth, indicatorHeight);
}
*/
editor->setGeometry(option.rect);
}
1.7.2