forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkButtonWidget.h
134 lines (116 loc) · 4.17 KB
/
vtkButtonWidget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*=========================================================================
Program: Visualization Toolkit
Module: vtkButtonWidget.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 vtkButtonWidget
* @brief activate an n-state button
*
* The vtkButtonWidget is used to interface with an n-state button. That is
* each selection moves to the next button state (e.g., moves from "on" to
* "off"). The widget uses modulo list traversal to transition through one or
* more states. (A single state is simply a "selection" event; traversal
* through the list can be in the forward or backward direction.)
*
* Depending on the nature of the representation the appearance of the button
* can change dramatically, the specifics of appearance changes are a
* function of the associated vtkButtonRepresentation (or subclass).
*
* @par Event Bindings:
* By default, the widget responds to the following VTK events (i.e., it
* watches the vtkRenderWindowInteractor for these events):
* <pre>
* LeftButtonPressEvent - select button
* LeftButtonReleaseEvent - end the button selection process
* </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 vtkButtonWidget's widget events:
* <pre>
* vtkWidgetEvent::Select -- some part of the widget has been selected
* vtkWidgetEvent::EndSelect -- the selection process has completed
* </pre>
*
* @par Event Bindings:
* In turn, when these widget events are processed, the vtkButtonWidget
* invokes the following VTK events on itself (which observers can listen for):
* <pre>
* vtkCommand::StateChangedEvent (on vtkWidgetEvent::EndSelect)
* </pre>
*
*/
#ifndef vtkButtonWidget_h
#define vtkButtonWidget_h
#include "vtkAbstractWidget.h"
#include "vtkInteractionWidgetsModule.h" // For export macro
class vtkButtonRepresentation;
class VTKINTERACTIONWIDGETS_EXPORT vtkButtonWidget : public vtkAbstractWidget
{
public:
/**
* Instantiate the class.
*/
static vtkButtonWidget* New();
///@{
/**
* Standard macros.
*/
vtkTypeMacro(vtkButtonWidget, vtkAbstractWidget);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@}
/**
* Specify an instance of vtkWidgetRepresentation used to represent this
* widget in the scene. Note that the representation is a subclass of vtkProp
* so it can be added to the renderer independent of the widget.
*/
void SetRepresentation(vtkButtonRepresentation* r)
{
this->Superclass::SetWidgetRepresentation(reinterpret_cast<vtkWidgetRepresentation*>(r));
}
/**
* Return the representation as a vtkButtonRepresentation.
*/
vtkButtonRepresentation* GetSliderRepresentation()
{
return reinterpret_cast<vtkButtonRepresentation*>(this->WidgetRep);
}
/**
* Create the default widget representation if one is not set.
*/
void CreateDefaultRepresentation() override;
/**
* The method for activating and deactivating this widget. This method
* must be overridden because it is a composite widget and does more than
* its superclasses' vtkAbstractWidget::SetEnabled() method. The
* method finds and sets the active viewport on the internal balloon
* representation.
*/
void SetEnabled(int) override;
protected:
vtkButtonWidget();
~vtkButtonWidget() override = default;
// These are the events that are handled
static void SelectAction(vtkAbstractWidget*);
static void MoveAction(vtkAbstractWidget*);
static void EndSelectAction(vtkAbstractWidget*);
// Manage the state of the widget
int WidgetState;
enum _WidgetState
{
Start = 0,
Hovering,
Selecting
};
private:
vtkButtonWidget(const vtkButtonWidget&) = delete;
void operator=(const vtkButtonWidget&) = delete;
};
#endif