Program Listing for File vtkMRMLLayerDMObjectEventObserver.h
↰ Return to documentation for file (MRML/vtkMRMLLayerDMObjectEventObserver.h)
#pragma once
// LayerDM includes
#include "vtkSlicerLayerDMModuleMRMLExport.h"
// VTK includes
#include <vtkCommand.h>
#include <vtkObject.h>
#include <vtkSmartPointer.h>
#include <vtkWeakPointer.h>
// STL includes
#include <functional>
#include <map>
#include <set>
#include <variant>
#include <vector>
class vtkCallbackCommand;
class VTK_SLICER_LAYERDM_MODULE_MRML_EXPORT vtkMRMLLayerDMObjectEventObserver : public vtkObject
{
public:
struct UpdateGuard;
static vtkMRMLLayerDMObjectEventObserver* New();
vtkTypeMacro(vtkMRMLLayerDMObjectEventObserver, vtkObject);
bool UpdateObserver(vtkObject* prevObj, vtkObject* obj, unsigned long event = vtkCommand::ModifiedEvent);
bool UpdateObserver(vtkObject* prevObj, vtkObject* obj, const std::vector<unsigned long>& events);
void RemoveObserver(vtkObject* obj);
void SetUpdateCallback(const std::function<void(vtkObject* node)>& callback);
void SetUpdateCallback(const std::function<void(vtkObject* node, unsigned long eventId)>& callback);
void SetUpdateCallback(const std::function<void(vtkObject* node, unsigned long eventId, void* callData)>& callback);
bool SetBlocked(bool isBlocked);
struct UpdateGuard
{
UpdateGuard(vtkMRMLLayerDMObjectEventObserver* obs);
~UpdateGuard();
private:
vtkMRMLLayerDMObjectEventObserver* m_obs;
bool m_wasBlocked{};
};
protected:
vtkMRMLLayerDMObjectEventObserver();
~vtkMRMLLayerDMObjectEventObserver() override;
private:
void AddObserver(vtkObject* obj, unsigned long event);
vtkSmartPointer<vtkCallbackCommand> m_updateCommand{};
std::map<vtkWeakPointer<vtkObject>, std::set<unsigned long>> m_obsMap{};
std::variant<std::function<void(vtkObject* node)>,
std::function<void(vtkObject* node, unsigned long eventId)>,
std::function<void(vtkObject* node, unsigned long eventId, void* callData)>>
m_callback;
bool m_isBlocked;
};