Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkNodeDetailsDialog.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 "QmitkNodeDetailsDialog.h"
14 
16 
17 #include <sstream>
18 
19 #include <QGridLayout>
20 #include <QTextBrowser>
21 #include <QPushButton>
22 #include <QLineEdit>
23 #include <QEvent>
24 #include <QKeyEvent>
25 
26 QmitkNodeDetailsDialog::QmitkNodeDetailsDialog(const QList<mitk::DataNode::Pointer>& nodes, QWidget* parent /*= nullptr*/, Qt::WindowFlags flags /*= nullptr */)
27  : QDialog(parent, flags)
28 {
29  QList<mitk::DataNode::ConstPointer> constNodes;
30 
31  for (auto& node : nodes)
32  {
33  constNodes.append(node.GetPointer());
34  }
35 
36  InitWidgets(constNodes);
37 }
38 
39 QmitkNodeDetailsDialog::QmitkNodeDetailsDialog(const QList<mitk::DataNode::ConstPointer>& nodes, QWidget* parent /*= nullptr*/, Qt::WindowFlags flags /*= nullptr */)
40  : QDialog(parent, flags)
41 {
42  InitWidgets(nodes);
43 }
44 
45 void QmitkNodeDetailsDialog::InitWidgets(const QList<mitk::DataNode::ConstPointer>& nodes)
46 {
47  auto parentLayout = new QGridLayout;
48  auto dataStorageComboBox = new QmitkDataStorageComboBox(this, true);
49  m_KeyWord = new QLineEdit;
50  m_KeyWord->installEventFilter(this);
51  m_SearchButton = new QPushButton("Search (F3)", this);
52  m_SearchButton->installEventFilter(this);
53  m_TextBrowser = new QTextBrowser(this);
54  QPushButton* cancelButton = new QPushButton("Cancel", this);
55 
56  setMinimumSize(512, 512);
57  setLayout(parentLayout);
58  setSizeGripEnabled(true);
59  setModal(true);
60 
61  parentLayout->addWidget(dataStorageComboBox, 0, 0, 1, 2);
62  parentLayout->addWidget(m_KeyWord, 1, 0);
63  parentLayout->addWidget(m_SearchButton, 1, 1);
64  parentLayout->addWidget(m_TextBrowser, 2, 0, 1, 2);
65  parentLayout->addWidget(cancelButton, 3, 0, 1, 2);
66 
68 
69  for (auto& node : nodes)
70  {
71  dataStorageComboBox->AddNode(node);
72  }
73 
74  connect(m_KeyWord, &QLineEdit::textChanged, this, &QmitkNodeDetailsDialog::KeyWordTextChanged);
75  connect(m_SearchButton, &QPushButton::clicked, this, &QmitkNodeDetailsDialog::OnSearchButtonClicked);
76  connect(cancelButton, &QPushButton::clicked, this, &QmitkNodeDetailsDialog::OnCancelButtonClicked);
77 
78  cancelButton->setDefault(true);
79 };
80 
82 {
83  if (nullptr == node)
84  {
85  return;
86  }
87 
88  std::ostringstream s;
89  itk::Indent i(2);
90  mitk::BaseData* baseData = node->GetData();
91  if (nullptr != baseData)
92  {
93  baseData->Print(s, i);
94  }
95 
96  m_TextBrowser->setPlainText(QString::fromStdString(s.str()));
97 }
98 
99 void QmitkNodeDetailsDialog::OnSearchButtonClicked(bool /*checked*/ /*= false */)
100 {
101  QString keyWord = m_KeyWord->text();
102  QString text = m_TextBrowser->toPlainText();
103 
104  if (keyWord.isEmpty() || text.isEmpty())
105  {
106  return;
107  }
108 
109  m_TextBrowser->find(keyWord);
110  m_SearchButton->setText("Search Next(F3)");
111 }
112 
113 void QmitkNodeDetailsDialog::OnCancelButtonClicked(bool /*checked*/ /*= false */)
114 {
115  done(0);
116 }
117 
118 bool QmitkNodeDetailsDialog::eventFilter(QObject* obj, QEvent* event)
119 {
120  if (event->type() == QEvent::KeyPress)
121  {
122  QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
123  if (keyEvent->key() == Qt::Key_F3 || keyEvent->key() == Qt::Key_Return)
124  {
125  // trigger deletion of selected node(s)
126  OnSearchButtonClicked(true);
127  // return true: this means the delete key event is not send to the table
128  return true;
129  }
130  }
131  // standard event processing
132  return QObject::eventFilter(obj, event);
133 }
134 
135 void QmitkNodeDetailsDialog::KeyWordTextChanged(const QString& /*text*/)
136 {
137  QTextCursor textCursor = m_TextBrowser->textCursor();
138  textCursor.setPosition(0);
139  m_TextBrowser->setTextCursor(textCursor);
140  m_SearchButton->setText("Search (F3)");
141 }
Base of all data objects.
Definition: mitkBaseData.h:37
Displays all or a subset (defined by a predicate) of nodes of the Data Storage.
void KeyWordTextChanged(const QString &text)
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
void OnSearchButtonClicked(bool checked=false)
QmitkNodeDetailsDialog(const QList< mitk::DataNode::ConstPointer > &nodes, QWidget *parent=nullptr, Qt::WindowFlags flags=nullptr)
void OnSelectionChanged(const mitk::DataNode *)
Throw a signal when the data node selection changed.
void OnSelectionChanged(const mitk::DataNode *)
void OnCancelButtonClicked(bool checked=false)
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
bool eventFilter(QObject *obj, QEvent *event) override