]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/BaseInteractorStyle.cxx
Widget integration (step 5/6): generic widget controller finished and tested on linux...
[cpPlugins.git] / lib / cpExtensions / Visualization / BaseInteractorStyle.cxx
1 #include <cpExtensions/Visualization/BaseInteractorStyle.h>
2
3 #include <vtkCallbackCommand.h>
4
5 // -------------------------------------------------------------------------
6 const long cpExtensions::Visualization::BaseInteractorStyle::MouseButtonEvent::
7 MAX_DOUBLE_CLICK = 200; // ms
8
9 // -------------------------------------------------------------------------
10 cpExtensions::Visualization::BaseInteractorStyle::
11 Self* cpExtensions::Visualization::BaseInteractorStyle::
12 New( )
13 {
14   return( new Self );
15 }
16
17 // -------------------------------------------------------------------------
18 void cpExtensions::Visualization::BaseInteractorStyle::
19 DelegateTDxEvent( unsigned long event, void* calldata )
20 {
21   // TODO
22   std::cerr << "No TDx support at this time!" << std::endl;
23   std::exit( 1 );
24 }
25
26 // -------------------------------------------------------------------------
27 cpExtensions::Visualization::BaseInteractorStyle::
28 BaseInteractorStyle( )
29   : Superclass( )
30 {
31   this->LeftButtonEvent.Reset( );
32   this->MiddleButtonEvent.Reset( );
33   this->RightButtonEvent.Reset( );
34   this->ActiveButton = Self::ButtonID_None;
35
36   this->EventCallbackCommand->SetCallback( Self::_ProcessEvents );
37 }
38
39 // -------------------------------------------------------------------------
40 cpExtensions::Visualization::BaseInteractorStyle::
41 ~BaseInteractorStyle( )
42 {
43 }
44
45 // -------------------------------------------------------------------------
46 void cpExtensions::Visualization::BaseInteractorStyle::
47 _ProcessEvents(
48   vtkObject* object,
49   unsigned long event,
50   void* clientdata,
51   void* calldata
52   )
53 {
54   // Get active style and interactor
55   Self* s = reinterpret_cast< Self* >( clientdata );
56   if( s == NULL )
57     return;
58
59   // Process events
60   switch( event )
61   {
62   case vtkCommand::MouseMoveEvent:
63   {
64     s->OnMouseMove( );
65   }
66   break;
67   case vtkCommand::LeftButtonPressEvent:
68   {
69     unsigned char nc = s->LeftButtonEvent.Clicks( );
70     if( nc == 2 )
71       s->OnLeftDoubleClick( );
72     else if( nc == 1 )
73       s->OnLeftClick( );
74     s->ActiveButton = Self::ButtonID_Left;
75   }
76   break;
77   case vtkCommand::LeftButtonReleaseEvent:
78   {
79     s->LeftButtonEvent.Release( );
80     s->ActiveButton = Self::ButtonID_None;
81   }
82   break;
83   case vtkCommand::MiddleButtonPressEvent:
84   {
85     unsigned char nc = s->MiddleButtonEvent.Clicks( );
86     if( nc == 2 )
87       s->OnMiddleDoubleClick( );
88     else if( nc == 1 )
89       s->OnMiddleClick( );
90     s->ActiveButton = Self::ButtonID_Middle;
91   }
92   break;
93   case vtkCommand::MiddleButtonReleaseEvent:
94   {
95     s->MiddleButtonEvent.Release( );
96     s->ActiveButton = Self::ButtonID_None;
97   }
98   break;
99   case vtkCommand::RightButtonPressEvent:
100   {
101     unsigned char nc = s->RightButtonEvent.Clicks( );
102     if( nc == 2 )
103       s->OnRightDoubleClick( );
104     else if( nc == 1 )
105       s->OnRightClick( );
106     s->ActiveButton = Self::ButtonID_Right;
107   }
108   break;
109   case vtkCommand::RightButtonReleaseEvent:
110   {
111     s->RightButtonEvent.Release( );
112     s->ActiveButton = Self::ButtonID_None;
113   }
114   break;
115   case vtkCommand::MouseWheelForwardEvent:
116   {
117     s->OnMouseWheelForward( );
118   }
119   break;
120   case vtkCommand::MouseWheelBackwardEvent:
121   {
122     s->OnMouseWheelBackward( );
123   }
124   break;
125   case vtkCommand::KeyPressEvent:
126   {
127     s->OnKeyDown( );
128     s->OnKeyPress( );
129   }
130   break;
131   case vtkCommand::KeyReleaseEvent:
132   {
133     s->OnKeyUp( );
134     s->OnKeyRelease( );
135   }
136   break;
137   case vtkCommand::CharEvent:
138   {
139     s->OnChar( );
140   }
141   break;
142   case vtkCommand::ExposeEvent:
143   {
144     s->OnExpose( );
145   }
146   break;
147   case vtkCommand::ConfigureEvent:
148   {
149     s->OnConfigure( );
150   }
151   break;
152   case vtkCommand::EnterEvent:
153   {
154     s->OnEnter( );
155   }
156   break;
157   case vtkCommand::LeaveEvent:
158   {
159     s->OnLeave( );
160   }
161   break;
162   case vtkCommand::TimerEvent:
163   {
164     // Do nothing
165   }
166   break;
167   case vtkCommand::DeleteEvent:
168   {
169     s->SetInteractor( 0 );
170   }
171   break;
172   case vtkCommand::TDxMotionEvent:
173   case vtkCommand::TDxButtonPressEvent:
174   case vtkCommand::TDxButtonReleaseEvent:
175   {
176     s->DelegateTDxEvent( event, calldata );
177   }
178   break;
179   default:
180     break;
181   } // hctiws
182 }
183
184 // eof - $RCSfile$