// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
 * @class   vtkWidgetEvent
 * @brief   define widget events
 *
 * vtkWidgetEvent defines widget events. These events are processed by
 * subclasses of vtkInteractorObserver.
 */

#ifndef vtkWidgetEvent_h
#define vtkWidgetEvent_h

#include "vtkInteractionWidgetsModule.h" // For export macro
#include "vtkObject.h"

VTK_ABI_NAMESPACE_BEGIN
// Excluded from JavaScript wrapping because compiler thinks vtkWidgetEvent is of type
// vtkWidgetEvent::WidgetEventIds
class VTKINTERACTIONWIDGETS_EXPORT VTK_WRAPEXCLUDE_JAVASCRIPT vtkWidgetEvent : public vtkObject
{
public:
  /**
   * The object factory constructor.
   */
  static vtkWidgetEvent* New();

  ///@{
  /**
   * Standard macros.
   */
  vtkTypeMacro(vtkWidgetEvent, vtkObject);
  void PrintSelf(ostream& os, vtkIndent indent) override;
  ///@}

  /**
   * All the widget events are defined here.
   */
  enum WidgetEventIds
  {
    NoEvent = 0,
    Select,
    EndSelect,
    Delete,
    Translate,
    EndTranslate,
    Scale,
    EndScale,
    Resize,
    EndResize,
    Rotate,
    EndRotate,
    Move,
    SizeHandles,
    AddPoint,
    AddFinalPoint,
    Completed,
    PickPoint,
    PickNormal,
    PickDirectionPoint,
    TimedOut,
    ModifyEvent,
    Reset,
    Up,
    Down,
    Left,
    Right,
    Select3D,
    EndSelect3D,
    Move3D,
    AddPoint3D,
    AddFinalPoint3D,
    HoverLeave
  };

  ///@{
  /**
   * Convenience methods for translating between event names and event ids.
   */
  static const char* GetStringFromEventId(unsigned long event);
  static unsigned long GetEventIdFromString(const char* event);
  ///@}

protected:
  vtkWidgetEvent() = default;
  ~vtkWidgetEvent() override = default;

private:
  vtkWidgetEvent(const vtkWidgetEvent&) = delete;
  void operator=(const vtkWidgetEvent&) = delete;
};

VTK_ABI_NAMESPACE_END
#endif
