25 m_RenderWindowLayerController = std::make_unique<mitk::RenderWindowLayerController>();
59 bool hasIndex = this->hasIndex(row, column, parent);
62 return this->createIndex(row, column);
80 return static_cast<int>(m_LayerStack.size());
100 auto baseRenderer = m_BaseRenderer.
Lock();
102 if (!index.isValid() ||
this != index.model())
107 if (index.row() < 0 || index.row() >=
static_cast<int>(m_LayerStack.size()))
112 mitk::RenderWindowLayerUtilities::LayerStack::const_iterator layerStackIt = m_LayerStack.begin();
113 std::advance(layerStackIt, index.row());
116 if (Qt::CheckStateRole == role)
118 bool visibility =
false;
126 return Qt::Unchecked;
129 else if (Qt::DisplayRole == role)
131 return QVariant(QString::fromStdString(dataNode->GetName()));
133 else if (Qt::ToolTipRole == role)
135 return QVariant(
"Name of the data node.");
137 else if (Qt::DecorationRole == role)
140 return nodeDescriptor->
GetIcon(dataNode);
146 return QVariant::fromValue<mitk::DataNode*>(dataNode);
163 auto baseRenderer = m_BaseRenderer.
Lock();
165 if (!index.isValid() ||
this != index.model())
170 if (index.row() < 0 || index.row() >=
static_cast<int>(m_LayerStack.size()))
175 mitk::RenderWindowLayerUtilities::LayerStack::const_iterator layerStackIt = m_LayerStack.begin();
176 std::advance(layerStackIt, index.row());
178 if (Qt::CheckStateRole == role)
180 Qt::CheckState newCheckState =
static_cast<Qt::CheckState
>(value.toInt());
181 bool isVisible = newCheckState;
184 emit dataChanged(index, index);
193 if (
this != index.model())
195 return Qt::NoItemFlags;
198 if (!index.isValid())
200 return Qt::ItemIsDropEnabled;
203 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
208 return Qt::CopyAction | Qt::MoveAction;
213 return Qt::CopyAction | Qt::MoveAction;
218 QStringList types = QAbstractItemModel::mimeTypes();
225 QMimeData*
mimeData =
new QMimeData();
226 QByteArray encodedData;
228 QDataStream stream(&encodedData, QIODevice::WriteOnly);
230 for (
const auto&
index : indexes)
235 stream << reinterpret_cast<quintptr>(dataNode);
250 auto baseRenderer = m_BaseRenderer.
Lock();
252 if (action == Qt::IgnoreAction)
267 if (parent.isValid())
271 if (
nullptr != dataNode)
277 for (
const auto& dataNode : dataNodeList)
279 m_RenderWindowLayerController->MoveNodeToPosition(dataNode, layer, baseRenderer);
291 m_RenderWindowLayerController->SetControlledRenderer(controlledRenderer);
296 mitk::DataStorage::SetOfObjects::ConstPointer allDataNodes = dataStorage->GetAll();
297 for (mitk::DataStorage::SetOfObjects::ConstIterator it = allDataNodes->Begin(); it != allDataNodes->End(); ++it)
300 if (dataNode.IsNull())
312 if (m_BaseRenderer == baseRenderer)
317 m_BaseRenderer = baseRenderer;
331 return m_BaseRenderer.
Lock().GetPointer();
336 m_RenderWindowLayerController->InsertLayerNode(dataNode);
339 void QmitkRenderWindowDataStorageListModel::UpdateModelData()
346 auto baseRenderer = m_BaseRenderer.
Lock();
QModelIndex parent(const QModelIndex &child) const override
void NodeChanged(const mitk::DataNode *node) override
See 'QmitkAbstractDataStorageModel'.
itk::SmartPointer< T > Lock() const
Decorator class for mitk::DataNode.
void SetVisibility(bool visible, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="visible")
Convenience method for setting visibility properties (instances of BoolProperty)
void AddDataNodeToAllRenderer(mitk::DataNode *dataNode)
Use the RenderWindowLayerController to insert the given data node into all controlled render windows...
Organizes the rendering process.
static QList< mitk::DataNode * > ToDataNodePtrList(const QByteArray &ba)
static const QString DataNodePtrs
void NodeRemoved(const mitk::DataNode *node) override
See 'QmitkAbstractDataStorageModel'.
bool GetIntProperty(const char *propertyKey, int &intValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for int properties (instances of IntProperty)
Qt::ItemFlags flags(const QModelIndex &index) const override
mitk::BaseRenderer * GetCurrentRenderer() const
std::vector< BaseRenderer * > RendererVector
itk::SmartPointer< Self > Pointer
QmitkNodeDescriptor * GetDescriptor(const mitk::DataNode *node) const
QmitkRenderWindowDataStorageListModel(QObject *parent=nullptr)
void SetControlledRenderer(mitk::RenderWindowLayerUtilities::RendererVector controlledRenderer)
Qt::DropActions supportedDropActions() const override
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
static RenderingManager * GetInstance()
bool IsExpired() const noexcept
bool GetVisibility(bool &visible, const mitk::BaseRenderer *renderer, const char *propertyKey="visible") const
Convenience access method for visibility properties (instances of BoolProperty with property-key "vis...
Qt::DropActions supportedDragActions() const override
MITKRENDERWINDOWMANAGER_EXPORT LayerStack GetLayerStack(const DataStorage *dataStorage, const BaseRenderer *renderer, bool withBaseNode)
Return the stack of layers of the given renderer as std::map<int, DataNode::Pointer>, which guarantees ordering of the layers. Stacked layers are only included if they have their "fixedLayer" property set to true and their "layer" property set.
void DataStorageChanged() override
See 'QmitkAbstractDataStorageModel'.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
void RequestUpdate(vtkRenderWindow *renderWindow)
QStringList mimeTypes() const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void NodePredicateChanged() override
See 'QmitkAbstractDataStorageModel'.
QMimeData * mimeData(const QModelIndexList &indexes) const override
void NodeAdded(const mitk::DataNode *node) override
See 'QmitkAbstractDataStorageModel'.
void SetCurrentRenderer(mitk::BaseRenderer *baseRenderer)
virtual QIcon GetIcon(const mitk::DataNode *node) const
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
static QmitkNodeDescriptorManager * GetInstance()
Class for nodes of the DataTree.
QVariant data(const QModelIndex &index, int role) const override
mitk::WeakPointer< mitk::DataStorage > m_DataStorage