Salome HOME
Merge branch 'rnv/23406'
[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 #if !defined WIN32 && !defined __APPLE__
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 #endif
43
44 class SVTK_SpaceMouse 
45 {
46  public:
47
48   enum MoveData { x, y, z, a, b, c };
49   enum EventType { SpaceMouseMove = 1, SpaceButtonPress, SpaceButtonRelease };
50
51   typedef struct  {
52     int type;
53     int button;
54     double data[6];
55     int period;
56   } MoveEvent;
57
58   bool isSpaceMouseOn() const { return spaceMouseOn != 0; }
59
60   SVTK_SpaceMouse();
61
62  protected:
63
64   int spaceMouseOn;
65 };
66
67 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
68
69 class SVTK_SpaceMouseX: public SVTK_SpaceMouse
70 {
71
72 public:
73   SVTK_SpaceMouseX();
74
75   // access to SpaceMouse utility class
76   static SVTK_SpaceMouseX* getInstance();
77
78 #if !defined WIN32 && !defined __APPLE__
79   int initialize     ( Display*, Window );
80   int setWindow      ( Display*, Window );
81   int translateEvent ( Display*, XEvent*, MoveEvent*, double, double );
82   int close          ( Display* );
83
84 private:
85   Atom XMotionEvent;
86   Atom XButtonPressEvent;
87   Atom XButtonReleaseEvent;
88   Atom XCommandEvent;
89   Window win;
90 #endif
91
92   static SVTK_SpaceMouseX* myInstance;
93
94 };
95
96 #else
97
98 class SVTK_SpaceMouseXCB: public SVTK_SpaceMouse
99 {
100
101 public:
102   SVTK_SpaceMouseXCB();
103
104   // access to SpaceMouse utility class
105   static SVTK_SpaceMouseXCB* getInstance();
106
107 #if !defined WIN32 && !defined __APPLE__
108   int initialize     ( xcb_connection_t*, xcb_window_t );
109   int setWindow      ( xcb_connection_t*, xcb_window_t );
110   int translateEvent ( xcb_connection_t*, xcb_client_message_event_t*, MoveEvent*, double, double );
111   int close          ( xcb_connection_t* );
112
113 private:
114   xcb_atom_t XCBMotionEvent;
115   xcb_atom_t XCBButtonPressEvent;
116   xcb_atom_t XCBButtonReleaseEvent;
117   xcb_window_t win;
118 #endif
119
120   static SVTK_SpaceMouseXCB* myInstance;
121
122 };
123
124 #endif
125 #endif