.. _program_listing_file_MRML_vtkMRMLLayerDMNodeReferenceObserver.h: Program Listing for File vtkMRMLLayerDMNodeReferenceObserver.h ============================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``MRML/vtkMRMLLayerDMNodeReferenceObserver.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once // LayerDM includes #include "vtkSlicerLayerDMModuleMRMLExport.h" // VTK includes #include #include #include // STL includes #include #include #include class vtkMRMLNode; class vtkMRMLLayerDMObjectEventObserver; class vtkMRMLScene; class VTK_SLICER_LAYERDM_MODULE_MRML_EXPORT vtkMRMLLayerDMNodeReferenceObserver : public vtkObject { public: using RefT = std::tuple, std::string>; enum Event { ReferenceAddedEvent = 0, ReferenceRemovedEvent }; static vtkMRMLLayerDMNodeReferenceObserver* New(); std::set GetNodeToReferences(vtkMRMLNode* node) const; std::set GetNodeFromReferences(vtkMRMLNode* node) const; int GetReferenceToSize() const; int GetReferenceFromSize() const; int GetNumberOfNodes() const; using CallBackT = std::function; void SetReferenceModifiedCallBack(const CallBackT& modifiedCallback); void SetScene(vtkMRMLScene* scene); protected: vtkMRMLLayerDMNodeReferenceObserver(); ~vtkMRMLLayerDMNodeReferenceObserver() override = default; private: vtkMRMLLayerDMNodeReferenceObserver(const vtkMRMLLayerDMNodeReferenceObserver&); void operator=(const vtkMRMLLayerDMNodeReferenceObserver&); void UpdateFromScene(); void OnNodeRemoved(vtkMRMLNode* node); void OnNodeAdded(vtkMRMLNode* node); void OnReferenceAdded(vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role); void OnReferenceRemoved(vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role); void RemoveOutdatedReferences(vtkMRMLNode* fromNode); void OnReferenceModified(vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role); static std::set GetNodeReferencesFromScene(vtkMRMLNode* node); void TriggerReferenceAdded(vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role) const; void TriggerReferenceRemoved(vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role) const; static void TriggerCallback(const CallBackT& callback, vtkMRMLNode* fromNode, vtkMRMLNode* toNode, const std::string& role, int eventType); vtkWeakPointer m_scene{}; vtkSmartPointer m_obs{}; std::map, std::set> m_refTo{}; std::map, std::set> m_refFrom{}; std::set> m_nodes{}; CallBackT m_onRefModified{}; };