Salome HOME
Merge branch 'V7_dev'
[modules/gui.git] / src / SVTK / SVTK_SpaceMouse.h
1 // Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  SALOME VTKViewer : build VTK viewer into Salome desktop
24 //  File   : SVTK_SpaceMouse.h
25 //  Author : Alexander SLADKOV
26
27 #ifndef SVTK_SpaceMouse_h
28 #define SVTK_SpaceMouse_h
29
30 #include <QtGlobal>
31
32 #ifndef WIN32
33 extern "C"
34 {
35 #include <X11/X.h>
36 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
37 #include <X11/Xlib.h>
38 #else
39 #include <xcb/xcb.h>
40 #endif
41 }
42
43 #endif
44
45 class SVTK_SpaceMouse 
46 {
47  public:
48
49   enum MoveData { x, y, z, a, b, c };
50   enum EventType { SpaceMouseMove = 1, SpaceButtonPress, SpaceButtonRelease };
51
52   typedef struct  {
53     int type;
54     int button;
55     double data[6];
56     int period;
57   } MoveEvent;
58
59   bool isSpaceMouseOn() const { return spaceMouseOn != 0; }
60
61   SVTK_SpaceMouse();
62
63  protected:
64
65   int spaceMouseOn;
66 };
67
68 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
69
70 class SVTK_SpaceMouseX: public SVTK_SpaceMouse
71 {
72
73 public:
74   SVTK_SpaceMouseX();
75
76   // access to SpaceMouse utility class
77   static SVTK_SpaceMouseX* getInstance();
78
79 #ifndef WIN32
80   int initialize     ( Display*, Window );
81   int setWindow      ( Display*, Window );
82   int translateEvent ( Display*, XEvent*, MoveEvent*, double, double );
83   int close          ( Display* );
84
85 private:
86   Atom XMotionEvent;
87   Atom XButtonPressEvent;
88   Atom XButtonReleaseEvent;
89   Atom XCommandEvent;
90   Window win;
91 #endif
92
93   static SVTK_SpaceMouseX* myInstance;
94
95 };
96 #else
97 class SVTK_SpaceMouseXCB: public SVTK_SpaceMouse
98 {
99
100 public:
101   SVTK_SpaceMouseXCB();
102
103   // access to SpaceMouse utility class
104   static SVTK_SpaceMouseXCB* getInstance();
105
106 #ifndef WIN32
107   int initialize     ( xcb_connection_t*, xcb_window_t );
108   int setWindow      ( xcb_connection_t*, xcb_window_t );
109   int translateEvent ( xcb_connection_t*, xcb_client_message_event_t*, MoveEvent*, double, double );
110   int close          ( xcb_connection_t* );
111
112 private:
113   xcb_atom_t XCBMotionEvent;
114   xcb_atom_t XCBButtonPressEvent;
115   xcb_atom_t XCBButtonReleaseEvent;
116   xcb_window_t win;
117 #endif
118
119   static SVTK_SpaceMouseXCB* myInstance;
120
121 };
122 #endif
123 #endif