Cleanup: remove contributors for CMake files
[blender.git] / intern / ghost / intern / GHOST_WindowManager.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file ghost/intern/GHOST_WindowManager.h
21  *  \ingroup GHOST
22  * Declaration of GHOST_WindowManager class.
23  */
24
25 #ifndef __GHOST_WINDOWMANAGER_H__
26 #define __GHOST_WINDOWMANAGER_H__
27
28 #include <vector>
29
30 #include "GHOST_Rect.h"
31 #include "GHOST_IWindow.h"
32
33
34 /**
35  * Manages system windows (platform independent implementation).
36  */
37 class GHOST_WindowManager
38 {
39 public:
40         /**
41          * Constructor.
42          */
43         GHOST_WindowManager();
44
45         /**
46          * Destructor.
47          */
48         ~GHOST_WindowManager();
49
50         /**
51          * Add a window to our list.
52          * It is only added if it is not already in the list.
53          * \param       window Pointer to the window to be added.
54          * \return      Indication of success.
55          */
56         GHOST_TSuccess addWindow(GHOST_IWindow *window);
57
58         /**
59          * Remove a window from our list.
60          * \param       window Pointer to the window to be removed.
61          * \return      Indication of success.
62          */
63         GHOST_TSuccess removeWindow(const GHOST_IWindow *window);
64
65         /**
66          * Returns whether the window is in our list.
67          * \param       window Pointer to the window to query.
68          * \return      A boolean indicator.
69          */
70         bool getWindowFound(const GHOST_IWindow *window) const;
71
72         /**
73          * Returns whether one of the windows is fullscreen.
74          * \return      A boolean indicator.
75          */
76         bool getFullScreen(void) const;
77
78         /**
79          * Returns pointer to the full-screen window.
80          * \return      The full-screen window (NULL if not in full-screen).
81          */
82         GHOST_IWindow *getFullScreenWindow(void) const;
83
84         /**
85          * Activates fullscreen mode for a window.
86          * \param window The window displayed fullscreen.
87          * \return      Indication of success.
88          */
89         GHOST_TSuccess beginFullScreen(GHOST_IWindow *window, const bool stereoVisual);
90
91         /**
92          * Closes fullscreen mode down.
93          * \return      Indication of success.
94          */
95         GHOST_TSuccess endFullScreen(void);
96
97         /**
98          * Sets new window as active window (the window receiving events).
99          * There can be only one window active which should be in the current window list.
100          * \param window The new active window.
101          */
102         GHOST_TSuccess setActiveWindow(GHOST_IWindow *window);
103
104         /**
105          * Returns the active window (the window receiving events).
106          * There can be only one window active which should be in the current window list.
107          * \return window The active window (or NULL if there is none).
108          */
109         GHOST_IWindow *getActiveWindow(void) const;
110
111
112         /**
113          * Set this window to be inactive (not receiving events).
114          * \param window The window to deactivate.
115          */
116         void setWindowInactive(const GHOST_IWindow *window);
117
118
119         /**
120          * Return a vector of the windows currently managed by this
121          * class.
122          * \warning It is very dangerous to mess with the contents of
123          * this vector. Please do not destroy or add windows use the
124          * interface above for this,
125          */
126         std::vector<GHOST_IWindow *> & getWindows();
127
128         /**
129          * Finds the window associated with an OS window object/handle
130          * \param osWindow The OS window object/handle
131          * \return The associated window, null if none corresponds
132          */
133         GHOST_IWindow *getWindowAssociatedWithOSWindow(void *osWindow);
134
135         /**
136          * Return true if any windows has a modified status
137          * \return True if any window has unsaved changes
138          */
139         bool getAnyModifiedState();
140
141 protected:
142         /** The list of windows managed */
143         std::vector<GHOST_IWindow *> m_windows;
144
145         /** Window in fullscreen state. There can be only one of this which is not in or window list. */
146         GHOST_IWindow *m_fullScreenWindow;
147
148         /** The active window. */
149         GHOST_IWindow *m_activeWindow;
150
151         /** Window that was active before entering fullscreen state. */
152         GHOST_IWindow *m_activeWindowBeforeFullScreen;
153
154 #ifdef WITH_CXX_GUARDEDALLOC
155         MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_WindowManager")
156 #endif
157
158 };
159
160 #endif // __GHOST_WINDOWMANAGER_H__