diff --git a/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.cpp b/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.cpp index 90d9f4b49e..0e3791e7fa 100644 --- a/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.cpp +++ b/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.cpp @@ -1,542 +1,541 @@ /*=================================================================== 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 // Blueberry #include #include #include // Qmitk #include "QmitkAddNewPropertyDialog.h" #include "QmitkOverlayManagerView.h" #include "QmitkPropertyItemDelegate.h" #include "QmitkPropertyItemModel.h" #include // Qt #include #include #include #include "internal/org_mitk_gui_qt_overlaymanager_Activator.h" #include "mitkAnnotationPlacer.h" #include "mitkAnnotationService.h" #include "mitkGetPropertyService.h" #include "mitkOverlayManager.h" #include "mitkRenderingManager.h" #include #include #include #include #include #include #include #include #include const std::string QmitkOverlayManagerView::VIEW_ID = "org.mitk.views.overlaymanager"; QmitkOverlayManagerView::QmitkOverlayManagerView() - : ctkServiceTracker(mitk::org_mitk_gui_qt_overlaymanager_Activator::GetContext()), - m_Parent(nullptr), + : m_Parent(nullptr), m_PropertyNameChangedTag(0), m_OverlayManagerObserverTag(0), m_PropertyAliases(nullptr), m_PropertyDescriptions(nullptr), m_PropertyPersistence(nullptr), m_ProxyModel(nullptr), m_Model(nullptr), m_Delegate(nullptr), m_Renderer(nullptr), m_AddOverlayMenu(nullptr) { } QmitkOverlayManagerView::~QmitkOverlayManagerView() { } void QmitkOverlayManagerView::SetFocus() { } void QmitkOverlayManagerView::CreateQtPartControl(QWidget *parent) { // create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi(parent); m_Controls.m_OverlayList->clear(); mitk::IRenderWindowPart *renderWindowPart = this->GetRenderWindowPart(); if (renderWindowPart != NULL) { QHash renderWindows = renderWindowPart->GetQmitkRenderWindows(); Q_FOREACH (QString renderWindow, renderWindows.keys()) { + if (!m_Renderer) + m_Renderer = renderWindows[renderWindow]->GetRenderer(); m_Controls.m_RendererCB->addItem(renderWindow); } } - InitializeAddAnimationMenu(); + InitializeAddOverlayMenu(); m_ProxyModel = new QSortFilterProxyModel(m_Controls.m_PropertyTree); m_Model = new QmitkPropertyItemModel(m_ProxyModel); m_ProxyModel->setSourceModel(m_Model); m_ProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_ProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_ProxyModel->setDynamicSortFilter(true); m_Delegate = new QmitkPropertyItemDelegate(m_Controls.m_PropertyTree); m_Controls.m_PropertyTree->setItemDelegateForColumn(1, m_Delegate); m_Controls.m_PropertyTree->setModel(m_ProxyModel); m_Controls.m_PropertyTree->setColumnWidth(0, 160); m_Controls.m_PropertyTree->sortByColumn(0, Qt::AscendingOrder); m_Controls.m_PropertyTree->setSelectionBehavior(QAbstractItemView::SelectRows); m_Controls.m_PropertyTree->setSelectionMode(QAbstractItemView::SingleSelection); m_Controls.m_PropertyTree->setEditTriggers(QAbstractItemView::SelectedClicked | QAbstractItemView::DoubleClicked); connect(m_Controls.m_RendererCB, SIGNAL(currentIndexChanged(int)), this, SLOT(OnPropertyListChanged(int))); connect(m_Controls.newButton, SIGNAL(clicked()), this, SLOT(OnAddNewProperty())); connect(m_Controls.m_PropertyTree->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(OnCurrentRowChanged(const QModelIndex &, const QModelIndex &))); connect(m_Controls.m_OverlayList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(OnOverlaySelectionChanged(QListWidgetItem *, QListWidgetItem *))); connect(m_Controls.m_DeleteOverlay, SIGNAL(clicked()), this, SLOT(OnDelete())); connect(m_Controls.m_AddOverlay, SIGNAL(clicked()), this, SLOT(OnAddOverlay())); itk::MemberCommand::Pointer command = itk::MemberCommand::New(); command->SetCallbackFunction(this, &QmitkOverlayManagerView::OnFocusChanged); m_RenderWindowFocusObserverTag = mitk::RenderingManager::GetInstance()->AddObserver(mitk::FocusChangedEvent(), command); } void QmitkOverlayManagerView::OnFocusChanged(itk::Object * /*caller*/, const itk::EventObject &event) { const mitk::FocusChangedEvent *focusEvent = dynamic_cast(&event); if (focusEvent) { QHash renderWindows = this->GetRenderWindowPart()->GetQmitkRenderWindows(); m_Controls.m_RendererCB->clear(); Q_FOREACH (QString renderWindow, renderWindows.keys()) { m_Controls.m_RendererCB->addItem(renderWindow); if (renderWindows[renderWindow]->GetVtkRenderWindow() == mitk::RenderingManager::GetInstance()->GetFocusedRenderWindow()) { m_Controls.m_RendererCB->setCurrentText(renderWindow); } } } } QString QmitkOverlayManagerView::GetPropertyNameOrAlias(const QModelIndex &index) { QString propertyName; if (index.isValid()) { QModelIndex current = index; while (current.isValid()) { QString name = m_ProxyModel->data(m_ProxyModel->index(current.row(), 0, current.parent())).toString(); propertyName.prepend(propertyName.isEmpty() ? name : name.append('.')); current = current.parent(); } } return propertyName; } void QmitkOverlayManagerView::OnCurrentRowChanged(const QModelIndex ¤t, const QModelIndex &) { if (m_PropertyDescriptions != nullptr && current.isValid()) { QString name = this->GetPropertyNameOrAlias(current); if (!name.isEmpty()) { QString alias; bool isTrueName = true; if (m_PropertyAliases != nullptr) { std::string trueName = m_PropertyAliases->GetPropertyName(name.toStdString()); if (trueName.empty() && !m_SelectionClassName.empty()) trueName = m_PropertyAliases->GetPropertyName(name.toStdString(), m_SelectionClassName); if (!trueName.empty()) { alias = name; name = QString::fromStdString(trueName); isTrueName = false; } } QString description = QString::fromStdString(m_PropertyDescriptions->GetDescription(name.toStdString())); std::vector aliases; if (!isTrueName && m_PropertyAliases != nullptr) { aliases = m_PropertyAliases->GetAliases(name.toStdString(), m_SelectionClassName); if (aliases.empty() && !m_SelectionClassName.empty()) aliases = m_PropertyAliases->GetAliases(name.toStdString()); } bool isPersistent = false; // QString persistenceKey; if (m_PropertyPersistence != nullptr) { isPersistent = m_PropertyPersistence->HasInfo(name.toStdString()); /*if (isPersistent) { persistenceKey = QString::fromStdString(m_PropertyPersistence->GetInfo(name.toStdString())->GetKey()); if (persistenceKey.isEmpty()) persistenceKey = name; }*/ } if (!description.isEmpty() || !aliases.empty() || isPersistent) { QString customizedDescription; if (!description.isEmpty()) customizedDescription += "

" + description + "

"; if (!aliases.empty() || isPersistent) { customizedDescription += "
"; if (!aliases.empty()) { customizedDescription += aliases.size() > 1 ? "" : ""; } if (isPersistent) customizedDescription += ""; customizedDescription += "
"; } return; } } } } void QmitkOverlayManagerView::OnPropertyNameChanged(const itk::EventObject &) { mitk::PropertyList *propertyList = m_Model->GetPropertyList(); if (propertyList != NULL) { mitk::BaseProperty *nameProperty = propertyList->GetProperty("name"); if (nameProperty != NULL) { QString partName = "Properties ("; partName.append(QString::fromStdString(nameProperty->GetValueAsString())).append(')'); this->SetPartName(partName); } } } void QmitkOverlayManagerView::OnSelectionChanged(berry::IWorkbenchPart::Pointer, const QList &nodes) { } -void QmitkOverlayManagerView::InitializeAddAnimationMenu() +void QmitkOverlayManagerView::InitializeAddOverlayMenu() { m_AddOverlayMenu = new QMenu(m_Controls.m_AddOverlay); m_AddOverlayMenu->addAction("TextOverlay2D"); m_AddOverlayMenu->addAction("TextOverlay3D"); m_AddOverlayMenu->addAction("LabelOverlay"); m_AddOverlayMenu->addAction("ColorBarOverlay"); m_AddOverlayMenu->addAction("ScaleLegendOverlay"); m_AddOverlayMenu->addAction("LogoOverlay"); } -void QmitkOverlayManagerView::OnOverlayAdded(itk::Object *, const itk::EventObject &event) -{ - const mitk::OverlayAddEvent *addEvent = dynamic_cast(&event); - if (addEvent) - { - OnActivateOverlayList(); - } -} - void QmitkOverlayManagerView::Activated() { + this->OnActivateOverlayList(); } void QmitkOverlayManagerView::Deactivated() { } void QmitkOverlayManagerView::Visible() { - mitk::OverlayManager *om = mitk::OverlayManager::GetInstance(); - if (om && m_OverlayManagerObserverTag == 0) - { - itk::MemberCommand::Pointer command = itk::MemberCommand::New(); - command->SetCallbackFunction(this, &QmitkOverlayManagerView::OnOverlayAdded); - m_OverlayManagerObserverTag = om->AddObserver(mitk::OverlayAddEvent(), command); - } this->OnActivateOverlayList(); } void QmitkOverlayManagerView::Hidden() { } void QmitkOverlayManagerView::OnPropertyListChanged(int index) { if (index == -1) return; QString renderer = m_Controls.m_RendererCB->itemText(index); QmitkRenderWindow *renwin = this->GetRenderWindowPart()->GetQmitkRenderWindow(renderer); m_Renderer = renwin ? renwin->GetRenderer() : nullptr; this->OnOverlaySelectionChanged(m_Controls.m_OverlayList->currentItem(), nullptr); } void QmitkOverlayManagerView::OnAddNewProperty() { std::unique_ptr dialog( new QmitkAddNewPropertyDialog(m_SelectedOverlay, m_Renderer, m_Parent)); if (dialog->exec() == QDialog::Accepted) this->m_Model->Update(); } void QmitkOverlayManagerView::OnActivateOverlayList() { if (!m_Renderer) return; std::vector arList = mitk::AnnotationService::GetAnnotationRenderer(m_Renderer->GetName()); - // m_Controls.m_OverlayList->clear(); + m_Controls.m_OverlayList->clear(); for (auto ar : arList) { for (auto overlay : ar->GetServices()) { QListWidgetItem *item = new QListWidgetItem(); - item->setData(Qt::UserRole, QVariant::fromValue(overlay)); + item->setData(Qt::UserRole, QVariant(overlay->GetMicroserviceID().c_str())); QString text(overlay->GetName().c_str()); if (text.length() > 0) { text.append(" : "); } text.append(overlay->GetNameOfClass()); item->setText(text); m_Controls.m_OverlayList->addItem(item); } } } void QmitkOverlayManagerView::OnOverlaySelectionChanged(QListWidgetItem *current, QListWidgetItem *) { mitk::PropertyList *propertyList = m_Model->GetPropertyList(); if (propertyList != NULL) { mitk::BaseProperty *nameProperty = propertyList->GetProperty("name"); if (nameProperty != NULL) nameProperty->RemoveObserver(m_PropertyNameChangedTag); m_PropertyNameChangedTag = 0; } mitk::Overlay *overlay = nullptr; + QString oID; if (current) - overlay = reinterpret_cast(current->data(Qt::UserRole).value()); + { + oID = current->data(Qt::UserRole).toString(); + OverlayMapType::iterator it = m_OverlayMap.find(oID.toStdString()); + if (it != m_OverlayMap.end()) + overlay = it->second; + else + { + std::string ldapFilter = "(" + mitk::Overlay::US_PROPKEY_ID + "=" + oID.toStdString() + ")"; + std::vector> overlays = + us::GetModuleContext()->GetServiceReferences(ldapFilter); + if (!overlays.empty()) + { + overlay = us::GetModuleContext()->GetService(overlays.front()); + } + } + } + if (!overlay) { m_SelectedOverlay = NULL; this->SetPartName("Overlay Properties"); m_Model->SetPropertyList(NULL); m_Delegate->SetPropertyList(NULL); m_Controls.newButton->setEnabled(false); } else { m_SelectedOverlay = overlay; QString selectionClassName = m_SelectedOverlay->GetNameOfClass(); m_SelectionClassName = selectionClassName.toStdString(); mitk::PropertyList::Pointer propertyList = overlay->GetPropertyList(); m_Model->SetPropertyList(propertyList, selectionClassName); m_Delegate->SetPropertyList(propertyList); OnPropertyNameChanged(itk::ModifiedEvent()); mitk::BaseProperty *nameProperty = m_SelectedOverlay->GetProperty("name"); if (nameProperty != NULL) { itk::ReceptorMemberCommand::Pointer command = itk::ReceptorMemberCommand::New(); command->SetCallbackFunction(this, &QmitkOverlayManagerView::OnPropertyNameChanged); m_PropertyNameChangedTag = nameProperty->AddObserver(itk::ModifiedEvent(), command); } m_Controls.newButton->setEnabled(true); } if (!m_ProxyModel->filterRegExp().isEmpty()) m_Controls.m_PropertyTree->expandAll(); } void QmitkOverlayManagerView::OnDelete() { auto items = m_Controls.m_OverlayList->selectedItems(); if (items.count() < 1) return; mitk::Overlay *overlay = nullptr; QListWidgetItem *item = items[0]; if (item) overlay = reinterpret_cast(item->data(Qt::UserRole).value()); mitk::OverlayManager::GetInstance()->RemoveOverlay(overlay); } void QmitkOverlayManagerView::OnAddOverlay() { QAction *action = m_AddOverlayMenu->exec(QCursor::pos()); + mitk::Overlay::Pointer overlay; + if (action != NULL) { const QString widgetKey = action->text(); if (widgetKey == "TextOverlay2D") - OnAddTextOverlay2D(); + overlay = CreateTextOverlay2D(); else if (widgetKey == "TextOverlay3D") - OnAddTextOverlay3D(); + overlay = CreateTextOverlay3D(); else if (widgetKey == "LabelOverlay") - OnAddLabelOverlay(); + overlay = CreateLabelOverlay(); else if (widgetKey == "ColorBarOverlay") - OnAddColorBarOverlay(); + overlay = CreateColorBarOverlay(); else if (widgetKey == "ScaleLegendOverlay") - OnAddScaleLegendOverlay(); + overlay = CreateScaleLegendOverlay(); else if (widgetKey == "LogoOverlay") - OnAddLogoOverlay(); + overlay = CreateLogoOverlay(); + + mitk::BaseRenderer *renderer = + this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); + mitk::AnnotationPlacer::AddOverlay(overlay, renderer); + m_OverlayMap[overlay->GetMicroserviceID()] = overlay; } + OnActivateOverlayList(); } -void QmitkOverlayManagerView::OnAddTextOverlay2D() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateTextOverlay2D() { mitk::TextOverlay2D::Pointer to = mitk::TextOverlay2D::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } -void QmitkOverlayManagerView::OnAddTextOverlay3D() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateTextOverlay3D() { mitk::TextOverlay3D::Pointer to = mitk::TextOverlay3D::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } -void QmitkOverlayManagerView::OnAddLabelOverlay() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateLabelOverlay() { mitk::LabelOverlay3D::Pointer to = mitk::LabelOverlay3D::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } -void QmitkOverlayManagerView::OnAddColorBarOverlay() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateColorBarOverlay() { mitk::ColorBarOverlay::Pointer to = mitk::ColorBarOverlay::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } -void QmitkOverlayManagerView::OnAddScaleLegendOverlay() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateScaleLegendOverlay() { mitk::ScaleLegendOverlay::Pointer to = mitk::ScaleLegendOverlay::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } -void QmitkOverlayManagerView::OnAddLogoOverlay() +mitk::Overlay::Pointer QmitkOverlayManagerView::CreateLogoOverlay() { mitk::LogoOverlay::Pointer to = mitk::LogoOverlay::New(); - mitk::BaseRenderer *renderer = - this->GetRenderWindowPart()->GetQmitkRenderWindow(m_Controls.m_RendererCB->currentText())->GetRenderer(); - mitk::AnnotationPlacer::AddOverlay(to.GetPointer(), renderer); + return to.GetPointer(); } void QmitkOverlayManagerView::RenderWindowPartActivated(mitk::IRenderWindowPart * /*renderWindowPart*/) { if (m_Controls.m_RendererCB->count() == 0) { QHash renderWindows = this->GetRenderWindowPart()->GetQmitkRenderWindows(); Q_FOREACH (QString renderWindow, renderWindows.keys()) { m_Controls.m_RendererCB->addItem(renderWindow); } } OnActivateOverlayList(); } void QmitkOverlayManagerView::RenderWindowPartDeactivated(mitk::IRenderWindowPart *) { if (m_Controls.m_RendererCB->count() > 0) { m_Controls.m_RendererCB->clear(); } m_Controls.m_OverlayList->clear(); } diff --git a/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.h b/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.h index 606631eb5d..86fda5a808 100644 --- a/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.h +++ b/Plugins/org.mitk.gui.qt.overlaymanager/src/internal/QmitkOverlayManagerView.h @@ -1,129 +1,125 @@ /*=================================================================== 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 QmitkOverlayManagerView_h #define QmitkOverlayManagerView_h #include -#include "ctkServiceTracker.h" #include "mitkILifecycleAwarePart.h" #include "mitkOverlay.h" #include "ui_QmitkOverlayManagerViewControls.h" #include #include class QmitkPropertyItemDelegate; class QmitkPropertyItemModel; class QSortFilterProxyModel; namespace mitk { class IPropertyAliases; class IPropertyDescriptions; class IPropertyPersistence; } /** \brief QmitkOverlayManagerView allows to view all overlays added to the mitk::OverlayManager. Properties of these overlays can be modified. \sa QmitkAbstractView \ingroup ${plugin_target}_internal */ class QmitkOverlayManagerView : public QmitkAbstractView, public mitk::IRenderWindowPartListener, - public mitk::ILifecycleAwarePart, - public ctkServiceTracker + public mitk::ILifecycleAwarePart { // this is needed for all Qt objects that should have a Qt meta-object // (everything that derives from QObject and wants to have signal/slots) Q_OBJECT public: + typedef std::map OverlayMapType; static const std::string VIEW_ID; QmitkOverlayManagerView(); ~QmitkOverlayManagerView(); protected: virtual void CreateQtPartControl(QWidget *parent) override; virtual void SetFocus() override; void RenderWindowPartActivated(mitk::IRenderWindowPart *renderWindowPart) override; void RenderWindowPartDeactivated(mitk::IRenderWindowPart *) override; Ui::QmitkOverlayManagerViewControls m_Controls; void OnFocusChanged(itk::Object *, const itk::EventObject &event); private slots: void OnCurrentRowChanged(const QModelIndex ¤t, const QModelIndex &previous); void OnPropertyListChanged(int index); void OnAddNewProperty(); void OnActivateOverlayList(); void OnOverlaySelectionChanged(QListWidgetItem *current, QListWidgetItem *); void OnDelete(); void OnAddOverlay(); private: - void OnAddTextOverlay2D(); - void OnAddTextOverlay3D(); - void OnAddLabelOverlay(); - void OnAddColorBarOverlay(); - void OnAddScaleLegendOverlay(); - void OnAddLogoOverlay(); + mitk::Overlay::Pointer CreateTextOverlay2D(); + mitk::Overlay::Pointer CreateTextOverlay3D(); + mitk::Overlay::Pointer CreateLabelOverlay(); + mitk::Overlay::Pointer CreateColorBarOverlay(); + mitk::Overlay::Pointer CreateScaleLegendOverlay(); + mitk::Overlay::Pointer CreateLogoOverlay(); QString GetPropertyNameOrAlias(const QModelIndex &index); void OnPropertyNameChanged(const itk::EventObject &event); void OnSelectionChanged(berry::IWorkbenchPart::Pointer part, const QList &nodes) override; - void InitializeAddAnimationMenu(); - - void OnOverlayAdded(itk::Object * /*caller*/, const itk::EventObject &event); + void InitializeAddOverlayMenu(); /** \see berry::IPartListener::PartActivated */ virtual void Activated(); /** \see berry::IPartListener::PartDeactivated */ virtual void Deactivated(); /** \see berry::IPartListener::PartVisible */ virtual void Visible(); /** \see berry::IPartListener::PartHidden */ virtual void Hidden(); - mitk::Overlay *AddingService(const ctkServiceReference &) { OnActivateOverlayList(); } - void RemovedService(const ctkServiceReference &, mitk::Overlay *) { OnActivateOverlayList(); } QWidget *m_Parent; unsigned long m_PropertyNameChangedTag; unsigned long m_OverlayManagerObserverTag; std::string m_SelectionClassName; mitk::IPropertyAliases *m_PropertyAliases; mitk::IPropertyDescriptions *m_PropertyDescriptions; mitk::IPropertyPersistence *m_PropertyPersistence; QSortFilterProxyModel *m_ProxyModel; QmitkPropertyItemModel *m_Model; QmitkPropertyItemDelegate *m_Delegate; mitk::Overlay::Pointer m_SelectedOverlay; mitk::BaseRenderer *m_Renderer; QMenu *m_AddOverlayMenu; unsigned long m_RenderWindowFocusObserverTag; + OverlayMapType m_OverlayMap; }; #endif // QmitkOverlayManagerView_h