/*========================================================================= * * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ #ifndef itkTreeChangeEvent_h #define itkTreeChangeEvent_h #include "itkMacro.h" #include "itkEventObject.h" #include "itkTreeIteratorBase.h" namespace itk { /** \class TreeChangeEvent * \brief Checks if the position of a node in the tree has been changed. * * \ingroup ITKDeprecated */ template class ITK_TEMPLATE_EXPORT TreeChangeEvent : public ModifiedEvent { public: /** Typedefs */ using Self = TreeChangeEvent; using Superclass = ModifiedEvent; Self & operator=(const Self &) = delete; /** Constructor */ TreeChangeEvent() : m_ChangePosition(nullptr) {} /** Copy constructor */ TreeChangeEvent(const TreeIteratorBase & position) { m_ChangePosition = &position; } /** Destructor */ ~TreeChangeEvent() override = default; /** Get the event name */ const char * GetEventName() const override { return "TreeChangeEvent"; } /** Check the event */ bool CheckEvent(const itk::EventObject * e) const override { return (dynamic_cast(e) != nullptr); } /** Make the event object */ itk::EventObject * MakeObject() const override { return new Self(*m_ChangePosition); } /** Get the change position */ const TreeIteratorBase & GetChangePosition() const { return *m_ChangePosition; } // cppcheck-suppress uninitVar TreeChangeEvent(const Self & s) : itk::ModifiedEvent(s) {} protected: const TreeIteratorBase * m_ChangePosition{}; }; /** \class TreeNodeChangeEvent * \brief Signals that a node has been set to another value. The position of the * changed node is provided. * \ingroup ITKDeprecated */ template class ITK_TEMPLATE_EXPORT TreeNodeChangeEvent : public TreeChangeEvent { public: using Self = TreeNodeChangeEvent; using Superclass = TreeChangeEvent; TreeNodeChangeEvent() = default; TreeNodeChangeEvent(const TreeIteratorBase & position) : TreeChangeEvent(position) {} const char * GetEventName() const override { return "TreeNodeChangeEvent"; } bool CheckEvent(const itk::EventObject * e) const override { auto eSelf = dynamic_cast(e); return eSelf != nullptr; } itk::EventObject * MakeObject() const override { return new Self(*this->m_ChangePosition); } TreeNodeChangeEvent(const Self & s) : TreeChangeEvent(s) {} void operator=(const Self &) = delete; }; /** \class TreeAddEvent * \brief Checks if a node has been added to the tree. * \ingroup ITKDeprecated */ template class ITK_TEMPLATE_EXPORT TreeAddEvent : public TreeChangeEvent { public: /** Typedefs */ using Self = TreeAddEvent; using Superclass = TreeChangeEvent; /** Constructor */ TreeAddEvent() = default; /** Copy constructor */ TreeAddEvent(const TreeIteratorBase & position) : TreeChangeEvent(position) {} /** Get the name of the event */ const char * GetEventName() const override { return "TreeAddEvent"; } /** Check event function */ bool CheckEvent(const itk::EventObject * e) const override { return (dynamic_cast(e) != nullptr); } /** Make the event object */ itk::EventObject * MakeObject() const override { return new Self(*this->m_ChangePosition); } TreeAddEvent(const Self & s) : TreeChangeEvent(s) {} void operator=(const Self &) = delete; }; /** \class TreeRemoveEvent * \brief Checks if a node has been removed from the tree. * \ingroup ITKDeprecated */ template class ITK_TEMPLATE_EXPORT TreeRemoveEvent : public TreeChangeEvent { public: /** Typedefs */ using Self = TreeRemoveEvent; using Superclass = TreeChangeEvent; /** Constructor */ TreeRemoveEvent() = default; /** Copy constructor */ TreeRemoveEvent(const TreeIteratorBase & position) : TreeChangeEvent(position) {} /** Get the event name */ const char * GetEventName() const override { return "TreeRemoveEvent"; } /** Check the event */ bool CheckEvent(const itk::EventObject * e) const override { return (dynamic_cast(e) != nullptr); } /** Make the event object */ itk::EventObject * MakeObject() const override { return new Self(*this->m_ChangePosition); } TreeRemoveEvent(const Self & s) : TreeChangeEvent(s) {} void operator=(const Self &) = delete; }; /** \class TreePruneEvent * \brief Signals that a node and all its children will shortly be * removed. The position of the top-level removed node is provided. * \ingroup ITKDeprecated */ template class ITK_TEMPLATE_EXPORT TreePruneEvent : public TreeRemoveEvent { public: using Self = TreePruneEvent; using Superclass = TreeRemoveEvent; TreePruneEvent() = default; TreePruneEvent(const TreeIteratorBase & position) : TreeRemoveEvent(position) {} const char * GetEventName() const override { return "TreePruneEvent"; } bool CheckEvent(const itk::EventObject * e) const override { return (dynamic_cast(e) != nullptr); } itk::EventObject * MakeObject() const override { return new Self(*this->m_ChangePosition); } TreePruneEvent(const Self & s) : TreeRemoveEvent(s) {} void operator=(const Self &) = delete; }; } // namespace itk #endif