MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
QmitkNDIToolDelegate.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
13
15#include <QStringList>
16#include <QComboBox>
17#include <QLabel>
18#include <QFileDialog>
19
20#include "QmitkEnums.h"
21#include "QmitkDataStorageComboBox.h"
22#include "QmitkCustomVariants.h"
23#include "mitkDataStorage.h"
24#include "mitkNodePredicateBase.h"
25#include "QmitkDataStorageComboBox.h"
26#include "mitkNDIPassiveTool.h"
27
28Q_DECLARE_METATYPE(mitk::NDIPassiveTool*)
29
30
31QmitkNDIToolDelegate::QmitkNDIToolDelegate(QObject * parent) : QStyledItemDelegate(parent),
32m_Types(), m_DataStorage(nullptr), m_Predicate(nullptr), m_TagProperty(nullptr), m_TagPropertyName()
33{
34}
35
36
37QWidget* QmitkNDIToolDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
38{
39 if (index.isValid() == false)
40 return QStyledItemDelegate::createEditor(parent, option, index);
41
42 switch (index.column())
43 {
44 case SROMCol:
45 {
46 return new QLabel("", parent);
47 }
48 case TypeCol:
49 {
50 auto c = new QComboBox(parent);
51 c->addItems(m_Types);
52 return c;
53 }
54 case NodeCol:
55 {
56 return new QmitkDataStorageComboBox(m_DataStorage, m_Predicate, parent);
57 }
58 case IndexCol:
59 case NameCol:
60 case StatusCol:
61 default:
62 return QStyledItemDelegate::createEditor(parent, option, index);
63 }
64}
65
66
67void QmitkNDIToolDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
68{
69 if (index.isValid() == false)
70 return;
71
72 switch (index.column())
73 {
74 case SROMCol:
75 {
76 QLabel* l = qobject_cast<QLabel*>(editor);
77 if (l->text().isEmpty())
78 {
79 QString fileName = index.data(/*mitk::FileNameRole*/).value<QString>();
80 fileName = QFileDialog::getOpenFileName(editor, "Open SROM file", fileName, "SROM files (*.rom)");
81 QLabel* l = qobject_cast<QLabel*>(editor);
82 l->setText(fileName);
83 }
84 return;
85 }
86 case TypeCol:
87 {
88 QString type = index.data(/*mitk::TypeRole*/).value<QString>();
89 QComboBox* c = qobject_cast<QComboBox*>(editor);
90 c->setCurrentIndex(c->findText(type));
91 connect(c, SIGNAL(currentIndexChanged(int)), this, SLOT(ComboBoxCurrentIndexChanged(int)));
92 return;
93 }
94 case NodeCol:
95 {
96 mitk::DataNode::Pointer n = index.data(/*mitk::OrganNodeRole*/).value<mitk::DataNode::Pointer>();
97 if (n.IsNotNull())
98 {
99 QmitkDataStorageComboBox* dsc = qobject_cast<QmitkDataStorageComboBox*>(editor);
100 dsc->setCurrentIndex(dsc->findText(QString::fromStdString(n->GetName())));
101 connect(dsc, SIGNAL(currentIndexChanged(int)), this, SLOT(ComboBoxCurrentIndexChanged(int)));
102 }
103 return;
104 }
105 case IndexCol:
106 case NameCol:
107 case StatusCol:
108 default:
109 QStyledItemDelegate::setEditorData(editor, index);
110 }
111}
112
113
114void QmitkNDIToolDelegate::setModelData(QWidget *editor, QAbstractItemModel* model, const QModelIndex &index) const
115{
116 if (index.isValid() == false)
117 return;
118
119 switch (index.column())
120 {
121 case SROMCol:
122 {
123 QLabel* l = qobject_cast<QLabel*>(editor);
124 //model->setData(index, l->text(), mitk::FileNameRole);
125 //model->setData(index, l->text(), Qt::DisplayRole); // use for display too
126 model->setData(index, l->text()); // use for display too
127 return;
128 }
129 case TypeCol:
130 {
131 QComboBox* c = qobject_cast<QComboBox*>(editor);
132 //model->setData(index, c->currentText(), mitk::TypeRole);
133 model->setData(index, c->currentText(), Qt::DisplayRole);
134 return;
135 }
136 case NodeCol:
137 {
138 QmitkDataStorageComboBox* dsc = qobject_cast<QmitkDataStorageComboBox*>(editor);
139 if (dsc->GetSelectedNode().IsNotNull())
140 {
141 model->setData(index, QVariant::fromValue(dsc->GetSelectedNode()), OrganNodeRole);
142 //model->setData(index, QString::fromStdString(dsc->GetSelectedNode()->GetName()), Qt::DisplayRole);
143 model->setData(index, QString::fromStdString(dsc->GetSelectedNode()->GetName()));
144 if ((m_TagProperty.IsNotNull()) && (m_TagPropertyName.empty() == false)) // tag this node as selected
145 dsc->GetSelectedNode()->SetProperty(m_TagPropertyName.c_str(), m_TagProperty);
146 }
147 }
148 return;
149 case IndexCol:
150 case NameCol:
151 case StatusCol:
152 default:
153 QStyledItemDelegate::setModelData(editor, model, index);
154 }
155}
156
157void QmitkNDIToolDelegate::commitAndCloseEditor()
158{
159 //QWidget* editor = 0;
160 //if(QPushButton *pushBtn = qobject_cast<QPushButton *>(sender()))
161 //{
162
163 //}
164
165 //if(editor)
166 //{
167 //emit commitData(editor);
168 //emit closeEditor(editor);
169 //}
170
171}
172
173
174void QmitkNDIToolDelegate::ComboBoxCurrentIndexChanged( int /*index*/ )
175{
176 if(QComboBox *comboBox = qobject_cast<QComboBox *>(sender()))
177 {
178 emit commitData(comboBox);
179 emit closeEditor(comboBox);
180 }
181}
182
183
184void QmitkNDIToolDelegate::SetTypes( const QStringList& types )
185{
186 m_Types = types;
187}
188
189
190void QmitkNDIToolDelegate::SetDataStorage(mitk::DataStorage* ds)
191{
192 m_DataStorage = ds;
193}
194
195
196void QmitkNDIToolDelegate::SetPredicate(mitk::NodePredicateBase::Pointer p)
197{
198 m_Predicate = p;
199}
200
201
202void QmitkNDIToolDelegate::SetTagProperty(mitk::BaseProperty::Pointer prop)
203{
204 m_TagProperty = prop;
205}
206
207void QmitkNDIToolDelegate::SetTagPropertyName( const std::string& name )
208{
209 m_TagPropertyName = name;
210}
An item delegate for rendering and editing mitk::Properties in a QTableView.
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
void SetDataStorage(mitk::DataStorage *ds)
set datastorage for organ node editor
void SetTagPropertyName(const std::string &name)
set name of the property that is used to tag selected nodes
void SetTagProperty(mitk::BaseProperty::Pointer prop)
set the property that is used to tag selected nodes
void SetPredicate(mitk::NodePredicateBase::Pointer p)
set predicate for organ node editor
void SetTypes(const QStringList &types)
set types list for type editor combobox
void setEditorData(QWidget *editor, const QModelIndex &index) const override
Implementation of a passive NDI optical tool.