resolved conflict state with HEAD r14096
[blender.git] / intern / ghost / intern / GHOST_System.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31 /**
32  * @file        GHOST_System.h
33  * Declaration of GHOST_System class.
34  */
35
36 #ifndef _GHOST_SYSTEM_H_
37 #define _GHOST_SYSTEM_H_
38
39 #include "GHOST_ISystem.h"
40
41 #include "GHOST_Debug.h"
42 #include "GHOST_Buttons.h"
43 #include "GHOST_ModifierKeys.h"
44 #include "GHOST_EventManager.h"
45 #ifdef GHOST_DEBUG
46 #include "GHOST_EventPrinter.h"
47 #endif // GHOST_DEBUG
48
49 class GHOST_DisplayManager;
50 class GHOST_Event;
51 class GHOST_TimerManager;
52 class GHOST_Window;
53 class GHOST_WindowManager;
54 class GHOST_NDOFManager;
55
56 /**
57  * Implementation of platform independent functionality of the GHOST_ISystem
58  * interface.
59  * GHOST_System is an abstract class because not all methods of GHOST_ISystem
60  * are implemented.
61  * @see GHOST_ISystem.
62  * @author      Maarten Gribnau
63  * @date        May 7, 2001
64  */
65 class GHOST_System : public GHOST_ISystem
66 {
67 protected:
68         /**
69          * Constructor.
70          * Protected default constructor to force use of static createSystem member.
71          */
72         GHOST_System();
73
74         /**
75          * Destructor.
76          * Protected default constructor to force use of static dispose member.
77          */
78         virtual ~GHOST_System();
79
80 public:
81         /***************************************************************************************
82          ** Time(r) functionality
83          ***************************************************************************************/
84
85         /**
86          * Returns the system time.
87          * Returns the number of milliseconds since the start of the system process.
88          * Based on ANSI clock() routine.
89          * @return The number of milliseconds.
90          */
91         virtual GHOST_TUns64 getMilliSeconds() const;
92
93         /**
94          * Installs a timer.
95          * Note that, on most operating systems, messages need to be processed in order 
96          * for the timer callbacks to be invoked.
97          * @param delay         The time to wait for the first call to the timerProc (in milliseconds)
98          * @param interval      The interval between calls to the timerProc
99          * @param timerProc     The callback invoked when the interval expires,
100          * @param userData      Placeholder for user data.
101          * @return A timer task (0 if timer task installation failed).
102          */
103         virtual GHOST_ITimerTask* installTimer(GHOST_TUns64 delay, GHOST_TUns64 interval, GHOST_TimerProcPtr timerProc, GHOST_TUserDataPtr userData = 0);
104
105         /**
106          * Removes a timer.
107          * @param timerTask Timer task to be removed.
108          * @return Indication of success.
109          */
110         virtual GHOST_TSuccess removeTimer(GHOST_ITimerTask* timerTask);
111
112         /***************************************************************************************
113          ** Display/window management functionality
114          ***************************************************************************************/
115         
116         /**
117          * Inherited from GHOST_ISystem but left pure virtual
118          *
119          * virtual      GHOST_TUns8 getNumDisplays() const = 0;
120          * virtual void getMainDisplayDimensions(...) const = 0;
121          * virtual GHOST_IWindow* createWindow(..)
122          */
123
124         /**
125          * Dispose a window.
126          * @param       window Pointer to the window to be disposed.
127          * @return      Indication of success.
128          */
129         virtual GHOST_TSuccess disposeWindow(GHOST_IWindow* window);
130
131         /**
132          * Returns whether a window is valid.
133          * @param       window Pointer to the window to be checked.
134          * @return      Indication of validity.
135          */
136         virtual bool validWindow(GHOST_IWindow* window);
137
138         /**
139          * Begins full screen mode.
140          * @param setting       The new setting of the display.
141          * @param window        Window displayed in full screen.
142          * @param stereoVisual  Stereo visual for quad buffered stereo.
143          * This window is invalid after full screen has been ended.
144          * @return      Indication of success.
145          */
146         virtual GHOST_TSuccess beginFullScreen(const GHOST_DisplaySetting& setting, GHOST_IWindow** window,
147                 const bool stereoVisual);
148
149         /**
150          * Ends full screen mode.
151          * @return      Indication of success.
152          */
153         virtual GHOST_TSuccess endFullScreen(void);
154
155         /**
156          * Returns current full screen mode status.
157          * @return The current status.
158          */
159         virtual bool getFullScreen(void);
160
161
162         /***************************************************************************************
163          ** Event management functionality
164          ***************************************************************************************/
165
166         /**
167          * Inherited from GHOST_ISystem but left pure virtual
168          *
169          *      virtual bool processEvents(bool waitForEvent) = 0;
170          */
171
172
173
174         /**
175          * Dispatches all the events on the stack.
176          * The event stack will be empty afterwards.
177          * @return Indication as to whether any of the consumers handled the events.
178          */
179         virtual bool dispatchEvents();
180
181         /**
182          * Adds the given event consumer to our list.
183          * @param consumer The event consumer to add.
184          * @return Indication of success.
185          */
186         virtual GHOST_TSuccess addEventConsumer(GHOST_IEventConsumer* consumer);
187
188
189
190         /***************************************************************************************
191          ** N-degree of freedom devcice management functionality
192          ***************************************************************************************/
193
194         /** Inherited from GHOST_ISystem
195      *  Opens the N-degree of freedom device manager
196          * return 0 if device found, 1 otherwise
197      */
198     virtual int openNDOF(GHOST_IWindow* w,        
199         GHOST_NDOFLibraryInit_fp setNdofLibraryInit, 
200         GHOST_NDOFLibraryShutdown_fp setNdofLibraryShutdown,
201         GHOST_NDOFDeviceOpen_fp setNdofDeviceOpen);
202         
203 // original patch only        
204 //        GHOST_NDOFEventHandler_fp setNdofEventHandler);
205
206
207
208
209         /***************************************************************************************
210          ** Cursor management functionality
211          ***************************************************************************************/
212
213         /** Inherited from GHOST_ISystem but left pure virtual
214          *      GHOST_TSuccess getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const = 0;   
215          *  GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y)
216          */
217
218         /***************************************************************************************
219          ** Access to mouse button and keyboard states.
220          ***************************************************************************************/
221
222         /**
223          * Returns the state of a modifier key (ouside the message queue).
224          * @param mask          The modifier key state to retrieve.
225          * @param isDown        The state of a modifier key (true == pressed).
226          * @return                      Indication of success.
227          */
228         virtual GHOST_TSuccess getModifierKeyState(GHOST_TModifierKeyMask mask, bool& isDown) const;
229
230         /**
231          * Returns the state of a mouse button (ouside the message queue).
232          * @param mask          The button state to retrieve.
233          * @param isDown        Button state.
234          * @return                      Indication of success.
235          */
236         virtual GHOST_TSuccess getButtonState(GHOST_TButtonMask mask, bool& isDown) const;
237
238         /***************************************************************************************
239          ** Other (internal) functionality.
240          ***************************************************************************************/
241
242         /**
243          * Pushes an event on the stack.
244          * To dispatch it, call dispatchEvent() or dispatchEvents().
245          * Do not delete the event!
246          * @param event The event to push on the stack.
247          */
248         virtual GHOST_TSuccess pushEvent(GHOST_IEvent* event);
249
250         /**
251          * Returns the timer manager.
252          * @return The timer manager.
253          */
254         inline virtual GHOST_TimerManager* getTimerManager() const;
255
256         /**
257          * Returns a pointer to our event manager.
258          * @return A pointer to our event manager.
259          */
260         virtual inline GHOST_EventManager* getEventManager() const;
261
262         /**
263          * Returns a pointer to our window manager.
264          * @return A pointer to our window manager.
265          */
266         virtual inline GHOST_WindowManager* getWindowManager() const;
267
268         /**
269          * Returns a pointer to our n-degree of freedeom manager.
270          * @return A pointer to our n-degree of freedeom manager.
271          */
272         virtual inline GHOST_NDOFManager* getNDOFManager() const;
273
274         /**
275          * Returns the state of all modifier keys.
276          * @param keys  The state of all modifier keys (true == pressed).
277          * @return              Indication of success.
278          */
279         virtual GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys& keys) const = 0;
280
281         /**
282          * Returns the state of the mouse buttons (ouside the message queue).
283          * @param buttons       The state of the buttons.
284          * @return                      Indication of success.
285          */
286         virtual GHOST_TSuccess getButtons(GHOST_Buttons& buttons) const = 0;
287
288         /**
289          * Returns the selection buffer
290          * @param flag          Only used on X11
291          * @return              Returns the clipboard data
292          *
293          */
294          virtual GHOST_TUns8* getClipboard(int flag) const = 0;
295           
296           /**
297            * Put data to the Clipboard
298            * @param buffer      The buffer to copy to the clipboard
299            * @param flag        The clipboard to copy too only used on X11
300            */
301           virtual void putClipboard(GHOST_TInt8 *buffer, int flag) const = 0;
302
303 protected:
304         /**
305          * Initialize the system.
306          * @return Indication of success.
307          */
308         virtual GHOST_TSuccess init();
309
310         /**
311          * Shut the system down.
312          * @return Indication of success.
313          */
314         virtual GHOST_TSuccess exit();
315
316         /**
317          * Creates a fullscreen window.
318          * @param window The window created.
319          * @return Indication of success.
320          */
321         virtual GHOST_TSuccess createFullScreenWindow(GHOST_Window** window,
322                 const bool stereoVisual);
323
324         /** The display manager (platform dependant). */
325         GHOST_DisplayManager* m_displayManager;
326
327         /** The timer manager. */
328         GHOST_TimerManager* m_timerManager;
329
330         /** The window manager. */
331         GHOST_WindowManager* m_windowManager;
332
333         /** The event manager. */
334         GHOST_EventManager* m_eventManager;
335
336     /** The N-degree of freedom device manager */
337     GHOST_NDOFManager* m_ndofManager;
338
339         /** Prints all the events. */
340 #ifdef GHOST_DEBUG
341         GHOST_EventPrinter m_eventPrinter;
342 #endif // GHOST_DEBUG
343
344         /** Settings of the display before the display went fullscreen. */
345         GHOST_DisplaySetting m_preFullScreenSetting;
346 };
347
348 inline GHOST_TimerManager* GHOST_System::getTimerManager() const
349 {
350         return m_timerManager;
351 }
352
353 inline GHOST_EventManager* GHOST_System::getEventManager() const
354 {
355         return m_eventManager;
356 }
357
358 inline GHOST_WindowManager* GHOST_System::getWindowManager() const
359 {
360         return m_windowManager;
361 }
362
363 inline GHOST_NDOFManager* GHOST_System::getNDOFManager() const
364 {
365         return m_ndofManager;
366 }
367
368 #endif // _GHOST_SYSTEM_H_
369