You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
5.0 KiB
C
155 lines
5.0 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkHoverWidget.h
|
||
|
|
||
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
All rights reserved.
|
||
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
||
|
=========================================================================*/
|
||
|
/**
|
||
|
* @class vtkHoverWidget
|
||
|
* @brief invoke a vtkTimerEvent when hovering
|
||
|
*
|
||
|
* The vtkHoverWidget is used to invoke an event when hovering in a render window.
|
||
|
* Hovering occurs when mouse motion (in the render window) does not occur
|
||
|
* for a specified amount of time (i.e., TimerDuration). This class can be used
|
||
|
* as is (by observing TimerEvents) or for class derivation for those classes
|
||
|
* wishing to do more with the hover event.
|
||
|
*
|
||
|
* To use this widget, specify an instance of vtkHoverWidget and specify the
|
||
|
* time (in milliseconds) defining the hover period. Unlike most widgets,
|
||
|
* this widget does not require a representation (although subclasses like
|
||
|
* vtkBalloonWidget do require a representation).
|
||
|
*
|
||
|
* @par Event Bindings:
|
||
|
* By default, the widget observes the following VTK events (i.e., it
|
||
|
* watches the vtkRenderWindowInteractor for these events):
|
||
|
* <pre>
|
||
|
* MouseMoveEvent - manages a timer used to determine whether the mouse
|
||
|
* is hovering.
|
||
|
* TimerEvent - when the time between events (e.g., mouse move), then a
|
||
|
* timer event is invoked.
|
||
|
* KeyPressEvent - when the "Enter" key is pressed after the balloon appears,
|
||
|
* a callback is activated (e.g., WidgetActivateEvent).
|
||
|
* </pre>
|
||
|
*
|
||
|
* @par Event Bindings:
|
||
|
* Note that the event bindings described above can be changed using this
|
||
|
* class's vtkWidgetEventTranslator. This class translates VTK events
|
||
|
* into the vtkHoverWidget's widget events:
|
||
|
* <pre>
|
||
|
* vtkWidgetEvent::Move -- start (or reset) the timer
|
||
|
* vtkWidgetEvent::TimedOut -- when enough time is elapsed between defined
|
||
|
* VTK events the hover event is invoked.
|
||
|
* vtkWidgetEvent::SelectAction -- activate any callbacks associated
|
||
|
* with the balloon.
|
||
|
* </pre>
|
||
|
*
|
||
|
* @par Event Bindings:
|
||
|
* This widget invokes the following VTK events on itself when the widget
|
||
|
* determines that it is hovering. Note that observers of this widget can
|
||
|
* listen for these events and take appropriate action.
|
||
|
* <pre>
|
||
|
* vtkCommand::TimerEvent (when hovering is determined to occur)
|
||
|
* vtkCommand::EndInteractionEvent (after a hover has occurred and the
|
||
|
* mouse begins moving again).
|
||
|
* vtkCommand::WidgetActivateEvent (when the balloon is selected with a
|
||
|
* keypress).
|
||
|
* </pre>
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkAbstractWidget
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkHoverWidget_h
|
||
|
#define vtkHoverWidget_h
|
||
|
|
||
|
#include "vtkAbstractWidget.h"
|
||
|
#include "vtkInteractionWidgetsModule.h" // For export macro
|
||
|
|
||
|
class VTKINTERACTIONWIDGETS_EXPORT vtkHoverWidget : public vtkAbstractWidget
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
* Instantiate this class.
|
||
|
*/
|
||
|
static vtkHoverWidget* New();
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Standard methods for a VTK class.
|
||
|
*/
|
||
|
vtkTypeMacro(vtkHoverWidget, vtkAbstractWidget);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the hovering interval (in milliseconds). If after moving the
|
||
|
* mouse the pointer stays over a vtkProp for this duration, then a
|
||
|
* vtkTimerEvent::TimerEvent is invoked.
|
||
|
*/
|
||
|
vtkSetClampMacro(TimerDuration, int, 1, 100000);
|
||
|
vtkGetMacro(TimerDuration, int);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* The method for activating and deactivating this widget. This method
|
||
|
* must be overridden because it performs special timer-related operations.
|
||
|
*/
|
||
|
void SetEnabled(int) override;
|
||
|
|
||
|
/**
|
||
|
* A default representation, of which there is none, is created. Note
|
||
|
* that the superclasses vtkAbstractWidget::GetRepresentation()
|
||
|
* method returns nullptr.
|
||
|
*/
|
||
|
void CreateDefaultRepresentation() override { this->WidgetRep = nullptr; }
|
||
|
|
||
|
protected:
|
||
|
vtkHoverWidget();
|
||
|
~vtkHoverWidget() override;
|
||
|
|
||
|
// The state of the widget
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
Start = 0,
|
||
|
Timing,
|
||
|
TimedOut
|
||
|
};
|
||
|
|
||
|
int WidgetState;
|
||
|
|
||
|
// Callback interface to execute events
|
||
|
static void MoveAction(vtkAbstractWidget*);
|
||
|
static void HoverAction(vtkAbstractWidget*);
|
||
|
static void SelectAction(vtkAbstractWidget*);
|
||
|
|
||
|
// Subclasses of this class invoke these methods. If a non-zero
|
||
|
// value is returned, a subclass is handling the event.
|
||
|
virtual int SubclassHoverAction() { return 0; }
|
||
|
virtual int SubclassEndHoverAction() { return 0; }
|
||
|
virtual int SubclassSelectAction() { return 0; }
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Helper methods for creating and destroying timers.
|
||
|
*/
|
||
|
int TimerId;
|
||
|
int TimerDuration;
|
||
|
//@}
|
||
|
|
||
|
private:
|
||
|
vtkHoverWidget(const vtkHoverWidget&) = delete;
|
||
|
void operator=(const vtkHoverWidget&) = delete;
|
||
|
};
|
||
|
|
||
|
#endif
|