diff --git a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.cpp b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.cpp index 8e8b0ef04f..8f6e0c0883 100644 --- a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.cpp +++ b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.cpp @@ -1,164 +1,190 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkSingleNodeSelectionWidget.h" #include QmitkSingleNodeSelectionWidget::QmitkSingleNodeSelectionWidget(QWidget* parent) : QWidget(parent), m_InvalidInfo("Error. Select data."), m_IsOptional(false), m_SelectOnlyVisibleNodes(false) { m_Controls.setupUi(this); m_Controls.btnLock->setChecked(false); - m_Controls.nodeInfo->setHtml(m_InvalidInfo); + this->UpdateInfo(); + + m_Controls.nodeInfo->installEventFilter(this); connect(m_Controls.btnLock, &QPushButton::clicked, this, &QmitkSingleNodeSelectionWidget::OnLock); } void QmitkSingleNodeSelectionWidget::SetDataStorage(mitk::DataStorage* dataStorage) { if (m_DataStorage != dataStorage) { m_DataStorage = dataStorage; } }; void QmitkSingleNodeSelectionWidget::SetNodePredicate(mitk::NodePredicateBase* nodePredicate) { if (m_NodePredicate != nodePredicate) { m_NodePredicate = nodePredicate; } }; mitk::NodePredicateBase* QmitkSingleNodeSelectionWidget::GetNodePredicate() const { return m_NodePredicate; } mitk::DataNode::Pointer QmitkSingleNodeSelectionWidget::GetSelectedNode() const { return m_SelectedNode; }; QString QmitkSingleNodeSelectionWidget::GetInvalidInfo() const { return m_InvalidInfo; }; bool QmitkSingleNodeSelectionWidget::GetSelectionIsOptional() const { return m_IsOptional; }; void QmitkSingleNodeSelectionWidget::OnLock(bool locked) { }; bool QmitkSingleNodeSelectionWidget::eventFilter(QObject *obj, QEvent *ev) { if (obj == m_Controls.nodeInfo) { if (ev->type() == QEvent::MouseButtonRelease) { this->EditSelection(); } return true; } return false; } void QmitkSingleNodeSelectionWidget::EditSelection() { QmitkNodeSelectionDialog* dialog = new QmitkNodeSelectionDialog(this); dialog->SetDataStorage(m_DataStorage.Lock()); dialog->SetNodePredicate(m_NodePredicate); NodeList list; list.append(m_SelectedNode); dialog->SetCurrentSelection(list); dialog->SetSelectOnlyVisibleNodes(m_SelectOnlyVisibleNodes); if (dialog->exec()) { auto nodes = dialog->GetSelectedNodes(); if (nodes.empty()) { m_SelectedNode = nullptr; } else { m_SelectedNode = nodes.first(); } this->UpdateInfo(); emit CurrentSelectionChanged(nodes); } }; void QmitkSingleNodeSelectionWidget::UpdateInfo() { + if (m_SelectedNode.IsNull()) + { + if (m_IsOptional) + { + m_Controls.nodeInfo->setText("Empty"); + } + else + { + m_Controls.nodeInfo->setText(m_InvalidInfo); + } + } + else + { + m_Controls.nodeInfo->setText(QString::fromStdString(m_SelectedNode->GetName())); + } }; void QmitkSingleNodeSelectionWidget::SetSelectOnlyVisibleNodes(bool selectOnlyVisibleNodes) { m_SelectOnlyVisibleNodes = selectOnlyVisibleNodes; }; void QmitkSingleNodeSelectionWidget::SetCurrentSelection(NodeList selectedNodes) { if (!m_Controls.btnLock->isChecked()) { + mitk::DataNode::Pointer newSelected = nullptr; + NodeList list; + bool changed = false; + if (!selectedNodes.empty() && m_SelectedNode != selectedNodes.first()) { - m_SelectedNode = selectedNodes.first(); - NodeList list; + newSelected = selectedNodes.first(); list.append(m_SelectedNode); - emit CurrentSelectionChanged(list); + changed = true; } else if(selectedNodes.empty() && m_SelectedNode != nullptr) { - m_SelectedNode = nullptr; - NodeList list; + newSelected = nullptr; + changed = true; + } + + if (changed) + { emit CurrentSelectionChanged(list); + m_SelectedNode = newSelected; + this->UpdateInfo(); } - this->UpdateInfo(); + } }; void QmitkSingleNodeSelectionWidget::SetSelectionLock(bool locked) { m_Controls.btnLock->setChecked(locked); }; void QmitkSingleNodeSelectionWidget::SetSelectionUnlock(bool unlocked) { m_Controls.btnLock->setChecked(!unlocked); }; void QmitkSingleNodeSelectionWidget::SetInvalidInfo(QString info) { m_InvalidInfo = info; }; void QmitkSingleNodeSelectionWidget::SetSelectionIsOptional(bool isOptional) { m_IsOptional = isOptional; }; diff --git a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.ui b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.ui index 3389b4b90d..6b2baba12f 100644 --- a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.ui +++ b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/QmitkSingleNodeSelectionWidget.ui @@ -1,110 +1,88 @@ QmitkSingleNodeSelectionWidget 0 0 391 40 Form 0 0 0 0 0 - - - - 0 - 0 - - - - - 0 - 20 - + + + QFrame::Box - - - 16777215 - 70 - - - - Qt::ScrollBarAlwaysOff + + QFrame::Sunken - - Qt::ScrollBarAlwaysOff - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">NodeName</span></p></body></html> + + NodeName 0 0 40 40 - Color of the iso dose level + - ../resources/icon_unlock.png - ../resources/icon_lock.png../resources/icon_unlock.png + :/org.mitk.gui.qt.datastorageviewertest/resources/icon_unlock.png + :/org.mitk.gui.qt.datastorageviewertest/resources/icon_lock.png:/org.mitk.gui.qt.datastorageviewertest/resources/icon_unlock.png 34 34 true false diff --git a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestControls.ui b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestControls.ui index df889be58d..a5845c4230 100644 --- a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestControls.ui +++ b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestControls.ui @@ -1,93 +1,118 @@ QmitkDataStorageViewerTestControls 0 0 - 451 - 572 + 493 + 412 0 0 Data storage viewer test - - - - - Set as selection provider - - + + + + + + + + + + Set as selection provider + + + + + + + + + + Set as selection listener + + + + + + + Set as selection listener + + + + + + + Set as selection provider + + + + - - - - Set as selection listener + + + + + 0 + 40 + - - + + - Set as selection listener + Set as selection provider - - + + - Set as selection provider + Set as selection listner - - - - - - - - + + - Set as selection provider + Change Only visible - - + + - Set as selection listner + Allow only images - - - - - 0 - 40 - + + + + Is Optional QmitkSingleNodeSelectionWidget QWidget
QmitkSingleNodeSelectionWidget.h
1
diff --git a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestView.cpp b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestView.cpp index a08f599516..4eb5a980b8 100644 --- a/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestView.cpp +++ b/Plugins/org.mitk.gui.qt.datastorageviewertest/src/internal/QmitkDataStorageViewerTestView.cpp @@ -1,170 +1,175 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical Image Computing. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // data storage viewer test plugin #include "QmitkDataStorageViewerTestView.h" // berry #include // qt #include const std::string QmitkDataStorageViewerTestView::VIEW_ID = "org.mitk.views.datastorageviewertest"; void QmitkDataStorageViewerTestView::SetFocus() { // nothing here } void QmitkDataStorageViewerTestView::CreateQtPartControl(QWidget* parent) { // create GUI widgets m_Controls.setupUi(parent); m_DataStorageDefaultListModel = new QmitkDataStorageDefaultListModel(this); m_DataStorageDefaultListModel->SetDataStorage(GetDataStorage()); m_Controls.selectionListView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_Controls.selectionListView->setSelectionBehavior(QAbstractItemView::SelectRows); m_Controls.selectionListView->setAlternatingRowColors(true); m_Controls.selectionListView->setModel(m_DataStorageDefaultListModel); m_DataStorageDefaultListModel2 = new QmitkDataStorageDefaultListModel(this); m_DataStorageDefaultListModel2->SetDataStorage(GetDataStorage()); m_Controls.selectionListView2->setSelectionMode(QAbstractItemView::ExtendedSelection); m_Controls.selectionListView2->setSelectionBehavior(QAbstractItemView::SelectRows); m_Controls.selectionListView2->setAlternatingRowColors(true); m_Controls.selectionListView2->setModel(m_DataStorageDefaultListModel2); + m_Controls.singleSlot->SetDataStorage(GetDataStorage()); + + m_ModelViewSelectionConnector = std::make_unique(); try { m_ModelViewSelectionConnector->SetView(m_Controls.selectionListView); } catch (mitk::Exception& e) { mitkReThrow(e) << "Cannot connect the model-view pair signals and slots."; } m_SelectionServiceConnector = std::make_unique(); m_ModelViewSelectionConnector2 = std::make_unique(); try { m_ModelViewSelectionConnector2->SetView(m_Controls.selectionListView2); } catch (mitk::Exception& e) { mitkReThrow(e) << "Cannot connect the model-view pair signals and slots."; } m_SelectionServiceConnector2 = std::make_unique(); m_SelectionServiceConnector3 = std::make_unique(); connect(m_Controls.selectionProviderCheckBox, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionProvider1(bool))); connect(m_Controls.selectionProviderCheckBox2, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionProvider2(bool))); connect(m_Controls.selectionListenerCheckBox, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionListener1(bool))); connect(m_Controls.selectionListenerCheckBox2, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionListener2(bool))); connect(m_Controls.selectionProviderCheckBox3, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionProvider3(bool))); connect(m_Controls.selectionListenerCheckBox3, SIGNAL(toggled(bool)), this, SLOT(SetAsSelectionListener3(bool))); + connect(m_Controls.checkOnlyVisible, SIGNAL(toggled(bool)), m_Controls.singleSlot, SLOT(SetSelectOnlyVisibleNodes(bool))); + connect(m_Controls.checkOptional, SIGNAL(toggled(bool)), m_Controls.singleSlot, SLOT(SetSelectionIsOptional(bool))); } void QmitkDataStorageViewerTestView::SetAsSelectionProvider1(bool checked) { if (checked) { m_SelectionServiceConnector->SetAsSelectionProvider(GetSite()->GetSelectionProvider().Cast().GetPointer()); connect(m_ModelViewSelectionConnector.get(), SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector.get(), SLOT(ChangeServiceSelection(QList))); } else { m_SelectionServiceConnector->RemoveAsSelectionProvider(); disconnect(m_ModelViewSelectionConnector.get(), SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector.get(), SLOT(ChangeServiceSelection(QList))); } } void QmitkDataStorageViewerTestView::SetAsSelectionListener1(bool checked) { if (checked) { m_SelectionServiceConnector->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); connect(m_SelectionServiceConnector.get(), SIGNAL(ServiceSelectionChanged(QList)), m_ModelViewSelectionConnector.get(), SLOT(SetCurrentSelection(QList))); } else { m_SelectionServiceConnector->RemovePostSelectionListener(); disconnect(m_SelectionServiceConnector.get(), SIGNAL(ServiceSelectionChanged(QList)), m_ModelViewSelectionConnector.get(), SLOT(SetCurrentSelection(QList))); } } void QmitkDataStorageViewerTestView::SetAsSelectionProvider2(bool checked) { if (checked) { m_SelectionServiceConnector2->SetAsSelectionProvider(GetSite()->GetSelectionProvider().Cast().GetPointer()); connect(m_ModelViewSelectionConnector2.get(), SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector2.get(), SLOT(ChangeServiceSelection(QList))); } else { m_SelectionServiceConnector2->RemoveAsSelectionProvider(); disconnect(m_ModelViewSelectionConnector2.get(), SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector2.get(), SLOT(ChangeServiceSelection(QList))); } } void QmitkDataStorageViewerTestView::SetAsSelectionListener2(bool checked) { if (checked) { m_SelectionServiceConnector2->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); connect(m_SelectionServiceConnector2.get(), SIGNAL(ServiceSelectionChanged(QList)), m_ModelViewSelectionConnector2.get(), SLOT(SetCurrentSelection(QList))); } else { m_SelectionServiceConnector2->RemovePostSelectionListener(); disconnect(m_SelectionServiceConnector2.get(), SIGNAL(ServiceSelectionChanged(QList)), m_ModelViewSelectionConnector2.get(), SLOT(SetCurrentSelection(QList))); } } void QmitkDataStorageViewerTestView::SetAsSelectionProvider3(bool checked) { if (checked) { m_SelectionServiceConnector3->SetAsSelectionProvider(GetSite()->GetSelectionProvider().Cast().GetPointer()); connect(m_Controls.singleSlot, SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector.get(), SLOT(ChangeServiceSelection(QList))); } else { m_SelectionServiceConnector3->RemoveAsSelectionProvider(); disconnect(m_Controls.singleSlot, SIGNAL(CurrentSelectionChanged(QList)), m_SelectionServiceConnector.get(), SLOT(ChangeServiceSelection(QList))); } } void QmitkDataStorageViewerTestView::SetAsSelectionListener3(bool checked) { if (checked) { - m_SelectionServiceConnector3->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); - connect(m_SelectionServiceConnector3.get(), SIGNAL(ServiceSelectionChanged(QList)), m_Controls.singleSlot, SLOT(SetCurrentSelection(QList))); + m_SelectionServiceConnector3->AddPostSelectionListener(GetSite()->GetWorkbenchWindow()->GetSelectionService()); + connect(m_SelectionServiceConnector3.get(), &QmitkSelectionServiceConnector::ServiceSelectionChanged, m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::SetCurrentSelection); } else { m_SelectionServiceConnector3->RemovePostSelectionListener(); - disconnect(m_SelectionServiceConnector3.get(), SIGNAL(ServiceSelectionChanged(QList)), m_Controls.singleSlot, SLOT(SetCurrentSelection(QList))); + disconnect(m_SelectionServiceConnector3.get(), &QmitkSelectionServiceConnector::ServiceSelectionChanged, m_Controls.singleSlot, &QmitkSingleNodeSelectionWidget::SetCurrentSelection); } } \ No newline at end of file