15 #include "internal/QmitkCommonActivator.h" 16 #include "internal/QmitkDataNodeItemModel.h" 33 #include <ctkServiceTracker.h> 36 #include <QItemSelectionModel> 37 #include <QApplication> 38 #include <QMessageBox> 39 #include <QScrollArea> 40 #include <QVBoxLayout> 42 class QmitkAbstractViewPrivate
48 , m_PrefServiceTracker(QmitkCommonActivator::GetContext())
49 , m_DataStorageServiceTracker(QmitkCommonActivator::GetContext())
51 , m_DataNodeItemModel(new QmitkDataNodeItemModel)
52 , m_DataNodeSelectionModel(new QItemSelectionModel(m_DataNodeItemModel))
53 , m_InDataStorageChanged(false)
55 m_PrefServiceTracker.open();
56 m_DataStorageServiceTracker.open();
59 ~QmitkAbstractViewPrivate()
61 delete m_DataNodeSelectionModel;
62 delete m_DataNodeItemModel;
64 m_PrefServiceTracker.close();
65 m_DataStorageServiceTracker.close();
76 if(!m_InDataStorageChanged)
78 m_InDataStorageChanged =
true;
80 q->DataStorageModified();
81 m_InDataStorageChanged =
false;
93 if(!m_InDataStorageChanged)
95 m_InDataStorageChanged =
true;
97 q->DataStorageModified();
98 m_InDataStorageChanged =
false;
110 if(!m_InDataStorageChanged)
112 m_InDataStorageChanged =
true;
113 q->NodeChanged(node);
114 q->DataStorageModified();
115 m_InDataStorageChanged =
false;
130 q->OnNullSelection(sourcepart);
136 q->OnSelectionChanged(sourcepart, this->DataNodeSelectionToQList(_DataNodeSelection));
146 ctkServiceTracker<berry::IPreferencesService*> m_PrefServiceTracker;
148 ctkServiceTracker<mitk::IDataStorageService*> m_DataStorageServiceTracker;
164 QmitkDataNodeItemModel* m_DataNodeItemModel;
169 QItemSelectionModel* m_DataNodeSelectionModel;
174 QScopedPointer<berry::ISelectionListener> m_BlueBerrySelectionListener;
180 bool m_InDataStorageChanged;
185 : d(new QmitkAbstractViewPrivate(this))
189 void QmitkAbstractView::CreatePartControl(QWidget* parent)
193 auto scrollArea =
new QScrollArea;
195 scrollArea->setFrameShadow(QFrame::Plain);
196 scrollArea->setFrameShape(QFrame::NoFrame);
197 scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
198 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
201 d->m_Parent =
new QWidget;
209 scrollArea->setWidgetResizable(
true);
210 scrollArea->setWidget(d->m_Parent);
213 QWidget* parentQWidget =
static_cast<QWidget*
>(parent);
214 auto parentLayout =
new QVBoxLayout(parentQWidget);
215 parentLayout->setMargin(0);
216 parentLayout->setSpacing(0);
217 parentLayout->addWidget(scrollArea);
220 parentQWidget->setLayout(parentLayout);
222 this->AfterCreateQtPartControl();
225 void QmitkAbstractView::AfterCreateQtPartControl()
227 this->SetSelectionProvider();
231 ( d.data(), &QmitkAbstractViewPrivate::NodeAddedProxy ) );
233 ( d.data(), &QmitkAbstractViewPrivate::NodeChangedProxy ) );
235 ( d.data(), &QmitkAbstractViewPrivate::NodeRemovedProxy ) );
240 prefs->OnChanged.AddListener(
242 &QmitkAbstractView::OnPreferencesChanged));
246 d.data(), &QmitkAbstractViewPrivate::BlueBerrySelectionChanged));
247 this->
GetSite()->GetWorkbenchWindow()->GetSelectionService()->AddPostSelectionListener(d->m_BlueBerrySelectionListener.data());
259 this->OnPreferencesChanged(this->
GetPreferences().Cast<berry::IBerryPreferences>().GetPointer());
267 ( d.data(), &QmitkAbstractViewPrivate::NodeAddedProxy ) );
269 ( d.data(), &QmitkAbstractViewPrivate::NodeRemovedProxy) );
271 ( d.data(), &QmitkAbstractViewPrivate::NodeChangedProxy ) );
276 prefs->OnChanged.RemoveListener(
278 &QmitkAbstractView::OnPreferencesChanged));
295 void QmitkAbstractView::SetSelectionProvider()
299 d->m_SelectionProvider->SetItemSelectionModel(GetDataNodeSelectionModel());
303 QItemSelectionModel *QmitkAbstractView::GetDataNodeSelectionModel()
const 312 void QmitkAbstractView::DataStorageModified()
329 if (renderPart ==
nullptr)
return;
333 renderingManager->RequestUpdateAll(requestType);
347 QMessageBox::critical ( parent,
"Exception caught!", str );
358 QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) );
363 QApplication::setOverrideCursor( QCursor(Qt::BusyCursor) );
378 QApplication::restoreOverrideCursor();
385 QString
id =
"/" + (
const_cast<QmitkAbstractView*
>(
this))->GetViewSite()->GetId();
394 if (dsService !=
nullptr)
406 if (dsService !=
nullptr)
418 return d->DataNodeSelectionToQList(currentSelection);
423 return this->
GetSite()->GetWorkbenchWindow()->GetSelectionService()->GetSelection();
430 return d->DataNodeSelectionToQList(currentSelection);
435 return this->
GetSite()->GetWorkbenchWindow()->GetSelectionService()->GetSelection(
"org.mitk.views.datamanager");
439 QItemSelectionModel::SelectionFlags flags)
const 442 if (datamanagerView.
IsNull())
return;
450 if (currentSelection.
IsNull())
return;
456 const QList<mitk::DataNode::Pointer>& )
466 if (currentSelection.
IsNull())
return QList<mitk::DataNode::Pointer>();
467 return QList<mitk::DataNode::Pointer>::fromStdList(currentSelection->GetSelectedDataNodes());
484 QList<mitk::DataNode::Pointer> nodes;
493 if (d->m_SelectionProvider->GetItemSelectionModel() ==
nullptr)
495 d->m_SelectionProvider->SetItemSelectionModel(d->m_DataNodeSelectionModel);
497 else if (d->m_SelectionProvider->GetItemSelectionModel() != d->m_DataNodeSelectionModel)
499 MITK_WARN <<
"A custom data node selection model has been set. Ignoring call to FireNodesSelected().";
505 d->m_DataNodeSelectionModel->clearSelection();
506 d->m_DataNodeItemModel->clear();
514 d->m_DataNodeItemModel->clear();
517 d->m_DataNodeItemModel->AddDataNode(node);
519 d->m_DataNodeSelectionModel->select(QItemSelection(d->m_DataNodeItemModel->index(0,0), d->m_DataNodeItemModel->index(nodes.size()-1, 0)),
520 QItemSelectionModel::ClearAndSelect);
A BlueBerry selection provider for mitk::DataNode selections.
virtual void RemovePostSelectionListener(ISelectionListener *listener)=0
virtual void RequestUpdate(mitk::RenderingManager::RequestType requestType=mitk::RenderingManager::REQUEST_UPDATE_ALL)=0
void FireNodeSelected(mitk::DataNode::Pointer node)
mitk::IDataStorageReference::Pointer GetDataStorageReference() const
virtual mitk::IRenderingManager * GetRenderingManager() const =0
SmartPointer< Other > Cast() const
void RequestRenderWindowUpdate(mitk::RenderingManager::RequestType requestType=mitk::RenderingManager::REQUEST_UPDATE_ALL)
virtual IDataStorageReference::Pointer GetDataStorage() const =0
mitk::IRenderWindowPart * GetRenderWindowPart(mitk::WorkbenchUtil::IRenderWindowPartStrategies strategies=mitk::WorkbenchUtil::NONE) const
Interface for a MITK Workbench Part providing a render window.
static IRenderWindowPart * GetRenderWindowPart(berry::IWorkbenchPage::Pointer page, IRenderWindowPartStrategies strategies)
Returns the currently active mitk::IRenderWindowPart.
void RestoreOverrideCursor()
virtual SmartPointer< IPreferences > GetSystemPreferences()=0
bool IsCurrentSelectionValid() const
QList< mitk::DataNode::Pointer > GetDataManagerSelection() const
void UnRegister(bool del=true) const
virtual void FireNodesSelected(const QList< mitk::DataNode::Pointer > &nodes)
~QmitkAbstractView() override
berry::SmartPointer< Self > Pointer
virtual void CreateQtPartControl(QWidget *parent)=0
void SynchronizeDataManagerSelection() const
void HandleException(std::exception &e, QWidget *parent=nullptr, bool showDialog=true) const
A convenient base class for MITK related BlueBerry Views.
mitk::DataStorage::Pointer GetDataStorage() const
QList< mitk::DataNode::Pointer > GetCurrentSelection() const
berry::SmartPointer< Self > Pointer
void SetDataManagerSelection(const berry::ISelection::ConstPointer &selection, QItemSelectionModel::SelectionFlags flags=QItemSelectionModel::ClearAndSelect) const
An interface for accessing a mitk::RenderingManager instance.
bool IsDataManagerSelectionValid() const
berry::IPreferences::Pointer GetPreferences() const
Class for nodes of the DataTree.
IWorkbenchPartSite::Pointer GetSite() const override
ObjectType * GetPointer() const