diff --git a/Plugins/org.mitk.gui.qt.common/src/QmitkMultiNodeSelectionWidget.ui b/Plugins/org.mitk.gui.qt.common/src/QmitkMultiNodeSelectionWidget.ui
index adc62f5f11..172db00d55 100644
--- a/Plugins/org.mitk.gui.qt.common/src/QmitkMultiNodeSelectionWidget.ui
+++ b/Plugins/org.mitk.gui.qt.common/src/QmitkMultiNodeSelectionWidget.ui
@@ -1,82 +1,85 @@
QmitkMultiNodeSelectionWidget
0
0
391
265
Form
0
0
0
0
0
-
QAbstractItemView::NoEditTriggers
false
QAbstractItemView::NoDragDrop
Qt::MoveAction
+
+ QAbstractItemView::NoSelection
+
-
1
-
2
-
3
-
4
-
Change selection
true
diff --git a/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.cpp b/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.cpp
index 171b2d5b5f..4083d5511e 100644
--- a/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.cpp
+++ b/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.cpp
@@ -1,216 +1,237 @@
/*===================================================================
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
+#include
-#include
+#include "QmitkNodeSelectionDialog.h"
+#include "QmitkNodeDetailsDialog.h"
QmitkSingleNodeSelectionWidget::QmitkSingleNodeSelectionWidget(QWidget* parent) : QmitkAbstractNodeSelectionWidget(parent)
{
m_Controls.setupUi(this);
m_Controls.btnSelect->installEventFilter(this);
m_Controls.btnSelect->setVisible(true);
m_Controls.btnClear->setVisible(false);
m_Controls.btnClear->setIcon(berry::QtStyleManager::ThemeIcon(QStringLiteral(":/org.mitk.gui.qt.common/times.svg")));
this->UpdateInfo();
connect(m_Controls.btnClear, SIGNAL(clicked(bool)), this, SLOT(OnClearSelection()));
}
QmitkSingleNodeSelectionWidget::~QmitkSingleNodeSelectionWidget()
{
}
mitk::DataNode::Pointer QmitkSingleNodeSelectionWidget::ExtractCurrentValidSelection(const NodeList& nodes) const
{
mitk::DataNode::Pointer result = nullptr;
for (auto node : nodes)
{
bool valid = true;
if (m_NodePredicate.IsNotNull())
{
valid = m_NodePredicate->CheckNode(node);
}
if (valid)
{
result = node;
break;
}
}
return result;
}
QmitkSingleNodeSelectionWidget::NodeList QmitkSingleNodeSelectionWidget::CompileEmitSelection() const
{
NodeList result;
if (!m_SelectOnlyVisibleNodes)
{
result = m_ExternalSelection;
}
if (m_SelectedNode.IsNotNull() && !result.contains(m_SelectedNode))
{
result.append(m_SelectedNode);
}
return result;
}
void QmitkSingleNodeSelectionWidget::OnNodePredicateChanged(mitk::NodePredicateBase* /*newPredicate*/)
{
m_SelectedNode = this->ExtractCurrentValidSelection(m_ExternalSelection);
};
void QmitkSingleNodeSelectionWidget::OnDataStorageChanged()
{
};
void QmitkSingleNodeSelectionWidget::OnClearSelection()
{
if (m_IsOptional)
{
NodeList emptyList;
this->SetCurrentSelection(emptyList);
}
this->UpdateInfo();
}
mitk::DataNode::Pointer QmitkSingleNodeSelectionWidget::GetSelectedNode() const
{
return m_SelectedNode;
};
bool QmitkSingleNodeSelectionWidget::eventFilter(QObject *obj, QEvent *ev)
{
if (obj == m_Controls.btnSelect)
{
if (ev->type() == QEvent::MouseButtonRelease)
{
- this->EditSelection();
- return true;
+ auto mouseEv = dynamic_cast(ev);
+ if (!mouseEv)
+ {
+ return false;
+ }
+
+ if (mouseEv->button() == Qt::LeftButton)
+ {
+ this->EditSelection();
+ return true;
+ }
+ else
+ {
+ auto selection = this->CompileEmitSelection();
+ if (!selection.empty())
+ {
+ QmitkNodeDetailsDialog infoDialog(selection, this);
+ infoDialog.exec();
+ return true;
+ }
+ }
}
}
return false;
}
void QmitkSingleNodeSelectionWidget::EditSelection()
{
QmitkNodeSelectionDialog* dialog = new QmitkNodeSelectionDialog(this, m_PopUpTitel, m_PopUpHint);
dialog->SetDataStorage(m_DataStorage.Lock());
dialog->SetNodePredicate(m_NodePredicate);
NodeList list;
if (m_SelectedNode.IsNotNull())
{
list.append(m_SelectedNode);
}
dialog->SetCurrentSelection(list);
dialog->SetSelectOnlyVisibleNodes(m_SelectOnlyVisibleNodes);
dialog->SetSelectionMode(QAbstractItemView::SingleSelection);
m_Controls.btnSelect->setChecked(true);
if (dialog->exec())
{
auto lastEmission = this->CompileEmitSelection();
auto nodes = dialog->GetSelectedNodes();
if (nodes.empty())
{
m_SelectedNode = nullptr;
}
else
{
m_SelectedNode = nodes.first();
}
auto newEmission = this->CompileEmitSelection();
if (!EqualNodeSelections(lastEmission, newEmission))
{
emit CurrentSelectionChanged(newEmission);
this->UpdateInfo();
}
}
m_Controls.btnSelect->setChecked(false);
delete dialog;
};
void QmitkSingleNodeSelectionWidget::UpdateInfo()
{
if (m_SelectedNode.IsNull())
{
if (m_IsOptional)
{
m_Controls.btnSelect->SetNodeInfo(m_EmptyInfo);
}
else
{
m_Controls.btnSelect->SetNodeInfo(m_InvalidInfo);
}
m_Controls.btnClear->setVisible(false);
}
else
{
m_Controls.btnClear->setVisible(m_IsOptional);
}
m_Controls.btnSelect->SetSelectedNode(m_SelectedNode);
};
void QmitkSingleNodeSelectionWidget::SetSelectOnlyVisibleNodes(bool selectOnlyVisibleNodes)
{
auto lastEmission = this->CompileEmitSelection();
m_SelectOnlyVisibleNodes = selectOnlyVisibleNodes;
auto newEmission = this->CompileEmitSelection();
if (!EqualNodeSelections(lastEmission, newEmission))
{
emit CurrentSelectionChanged(newEmission);
this->UpdateInfo();
}
};
void QmitkSingleNodeSelectionWidget::SetCurrentSelection(NodeList selectedNodes)
{
auto lastEmission = this->CompileEmitSelection();
m_ExternalSelection = selectedNodes;
m_SelectedNode = this->ExtractCurrentValidSelection(selectedNodes);
auto newEmission = this->CompileEmitSelection();
if (!EqualNodeSelections(lastEmission, newEmission))
{
emit CurrentSelectionChanged(newEmission);
this->UpdateInfo();
}
};
diff --git a/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.ui b/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.ui
index 7a13c0bbe2..94f5047e55 100644
--- a/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.ui
+++ b/Plugins/org.mitk.gui.qt.common/src/QmitkSingleNodeSelectionWidget.ui
@@ -1,121 +1,124 @@
QmitkSingleNodeSelectionWidget
0
0
348
25
0
0
0
25
16777215
40
Form
0
0
0
0
0
-
0
0
0
25
+
+ <html><head/><body><p>Press to change the selection.</p><p>Right click to show details about selected node.</p></body></html>
+
true
-
0
0
0
25
25
16777215
Press to remove the current selection.
:/org.mitk.gui.qt.common/resources/times.svg:/org.mitk.gui.qt.common/resources/times.svg
19
19
QmitkNodeSelectionButton
QPushButton
QmitkNodeSelectionButton.h
diff --git a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.cpp b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.cpp
index 38fe0c0621..cba2d8d983 100644
--- a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.cpp
+++ b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.cpp
@@ -1,60 +1,94 @@
/*===================================================================
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 "QmitkNodeSelectionListItemWidget.h"
-// berry includes
#include
+#include
+
+#include "QmitkNodeDetailsDialog.h"
+
QmitkNodeSelectionListItemWidget::QmitkNodeSelectionListItemWidget(QWidget *parent)
: QWidget(parent)
{
m_Controls.setupUi(this);
+ m_Controls.btnSelect->installEventFilter(this);
m_Controls.btnSelect->setVisible(true);
m_Controls.btnSelect->SetNodeInfo("No valid selection");
m_Controls.btnClear->setVisible(false);
m_Controls.btnClear->setIcon(berry::QtStyleManager::ThemeIcon(QStringLiteral(":/org.mitk.gui.qt.common/times.svg")));
connect(m_Controls.btnClear, SIGNAL(clicked(bool)), this, SLOT(OnClearSelection()));
}
QmitkNodeSelectionListItemWidget::~QmitkNodeSelectionListItemWidget()
{
}
mitk::DataNode::Pointer QmitkNodeSelectionListItemWidget::GetSelectedNode() const
{
return m_Controls.btnSelect->GetSelectedNode();
};
void QmitkNodeSelectionListItemWidget::SetSelectedNode(mitk::DataNode* node)
{
m_Controls.btnSelect->SetSelectedNode(node);
this->update();
};
void QmitkNodeSelectionListItemWidget::SetClearAllowed(bool allowed)
{
m_Controls.btnClear->setVisible(allowed);
};
void QmitkNodeSelectionListItemWidget::OnClearSelection()
{
emit ClearSelection(this->GetSelectedNode());
};
+
+bool QmitkNodeSelectionListItemWidget::eventFilter(QObject *obj, QEvent *ev)
+{
+ if (obj == m_Controls.btnSelect)
+ {
+ if (ev->type() == QEvent::MouseButtonRelease)
+ {
+ auto mouseEv = dynamic_cast(ev);
+ if (!mouseEv)
+ {
+ return false;
+ }
+
+ if (mouseEv->button() == Qt::RightButton)
+ {
+ auto selection = this->GetSelectedNode();
+
+ if (selection.IsNotNull())
+ {
+ QList selectionList({ this->GetSelectedNode() });
+ QmitkNodeDetailsDialog infoDialog(selectionList, this);
+ infoDialog.exec();
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
diff --git a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.h b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.h
index 38a35bf3f3..570c001d0c 100644
--- a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.h
+++ b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.h
@@ -1,54 +1,56 @@
/*===================================================================
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.
===================================================================*/
#ifndef QMITK_NODE_SELECTION_LIST_ITEM_WIDGET_H
#define QMITK_NODE_SELECTION_LIST_ITEM_WIDGET_H
#include
#include
#include "Ui_QmitkNodeSelectionListItemWidget.h"
#include "org_mitk_gui_qt_common_Export.h"
class MITK_QT_COMMON QmitkNodeSelectionListItemWidget : public QWidget
{
Q_OBJECT
public:
explicit QmitkNodeSelectionListItemWidget(QWidget* parent = nullptr);
~QmitkNodeSelectionListItemWidget();
mitk::DataNode::Pointer GetSelectedNode() const;
public Q_SLOTS :
virtual void SetSelectedNode(mitk::DataNode* node);
virtual void SetClearAllowed(bool allowed);
signals:
void ClearSelection(mitk::DataNode* node);
protected Q_SLOTS:
void OnClearSelection();
protected:
+ virtual bool eventFilter(QObject *obj, QEvent *ev) override;
+
Ui_QmitkNodeSelectionListItemWidget m_Controls;
};
#endif // QMITK_NODE_SELECTION_LIST_ITEM_WIDGET_H
diff --git a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.ui b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.ui
index 67fe433959..6f59ef5284 100644
--- a/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.ui
+++ b/Plugins/org.mitk.gui.qt.common/src/internal/QmitkNodeSelectionListItemWidget.ui
@@ -1,121 +1,124 @@
QmitkNodeSelectionListItemWidget
0
0
348
25
0
0
0
25
16777215
40
Form
0
0
0
0
0
-
0
0
0
25
+
+ Right click to show details about selected node.
+
- true
+ false
-
0
0
0
25
25
16777215
Press to remove the current selection.
:/org.mitk.gui.qt.common/resources/times.svg:/org.mitk.gui.qt.common/resources/times.svg
19
19
QmitkNodeSelectionButton
QPushButton
QmitkNodeSelectionButton.h