[1812] | 1 | /************************************************************************
|
---|
| 2 | filename: CEGUISystem.h
|
---|
| 3 | created: 20/2/2004
|
---|
| 4 | author: Paul D Turner
|
---|
| 5 |
|
---|
| 6 | purpose: Defines interface for main GUI system class
|
---|
| 7 | *************************************************************************/
|
---|
| 8 | /*************************************************************************
|
---|
| 9 | Crazy Eddie's GUI System (http://www.cegui.org.uk)
|
---|
| 10 | Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk)
|
---|
| 11 |
|
---|
| 12 | This library is free software; you can redistribute it and/or
|
---|
| 13 | modify it under the terms of the GNU Lesser General Public
|
---|
| 14 | License as published by the Free Software Foundation; either
|
---|
| 15 | version 2.1 of the License, or (at your option) any later version.
|
---|
| 16 |
|
---|
| 17 | This library is distributed in the hope that it will be useful,
|
---|
| 18 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
| 20 | Lesser General Public License for more details.
|
---|
| 21 |
|
---|
| 22 | You should have received a copy of the GNU Lesser General Public
|
---|
| 23 | License along with this library; if not, write to the Free Software
|
---|
| 24 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
---|
| 25 | *************************************************************************/
|
---|
| 26 | #ifndef _CEGUISystem_h_
|
---|
| 27 | #define _CEGUISystem_h_
|
---|
| 28 |
|
---|
| 29 | #include "CEGUIBase.h"
|
---|
| 30 | #include "CEGUIString.h"
|
---|
| 31 | #include "CEGUISingleton.h"
|
---|
| 32 | #include "CEGUIRenderer.h"
|
---|
| 33 | #include "CEGUIMouseCursor.h"
|
---|
| 34 | #include "CEGUIInputEvent.h"
|
---|
| 35 | #include "CEGUIResourceProvider.h"
|
---|
| 36 |
|
---|
| 37 |
|
---|
| 38 | #if defined(_MSC_VER)
|
---|
| 39 | # pragma warning(push)
|
---|
| 40 | # pragma warning(disable : 4275)
|
---|
| 41 | # pragma warning(disable : 4251)
|
---|
| 42 | #endif
|
---|
| 43 |
|
---|
| 44 |
|
---|
| 45 | // Start of CEGUI namespace section
|
---|
| 46 | namespace CEGUI
|
---|
| 47 | {
|
---|
| 48 | //! Implementation struct that tracks and controls multiclick for mouse buttons.
|
---|
| 49 | struct MouseClickTrackerImpl;
|
---|
| 50 |
|
---|
| 51 |
|
---|
| 52 | /*!
|
---|
| 53 | \brief
|
---|
| 54 | The System class is the CEGUI class that provides access to all other elements in this system.
|
---|
| 55 |
|
---|
| 56 | This object must be created by the client application. The System object requires that you pass it
|
---|
| 57 | an initialised Renderer object which it can use to interface to whatever rendering system will be
|
---|
| 58 | used to display the GUI imagery.
|
---|
| 59 | */
|
---|
| 60 | class CEGUIEXPORT System : public Singleton<System>, public EventSet
|
---|
| 61 | {
|
---|
| 62 | public:
|
---|
| 63 | static const String EventNamespace; //!< Namespace for global events
|
---|
| 64 |
|
---|
| 65 | /*************************************************************************
|
---|
| 66 | Constants
|
---|
| 67 | *************************************************************************/
|
---|
| 68 | static const double DefaultSingleClickTimeout; //!< Default timeout for generation of single click events.
|
---|
| 69 | static const double DefaultMultiClickTimeout; //!< Default timeout for generation of multi-click events.
|
---|
| 70 | static const Size DefaultMultiClickAreaSize; //!< Default allowable mouse movement for multi-click event generation.
|
---|
| 71 |
|
---|
| 72 | // event names
|
---|
| 73 | static const String EventGUISheetChanged; //!< Name of event fired whenever the GUI sheet is changed.
|
---|
| 74 | static const String EventSingleClickTimeoutChanged; //!< Name of event fired when the single-click timeout is changed.
|
---|
| 75 | static const String EventMultiClickTimeoutChanged; //!< Name of event fired when the multi-click timeout is changed.
|
---|
| 76 | static const String EventMultiClickAreaSizeChanged; //!< Name of event fired when the size of the multi-click tolerance area is changed.
|
---|
| 77 | static const String EventDefaultFontChanged; //!< Name of event fired when the default font changes.
|
---|
| 78 | static const String EventDefaultMouseCursorChanged; //!< Name of event fired when the default mouse cursor changes.
|
---|
| 79 | static const String EventMouseMoveScalingChanged; //!< Name of event fired when the mouse move scaling factor changes.
|
---|
| 80 |
|
---|
| 81 |
|
---|
| 82 | /*************************************************************************
|
---|
| 83 | Construction and Destruction
|
---|
| 84 | *************************************************************************/
|
---|
| 85 | /*!
|
---|
| 86 | \brief
|
---|
| 87 | Constructs a System object.
|
---|
| 88 |
|
---|
| 89 | \param renderer
|
---|
| 90 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 91 |
|
---|
| 92 | \param logFile
|
---|
| 93 | pointer to a utf8 encoded buffer containing the name to use for the log file.
|
---|
| 94 | */
|
---|
| 95 | System(Renderer* renderer, const utf8* logFile = (const utf8*)"CEGUI.log");
|
---|
| 96 |
|
---|
| 97 | /*!
|
---|
| 98 | \brief
|
---|
| 99 | Construct a new System object
|
---|
| 100 |
|
---|
| 101 | \param renderer
|
---|
| 102 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 103 |
|
---|
| 104 | \param resourceProvider
|
---|
| 105 | Pointer to a ResourceProvider object.
|
---|
| 106 |
|
---|
| 107 | \param logFile
|
---|
| 108 | pointer to a utf8 encoded buffer containing the name to use for the log file.
|
---|
| 109 | */
|
---|
| 110 | System(Renderer* renderer, ResourceProvider* resourceProvider, const utf8* logFile = (const utf8*)"CEGUI.log");
|
---|
| 111 |
|
---|
| 112 |
|
---|
| 113 | /*!
|
---|
| 114 | \brief
|
---|
| 115 | Construct a new System object
|
---|
| 116 |
|
---|
| 117 | \param renderer
|
---|
| 118 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 119 |
|
---|
| 120 | \param scriptModule
|
---|
| 121 | Pointer to a ScriptModule object. may be NULL.
|
---|
| 122 |
|
---|
| 123 | \param configFile
|
---|
| 124 | pointer to a utf8 encoded buffer containing the name to use for the configuration file.
|
---|
| 125 | */
|
---|
| 126 | System(Renderer* renderer, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
|
---|
| 127 |
|
---|
| 128 |
|
---|
| 129 | /*!
|
---|
| 130 | \brief
|
---|
| 131 | Construct a new System object
|
---|
| 132 |
|
---|
| 133 | \param renderer
|
---|
| 134 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 135 |
|
---|
| 136 | \param scriptModule
|
---|
| 137 | Pointer to a ScriptModule object. may be NULL.
|
---|
| 138 |
|
---|
| 139 | \param resourceProvider
|
---|
| 140 | Pointer to a ResourceProvider object.
|
---|
| 141 |
|
---|
| 142 | \param configFile
|
---|
| 143 | pointer to a utf8 encoded buffer containing the name to use for the configuration file.
|
---|
| 144 | */
|
---|
| 145 | System(Renderer* renderer, ScriptModule* scriptModule, ResourceProvider* resourceProvider, const utf8* configFile = (const utf8*)"cegui.config");
|
---|
| 146 |
|
---|
| 147 |
|
---|
| 148 | /*!
|
---|
| 149 | \brief
|
---|
| 150 | Constructs a System object.
|
---|
| 151 |
|
---|
| 152 | \param renderer
|
---|
| 153 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 154 |
|
---|
| 155 | \param xmlParser
|
---|
| 156 | Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
|
---|
| 157 |
|
---|
| 158 | \param logFile
|
---|
| 159 | pointer to a utf8 encoded buffer containing the name to use for the log file.
|
---|
| 160 | */
|
---|
| 161 | System(Renderer* renderer, XMLParser* xmlParser, const utf8* logFile = (const utf8*)"CEGUI.log");
|
---|
| 162 |
|
---|
| 163 |
|
---|
| 164 | /*!
|
---|
| 165 | \brief
|
---|
| 166 | Constructs a System object.
|
---|
| 167 |
|
---|
| 168 | \param renderer
|
---|
| 169 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 170 |
|
---|
| 171 | \param resourceProvider
|
---|
| 172 | Pointer to a ResourceProvider object.
|
---|
| 173 |
|
---|
| 174 | \param xmlParser
|
---|
| 175 | Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
|
---|
| 176 |
|
---|
| 177 | \param logFile
|
---|
| 178 | pointer to a utf8 encoded buffer containing the name to use for the log file.
|
---|
| 179 | */
|
---|
| 180 | System(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, const utf8* logFile = (const utf8*)"CEGUI.log");
|
---|
| 181 |
|
---|
| 182 |
|
---|
| 183 | /*!
|
---|
| 184 | \brief
|
---|
| 185 | Construct a new System object
|
---|
| 186 |
|
---|
| 187 | \param renderer
|
---|
| 188 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 189 |
|
---|
| 190 | \param xmlParser
|
---|
| 191 | Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
|
---|
| 192 |
|
---|
| 193 | \param scriptModule
|
---|
| 194 | Pointer to a ScriptModule object. may be NULL.
|
---|
| 195 |
|
---|
| 196 | \param configFile
|
---|
| 197 | pointer to a utf8 encoded buffer containing the name to use for the configuration file.
|
---|
| 198 | */
|
---|
| 199 | System(Renderer* renderer, XMLParser* xmlParser, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
|
---|
| 200 |
|
---|
| 201 |
|
---|
| 202 | /*!
|
---|
| 203 | \brief
|
---|
| 204 | Construct a new System object
|
---|
| 205 |
|
---|
| 206 | \param renderer
|
---|
| 207 | Pointer to the valid Renderer object that will be used to render GUI imagery
|
---|
| 208 |
|
---|
| 209 | \param resourceProvider
|
---|
| 210 | Pointer to a ResourceProvider object.
|
---|
| 211 |
|
---|
| 212 | \param xmlParser
|
---|
| 213 | Pointer to a valid XMLParser object to be used when parsing XML files, or NULL to use a default parser.
|
---|
| 214 |
|
---|
| 215 | \param scriptModule
|
---|
| 216 | Pointer to a ScriptModule object. may be NULL.
|
---|
| 217 |
|
---|
| 218 | \param configFile
|
---|
| 219 | pointer to a utf8 encoded buffer containing the name to use for the configuration file.
|
---|
| 220 | */
|
---|
| 221 | System(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, ScriptModule* scriptModule, const utf8* configFile = (const utf8*)"cegui.config");
|
---|
| 222 |
|
---|
| 223 |
|
---|
| 224 | /*!
|
---|
| 225 | \brief
|
---|
| 226 | Destructor for System objects.
|
---|
| 227 | */
|
---|
| 228 | ~System(void);
|
---|
| 229 |
|
---|
| 230 |
|
---|
| 231 | /*!
|
---|
| 232 | \brief
|
---|
| 233 | Return a pointer to the Renderer object being used by the system
|
---|
| 234 |
|
---|
| 235 | \return
|
---|
| 236 | Pointer to the Renderer object used by the system.
|
---|
| 237 | */
|
---|
| 238 | Renderer* getRenderer(void) const {return d_renderer;}
|
---|
| 239 |
|
---|
| 240 |
|
---|
| 241 | /*!
|
---|
| 242 | \brief
|
---|
| 243 | Return singleton System object
|
---|
| 244 |
|
---|
| 245 | \return
|
---|
| 246 | Singleton System object
|
---|
| 247 | */
|
---|
| 248 | static System& getSingleton(void);
|
---|
| 249 |
|
---|
| 250 |
|
---|
| 251 | /*!
|
---|
| 252 | \brief
|
---|
| 253 | Return pointer to singleton System object
|
---|
| 254 |
|
---|
| 255 | \return
|
---|
| 256 | Pointer to singleton System object
|
---|
| 257 | */
|
---|
| 258 | static System* getSingletonPtr(void);
|
---|
| 259 |
|
---|
| 260 |
|
---|
| 261 | /*!
|
---|
| 262 | \brief
|
---|
| 263 | Set the default font to be used by the system
|
---|
| 264 |
|
---|
| 265 | \param name
|
---|
| 266 | String object containing the name of the font to be used as the system default.
|
---|
| 267 |
|
---|
| 268 | \return
|
---|
| 269 | Nothing.
|
---|
| 270 | */
|
---|
| 271 | void setDefaultFont(const String& name);
|
---|
| 272 |
|
---|
| 273 |
|
---|
| 274 | /*!
|
---|
| 275 | \brief
|
---|
| 276 | Set the default font to be used by the system
|
---|
| 277 |
|
---|
| 278 | \param font
|
---|
| 279 | Pointer to the font to be used as the system default.
|
---|
| 280 |
|
---|
| 281 | \return
|
---|
| 282 | Nothing.
|
---|
| 283 | */
|
---|
| 284 | void setDefaultFont(Font* font);
|
---|
| 285 |
|
---|
| 286 |
|
---|
| 287 | /*!
|
---|
| 288 | \brief
|
---|
| 289 | Return a pointer to the default Font for the GUI system
|
---|
| 290 |
|
---|
| 291 | \return
|
---|
| 292 | Pointer to a Font object that is the default font in the system.
|
---|
| 293 | */
|
---|
| 294 | Font* getDefaultFont(void) const {return d_defaultFont;}
|
---|
| 295 |
|
---|
| 296 |
|
---|
| 297 | /*!
|
---|
| 298 | \brief
|
---|
| 299 | Causes a full re-draw next time renderGUI() is called
|
---|
| 300 |
|
---|
| 301 | \return
|
---|
| 302 | Nothing
|
---|
| 303 | */
|
---|
| 304 | void signalRedraw() {d_gui_redraw = true;}
|
---|
| 305 |
|
---|
| 306 |
|
---|
| 307 | /*!
|
---|
| 308 | \brief
|
---|
| 309 | Return a boolean value to indicate whether a full re-draw is requested next time renderGUI() is called.
|
---|
| 310 |
|
---|
| 311 | \return
|
---|
| 312 | true if a re-draw has been requested
|
---|
| 313 | */
|
---|
| 314 | bool isRedrawRequested() const {return d_gui_redraw;}
|
---|
| 315 |
|
---|
| 316 |
|
---|
| 317 | /*!
|
---|
| 318 | \brief
|
---|
| 319 | Render the GUI
|
---|
| 320 |
|
---|
| 321 | Depending upon the internal state, this may either re-use rendering from last time, or trigger a full re-draw from all elements.
|
---|
| 322 |
|
---|
| 323 | \return
|
---|
| 324 | Nothing
|
---|
| 325 | */
|
---|
| 326 | void renderGUI(void);
|
---|
| 327 |
|
---|
| 328 |
|
---|
| 329 | /*!
|
---|
| 330 | \brief
|
---|
| 331 | Set the active GUI sheet (root) window.
|
---|
| 332 |
|
---|
| 333 | \param sheet
|
---|
| 334 | Pointer to a Window object that will become the new GUI 'root'
|
---|
| 335 |
|
---|
| 336 | \return
|
---|
| 337 | Pointer to the window that was previously set as the GUI root.
|
---|
| 338 | */
|
---|
| 339 | Window* setGUISheet(Window* sheet);
|
---|
| 340 |
|
---|
| 341 |
|
---|
| 342 | /*!
|
---|
| 343 | \brief
|
---|
| 344 | Return a pointer to the active GUI sheet (root) window.
|
---|
| 345 |
|
---|
| 346 | \return
|
---|
| 347 | Pointer to the window object that has been set as the GUI root element.
|
---|
| 348 | */
|
---|
| 349 | Window* getGUISheet(void) const {return d_activeSheet;}
|
---|
| 350 |
|
---|
| 351 |
|
---|
| 352 | /*!
|
---|
| 353 | \brief
|
---|
| 354 | Return the current timeout for generation of single-click events.
|
---|
| 355 |
|
---|
| 356 | A single-click is defined here as a button being pressed and then released.
|
---|
| 357 |
|
---|
| 358 | \return
|
---|
| 359 | double value equal to the current single-click timeout value.
|
---|
| 360 | */
|
---|
| 361 | double getSingleClickTimeout(void) const {return d_click_timeout;}
|
---|
| 362 |
|
---|
| 363 |
|
---|
| 364 | /*!
|
---|
| 365 | \brief
|
---|
| 366 | Return the current timeout for generation of multi-click events.
|
---|
| 367 |
|
---|
| 368 | A multi-click event is a double-click, or a triple-click. The value returned
|
---|
| 369 | here is the maximum allowable time between mouse button down events for which
|
---|
| 370 | a multi-click event will be generated.
|
---|
| 371 |
|
---|
| 372 | \return
|
---|
| 373 | double value equal to the current multi-click timeout value.
|
---|
| 374 | */
|
---|
| 375 | double getMultiClickTimeout(void) const {return d_dblclick_timeout;}
|
---|
| 376 |
|
---|
| 377 |
|
---|
| 378 | /*!
|
---|
| 379 | \brief
|
---|
| 380 | Return the size of the allowable mouse movement tolerance used when generating multi-click events.
|
---|
| 381 |
|
---|
| 382 | This size defines an area with the mouse at the centre. The mouse must stay within the tolerance defined
|
---|
| 383 | for a multi-click (double click, or triple click) event to be generated.
|
---|
| 384 |
|
---|
| 385 | \return
|
---|
| 386 | Size object describing the current multi-click tolerance area size.
|
---|
| 387 | */
|
---|
| 388 | const Size& getMultiClickToleranceAreaSize(void) const {return d_dblclick_size;}
|
---|
| 389 |
|
---|
| 390 |
|
---|
| 391 | /*!
|
---|
| 392 | \brief
|
---|
| 393 | Set the timeout used for generation of single-click events.
|
---|
| 394 |
|
---|
| 395 | A single-click is defined here as a button being pressed and then released.
|
---|
| 396 |
|
---|
| 397 | \param timeout
|
---|
| 398 | double value equal to the single-click timeout value to be used from now onwards.
|
---|
| 399 |
|
---|
| 400 | \return
|
---|
| 401 | Nothing.
|
---|
| 402 | */
|
---|
| 403 | void setSingleClickTimeout(double timeout);
|
---|
| 404 |
|
---|
| 405 |
|
---|
| 406 | /*!
|
---|
| 407 | \brief
|
---|
| 408 | Set the timeout to be used for the generation of multi-click events.
|
---|
| 409 |
|
---|
| 410 | A multi-click event is a double-click, or a triple-click. The value returned
|
---|
| 411 | here is the maximum allowable time between mouse button down events for which
|
---|
| 412 | a multi-click event will be generated.
|
---|
| 413 |
|
---|
| 414 | \param timeout
|
---|
| 415 | double value equal to the multi-click timeout value to be used from now onwards.
|
---|
| 416 |
|
---|
| 417 | \return
|
---|
| 418 | Nothing.
|
---|
| 419 | */
|
---|
| 420 | void setMultiClickTimeout(double timeout);
|
---|
| 421 |
|
---|
| 422 |
|
---|
| 423 | /*!
|
---|
| 424 | \brief
|
---|
| 425 | Set the size of the allowable mouse movement tolerance used when generating multi-click events.
|
---|
| 426 |
|
---|
| 427 | This size defines an area with the mouse at the centre. The mouse must stay within the tolerance defined
|
---|
| 428 | for a multi-click (double click, or triple click) event to be generated.
|
---|
| 429 |
|
---|
| 430 | \param sz
|
---|
| 431 | Size object describing the multi-click tolerance area size to be used.
|
---|
| 432 |
|
---|
| 433 | \return
|
---|
| 434 | Nothing.
|
---|
| 435 | */
|
---|
| 436 | void setMultiClickToleranceAreaSize(const Size& sz);
|
---|
| 437 |
|
---|
| 438 |
|
---|
| 439 | /*!
|
---|
| 440 | \brief
|
---|
| 441 | Return the currently set default mouse cursor image
|
---|
| 442 |
|
---|
| 443 | \return
|
---|
| 444 | Pointer to the current default image used for the mouse cursor. May return NULL if default cursor has not been set,
|
---|
| 445 | or has intentionally been set to NULL - which results in a blank default cursor.
|
---|
| 446 | */
|
---|
| 447 | const Image* getDefaultMouseCursor(void) const {return d_defaultMouseCursor;}
|
---|
| 448 |
|
---|
| 449 |
|
---|
| 450 | /*!
|
---|
| 451 | \brief
|
---|
| 452 | Set the image to be used as the default mouse cursor.
|
---|
| 453 |
|
---|
| 454 | \param image
|
---|
| 455 | Pointer to an image object that is to be used as the default mouse cursor. To have no cursor rendered by default, you
|
---|
| 456 | can specify NULL here.
|
---|
| 457 |
|
---|
| 458 | \return
|
---|
| 459 | Nothing.
|
---|
| 460 | */
|
---|
| 461 | void setDefaultMouseCursor(const Image* image);
|
---|
| 462 |
|
---|
| 463 |
|
---|
| 464 | /*!
|
---|
| 465 | \brief
|
---|
| 466 | Set the image to be used as the default mouse cursor.
|
---|
| 467 |
|
---|
| 468 | \param image
|
---|
| 469 | One of the MouseCursorImage enumerated values.
|
---|
| 470 |
|
---|
| 471 | \return
|
---|
| 472 | Nothing.
|
---|
| 473 | */
|
---|
| 474 | void setDefaultMouseCursor(MouseCursorImage image) {setDefaultMouseCursor((const Image*)image);}
|
---|
| 475 |
|
---|
| 476 |
|
---|
| 477 | /*!
|
---|
| 478 | \brief
|
---|
| 479 | Set the image to be used as the default mouse cursor.
|
---|
| 480 |
|
---|
| 481 | \param imageset
|
---|
| 482 | String object that contains the name of the Imageset that contains the image to be used.
|
---|
| 483 |
|
---|
| 484 | \param image_name
|
---|
| 485 | String object that contains the name of the Image on \a imageset that is to be used.
|
---|
| 486 |
|
---|
| 487 | \return
|
---|
| 488 | Nothing.
|
---|
| 489 |
|
---|
| 490 | \exception UnknownObjectException thrown if \a imageset is not known, or if \a imageset contains no Image named \a image_name.
|
---|
| 491 | */
|
---|
| 492 | void setDefaultMouseCursor(const String& imageset, const String& image_name);
|
---|
| 493 |
|
---|
| 494 |
|
---|
| 495 | /*!
|
---|
| 496 | \brief
|
---|
| 497 | Return the Window object that the mouse is presently within
|
---|
| 498 |
|
---|
| 499 | \return
|
---|
| 500 | Pointer to the Window object that currently contains the mouse cursor, or NULL if none.
|
---|
| 501 | */
|
---|
| 502 | Window* getWindowContainingMouse(void) const {return d_wndWithMouse;}
|
---|
| 503 |
|
---|
| 504 |
|
---|
| 505 | /*!
|
---|
| 506 | \brief
|
---|
| 507 | Return a pointer to the ScriptModule being used for scripting within the GUI system.
|
---|
| 508 |
|
---|
| 509 | \return
|
---|
| 510 | Pointer to a ScriptModule based object.
|
---|
| 511 | */
|
---|
| 512 | ScriptModule* getScriptingModule(void) const;
|
---|
| 513 |
|
---|
| 514 | /*!
|
---|
| 515 | \brief
|
---|
| 516 | Return a pointer to the ResourceProvider being used within the GUI system.
|
---|
| 517 |
|
---|
| 518 | \return
|
---|
| 519 | Pointer to a ResourceProvider based object.
|
---|
| 520 | */
|
---|
| 521 | ResourceProvider* getResourceProvider(void) const;
|
---|
| 522 |
|
---|
| 523 | /*!
|
---|
| 524 | \brief
|
---|
| 525 | Execute a script file if possible.
|
---|
| 526 |
|
---|
| 527 | \param filename
|
---|
| 528 | String object holding the filename of the script file that is to be executed
|
---|
| 529 |
|
---|
| 530 | \param resourceGroup
|
---|
| 531 | Resource group identifier to be passed to the ResourceProvider when loading the script file.
|
---|
| 532 | */
|
---|
| 533 | void executeScriptFile(const String& filename, const String& resourceGroup = "") const;
|
---|
| 534 |
|
---|
| 535 |
|
---|
| 536 | /*!
|
---|
| 537 | \brief
|
---|
| 538 | Execute a scripted global function if possible. The function should not take any parameters and should return an integer.
|
---|
| 539 |
|
---|
| 540 | \param function_name
|
---|
| 541 | String object holding the name of the function, in the global script environment, that
|
---|
| 542 | is to be executed.
|
---|
| 543 |
|
---|
| 544 | \return
|
---|
| 545 | The integer value returned from the script function.
|
---|
| 546 | */
|
---|
| 547 | int executeScriptGlobal(const String& function_name) const;
|
---|
| 548 |
|
---|
| 549 |
|
---|
| 550 | /*!
|
---|
| 551 | \brief
|
---|
| 552 | If possible, execute script code contained in the given CEGUI::String object.
|
---|
| 553 |
|
---|
| 554 | \param str
|
---|
| 555 | String object holding the valid script code that should be executed.
|
---|
| 556 |
|
---|
| 557 | \return
|
---|
| 558 | Nothing.
|
---|
| 559 | */
|
---|
| 560 | void executeScriptString(const String& str) const;
|
---|
| 561 |
|
---|
| 562 |
|
---|
| 563 | /*!
|
---|
| 564 | \brief
|
---|
| 565 | return the current mouse movement scaling factor.
|
---|
| 566 |
|
---|
| 567 | \return
|
---|
| 568 | float value that is equal to the currently set mouse movement scaling factor. Defaults to 1.0f.
|
---|
| 569 | */
|
---|
| 570 | float getMouseMoveScaling(void) const;
|
---|
| 571 |
|
---|
| 572 |
|
---|
| 573 | /*!
|
---|
| 574 | \brief
|
---|
| 575 | Set the current mouse movement scaling factor
|
---|
| 576 |
|
---|
| 577 | \param scaling
|
---|
| 578 | float value specifying the scaling to be applied to mouse movement inputs.
|
---|
| 579 |
|
---|
| 580 | \return
|
---|
| 581 | nothing.
|
---|
| 582 | */
|
---|
| 583 | void setMouseMoveScaling(float scaling);
|
---|
| 584 |
|
---|
| 585 |
|
---|
| 586 | /*!
|
---|
| 587 | \brief
|
---|
| 588 | Internal method used to inform the System object whenever a window is destroyed, so that System can perform any required
|
---|
| 589 | housekeeping.
|
---|
| 590 |
|
---|
| 591 | \note
|
---|
| 592 | This method is not intended for client code usage. If you use this method anything can, and probably will, go wrong!
|
---|
| 593 | */
|
---|
| 594 | void notifyWindowDestroyed(const Window* window);
|
---|
| 595 |
|
---|
| 596 |
|
---|
| 597 | /*!
|
---|
| 598 | \brief
|
---|
| 599 | Return the current system keys value.
|
---|
| 600 |
|
---|
| 601 | \return
|
---|
| 602 | uint value representing a combination of the SystemKey bits.
|
---|
| 603 | */
|
---|
| 604 | uint getSystemKeys(void) const { return d_sysKeys; }
|
---|
| 605 |
|
---|
| 606 | /*!
|
---|
| 607 | \brief
|
---|
| 608 | Return the XMLParser object.
|
---|
| 609 | */
|
---|
| 610 | XMLParser* getXMLParser(void) const { return d_xmlParser; }
|
---|
| 611 |
|
---|
| 612 |
|
---|
| 613 | /*!
|
---|
| 614 | \brief
|
---|
| 615 | Set the system default Tooltip object. This value may be NULL to indicate that no default Tooltip will be
|
---|
| 616 | available.
|
---|
| 617 |
|
---|
| 618 | \param tooltip
|
---|
| 619 | Pointer to a valid Tooltip based object which should be used as the default tooltip for the system, or NULL to
|
---|
| 620 | indicate that no system default tooltip is required. Note that when passing a pointer to a Tooltip object,
|
---|
| 621 | ownership of the Tooltip does not pass to System.
|
---|
| 622 |
|
---|
| 623 | \return
|
---|
| 624 | Nothing.
|
---|
| 625 | */
|
---|
| 626 | void setTooltip(Tooltip* tooltip);
|
---|
| 627 |
|
---|
| 628 | /*!
|
---|
| 629 | \brief
|
---|
| 630 | Set the system default Tooltip to be used by specifying a Window type.
|
---|
| 631 |
|
---|
| 632 | System will internally attempt to create an instance of the specified window type (which must be
|
---|
| 633 | derived from the base Tooltip class). If the Tooltip creation fails, the error is logged and no
|
---|
| 634 | system default Tooltip will be available.
|
---|
| 635 |
|
---|
| 636 | \param tooltipType
|
---|
| 637 | String object holding the name of the Tooltip based Window type which should be used as the Tooltip for
|
---|
| 638 | the system default.
|
---|
| 639 |
|
---|
| 640 | \return
|
---|
| 641 | Nothing.
|
---|
| 642 | */
|
---|
| 643 | void setTooltip(const String& tooltipType);
|
---|
| 644 |
|
---|
| 645 | /*!
|
---|
| 646 | \brief
|
---|
| 647 | return a poiter to the system default tooltip. May return 0.
|
---|
| 648 |
|
---|
| 649 | \return
|
---|
| 650 | Pointer to the current system default tooltip. May return 0 if
|
---|
| 651 | no system default tooltip is available.
|
---|
| 652 | */
|
---|
| 653 | Tooltip* getDefaultTooltip(void) const { return d_defaultTooltip; }
|
---|
| 654 |
|
---|
| 655 |
|
---|
| 656 | /*!
|
---|
| 657 | \brief
|
---|
| 658 | Internal method to directly set the current modal target.
|
---|
| 659 |
|
---|
| 660 | \note
|
---|
| 661 | This method is called internally by Window, and must be used by client code.
|
---|
| 662 | Doing so will most likely not have the expected results.
|
---|
| 663 | */
|
---|
| 664 | void setModalTarget(Window* target) {d_modalTarget = target;}
|
---|
| 665 |
|
---|
| 666 | /*!
|
---|
| 667 | \brief
|
---|
| 668 | Return a pointer to the Window that is currently the modal target.
|
---|
| 669 |
|
---|
| 670 | \return
|
---|
| 671 | Pointer to the current modal target. NULL if there is no modal target.
|
---|
| 672 | */
|
---|
| 673 | Window* getModalTarget(void) const {return d_modalTarget;}
|
---|
| 674 |
|
---|
| 675 |
|
---|
| 676 | /*************************************************************************
|
---|
| 677 | Input injection interface
|
---|
| 678 | *************************************************************************/
|
---|
| 679 | /*!
|
---|
| 680 | \brief
|
---|
| 681 | Method that injects a mouse movement event into the system
|
---|
| 682 |
|
---|
| 683 | \param delta_x
|
---|
| 684 | amount the mouse moved on the x axis.
|
---|
| 685 |
|
---|
| 686 | \param delta_y
|
---|
| 687 | amount the mouse moved on the y axis.
|
---|
| 688 |
|
---|
| 689 | \return
|
---|
| 690 | - true if the input was processed by the gui system.
|
---|
| 691 | - false if the input was not processed by the gui system.
|
---|
| 692 | */
|
---|
| 693 | bool injectMouseMove(float delta_x, float delta_y);
|
---|
| 694 |
|
---|
| 695 |
|
---|
| 696 | /*!
|
---|
| 697 | \brief
|
---|
| 698 | Method that injects that the mouse has left the application window
|
---|
| 699 |
|
---|
| 700 | \return
|
---|
| 701 | - true if the generated mouse move event was handled.
|
---|
| 702 | - false if the generated mouse move event was not handled.
|
---|
| 703 | */
|
---|
| 704 | bool injectMouseLeaves(void);
|
---|
| 705 |
|
---|
| 706 |
|
---|
| 707 | /*!
|
---|
| 708 | \brief
|
---|
| 709 | Method that injects a mouse button down event into the system.
|
---|
| 710 |
|
---|
| 711 | \param button
|
---|
| 712 | One of the MouseButton values indicating which button was pressed.
|
---|
| 713 |
|
---|
| 714 | \return
|
---|
| 715 | - true if the input was processed by the gui system.
|
---|
| 716 | - false if the input was not processed by the gui system.
|
---|
| 717 | */
|
---|
| 718 | bool injectMouseButtonDown(MouseButton button);
|
---|
| 719 |
|
---|
| 720 |
|
---|
| 721 | /*!
|
---|
| 722 | \brief
|
---|
| 723 | Method that injects a mouse button up event into the system.
|
---|
| 724 |
|
---|
| 725 | \param button
|
---|
| 726 | One of the MouseButton values indicating which button was released.
|
---|
| 727 |
|
---|
| 728 | \return
|
---|
| 729 | - true if the input was processed by the gui system.
|
---|
| 730 | - false if the input was not processed by the gui system.
|
---|
| 731 | */
|
---|
| 732 | bool injectMouseButtonUp(MouseButton button);
|
---|
| 733 |
|
---|
| 734 |
|
---|
| 735 | /*!
|
---|
| 736 | \brief
|
---|
| 737 | Method that injects a key down event into the system.
|
---|
| 738 |
|
---|
| 739 | \param key_code
|
---|
| 740 | uint value indicating which key was pressed.
|
---|
| 741 |
|
---|
| 742 | \return
|
---|
| 743 | - true if the input was processed by the gui system.
|
---|
| 744 | - false if the input was not processed by the gui system.
|
---|
| 745 | */
|
---|
| 746 | bool injectKeyDown(uint key_code);
|
---|
| 747 |
|
---|
| 748 |
|
---|
| 749 | /*!
|
---|
| 750 | \brief
|
---|
| 751 | Method that injects a key up event into the system.
|
---|
| 752 |
|
---|
| 753 | \param key_code
|
---|
| 754 | uint value indicating which key was released.
|
---|
| 755 |
|
---|
| 756 | \return
|
---|
| 757 | - true if the input was processed by the gui system.
|
---|
| 758 | - false if the input was not processed by the gui system.
|
---|
| 759 | */
|
---|
| 760 | bool injectKeyUp(uint key_code);
|
---|
| 761 |
|
---|
| 762 |
|
---|
| 763 | /*!
|
---|
| 764 | \brief
|
---|
| 765 | Method that injects a typed character event into the system.
|
---|
| 766 |
|
---|
| 767 | \param code_point
|
---|
| 768 | Unicode code point of the character that was typed.
|
---|
| 769 |
|
---|
| 770 | \return
|
---|
| 771 | - true if the input was processed by the gui system.
|
---|
| 772 | - false if the input was not processed by the gui system.
|
---|
| 773 | */
|
---|
| 774 | bool injectChar(utf32 code_point);
|
---|
| 775 |
|
---|
| 776 |
|
---|
| 777 | /*!
|
---|
| 778 | \brief
|
---|
| 779 | Method that injects a mouse-wheel / scroll-wheel event into the system.
|
---|
| 780 |
|
---|
| 781 | \param delta
|
---|
| 782 | float value representing the amount the wheel moved.
|
---|
| 783 |
|
---|
| 784 | \return
|
---|
| 785 | - true if the input was processed by the gui system.
|
---|
| 786 | - false if the input was not processed by the gui system.
|
---|
| 787 | */
|
---|
| 788 | bool injectMouseWheelChange(float delta);
|
---|
| 789 |
|
---|
| 790 |
|
---|
| 791 | /*!
|
---|
| 792 | \brief
|
---|
| 793 | Method that injects a new position for the mouse cursor.
|
---|
| 794 |
|
---|
| 795 | \param x_pos
|
---|
| 796 | New absolute pixel position of the mouse cursor on the x axis.
|
---|
| 797 |
|
---|
| 798 | \param y_pos
|
---|
| 799 | New absolute pixel position of the mouse cursoe in the y axis.
|
---|
| 800 |
|
---|
| 801 | \return
|
---|
| 802 | - true if the generated mouse move event was handled.
|
---|
| 803 | - false if the generated mouse move event was not handled.
|
---|
| 804 | */
|
---|
| 805 | bool injectMousePosition(float x_pos, float y_pos);
|
---|
| 806 |
|
---|
| 807 |
|
---|
| 808 | /*!
|
---|
| 809 | \brief
|
---|
| 810 | Method to inject time pulses into the system.
|
---|
| 811 |
|
---|
| 812 | \param timeElapsed
|
---|
| 813 | float value indicating the amount of time passed, in seconds, since the last time this method was called.
|
---|
| 814 |
|
---|
| 815 | \return
|
---|
| 816 | Currently, this method always returns true.
|
---|
| 817 | */
|
---|
| 818 | bool injectTimePulse(float timeElapsed);
|
---|
| 819 |
|
---|
| 820 |
|
---|
| 821 | private:
|
---|
| 822 | // unimplemented constructors / assignment
|
---|
| 823 | System(const System& obj);
|
---|
| 824 | System& operator=(const System& obj);
|
---|
| 825 |
|
---|
| 826 | /*************************************************************************
|
---|
| 827 | Implementation Constants
|
---|
| 828 | *************************************************************************/
|
---|
| 829 | static const char CEGUIConfigSchemaName[]; //!< Filename of the XML schema used for validating Config files.
|
---|
| 830 |
|
---|
| 831 |
|
---|
| 832 | /*************************************************************************
|
---|
| 833 | Implementation Functions
|
---|
| 834 | *************************************************************************/
|
---|
| 835 | /*!
|
---|
| 836 | \brief
|
---|
| 837 | Given Point \a pt, return a pointer to the Window that should receive a mouse input if \a pt is the mouse location.
|
---|
| 838 |
|
---|
| 839 | \param pt
|
---|
| 840 | Point object describing a screen location in pixels.
|
---|
| 841 |
|
---|
| 842 | \return
|
---|
| 843 | Pointer to a Window object that should receive mouse input with the system in its current state and the mouse at location \a pt.
|
---|
| 844 | */
|
---|
| 845 | Window* getTargetWindow(const Point& pt) const;
|
---|
| 846 |
|
---|
| 847 |
|
---|
| 848 | /*!
|
---|
| 849 | \brief
|
---|
| 850 | Return a pointer to the Window that should receive keyboard input considering the current modal target.
|
---|
| 851 |
|
---|
| 852 | \return
|
---|
| 853 | Pointer to a Window object that should receive the keyboard input.
|
---|
| 854 | */
|
---|
| 855 | Window* getKeyboardTargetWindow(void) const;
|
---|
| 856 |
|
---|
| 857 |
|
---|
| 858 | /*!
|
---|
| 859 | \brief
|
---|
| 860 | Return a pointer to the next window that is to receive the input if the given Window did not use it.
|
---|
| 861 |
|
---|
| 862 | \param w
|
---|
| 863 | Pointer to the Window that just received the input.
|
---|
| 864 |
|
---|
| 865 | \return
|
---|
| 866 | Pointer to the next window to receive the input.
|
---|
| 867 | */
|
---|
| 868 | Window* getNextTargetWindow(Window* w) const;
|
---|
| 869 |
|
---|
| 870 |
|
---|
| 871 | /*!
|
---|
| 872 | \brief
|
---|
| 873 | Translate a MouseButton value into the corresponding SystemKey value
|
---|
| 874 |
|
---|
| 875 | \param btn
|
---|
| 876 | MouseButton value describing the value to be converted
|
---|
| 877 |
|
---|
| 878 | \return
|
---|
| 879 | SystemKey value that corresponds to the same button as \a btn
|
---|
| 880 | */
|
---|
| 881 | SystemKey mouseButtonToSyskey(MouseButton btn) const;
|
---|
| 882 |
|
---|
| 883 |
|
---|
| 884 | /*!
|
---|
| 885 | \brief
|
---|
| 886 | Translate a Key::Scan value into the corresponding SystemKey value.
|
---|
| 887 |
|
---|
| 888 | This takes key direction into account, since we map two keys onto one value.
|
---|
| 889 |
|
---|
| 890 | \param key
|
---|
| 891 | Key::Scan value describing the value to be converted
|
---|
| 892 |
|
---|
| 893 | \param direction
|
---|
| 894 | true if the key is being pressed, false if the key is being released.
|
---|
| 895 |
|
---|
| 896 | \return
|
---|
| 897 | SystemKey value that corresponds to the same key as \a key, or 0 if key was not a system key.
|
---|
| 898 | */
|
---|
| 899 | SystemKey keyCodeToSyskey(Key::Scan key, bool direction);
|
---|
| 900 |
|
---|
| 901 |
|
---|
| 902 | /*!
|
---|
| 903 | \brief
|
---|
| 904 | Method to do the work of the constructor
|
---|
| 905 | */
|
---|
| 906 | void constructor_impl(Renderer* renderer, ResourceProvider* resourceProvider, XMLParser* xmlParser, ScriptModule* scriptModule, const String& configFile, const String& logFile);
|
---|
| 907 |
|
---|
| 908 |
|
---|
| 909 | /*!
|
---|
| 910 | \brief
|
---|
| 911 | add events for the System object
|
---|
| 912 | */
|
---|
| 913 | void addSystemEvents(void);
|
---|
| 914 |
|
---|
| 915 |
|
---|
| 916 | /*!
|
---|
| 917 | \brief
|
---|
| 918 | Handler method for display size change notifications
|
---|
| 919 | */
|
---|
| 920 | bool handleDisplaySizeChange(const EventArgs& e);
|
---|
| 921 |
|
---|
| 922 |
|
---|
| 923 | /*************************************************************************
|
---|
| 924 | Handlers for System events
|
---|
| 925 | *************************************************************************/
|
---|
| 926 | /*!
|
---|
| 927 | \brief
|
---|
| 928 | Handler called when the main system GUI Sheet (or root window) is changed.
|
---|
| 929 |
|
---|
| 930 | \a e is a WindowEventArgs with 'window' set to the old root window.
|
---|
| 931 | */
|
---|
| 932 | void onGUISheetChanged(WindowEventArgs& e);
|
---|
| 933 |
|
---|
| 934 |
|
---|
| 935 | /*!
|
---|
| 936 | \brief
|
---|
| 937 | Handler called when the single-click timeout value is changed.
|
---|
| 938 | */
|
---|
| 939 | void onSingleClickTimeoutChanged(EventArgs& e);
|
---|
| 940 |
|
---|
| 941 |
|
---|
| 942 | /*!
|
---|
| 943 | \brief
|
---|
| 944 | Handler called when the multi-click timeout value is changed.
|
---|
| 945 | */
|
---|
| 946 | void onMultiClickTimeoutChanged(EventArgs& e);
|
---|
| 947 |
|
---|
| 948 |
|
---|
| 949 | /*!
|
---|
| 950 | \brief
|
---|
| 951 | Handler called when the size of the multi-click tolerance area is changed.
|
---|
| 952 | */
|
---|
| 953 | void onMultiClickAreaSizeChanged(EventArgs& e);
|
---|
| 954 |
|
---|
| 955 |
|
---|
| 956 | /*!
|
---|
| 957 | \brief
|
---|
| 958 | Handler called when the default system font is changed.
|
---|
| 959 | */
|
---|
| 960 | void onDefaultFontChanged(EventArgs& e);
|
---|
| 961 |
|
---|
| 962 |
|
---|
| 963 | /*!
|
---|
| 964 | \brief
|
---|
| 965 | Handler called when the default system mouse cursor image is changed.
|
---|
| 966 | */
|
---|
| 967 | void onDefaultMouseCursorChanged(EventArgs& e);
|
---|
| 968 |
|
---|
| 969 |
|
---|
| 970 | /*!
|
---|
| 971 | \brief
|
---|
| 972 | Handler called when the mouse movement scaling factor is changed.
|
---|
| 973 | */
|
---|
| 974 | void onMouseMoveScalingChanged(EventArgs& e);
|
---|
| 975 |
|
---|
| 976 |
|
---|
| 977 | /*************************************************************************
|
---|
| 978 | Implementation Data
|
---|
| 979 | *************************************************************************/
|
---|
| 980 | Renderer* d_renderer; //!< Holds the pointer to the Renderer object given to us in the constructor
|
---|
| 981 | ResourceProvider* d_resourceProvider; //!< Holds the pointer to the ResourceProvider object given to us by the renderer or the System constructor.
|
---|
| 982 | Font* d_defaultFont; //!< Holds a pointer to the default GUI font.
|
---|
| 983 | bool d_gui_redraw; //!< True if GUI should be re-drawn, false if render should re-use last times queue.
|
---|
| 984 |
|
---|
| 985 | Window* d_wndWithMouse; //!< Pointer to the window that currently contains the mouse.
|
---|
| 986 | Window* d_activeSheet; //!< The active GUI sheet (root window)
|
---|
| 987 | Window* d_modalTarget; //!< Pointer to the window that is the current modal target. NULL is there is no modal target.
|
---|
| 988 |
|
---|
| 989 | String d_strVersion; //!< CEGUI version
|
---|
| 990 |
|
---|
| 991 | uint d_sysKeys; //!< Current set of system keys pressed (in mk1 these were passed in, here we track these ourself).
|
---|
| 992 | bool d_lshift; //!< Tracks state of left shift.
|
---|
| 993 | bool d_rshift; //!< Tracks state of right shift.
|
---|
| 994 | bool d_lctrl; //!< Tracks state of left control.
|
---|
| 995 | bool d_rctrl; //!< Tracks state of right control.
|
---|
| 996 | bool d_lalt; //!< Tracks state of left alt.
|
---|
| 997 | bool d_ralt; //!< Tracks state of right alt.
|
---|
| 998 |
|
---|
| 999 | double d_click_timeout; //!< Timeout value, in seconds, used to generate a single-click (button down then up)
|
---|
| 1000 | double d_dblclick_timeout; //!< Timeout value, in seconds, used to generate multi-click events (botton down, then up, then down, and so on).
|
---|
| 1001 | Size d_dblclick_size; //!< Size of area the mouse can move and still make multi-clicks.
|
---|
| 1002 |
|
---|
| 1003 | MouseClickTrackerImpl* const d_clickTrackerPimpl; //!< Tracks mouse button click generation.
|
---|
| 1004 |
|
---|
| 1005 | // mouse cursor related
|
---|
| 1006 | const Image* d_defaultMouseCursor; //!< Image to be used as the default mouse cursor.
|
---|
| 1007 |
|
---|
| 1008 | // scripting
|
---|
| 1009 | ScriptModule* d_scriptModule; //!< Points to the scripting support module.
|
---|
| 1010 | String d_termScriptName; //!< Name of the script to run upon system shutdown.
|
---|
| 1011 |
|
---|
| 1012 | float d_mouseScalingFactor; //!< Scaling applied to mouse movement inputs.
|
---|
| 1013 |
|
---|
| 1014 | XMLParser* d_xmlParser; //!< XMLParser object we use to process xml files.
|
---|
| 1015 | bool d_ourXmlParser; //!< true when we created the xml parser.
|
---|
| 1016 |
|
---|
| 1017 | Tooltip* d_defaultTooltip; //!< System default tooltip object.
|
---|
| 1018 | bool d_weOwnTooltip; //!< true if System created the custom Tooltip.
|
---|
| 1019 | };
|
---|
| 1020 |
|
---|
| 1021 | } // End of CEGUI namespace section
|
---|
| 1022 |
|
---|
| 1023 |
|
---|
| 1024 | #if defined(_MSC_VER)
|
---|
| 1025 | # pragma warning(pop)
|
---|
| 1026 | #endif
|
---|
| 1027 |
|
---|
| 1028 | #endif // end of guard _CEGUISystem_h_
|
---|