merge from trunk up to rev [10858]
[blender.git] / intern / ghost / intern / GHOST_NDOFManager.cpp
1
2 // Insert Blender compatible license here :-)
3
4 // note: an implementation is currently only provided for Windows, but designed to be easy to move to Linux, etc.
5
6 /**
7
8     To use this implemenation, you must specify the #define WITH_SPACEBALL for the ghost library.
9     Only this cpp file is affected by the macro, the header file and everything else are independent
10     of the spaceball libraries.
11
12     The 3dXWare SDK is available from the tab on the left side of -
13     http://www.3dconnexion.com/support/4a.php
14
15     The SDK is necessary to build this file with WITH_SPACEBALL defined.
16
17     For this stuff to work, siappdll.dll and spwini.dll must be in the executable path of blender
18
19  */
20
21
22 #include "GHOST_NDOFManager.h"
23 //#include "GHOST_WindowWin32.h"
24
25
26
27
28
29 namespace
30 {
31     GHOST_NDOFLibraryInit_fp ndofLibraryInit = 0;
32     GHOST_NDOFLibraryShutdown_fp ndofLibraryShutdown = 0;
33     GHOST_NDOFDeviceOpen_fp ndofDeviceOpen = 0;
34     GHOST_NDOFEventHandler_fp ndofEventHandler = 0;
35 }
36
37
38 //typedef enum SpwRetVal (WINAPI *PFNSI_INIT) (void);
39
40 GHOST_NDOFManager::GHOST_NDOFManager()
41 {
42     m_DeviceHandle = 0;
43
44     // discover the API from the plugin
45     ndofLibraryInit = 0;
46     ndofLibraryShutdown = 0;
47     ndofDeviceOpen = 0;
48     ndofEventHandler = 0;
49    // available = 0;
50 }
51
52 GHOST_NDOFManager::~GHOST_NDOFManager()
53 {
54     if (ndofLibraryShutdown)
55         ndofLibraryShutdown(m_DeviceHandle);
56
57     m_DeviceHandle = 0;
58 }
59
60
61 void
62 GHOST_NDOFManager::deviceOpen(GHOST_IWindow* window,
63         GHOST_NDOFLibraryInit_fp setNdofLibraryInit, 
64         GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
65         GHOST_NDOFDeviceOpen_fp setNdofDeviceOpen,
66         GHOST_NDOFEventHandler_fp setNdofEventHandler)
67 {
68     ndofLibraryInit = setNdofLibraryInit;
69     ndofLibraryShutdown = setNdofLibraryShutdown;
70     ndofDeviceOpen = setNdofDeviceOpen;
71     ndofEventHandler = setNdofEventHandler;
72
73     if (ndofLibraryInit  && ndofDeviceOpen)
74     {
75        printf("%i client \n", ndofLibraryInit());
76     }
77 /*
78     if (ndofDeviceOpen)
79     {
80         GHOST_WindowWin32* win32 = (GHOST_WindowWin32*) window; // GHOST_IWindow doesn't have RTTI...
81         if (win32 != 0)
82         {
83             m_DeviceHandle = ndofDeviceOpen(win32->getHWND());
84         }
85     }
86     */
87 }
88
89
90
91 GHOST_TEventNDOFData*
92 GHOST_NDOFManager::handle(unsigned int message, unsigned int* wParam, unsigned long* lParam)
93 {
94     static GHOST_TEventNDOFData sbdata;
95     int handled = 0;
96     if (ndofEventHandler && m_DeviceHandle != 0)
97     {
98         handled = ndofEventHandler(&sbdata.tx, m_DeviceHandle, message, wParam, lParam);
99     }
100     printf("handled %i\n", handled);
101     return handled ? &sbdata : 0;
102 }
103
104
105 bool 
106 GHOST_NDOFManager::available() 
107
108     return m_DeviceHandle != 0; 
109 }
110