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); }