Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "QmitkNDIToolDelegate.h"
00020 #include <QStringList>
00021 #include <QComboBox>
00022 #include <QLabel>
00023 #include <QFileDialog>
00024
00025 #include "QmitkEnums.h"
00026 #include "QmitkDataStorageComboBox.h"
00027 #include "QmitkCustomVariants.h"
00028 #include "mitkDataStorage.h"
00029 #include "mitkNodePredicateBase.h"
00030 #include "QmitkDataStorageComboBox.h"
00031 #include "mitkNDIPassiveTool.h"
00032
00033 Q_DECLARE_METATYPE(mitk::NDIPassiveTool*)
00034
00035
00036 QmitkNDIToolDelegate::QmitkNDIToolDelegate(QObject * parent) : QStyledItemDelegate(parent),
00037 m_Types(), m_DataStorage(NULL), m_Predicate(NULL), m_TagProperty(NULL), m_TagPropertyName()
00038 {
00039 }
00040
00041
00042 QWidget* QmitkNDIToolDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
00043 {
00044 if (index.isValid() == false)
00045 return QStyledItemDelegate::createEditor(parent, option, index);
00046
00047 switch (index.column())
00048 {
00049 case SROMCol:
00050 {
00051 return new QLabel("", parent);
00052 }
00053 case TypeCol:
00054 {
00055 QComboBox* c = new QComboBox(parent);
00056 c->addItems(m_Types);
00057 return c;
00058 }
00059 case NodeCol:
00060 {
00061 return new QmitkDataStorageComboBox(m_DataStorage, m_Predicate, parent);
00062 }
00063 case IndexCol:
00064 case NameCol:
00065 case StatusCol:
00066 default:
00067 return QStyledItemDelegate::createEditor(parent, option, index);
00068 }
00069 }
00070
00071
00072 void QmitkNDIToolDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
00073 {
00074 if (index.isValid() == false)
00075 return;
00076
00077 switch (index.column())
00078 {
00079 case SROMCol:
00080 {
00081 QLabel* l = qobject_cast<QLabel*>(editor);
00082 if (l->text().isEmpty())
00083 {
00084 QString fileName = qVariantValue<QString>(index.data());
00085 fileName = QFileDialog::getOpenFileName(editor, "Open SROM file", fileName, "SROM files (*.rom)");
00086 QLabel* l = qobject_cast<QLabel*>(editor);
00087 l->setText(fileName);
00088 }
00089 return;
00090 }
00091 case TypeCol:
00092 {
00093 QString type = qVariantValue<QString>(index.data());
00094 QComboBox* c = qobject_cast<QComboBox*>(editor);
00095 c->setCurrentIndex(c->findText(type));
00096 connect(c, SIGNAL(currentIndexChanged(int)), this, SLOT(ComboBoxCurrentIndexChanged(int)));
00097 return;
00098 }
00099 case NodeCol:
00100 {
00101 mitk::DataNode::Pointer n = qVariantValue<mitk::DataNode::Pointer>(index.data());
00102 if (n.IsNotNull())
00103 {
00104 QmitkDataStorageComboBox* dsc = qobject_cast<QmitkDataStorageComboBox*>(editor);
00105 dsc->setCurrentIndex(dsc->findText(QString::fromStdString(n->GetName())));
00106 connect(dsc, SIGNAL(currentIndexChanged(int)), this, SLOT(ComboBoxCurrentIndexChanged(int)));
00107 }
00108 return;
00109 }
00110 case IndexCol:
00111 case NameCol:
00112 case StatusCol:
00113 default:
00114 QStyledItemDelegate::setEditorData(editor, index);
00115 }
00116 }
00117
00118
00119 void QmitkNDIToolDelegate::setModelData(QWidget *editor, QAbstractItemModel* model, const QModelIndex &index) const
00120 {
00121 if (index.isValid() == false)
00122 return;
00123
00124 switch (index.column())
00125 {
00126 case SROMCol:
00127 {
00128 QLabel* l = qobject_cast<QLabel*>(editor);
00129
00130
00131 model->setData(index, l->text());
00132 return;
00133 }
00134 case TypeCol:
00135 {
00136 QComboBox* c = qobject_cast<QComboBox*>(editor);
00137
00138 model->setData(index, c->currentText(), Qt::DisplayRole);
00139 return;
00140 }
00141 case NodeCol:
00142 {
00143 QmitkDataStorageComboBox* dsc = qobject_cast<QmitkDataStorageComboBox*>(editor);
00144 if (dsc->GetSelectedNode().IsNotNull())
00145 {
00146 model->setData(index, qVariantFromValue(dsc->GetSelectedNode()), OrganNodeRole);
00147
00148 model->setData(index, QString::fromStdString(dsc->GetSelectedNode()->GetName()));
00149 if ((m_TagProperty.IsNotNull()) && (m_TagPropertyName.empty() == false))
00150 dsc->GetSelectedNode()->SetProperty(m_TagPropertyName.c_str(), m_TagProperty);
00151 }
00152 }
00153 return;
00154 case IndexCol:
00155 case NameCol:
00156 case StatusCol:
00157 default:
00158 QStyledItemDelegate::setModelData(editor, model, index);
00159 }
00160 }
00161
00162 void QmitkNDIToolDelegate::commitAndCloseEditor()
00163 {
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 }
00177
00178
00179 void QmitkNDIToolDelegate::ComboBoxCurrentIndexChanged( int )
00180 {
00181 if(QComboBox *comboBox = qobject_cast<QComboBox *>(sender()))
00182 {
00183 emit commitData(comboBox);
00184 emit closeEditor(comboBox);
00185 }
00186 }
00187
00188
00189 void QmitkNDIToolDelegate::SetTypes( const QStringList& types )
00190 {
00191 m_Types = types;
00192 }
00193
00194
00195 void QmitkNDIToolDelegate::SetDataStorage(mitk::DataStorage* ds)
00196 {
00197 m_DataStorage = ds;
00198 }
00199
00200
00201 void QmitkNDIToolDelegate::SetPredicate(mitk::NodePredicateBase::Pointer p)
00202 {
00203 m_Predicate = p;
00204 }
00205
00206
00207 void QmitkNDIToolDelegate::SetTagProperty(mitk::BaseProperty::Pointer prop)
00208 {
00209 m_TagProperty = prop;
00210 }
00211
00212 void QmitkNDIToolDelegate::SetTagPropertyName( const std::string& name )
00213 {
00214 m_TagPropertyName = name;
00215 }