15 #include <QApplication> 16 #include <QColorDialog> 18 #include <QHBoxLayout> 20 #include <QPaintEvent> 23 #include <QToolButton> 43 : QWidget(parent), m_LineEdit(new QLineEdit), m_Button(new QToolButton)
45 m_LineEdit->setText(m_Color.name());
46 m_Button->setText(
"...");
48 QHBoxLayout *layout =
new QHBoxLayout;
49 layout->setContentsMargins(0, 0, 0, 0);
50 layout->setSpacing(0);
52 layout->addWidget(m_LineEdit);
53 layout->addWidget(m_Button);
55 this->setFocusProxy(m_LineEdit);
56 this->setLayout(layout);
58 connect(m_LineEdit, SIGNAL(editingFinished()),
this, SLOT(OnLineEditEditingFinished()));
59 connect(m_Button, SIGNAL(clicked()),
this, SLOT(OnButtonClicked()));
74 m_LineEdit->setText(color.name());
77 void QmitkColorWidget::OnLineEditEditingFinished()
79 if (!QColor::isValidColor(m_LineEdit->text()))
80 m_LineEdit->setText(
"#000000");
82 m_Color.setNamedColor(m_LineEdit->text());
85 void QmitkColorWidget::OnButtonClicked()
87 QColor color = QColorDialog::getColor(m_Color, QApplication::activeWindow());
106 if (m_ComboBox !=
nullptr)
108 QStyleOptionComboBox option;
110 option.initFrom(m_ComboBox);
111 option.editable = m_ComboBox->isEditable();
113 if (m_ComboBox->style()->styleHint(QStyle::SH_ComboBox_Popup, &option, m_ComboBox))
115 QStyleOptionMenuItem menuOption;
116 menuOption.initFrom(
this);
117 menuOption.palette = this->palette();
118 menuOption.state = QStyle::State_None;
119 menuOption.checkType = QStyleOptionMenuItem::NotCheckable;
120 menuOption.menuRect =
event->rect();
121 menuOption.maxIconWidth = 0;
122 menuOption.tabWidth = 0;
124 QPainter painter(this->viewport());
125 m_ComboBox->style()->drawControl(QStyle::CE_MenuEmptyArea, &menuOption, &painter,
this);
129 QListView::paintEvent(event);
134 int width = this->viewport()->width();
135 int height = this->contentsSize().height();
137 this->resizeContents(width, height);
139 QListView::resizeEvent(event);
144 QStyleOptionViewItem option = QListView::viewOptions();
145 option.showDecorationSelected =
true;
147 if (m_ComboBox !=
nullptr)
148 option.font = m_ComboBox->font();
153 class PropertyEqualTo
159 return pair.second.GetPointer() == m_Property;
175 const QStyleOptionViewItem &option,
176 const QModelIndex &index)
const 178 QVariant data = index.data(Qt::EditRole);
184 QSpinBox *spinBox =
new QSpinBox(parent);
187 std::string name = this->GetPropertyName(index);
189 if (extensions !=
nullptr && !name.empty() && extensions->
HasExtension(name))
194 if (extension.IsNotNull())
196 spinBox->setMinimum(extension->GetMinimum());
197 spinBox->setMaximum(extension->GetMaximum());
198 spinBox->setSingleStep(extension->GetSingleStep());
202 connect(spinBox, SIGNAL(editingFinished()),
this, SLOT(OnSpinBoxEditingFinished()));
207 if (data.type() == QVariant::Double ||
static_cast<QMetaType::Type
>(data.type()) == QMetaType::Float)
209 QDoubleSpinBox *spinBox =
new QDoubleSpinBox(parent);
212 std::string name = this->GetPropertyName(index);
214 if (extensions !=
nullptr && !name.empty() && extensions->
HasExtension(name))
219 if (extension.IsNotNull())
221 spinBox->setMinimum(extension->GetMinimum());
222 spinBox->setMaximum(extension->GetMaximum());
223 spinBox->setSingleStep(extension->GetSingleStep());
224 spinBox->setDecimals(extension->GetDecimals());
229 spinBox->setSingleStep(0.1);
230 spinBox->setDecimals(4);
233 if (name ==
"opacity")
235 spinBox->setMinimum(0.0);
236 spinBox->setMaximum(1.0);
239 connect(spinBox, SIGNAL(editingFinished()),
this, SLOT(OnSpinBoxEditingFinished()));
246 QComboBox *comboBox =
new QComboBox(parent);
249 comboBox->addItems(data.toStringList());
251 connect(comboBox, SIGNAL(currentIndexChanged(
int)),
this, SLOT(OnComboBoxCurrentIndexChanged(
int)));
260 connect(colorWidget, SIGNAL(ColorPicked()),
this, SLOT(OnColorPicked()));
266 return QStyledItemDelegate::createEditor(parent, option, index);
269 std::string QmitkPropertyItemDelegate::GetPropertyName(
const QModelIndex &index)
const 277 mitk::PropertyList::PropertyMap::const_iterator it =
278 std::find_if(propertyMap->begin(), propertyMap->end(), PropertyEqualTo(property));
280 if (it != propertyMap->end())
287 void QmitkPropertyItemDelegate::OnComboBoxCurrentIndexChanged(
int)
289 QComboBox *comboBox = qobject_cast<QComboBox *>(sender());
291 emit commitData(comboBox);
292 emit closeEditor(comboBox);
295 void QmitkPropertyItemDelegate::OnSpinBoxEditingFinished()
297 QAbstractSpinBox *spinBox = qobject_cast<QAbstractSpinBox *>(sender());
299 emit commitData(spinBox);
300 emit closeEditor(spinBox);
303 void QmitkPropertyItemDelegate::OnColorPicked()
307 emit commitData(colorWidget);
308 emit closeEditor(colorWidget);
312 const QStyleOptionViewItem &option,
313 const QModelIndex &index)
const 315 QVariant data = index.data();
319 painter->fillRect(option.rect, data.value<QColor>());
323 QStyledItemDelegate::paint(painter, option, index);
328 QVariant data = index.data(Qt::EditRole);
335 QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
336 comboBox->setCurrentIndex(comboBox->findText(index.data().toString()));
341 colorWidget->
SetColor(data.value<QColor>());
345 QStyledItemDelegate::setEditorData(editor, index);
351 QVariant data = index.data(Qt::EditRole);
358 QSpinBox *spinBox = qobject_cast<QSpinBox *>(editor);
359 model->setData(index, spinBox->value());
361 else if (data.type() == QVariant::Double)
363 QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox *>(editor);
364 model->setData(index, spinBox->value());
366 else if (static_cast<QMetaType::Type>(data.type()) == QMetaType::Float)
368 QDoubleSpinBox *spinBox = qobject_cast<QDoubleSpinBox *>(editor);
369 model->setData(index, static_cast<float>(spinBox->value()));
373 QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
374 model->setData(index, comboBox->currentText());
379 model->setData(index, colorWidget->
GetColor());
383 QStyledItemDelegate::setModelData(editor, model, index);
389 if (m_PropertyList != propertyList)
390 m_PropertyList = propertyList;
void resizeEvent(QResizeEvent *event) override
itk::SmartPointer< T > Lock() const
std::pair< std::string, BaseProperty::Pointer > PropertyMapElementType
mitk::IPropertyExtensions * GetPropertyService()
~QmitkPropertyItemDelegate() override
void SetPropertyList(mitk::PropertyList *propertyList)
virtual PropertyExtension::Pointer GetExtension(const std::string &propertyName, const std::string &className="")=0
Get the extension of a specific property.
Key-value list holding instances of BaseProperty.
Interface of property extensions service.
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QStyleOptionViewItem viewOptions() const override
Abstract base class for properties.
std::map< std::string, BaseProperty::Pointer > PropertyMap
bool IsExpired() const noexcept
Property extension for mitk::IntProperty.
virtual bool HasExtension(const std::string &propertyName, const std::string &className="")=0
Check if a specific property has an extension.
QmitkPropertyItemDelegate(QObject *parent=nullptr)
std::vector< std::string > StringList
itk::RGBPixel< float > Color
Color Standard RGB color typedef (float)
QmitkComboBoxListView(QComboBox *comboBox=nullptr)
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Property extension for mitk::FloatProperty.
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
~QmitkComboBoxListView() override
static ModuleContext * GetModuleContext()
Returns the module context of the calling module.
void paintEvent(QPaintEvent *event) override
void setEditorData(QWidget *editor, const QModelIndex &index) const override