Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkDoseValueDelegate.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include "QmitkDoseValueDelegate.h"
14 
15 #include <QPainter>
16 #include <QApplication>
17 #include <QLabel>
18 #include <QDoubleSpinBox>
19 
21 {
22 }
23 
24 void QmitkDoseValueDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option
25  , const QModelIndex &index) const
26 {
27  QVariant data = index.data(Qt::DisplayRole);
28 
29  QStyleOptionViewItem opt = option;
30  initStyleOption(&opt, index);
31 
32  QStyle *style = QApplication::style();
33 
34 
35  style->drawItemText(painter, opt.rect.adjusted(0,0,-5,0), Qt::AlignRight | Qt::AlignVCenter, opt.palette,true, data.toString());
36 }
37 
38 QWidget* QmitkDoseValueDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &
39  , const QModelIndex &index) const
40 {
41  QVariant data = index.data(Qt::EditRole);
42  QVariant displayData = index.data(Qt::DisplayRole);
43  QVariant absoluteDose = index.data(Qt::UserRole+1);
44 
45  if(data.isValid())
46  {
47  QDoubleSpinBox* spinBox = new QDoubleSpinBox(parent);
48  spinBox->setDecimals(2);
49  if (absoluteDose.toBool())
50  {
51  spinBox->setSingleStep(0.5);
52  spinBox->setSuffix(QString(" Gy"));
53  }
54  else
55  {
56  spinBox->setSingleStep(1.0);
57  spinBox->setSuffix(QString(" %"));
58  }
59 
60  spinBox->setMinimum(0.0);
61  spinBox->setMaximum(9999.0);
62 
63  spinBox->installEventFilter( const_cast<QmitkDoseValueDelegate*>(this) );
64 
65  return spinBox;
66 
67  }
68  else
69  return new QLabel(displayData.toString(), parent);
70 
71 }
72 
73 void QmitkDoseValueDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
74 {
75  QVariant data = index.data(Qt::EditRole);
76 
77  if(data.isValid())
78  {
79 
80  QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox *>(editor);
81  if (spinBox)
82  {
83  spinBox->setValue(data.toDouble());
84  }
85  else
86  {
87  QStyledItemDelegate::setEditorData(editor, index);
88  }
89  }
90 }
91 
92 void QmitkDoseValueDelegate::setModelData(QWidget *editor, QAbstractItemModel* model
93  , const QModelIndex &index) const
94 {
95  QVariant data = index.data(Qt::EditRole);
96 
97  if(data.isValid())
98  {
99  QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox *>(editor);
100  double doubleValue = spinBox->value();
101 
102  QVariant doubleValueVariant(doubleValue);
103  model->setData(index, doubleValueVariant);
104  }
105  else
106  {
107  QStyledItemDelegate::setModelData(editor, model, index);
108  }
109 }
QmitkDoseValueDelegate(QObject *parent=nullptr)
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setEditorData(QWidget *editor, const QModelIndex &index) const override
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override