diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/files.cmake b/Modules/Bundles/org.mitk.gui.qt.datamanager/files.cmake index 8c83cbc900..757f6aae97 100644 --- a/Modules/Bundles/org.mitk.gui.qt.datamanager/files.cmake +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/files.cmake @@ -1,33 +1,39 @@ SET(SRC_CPP_FILES cherrySingleNodeSelection.cpp + QmitkDataManagerPreferencePage.cpp + QmitkDataManagerHotkeysPrefPage.cpp + QmitkHotkeyLineEdit.cpp ) SET(INTERNAL_CPP_FILES QmitkDataManagerView.cpp - QmitkDelKeyFilter.cpp + QmitkNodeTableViewKeyFilter.cpp QmitkInfoDialog.cpp ) SET(MOC_H_FILES src/internal/QmitkDataManagerView.h - src/internal/QmitkDelKeyFilter.h + src/QmitkHotkeyLineEdit.h + src/internal/QmitkNodeTableViewKeyFilter.h src/internal/QmitkInfoDialog.h + src/QmitkDataManagerPreferencePage.h + src/QmitkDataManagerHotkeysPrefPage.h ) SET(CPP_FILES manifest.cpp) SET(RESOURCE_FILES resources/datamanager.xpm ) SET(RES_FILES resources/datamanager.qrc ) foreach(file ${SRC_CPP_FILES}) SET(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) SET(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/manifest.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/manifest.cpp index 71617e61e9..169cf89310 100644 --- a/Modules/Bundles/org.mitk.gui.qt.datamanager/manifest.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/manifest.cpp @@ -1,25 +1,32 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include #include #include "src/internal/QmitkDataManagerView.h" +#include "src/QmitkDataManagerPreferencePage.h" +#include "src/QmitkDataManagerHotkeysPrefPage.h" POCO_BEGIN_NAMED_MANIFEST(cherryIViewPart, cherry::IViewPart) POCO_EXPORT_CLASS(QmitkDataManagerView) POCO_END_MANIFEST + +POCO_BEGIN_NAMED_MANIFEST(cherryIQtPreferencePage, cherry::IQtPreferencePage) + POCO_EXPORT_CLASS(QmitkDataManagerPreferencePage) + POCO_EXPORT_CLASS(QmitkDataManagerHotkeysPrefPage) +POCO_END_MANIFEST \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.datamanager/plugin.xml index 73a177d0e0..047d57cf96 100644 --- a/Modules/Bundles/org.mitk.gui.qt.datamanager/plugin.xml +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/plugin.xml @@ -1,15 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.cpp new file mode 100644 index 0000000000..7daac92998 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.cpp @@ -0,0 +1,120 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-07-07 16:57:15 +0200 (Di, 07 Jul 2009) $ + Version: $Revision: 18019 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + +#include "QmitkDataManagerHotkeysPrefPage.h" +#include "QmitkHotkeyLineEdit.h" + +#include "cherryIPreferencesService.h" +#include "cherryPlatform.h" + +#include +#include +#include +#include +#include +#include + +#include + +using namespace cherry; + +QmitkDataManagerHotkeysPrefPage::QmitkDataManagerHotkeysPrefPage( QWidget* parent, Qt::WindowFlags f ) +: IQtPreferencePage(parent, f) +{ + IPreferencesService::Pointer prefService = Platform::GetServiceRegistry().GetServiceById(IPreferencesService::ID); + cherry::IPreferences::Pointer _DataManagerHotkeysPreferencesNode = prefService->GetSystemPreferences()->Node("/DataManager/Hotkeys"); + m_DataManagerHotkeysPreferencesNode = _DataManagerHotkeysPreferencesNode; + + m_HotkeyEditors["Make all nodes invisible"] + = new QmitkHotkeyLineEdit(QString::fromStdString(_DataManagerHotkeysPreferencesNode->Get("Make all nodes invisible", "Ctrl+V"))); + + m_HotkeyEditors["Toggle visibility of selected nodes"] + = new QmitkHotkeyLineEdit(QString::fromStdString(_DataManagerHotkeysPreferencesNode->Get("Toggle visibility of selected nodes", "V"))); + + m_HotkeyEditors["Delete selected nodes"] + = new QmitkHotkeyLineEdit(QString::fromStdString(_DataManagerHotkeysPreferencesNode->Get("Delete selected nodes", "Del"))); + + QGridLayout* layout = new QGridLayout; + int i = 0; + for (std::map::iterator it = m_HotkeyEditors.begin() + ; it != m_HotkeyEditors.end(); ++it) + { + layout->addWidget(new QLabel(it->first), i,0); + layout->addWidget(it->second, i,1); + layout->setRowStretch(i,0); + ++i; + } + layout->setRowStretch(i+1,10); + + this->setLayout(layout); +} + +bool QmitkDataManagerHotkeysPrefPage::PerformOk() +{ + IPreferences::Pointer _DataManagerHotkeysPreferencesNode = m_DataManagerHotkeysPreferencesNode.Lock(); + if(_DataManagerHotkeysPreferencesNode.IsNotNull()) + { + bool duplicate = false; + QString keyString; + QString errString; + for (std::map::iterator it = m_HotkeyEditors.begin() + ; it != m_HotkeyEditors.end(); ++it) + { + keyString = it->second->GetKeySequenceAsString(); + + if(keyString.isEmpty()) + errString = QString("No valid key sequence for \"%1\"").arg(it->first); + + if(errString.isEmpty()) + { + std::map::iterator it2; + // search for duplicated key + for (it2 = m_HotkeyEditors.begin(); it2 != m_HotkeyEditors.end(); ++it2) + { + if(it->first != it2->first && keyString == it2->second->GetKeySequenceAsString()) + { + duplicate = true; + break; + } + } + if(duplicate == true) + errString = QString("Duplicate hot key for \"%1\" and \"%2\"").arg(it->first).arg(it2->first); + } + + if(!errString.isEmpty()) + { + QMessageBox::critical(QApplication::activeWindow(), "Error", errString); + return false; + } + } + + //# no errors -> save all values and flush to file + for (std::map::iterator it = m_HotkeyEditors.begin() + ; it != m_HotkeyEditors.end(); ++it) + _DataManagerHotkeysPreferencesNode->Put(it->first.toStdString() + , it->second->GetKeySequenceAsString().toStdString()); + + _DataManagerHotkeysPreferencesNode->Flush(); + return true; + } + return false; +} + +void QmitkDataManagerHotkeysPrefPage::PerformCancel() +{ + +} \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.h b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.h new file mode 100644 index 0000000000..111afcd51f --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerHotkeysPrefPage.h @@ -0,0 +1,56 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-02-10 14:14:32 +0100 (Di, 10 Feb 2009) $ + Version: $Revision: 16224 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + + +#ifndef QMITKDATAMANAGERHOTKEYSPREFPAGE_H_ +#define QMITKDATAMANAGERHOTKEYSPREFPAGE_H_ + +#include +#include "cherryIQtPreferencePage.h" +#include "mitkQtDataManagerDll.h" +#include +class QmitkHotkeyLineEdit; + +struct MITK_QT_DATAMANAGER QmitkDataManagerHotkeysPrefPage : public cherry::IQtPreferencePage +{ + Q_OBJECT + +public: + QmitkDataManagerHotkeysPrefPage(QWidget* parent = 0, Qt::WindowFlags f = 0); + + /// + /// Invoked when the OK button was clicked in the preferences dialog + /// + virtual bool PerformOk(); + + /// + /// Invoked when the Cancel button was clicked in the preferences dialog + /// + virtual void PerformCancel(); +protected: + /// + /// The node from which the properties are taken (will be catched from the preferences service in ctor) + /// + cherry::IPreferences::WeakPtr m_DataManagerHotkeysPreferencesNode; + + /// + /// Maps a label to hotkey lineedit, e.g. "Toggle Visibility of selected nodes" => QmitkHotkeyLineEdit + /// + std::map m_HotkeyEditors; +}; + +#endif /* QMITKDATAMANAGERHOTKEYSPREFPAGE_H_ */ diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.cpp new file mode 100644 index 0000000000..b6703ea64c --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.cpp @@ -0,0 +1,37 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-07-07 16:57:15 +0200 (Di, 07 Jul 2009) $ + Version: $Revision: 18019 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + +#include "QmitkDataManagerPreferencePage.h" + +#include +#include +#include + +QmitkDataManagerPreferencePage::QmitkDataManagerPreferencePage( QWidget* parent, Qt::WindowFlags f ) +: IQtPreferencePage(parent, f) +{ +} + +bool QmitkDataManagerPreferencePage::PerformOk() +{ + return true; +} + +void QmitkDataManagerPreferencePage::PerformCancel() +{ + +} \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.h b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.h new file mode 100644 index 0000000000..cea857d87f --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkDataManagerPreferencePage.h @@ -0,0 +1,46 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-02-10 14:14:32 +0100 (Di, 10 Feb 2009) $ + Version: $Revision: 16224 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + + +#ifndef QMITKDATAMANAGERPREFERENCEPAGE_H_ +#define QMITKDATAMANAGERPREFERENCEPAGE_H_ + +#include + +#include "cherryIQtPreferencePage.h" +#include "mitkQtDataManagerDll.h" + +struct MITK_QT_DATAMANAGER QmitkDataManagerPreferencePage : public cherry::IQtPreferencePage +{ + Q_OBJECT + +public: + QmitkDataManagerPreferencePage(QWidget* parent = 0, Qt::WindowFlags f = 0); + + /// + /// Invoked when the OK button was clicked in the preferences dialog + /// + virtual bool PerformOk(); + + /// + /// Invoked when the Cancel button was clicked in the preferences dialog + /// + virtual void PerformCancel(); + +}; + +#endif /* QMITKDATAMANAGERPREFERENCEPAGE_H_ */ diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.cpp new file mode 100644 index 0000000000..622ab69fd4 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.cpp @@ -0,0 +1,82 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-07-07 16:57:15 +0200 (Di, 07 Jul 2009) $ + Version: $Revision: 18019 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + +#include "QmitkHotkeyLineEdit.h" + +#include +#include +#include +#include + +const QString QmitkHotkeyLineEdit::TOOLTIP = "Press any key (combination)"; + +QmitkHotkeyLineEdit::QmitkHotkeyLineEdit( QWidget* parent ) +: QLineEdit(parent) +{ + this->setToolTip(QmitkHotkeyLineEdit::TOOLTIP); + //this->setReadOnly(true); +} + +QmitkHotkeyLineEdit::QmitkHotkeyLineEdit( const QKeySequence& _QKeySequence, QWidget* parent) +: QLineEdit(parent) +{ + //this->setReadOnly(true); + this->setToolTip(QmitkHotkeyLineEdit::TOOLTIP); + this->SetKeySequence(_QKeySequence); +} + +QmitkHotkeyLineEdit::QmitkHotkeyLineEdit( const QString& _QKeySequenceAsString, QWidget* parent) +: QLineEdit(parent) +{ + this->setToolTip(QmitkHotkeyLineEdit::TOOLTIP); + //this->setReadOnly(true); + this->SetKeySequence(_QKeySequenceAsString); +} + +void QmitkHotkeyLineEdit::keyPressEvent( QKeyEvent * event ) +{ + if(event->key() == Qt::Key_unknown) + return; + + m_KeySequence = QKeySequence(event->modifiers(), event->key()); + // if no modifier was pressed the sequence is now empty + if(event->modifiers() == Qt::NoModifier) + m_KeySequence = QKeySequence(event->key()); + + this->SetKeySequence(m_KeySequence); +} + +void QmitkHotkeyLineEdit::SetKeySequence( const QKeySequence& _QKeySequence) +{ + m_KeySequence = _QKeySequence; + this->setText(m_KeySequence.toString()); +} + +void QmitkHotkeyLineEdit::SetKeySequence( const QString& _QKeySequenceAsString ) +{ + this->SetKeySequence(QKeySequence(_QKeySequenceAsString)); +} + +QKeySequence QmitkHotkeyLineEdit::GetKeySequence() +{ + return m_KeySequence; +} + +QString QmitkHotkeyLineEdit::GetKeySequenceAsString() +{ + return m_KeySequence.toString(); +} \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.h b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.h new file mode 100644 index 0000000000..8c5b7aae1d --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/QmitkHotkeyLineEdit.h @@ -0,0 +1,51 @@ +/*========================================================================= + + Program: Medical Imaging & Interaction Toolkit + Language: C++ + Date: $Date: 2009-02-10 14:14:32 +0100 (Di, 10 Feb 2009) $ + Version: $Revision: 16224 $ + + Copyright (c) German Cancer Research Center, Division of Medical and + Biological Informatics. All rights reserved. + See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + + +#ifndef QMITKHOTKEYLINEEDIT_H_ +#define QMITKHOTKEYLINEEDIT_H_ + +#include +#include + +#include "mitkQtDataManagerDll.h" + +class MITK_QT_DATAMANAGER QmitkHotkeyLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + static const QString TOOLTIP; + + QmitkHotkeyLineEdit(QWidget* parent = 0); + QmitkHotkeyLineEdit(const QKeySequence& _QKeySequence, QWidget* parent = 0); + QmitkHotkeyLineEdit(const QString& _QString, QWidget* parent = 0); + + virtual void SetKeySequence(const QKeySequence& _QKeySequence); + virtual void SetKeySequence(const QString& _QKeySequenceAsString); + virtual QKeySequence GetKeySequence(); + virtual QString GetKeySequenceAsString(); + +protected: + virtual void keyPressEvent ( QKeyEvent * event ); + +protected: + QKeySequence m_KeySequence; + +}; + +#endif /* QMITKHOTKEYLINEEDIT_H_ */ diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.cpp index 8491ce3fe7..fbef9081e2 100644 --- a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.cpp @@ -1,513 +1,525 @@ #include "QmitkDataManagerView.h" //# Own Includes //## mitk #include "mitkDataStorageEditorInput.h" #include "mitkIDataStorageReference.h" #include "mitkNodePredicateDataType.h" #include "mitkCoreObjectFactory.h" #include "mitkPACSPlugin.h" #include "mitkDataTreeNodeFactory.h" #include "mitkCommon.h" #include "mitkDelegateManager.h" #include "mitkNodePredicateData.h" #include "mitkNodePredicateNOT.h" #include "mitkNodePredicateProperty.h" #include "mitkProperties.h" //## Qmitk #include #include #include #include #include -#include +#include #include //## Cherry #include #include //# Toolkit Includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include QmitkDataManagerView::QmitkDataManagerView() { } QmitkDataManagerView::~QmitkDataManagerView() { } void QmitkDataManagerView::CreateQtPartControl(QWidget* parent) { //# Dim/Get //# Base QGridLayout* _ParentLayout = new QGridLayout; //# DataStorageSelection QGroupBox* _DataStorageSelectionGroupBox = new QGroupBox("Data Storage Selection", m_Parent); QGridLayout* _DataStorageSelectionLayout = new QGridLayout; m_DataStorageSelectionComboBox = new QComboBox(_DataStorageSelectionGroupBox); //# setup qsplitter QSplitter *_SplitterNodeViewPropertiesView = new QSplitter(m_Parent); _SplitterNodeViewPropertiesView->setMargin(0); //# NodeView QGroupBox* _NodeViewGroupBox = new QGroupBox("Selected Nodes (Use Right Mouse Button for a Context Menu)", m_Parent); m_NodeToolbar = new QToolBar(_NodeViewGroupBox); QVBoxLayout* _NodeViewLayout = new QVBoxLayout; m_NodeTableView = new QTableView(_NodeViewGroupBox); // Show only nodes that really contain data mitk::NodePredicateData::Pointer nullDataPredicate = mitk::NodePredicateData::New(0); mitk::NodePredicateNOT::Pointer notNullDataPredicate = mitk::NodePredicateNOT::New(nullDataPredicate); m_NodeTableModel = new QmitkDataStorageTableModel(this->GetDefaultDataStorage(), notNullDataPredicate, m_NodeTableView); //# Node actions: buttons, context menu QWidget* _PaneNodeButton = new QWidget(_NodeViewGroupBox); QHBoxLayout* _NodeButtonLayout = new QHBoxLayout; m_BtnLoad = new QPushButton(QIcon(":/datamanager/load.xpm"), "Load", _PaneNodeButton); m_BtnGlobalReinit = new QPushButton(QIcon(":/datamanager/refresh.xpm"), "Global Reinit", _PaneNodeButton); m_NodeMenu = new QMenu(m_NodeTableView); m_SaveAction = m_NodeMenu->addAction(QIcon(":/datamanager/save.xpm"), "Save"); mitk::PACSPlugin::PACSPluginCapability pacsCapabilities = mitk::PACSPlugin::GetInstance()->GetPluginCapabilities(); if ( pacsCapabilities.IsPACSFunctional && pacsCapabilities.HasSaveCapability ) { m_SaveAction = m_NodeMenu->addAction(QIcon(":/datamanager/save-chili.xpm"), "Save to PACS"); } m_RemoveAction = m_NodeMenu->addAction(QIcon(":/datamanager/remove.xpm"), "Remove"); m_ReinitAction = m_NodeMenu->addAction(QIcon(":/datamanager/refresh.xpm"), "Reinit"); m_ToggleSelectedVisibility = m_NodeMenu->addAction(QIcon(":/datamanager/data-type-image-mask-invisible-24.png"), "Toggle visibility of selected nodes"); m_ActionShowInfoDialog = m_NodeMenu->addAction(QIcon(":/datamanager/show-data-info.png"), "Show additional infos for selected nodes"); // NodeProperties QGroupBox* _NodePropertiesGroupBox = new QGroupBox("Properties", m_Parent); QHBoxLayout* _NodePropertiesLayout = new QHBoxLayout; m_NodePropertiesTableEditor = new QmitkPropertiesTableEditor(0, _NodePropertiesGroupBox); //// Set // Base m_Parent->setLayout(_ParentLayout); _ParentLayout->addWidget(_DataStorageSelectionGroupBox, 0, 0); _SplitterNodeViewPropertiesView->setOrientation(Qt::Vertical); //_SplitterNodeViewPropertiesView->setHandleWidth(5); _SplitterNodeViewPropertiesView->addWidget(_NodeViewGroupBox); _SplitterNodeViewPropertiesView->addWidget(_NodePropertiesGroupBox); //_SplitterNodeViewPropertiesView->setStretchFactor(_SplitterNodeViewPropertiesView->indexOf(_NodeViewGroupBox), 1); //_SplitterNodeViewPropertiesView->setStretchFactor(_SplitterNodeViewPropertiesView->indexOf(_NodePropertiesGroupBox), 2); _ParentLayout->addWidget(_SplitterNodeViewPropertiesView, 1, 0); // _ParentLayout->addWidget(_NodeSelectionGroupBox, 1, 0); //_ParentLayout->addWidget(_NodeViewGroupBox, 1, 0); // _ParentLayout->addWidget(_NodePropertiesGroupBox, 2, 0); // DataStorageSelection _DataStorageSelectionGroupBox->setLayout(_DataStorageSelectionLayout); _DataStorageSelectionLayout->addWidget(m_DataStorageSelectionComboBox); m_DataStorageSelectionComboBox->setEditable(false); m_DataStorageSelectionComboBox->addItem("Default DataStorage"); m_DataStorageSelectionComboBox->addItem("Active DataStorage"); // NodeSelection // _NodeSelectionGroupBox->setLayout(_NodeSelectionLayout); // _NodeSelectionLayout->addWidget(m_PredicateEditor); // NodeView _NodeViewGroupBox->setLayout(_NodeViewLayout); _NodeViewLayout->addWidget(m_NodeToolbar); _NodeViewLayout->addWidget(m_NodeTableView); _NodeViewLayout->addWidget(_PaneNodeButton); m_NodeTableView->setContextMenuPolicy(Qt::CustomContextMenu); m_NodeTableView->setSelectionMode( QAbstractItemView::ExtendedSelection ); m_NodeTableView->setSelectionBehavior( QAbstractItemView::SelectRows ); m_NodeTableView->horizontalHeader()->setStretchLastSection(true); m_NodeTableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed); - m_NodeTableView->installEventFilter(new QmitkDelKeyFilter(this)); + m_NodeTableView->installEventFilter(new QmitkNodeTableViewKeyFilter(this)); //m_NodeTableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); //m_NodeTableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); //m_NodeTableView->verticalHeader()->setResizeMode(QHeaderView::Stretch); m_NodeTableView->setAlternatingRowColors(true); m_NodeTableView->setSortingEnabled(true); //m_NodeTableView->setItemDelegate(new QmitkDataStorageDelegate(2, m_NodeTableView)); m_NodeTableView->setModel(m_NodeTableModel); m_SelectionProvider = new QmitkDataTreeNodeSelectionProvider(); m_SelectionProvider->SetItemSelectionModel(m_NodeTableView->selectionModel()); this->GetSite()->SetSelectionProvider(m_SelectionProvider); m_NodeToolbar->setIconSize(QSize(16, 16)); m_NodeToolbar->addAction(m_SaveAction); m_NodeToolbar->addAction(m_RemoveAction); m_NodeToolbar->addAction(m_ReinitAction); m_NodeToolbar->addAction(m_ToggleSelectedVisibility); m_NodeToolbar->addAction(m_ActionShowInfoDialog); _NodeButtonLayout->addWidget(m_BtnLoad); _NodeButtonLayout->addWidget(m_BtnGlobalReinit); _PaneNodeButton->setLayout(_NodeButtonLayout); // NodeProperties _NodePropertiesGroupBox->setLayout(_NodePropertiesLayout); _NodePropertiesLayout->addWidget(m_NodePropertiesTableEditor); // Connections QObject::connect( m_DataStorageSelectionComboBox, SIGNAL(currentIndexChanged(const QString&)) , this, SLOT( DataStorageSelectionChanged( const QString& ) ) ); QObject::connect( m_NodeTableView, SIGNAL(clicked(const QModelIndex&)) , this, SLOT( NodeTableViewClicked( const QModelIndex& )) ); QObject::connect( m_NodeTableView->selectionModel(), SIGNAL(currentChanged ( const QModelIndex&, const QModelIndex& )) , this, SLOT( NodeTableViewSelectionChanged( const QModelIndex&, const QModelIndex& )) ); QObject::connect( m_NodeTableView, SIGNAL(customContextMenuRequested(const QPoint&)) , this, SLOT(NodeTableViewContextMenuRequested(const QPoint&)) ); QObject::connect( m_SaveAction, SIGNAL( triggered(bool) ) , this, SLOT( SaveActionTriggered(bool) ) ); QObject::connect( m_SaveAction, SIGNAL( triggered(bool) ) , this, SLOT( ActionSaveToPacsTriggered(bool) ) ); QObject::connect( m_ReinitAction, SIGNAL( triggered(bool) ) , this, SLOT( ActionReinitTriggered(bool) ) ); QObject::connect( m_RemoveAction, SIGNAL( triggered(bool) ) , this, SLOT( ActionRemoveTriggered(bool) ) ); QObject::connect( m_ToggleSelectedVisibility, SIGNAL( triggered(bool) ) , this, SLOT( ActionToggleSelectedVisibilityTriggered(bool) ) ); QObject::connect( m_ActionShowInfoDialog, SIGNAL( triggered(bool) ) , this, SLOT( ActionShowInfoDialogTriggered(bool) ) ); QObject::connect( m_BtnLoad, SIGNAL( clicked(bool) ) , this, SLOT( BtnLoadClicked(bool) ) ); QObject::connect( m_BtnGlobalReinit, SIGNAL( clicked(bool) ) , this, SLOT( BtnGlobalReinitClicked(bool) ) ); QObject::connect( m_NodePropertiesTableEditor, SIGNAL( destroyed(QObject*) ) , this, SLOT( QtObjectDestroyed(QObject*) ) ); } void QmitkDataManagerView::Activated() { /* // emulate click action to show properties of selected node if(m_NodeTableView && m_NodeTableView->currentIndex().isValid()) NodeTableViewClicked(m_NodeTableView->currentIndex()); else if(m_NodePropertiesTableEditor) m_NodePropertiesTableEditor->SetPropertyList(0);*/ } void QmitkDataManagerView::Deactivated() { } void QmitkDataManagerView::DataStorageSelectionChanged(const QString & text) { //std::cout << "DataStorageSelectionChanged\n"; //this->m_NodeTableView->set QmitkDataStorageTableModel* _NodeTableModel = 0; // default datastorage if(m_NodeTableView->currentIndex().row() == 0) { _NodeTableModel = new QmitkDataStorageTableModel(this->GetDefaultDataStorage(), 0, m_NodeTableView); } else { _NodeTableModel = new QmitkDataStorageTableModel(this->GetDataStorage(), 0, m_NodeTableView); } m_NodeTableView->setModel(_NodeTableModel); delete m_NodeTableModel; m_NodeTableModel = _NodeTableModel; QObject::connect( m_NodeTableView->selectionModel(), SIGNAL(currentChanged ( const QModelIndex&, const QModelIndex& )) , this, SLOT( NodeTableViewSelectionChanged( const QModelIndex&, const QModelIndex& )) ); } void QmitkDataManagerView::NodeTableViewClicked( const QModelIndex & index ) { // select this item if not already selected /* if(m_NodeTableView->currentIndex() != index) { m_NodeTableView->setCurrentIndex(index); }*/ } void QmitkDataManagerView::NodeTableViewSelectionChanged( const QModelIndex & current, const QModelIndex & previous ) { mitk::DataTreeNode::Pointer selectedNode = m_NodeTableModel->GetNode(current); if(selectedNode.IsNotNull() && m_NodePropertiesTableEditor != 0) m_NodePropertiesTableEditor->SetPropertyList(selectedNode->GetPropertyList()); } void QmitkDataManagerView::NodeTableViewContextMenuRequested( const QPoint & pos ) { m_NodeMenu->popup(QCursor::pos()); //QModelIndex selected = m_NodeTableView->indexAt(pos); //m_NodeTableView->selectRow(selected.row()); } void QmitkDataManagerView::SaveActionTriggered(bool checked) { QModelIndexList indexesOfSelectedRows = m_NodeTableView->selectionModel()->selectedRows(); mitk::DataTreeNode* node = 0; unsigned int indexesOfSelectedRowsSize = indexesOfSelectedRows.size(); for (unsigned int i = 0; iGetNode(indexesOfSelectedRows.at(i)); // if node is not defined or if the node contains geometry data do not remove it if ( node != 0 ) { mitk::BaseData::Pointer data = node->GetData(); if (data.IsNotNull()) CommonFunctionality::SaveBaseData( data.GetPointer(), node->GetName().c_str() ); } } } void QmitkDataManagerView::ActionReinitTriggered( bool checked /*= false */ ) { QModelIndexList indexesOfSelectedRows = m_NodeTableView->selectionModel()->selectedRows(); std::vector selectedNodes; mitk::DataTreeNode* node = 0; for (QModelIndexList::iterator it = indexesOfSelectedRows.begin() ; it != indexesOfSelectedRows.end(); it++) { node = m_NodeTableModel->GetNode(*it); // if node is not defined or if the node contains geometry data do not remove it if ( node != 0 ) selectedNodes.push_back(node); } for (std::vector::iterator it = selectedNodes.begin() ; it != selectedNodes.end(); it++) { node = *it; mitk::BaseData::Pointer basedata = node->GetData(); if (basedata.IsNotNull()) { mitk::RenderingManager::GetInstance()->InitializeViews( basedata->GetTimeSlicedGeometry(), mitk::RenderingManager::REQUEST_UPDATE_ALL, true ); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } } } void QmitkDataManagerView::ActionRemoveTriggered( bool checked /*= false */ ) { QModelIndexList indexesOfSelectedRows = m_NodeTableView->selectionModel()->selectedRows(); std::vector selectedNodes; mitk::DataTreeNode* node = 0; QString question = tr("Do you really want to delete "); for (QModelIndexList::iterator it = indexesOfSelectedRows.begin() ; it != indexesOfSelectedRows.end(); it++) { node = m_NodeTableModel->GetNode(*it); // if node is not defined or if the node contains geometry data do not remove it if ( node != 0 /*& strcmp(node->GetData()->GetNameOfClass(), "Geometry2DData") != 0*/ ) { selectedNodes.push_back(node); question.append(QString::fromStdString(node->GetName())); question.append(", "); } } // remove the last two characters = ", " question = question.remove(question.size()-2, 2); question.append("?"); QMessageBox::StandardButton answerButton = QMessageBox::question( m_Parent , tr("DataManager") , question , QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if(answerButton == QMessageBox::Yes) { for (std::vector::iterator it = selectedNodes.begin() ; it != selectedNodes.end(); it++) { node = *it; this->GetDataStorage()->Remove(node); this->BtnGlobalReinitClicked(false); } } } +void QmitkDataManagerView::ActionMakeAllNodesInvisible( bool checked /*= false */ ) +{ + std::vector nodes = m_NodeTableModel->GetNodeSet(); + + for (std::vector::iterator it = nodes.begin() + ; it != nodes.end(); it++) + { + (*it)->SetVisibility(false); + } + mitk::RenderingManager::GetInstance()->RequestUpdateAll(); +} + void QmitkDataManagerView::ActionToggleSelectedVisibilityTriggered( bool checked /*= false */ ) { QModelIndexList indexesOfSelectedRows = m_NodeTableView->selectionModel()->selectedRows(); std::vector selectedNodes; mitk::DataTreeNode* node = 0; for (QModelIndexList::iterator it = indexesOfSelectedRows.begin() ; it != indexesOfSelectedRows.end(); it++) { node = 0; node = m_NodeTableModel->GetNode(*it); // if node is not defined or if the node contains geometry data do not remove it if ( node != 0 ) selectedNodes.push_back(node); } bool isVisible = false; for (std::vector::iterator it = selectedNodes.begin() ; it != selectedNodes.end(); it++) { isVisible = false; node = *it; node->GetBoolProperty("visible", isVisible); node->SetVisibility(!isVisible); } mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } void QmitkDataManagerView::ActionShowInfoDialogTriggered( bool checked /*= false */ ) { QModelIndexList indexesOfSelectedRows = m_NodeTableView->selectionModel()->selectedRows(); std::vector selectedNodes; mitk::DataTreeNode* node = 0; for (QModelIndexList::iterator it = indexesOfSelectedRows.begin() ; it != indexesOfSelectedRows.end(); it++) { node = 0; node = m_NodeTableModel->GetNode(*it); // if node is not defined or if the node contains geometry data do not remove it if ( node != 0 ) selectedNodes.push_back(node); } QmitkInfoDialog _QmitkInfoDialog(selectedNodes, this->m_Parent); _QmitkInfoDialog.exec(); } void QmitkDataManagerView::BtnLoadClicked( bool checked /*= false */ ) { QStringList fileNames = QFileDialog::getOpenFileNames(mitk::CoreObjectFactory::GetInstance()->GetFileExtensions(), NULL); for ( QStringList::Iterator it = fileNames.begin(); it != fileNames.end(); ++it ) { FileOpen((*it).ascii(), 0); } } void QmitkDataManagerView::FileOpen( const char * fileName, mitk::DataTreeNode* parentNode ) { mitk::DataTreeNodeFactory::Pointer factory = mitk::DataTreeNodeFactory::New(); try { factory->SetFileName( fileName ); QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) ); factory->Update(); for ( unsigned int i = 0 ; i < factory->GetNumberOfOutputs( ); ++i ) { mitk::DataTreeNode::Pointer node = factory->GetOutput( i ); if ( ( node.IsNotNull() ) && ( node->GetData() != NULL ) ) { this->GetDataStorage()->Add(node, parentNode); } } } catch ( itk::ExceptionObject & ex ) { itkGenericOutputMacro( << "Exception during file open: " << ex ); } QApplication::restoreOverrideCursor(); } void QmitkDataManagerView::BtnGlobalReinitClicked( bool checked /*= false */ ) { /* get all nodes that have not set "includeInBoundingBox" to false */ mitk::NodePredicateNOT::Pointer pred = mitk::NodePredicateNOT::New(mitk::NodePredicateProperty::New("includeInBoundingBox", mitk::BoolProperty::New(false))); mitk::DataStorage::SetOfObjects::ConstPointer rs = this->GetDataStorage()->GetSubset(pred); /* calculate bounding geometry of these nodes */ mitk::Geometry3D::Pointer bounds = this->GetDataStorage()->ComputeBoundingGeometry3D(rs); /* initialize the views to the bounding geometry */ mitk::RenderingManager::GetInstance()->InitializeViews(bounds); } void QmitkDataManagerView::ActionSaveToPacsTriggered ( bool checked ) { QModelIndex indexOfSelectedRow = m_NodeTableView->currentIndex(); if(!indexOfSelectedRow.isValid()) return; mitk::DataTreeNode* node = m_NodeTableModel->GetNode(indexOfSelectedRow); if ( !node ) return; std::vector nodesToSave; nodesToSave.clear(); nodesToSave.push_back( node ); // TODO /* QmitkPACSSaveDialog dialog(this); dialog.SetDataTreeNodesToSave( nodesToSave ); dialog.setAllowSeveralObjectsIntoOneSeries(true); // just cannot select more than one object here :-( dialog.exec(); if ( dialog.result() == QDialog::Accepted ) { std::cout << "PACS export dialog reported success." << std::endl; } else { std::cout << "PACS export dialog cancelled by user." << std::endl; }*/ } void QmitkDataManagerView::QtObjectDestroyed( QObject * obj /*= 0 */ ) { if(obj == m_NodePropertiesTableEditor) m_NodePropertiesTableEditor = 0; } \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.h b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.h index a23f5f32cb..200721cf00 100644 --- a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.h +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkDataManagerView.h @@ -1,193 +1,201 @@ #ifndef QMITKDATAMANAGERVIEW_H_ #define QMITKDATAMANAGERVIEW_H_ // Own includes #include "cherryIPartListener.h" #include "cherryISelection.h" #include "cherryISelectionProvider.h" +#include "cherryIPreferencesService.h" + /// Qmitk #include "QmitkFunctionality.h" #include "QmitkDataTreeNodeSelectionProvider.h" // #include "QmitkStandardViews.h" #include "../mitkQtDataManagerDll.h" + + // Forward declarations class QComboBox; class QString; class QListView; class QMenu; class QAction; class QModelIndex; class QTableView; class QSplitter; class QPushButton; class QToolBar; class QmitkDataStorageTableModel; class QmitkPropertiesTableEditor; class QmitkPredicateEditor; -class QmitkDelKeyFilter; +class QmitkNodeTableViewKeyFilter; /// /// \ingroup org_mitk_gui_qt_datamanager_internal /// /// \brief A View class that is subdivided in three parts. 1. datastorage-selection, 2. node / other objects with properties-selection /// and 3. properties table view with the possibility of editing them /// /// \TODO: complete PACS support, complete datastorage selection change, outsource the properties table as an own view and use the Selection /// of openCherry to intercommunicate, in save dialog show regular filename /// class MITK_QT_DATAMANAGER QmitkDataManagerView : public QObject, public QmitkFunctionality//, virtual public ISelectionProvider { Q_OBJECT /// - /// QmitkDelKeyFilter should be able to call ActionRemoveTriggered(). + /// QmitkNodeTableViewKeyFilter should be able to call ActionRemoveTriggered(). /// - friend class QmitkDelKeyFilter; + friend class QmitkNodeTableViewKeyFilter; public: /// /// \brief Standard ctor. /// QmitkDataManagerView(); /// /// \brief Standard dtor. /// virtual ~QmitkDataManagerView(); /// /// Called when the part is activated. /// virtual void Activated(); /// /// Called when the part is deactivated. /// virtual void Deactivated(); protected slots: void QtObjectDestroyed ( QObject * obj = 0 ); /// /// \brief Other datastorage selected, reset node selection and properties /// void DataStorageSelectionChanged(const QString & text); /// /// \brief When the user right clicks on a node, NodeTableViewClicked() makes sure it is also selected. /// void NodeTableViewClicked( const QModelIndex & index ); /// /// \brief Should be called whenever the selection of the nodes table changes. /// void NodeTableViewSelectionChanged ( const QModelIndex & current, const QModelIndex & previous ); /// /// \brief Shows a node context menu. /// void NodeTableViewContextMenuRequested( const QPoint & index ); /// /// \brief Invoked when an element should be saved. /// void SaveActionTriggered( bool checked = false ); /// /// \brief Invoked when an element should be removed. /// void ActionRemoveTriggered( bool checked = false ); /// /// \brief Invoked when an element should be reinitiliased. /// void ActionReinitTriggered( bool checked = false ); /// /// \brief Invoked when an element should be saved to the pacs. /// void ActionSaveToPacsTriggered ( bool checked = false ); /// /// \brief Invoked when the visibility of the selected nodes should be toggled. /// + void ActionMakeAllNodesInvisible ( bool checked = false ); + /// + /// \brief Invoked when the visibility of the selected nodes should be toggled. + /// void ActionToggleSelectedVisibilityTriggered ( bool checked = false ); /// /// \brief Invoked when infos of the selected nodes should be shown in a dialog. /// void ActionShowInfoDialogTriggered ( bool checked = false ); /// /// \brief Shows a load dialog. /// void BtnLoadClicked ( bool checked = false ); /// /// \brief Reinits everything. /// void BtnGlobalReinitClicked ( bool checked = false ); protected: /// /// \brief Create the view here. /// void CreateQtPartControl(QWidget* parent); /// /// \brief Shows a file open dialog. /// void FileOpen( const char * fileName, mitk::DataTreeNode* parentNode ); private: /// /// \brief A combobox for the datastorage selection. /// QComboBox* m_DataStorageSelectionComboBox; /// /// \brief A plain widget as the base pane. /// QmitkDataStorageTableModel* m_NodeTableModel; /// /// A Toolbar showing actions for saving, loading and re-initing nodes. /// QToolBar* m_NodeToolbar; /// /// \brief The Table view to show the selected nodes. /// QTableView* m_NodeTableView; /// /// \brief The context menu that shows up when right clicking on a node. /// QMenu* m_NodeMenu; /// /// \brief Action that is triggered when a node should be saved. /// QAction* m_SaveAction; /// /// \brief Action for saving to pacs (not implemented yet for qt4) /// QAction* m_ActionSaveToPacs; /// /// \brief Action that is triggered when a node should be removed. /// QAction* m_RemoveAction; /// /// \brief Action that is triggered when a node should be reinited. /// QAction* m_ReinitAction; /// /// \brief Action that is triggered when the visibility of the selected nodes should be toggled. /// QAction* m_ToggleSelectedVisibility; /// /// \brief Action that is triggered when an info dialog for a selected node should be shown. /// QAction* m_ActionShowInfoDialog; /// /// \brief A button to load new nodes. /// QPushButton* m_BtnLoad; /// /// \brief A button to make a global reinit. /// QPushButton* m_BtnGlobalReinit; /// /// \brief The properties table editor. /// QmitkPropertiesTableEditor* m_NodePropertiesTableEditor; /// /// \brief The openCherry selection provider /// QmitkDataTreeNodeSelectionProvider::Pointer m_SelectionProvider; }; #endif /*QMITKDATAMANAGERVIEW_H_*/ diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.cpp b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.cpp new file mode 100644 index 0000000000..a4c346aca3 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.cpp @@ -0,0 +1,57 @@ +#include "QmitkNodeTableViewKeyFilter.h" + +#include +#include +#include + +QmitkNodeTableViewKeyFilter::QmitkNodeTableViewKeyFilter( QObject* _DataManagerView ) +: QObject(_DataManagerView) +{ + m_PreferencesService = + cherry::Platform::GetServiceRegistry().GetServiceById(cherry::IPreferencesService::ID); +} + +bool QmitkNodeTableViewKeyFilter::eventFilter( QObject *obj, QEvent *event ) +{ + QmitkDataManagerView* _DataManagerView = qobject_cast(this->parent()); + if (event->type() == QEvent::KeyPress && _DataManagerView) + { + cherry::IPreferencesService::Pointer prefService = m_PreferencesService.Lock(); + cherry::IPreferences::Pointer nodeTableKeyPrefs = prefService->GetSystemPreferences()->Node("/DataManager/Hotkeys"); + + QKeySequence _MakeAllInvisible = QKeySequence(QString::fromStdString(nodeTableKeyPrefs->Get("Make all nodes invisible", "Ctrl+V"))); + QKeySequence _ToggleVisibility = QKeySequence(QString::fromStdString(nodeTableKeyPrefs->Get("Toggle visibility of selected nodes", "V"))); + QKeySequence _DeleteSelectedNodes = QKeySequence(QString::fromStdString(nodeTableKeyPrefs->Get("Delete selected nodes", "Del"))); + + QKeyEvent *keyEvent = static_cast(event); + + QKeySequence _KeySequence = QKeySequence(keyEvent->modifiers(), keyEvent->key()); + // if no modifier was pressed the sequence is now empty + if(_KeySequence.isEmpty()) + _KeySequence = QKeySequence(keyEvent->key()); + + if(_KeySequence == _MakeAllInvisible) + { + // trigger deletion of selected node(s) + _DataManagerView->ActionMakeAllNodesInvisible(false); + // return true: this means the delete key event is not send to the table + return true; + } + else if(_KeySequence == _DeleteSelectedNodes) + { + // trigger deletion of selected node(s) + _DataManagerView->ActionRemoveTriggered(false); + // return true: this means the delete key event is not send to the table + return true; + } + else if(_KeySequence == _ToggleVisibility) + { + // trigger deletion of selected node(s) + _DataManagerView->ActionToggleSelectedVisibilityTriggered(false); + // return true: this means the delete key event is not send to the table + return true; + } + } + // standard event processing + return QObject::eventFilter(obj, event); +} \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.h b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.h new file mode 100644 index 0000000000..d050420ce7 --- /dev/null +++ b/Modules/Bundles/org.mitk.gui.qt.datamanager/src/internal/QmitkNodeTableViewKeyFilter.h @@ -0,0 +1,25 @@ +#ifndef QMITKNODETABLEVIEWKEYFILTER_H_ +#define QMITKNODETABLEVIEWKEYFILTER_H_ + +#include +#include "cherryIPreferencesService.h" + +/// +/// A small class which "eats" all Del-Key-pressed events on the node table. +/// When the Del Key is pressed selected nodes should be removed. +/// +class QmitkNodeTableViewKeyFilter : public QObject +{ + Q_OBJECT +public: + QmitkNodeTableViewKeyFilter(QObject* _DataManagerView = 0); +protected: + bool eventFilter(QObject *obj, QEvent *event); + + /// + /// The Preferences Service to retrieve and store preferences. + /// + cherry::IPreferencesService::WeakPtr m_PreferencesService; +}; + +#endif // QMITKNODETABLEVIEWKEYFILTER_H_ \ No newline at end of file