Crazy Eddies GUI System 0.7.6
|
00001 /*********************************************************************** 00002 filename: CEGUISystem.h 00003 created: 20/2/2004 00004 author: Paul D Turner 00005 00006 purpose: Defines interface for main GUI system class 00007 *************************************************************************/ 00008 /*************************************************************************** 00009 * Copyright (C) 2004 - 2011 Paul D Turner & The CEGUI Development Team 00010 * 00011 * Permission is hereby granted, free of charge, to any person obtaining 00012 * a copy of this software and associated documentation files (the 00013 * "Software"), to deal in the Software without restriction, including 00014 * without limitation the rights to use, copy, modify, merge, publish, 00015 * distribute, sublicense, and/or sell copies of the Software, and to 00016 * permit persons to whom the Software is furnished to do so, subject to 00017 * the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be 00020 * included in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00023 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00024 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00025 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 00026 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00027 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00028 * OTHER DEALINGS IN THE SOFTWARE. 00029 ***************************************************************************/ 00030 #ifndef _CEGUISystem_h_ 00031 #define _CEGUISystem_h_ 00032 00033 #include "CEGUIBase.h" 00034 #include "CEGUIString.h" 00035 #include "CEGUISingleton.h" 00036 #include "CEGUIRenderer.h" 00037 #include "CEGUIMouseCursor.h" 00038 #include "CEGUIInputEvent.h" 00039 #include "CEGUIResourceProvider.h" 00040 00041 00042 #if defined(_MSC_VER) 00043 # pragma warning(push) 00044 # pragma warning(disable : 4275) 00045 # pragma warning(disable : 4251) 00046 #endif 00047 00048 00049 // Start of CEGUI namespace section 00050 namespace CEGUI 00051 { 00053 struct MouseClickTrackerImpl; 00054 00055 00064 class CEGUIEXPORT System : public Singleton<System>, public EventSet 00065 { 00066 public: 00067 static const String EventNamespace; 00068 00069 /************************************************************************* 00070 Constants 00071 *************************************************************************/ 00072 static const double DefaultSingleClickTimeout; 00073 static const double DefaultMultiClickTimeout; 00074 static const Size DefaultMultiClickAreaSize; 00075 00076 // event names 00082 static const String EventGUISheetChanged; 00086 static const String EventSingleClickTimeoutChanged; 00090 static const String EventMultiClickTimeoutChanged; 00094 static const String EventMultiClickAreaSizeChanged; 00098 static const String EventDefaultFontChanged; 00102 static const String EventDefaultMouseCursorChanged; 00106 static const String EventMouseMoveScalingChanged; 00112 static const String EventDisplaySizeChanged; 00116 static const String EventRenderedStringParserChanged; 00117 00118 /************************************************************************* 00119 Construction and Destruction 00120 *************************************************************************/ 00150 static System& create(Renderer& renderer, 00151 ResourceProvider* resourceProvider = 0, 00152 XMLParser* xmlParser = 0, 00153 ImageCodec* imageCodec = 0, 00154 ScriptModule* scriptModule = 0, 00155 const String& configFile = "", 00156 const String& logFile = "CEGUI.log"); 00157 00159 static void destroy(); 00160 00168 Renderer* getRenderer(void) const {return d_renderer;} 00169 00170 00178 static System& getSingleton(void); 00179 00180 00188 static System* getSingletonPtr(void); 00189 00190 00201 void setDefaultFont(const String& name); 00202 00203 00214 void setDefaultFont(Font* font); 00215 00216 00224 Font* getDefaultFont(void) const {return d_defaultFont;} 00225 00226 00234 void signalRedraw() {d_gui_redraw = true;} 00235 00236 00244 bool isRedrawRequested() const {return d_gui_redraw;} 00245 00246 00256 void renderGUI(void); 00257 00258 00269 Window* setGUISheet(Window* sheet); 00270 00271 00279 Window* getGUISheet(void) const {return d_activeSheet;} 00280 00281 00291 double getSingleClickTimeout(void) const {return d_click_timeout;} 00292 00293 00305 double getMultiClickTimeout(void) const {return d_dblclick_timeout;} 00306 00307 00318 const Size& getMultiClickToleranceAreaSize(void) const {return d_dblclick_size;} 00319 00320 00340 void setSingleClickTimeout(double timeout); 00341 00342 00363 void setMultiClickTimeout(double timeout); 00364 00365 00379 void setMultiClickToleranceAreaSize(const Size& sz); 00380 00394 bool isMouseClickEventGenerationEnabled() const; 00395 00409 void setMouseClickEventGenerationEnabled(const bool enable); 00410 00419 const Image* getDefaultMouseCursor(void) const {return d_defaultMouseCursor;} 00420 00421 00433 void setDefaultMouseCursor(const Image* image); 00434 00435 00446 void setDefaultMouseCursor(MouseCursorImage image) {setDefaultMouseCursor((const Image*)image);} 00447 00448 00464 void setDefaultMouseCursor(const String& imageset, const String& image_name); 00465 00466 00474 Window* getWindowContainingMouse(void) const {return d_wndWithMouse;} 00475 00476 00484 ScriptModule* getScriptingModule(void) const; 00485 00496 void setScriptingModule(ScriptModule* scriptModule); 00497 00505 ResourceProvider* getResourceProvider(void) const; 00506 00517 void executeScriptFile(const String& filename, const String& resourceGroup = "") const; 00518 00519 00531 int executeScriptGlobal(const String& function_name) const; 00532 00533 00544 void executeScriptString(const String& str) const; 00545 00546 00554 float getMouseMoveScaling(void) const; 00555 00556 00567 void setMouseMoveScaling(float scaling); 00568 00569 00578 void notifyWindowDestroyed(const Window* window); 00579 00580 00588 uint getSystemKeys(void) const { return d_sysKeys; } 00589 00602 void setXMLParser(const String& parserName); 00603 00621 void setXMLParser(XMLParser* parser); 00622 00627 XMLParser* getXMLParser(void) const { return d_xmlParser; } 00628 00629 00643 void setDefaultTooltip(Tooltip* tooltip); 00644 00660 void setDefaultTooltip(const String& tooltipType); 00661 00670 Tooltip* getDefaultTooltip(void) const; 00671 00680 void setModalTarget(Window* target) {d_modalTarget = target;} 00681 00689 Window* getModalTarget(void) const {return d_modalTarget;} 00690 00735 static void setDefaultXMLParserName(const String& parserName); 00736 00746 static const String getDefaultXMLParserName(); 00747 00762 bool updateWindowContainingMouse(); 00763 00768 ImageCodec& getImageCodec() const; 00769 00774 void setImageCodec(const String& codecName); 00775 00786 void setImageCodec(ImageCodec& codec); 00787 00792 static void setDefaultImageCodecName(const String& codecName); 00793 00798 static const String& getDefaultImageCodecName(); 00799 00817 void notifyDisplaySizeChanged(const Size& new_size); 00818 00832 RenderedStringParser* getDefaultCustomRenderedStringParser() const; 00833 00848 void setDefaultCustomRenderedStringParser(RenderedStringParser* parser); 00849 00860 void invalidateAllCachedRendering(); 00861 00862 /************************************************************************* 00863 Input injection interface 00864 *************************************************************************/ 00879 bool injectMouseMove(float delta_x, float delta_y); 00880 00881 00890 bool injectMouseLeaves(void); 00891 00892 00904 bool injectMouseButtonDown(MouseButton button); 00905 00906 00918 bool injectMouseButtonUp(MouseButton button); 00919 00920 00932 bool injectKeyDown(uint key_code); 00933 00934 00946 bool injectKeyUp(uint key_code); 00947 00948 00960 bool injectChar(utf32 code_point); 00961 00962 00974 bool injectMouseWheelChange(float delta); 00975 00976 00991 bool injectMousePosition(float x_pos, float y_pos); 00992 00993 01004 bool injectTimePulse(float timeElapsed); 01005 01030 bool injectMouseButtonClick(const MouseButton button); 01031 01056 bool injectMouseButtonDoubleClick(const MouseButton button); 01057 01082 bool injectMouseButtonTripleClick(const MouseButton button); 01083 01084 private: 01085 // unimplemented constructors / assignment 01086 System(const System& obj); 01087 System& operator=(const System& obj); 01088 01089 /************************************************************************* 01090 Implementation Functions 01091 *************************************************************************/ 01121 System(Renderer& renderer, ResourceProvider* resourceProvider, 01122 XMLParser* xmlParser, ImageCodec* imageCodec, 01123 ScriptModule* scriptModule, const String& configFile, 01124 const String& logFile); 01125 01130 ~System(void); 01131 01145 Window* getTargetWindow(const Point& pt, const bool allow_disabled) const; 01146 01147 01155 Window* getKeyboardTargetWindow(void) const; 01156 01157 01168 Window* getNextTargetWindow(Window* w) const; 01169 01170 01181 SystemKey mouseButtonToSyskey(MouseButton btn) const; 01182 01183 01199 SystemKey keyCodeToSyskey(Key::Scan key, bool direction); 01200 01202 void outputLogHeader(); 01203 01205 void addStandardWindowFactories(); 01206 01208 void createSingletons(); 01209 01211 void destroySingletons(); 01212 01214 void setupXMLParser(); 01215 01217 void cleanupXMLParser(); 01218 01220 bool mouseMoveInjection_impl(MouseEventArgs& ma); 01221 01223 void setupImageCodec(const String& codecName); 01224 01226 void cleanupImageCodec(); 01227 01229 void initialiseVersionString(); 01230 01232 void invalidateAllWindows(); 01233 01235 Window* getCommonAncestor(Window* w1, Window* w2); 01236 01238 void notifyMouseTransition(Window* top, Window* bottom, 01239 void (Window::*func)(MouseEventArgs&), 01240 MouseEventArgs& args); 01242 void createSystemOwnedDefaultTooltipWindow() const; 01244 void destroySystemOwnedDefaultTooltipWindow(); 01245 01246 /************************************************************************* 01247 Handlers for System events 01248 *************************************************************************/ 01255 void onGUISheetChanged(WindowEventArgs& e); 01256 01257 01262 void onSingleClickTimeoutChanged(EventArgs& e); 01263 01264 01269 void onMultiClickTimeoutChanged(EventArgs& e); 01270 01271 01276 void onMultiClickAreaSizeChanged(EventArgs& e); 01277 01278 01283 void onDefaultFontChanged(EventArgs& e); 01284 01285 01290 void onDefaultMouseCursorChanged(EventArgs& e); 01291 01292 01297 void onMouseMoveScalingChanged(EventArgs& e); 01298 01299 01300 /************************************************************************* 01301 Implementation Data 01302 *************************************************************************/ 01303 Renderer* d_renderer; 01304 ResourceProvider* d_resourceProvider; 01305 bool d_ourResourceProvider; 01306 Font* d_defaultFont; 01307 bool d_gui_redraw; 01308 01309 Window* d_wndWithMouse; 01310 Window* d_activeSheet; 01311 Window* d_modalTarget; 01312 01313 String d_strVersion; 01314 01315 uint d_sysKeys; 01316 bool d_lshift; 01317 bool d_rshift; 01318 bool d_lctrl; 01319 bool d_rctrl; 01320 bool d_lalt; 01321 bool d_ralt; 01322 01323 double d_click_timeout; 01324 double d_dblclick_timeout; 01325 Size d_dblclick_size; 01326 01327 MouseClickTrackerImpl* const d_clickTrackerPimpl; 01328 01329 // mouse cursor related 01330 const Image* d_defaultMouseCursor; 01331 01332 // scripting 01333 ScriptModule* d_scriptModule; 01334 String d_termScriptName; 01335 01336 float d_mouseScalingFactor; 01337 01338 XMLParser* d_xmlParser; 01339 bool d_ourXmlParser; 01340 DynamicModule* d_parserModule; 01341 01343 mutable Tooltip* d_defaultTooltip; 01345 mutable bool d_weOwnTooltip; 01347 String d_defaultTooltipType; 01348 01349 static String d_defaultXMLParserName; 01350 01352 ImageCodec* d_imageCodec; 01354 bool d_ourImageCodec; 01358 DynamicModule* d_imageCodecModule; 01360 static String d_defaultImageCodecName; 01362 bool d_ourLogger; 01364 RenderedStringParser* d_customRenderedStringParser; 01366 bool d_generateMouseClickEvents; 01367 }; 01368 01369 } // End of CEGUI namespace section 01370 01371 01372 #if defined(_MSC_VER) 01373 # pragma warning(pop) 01374 #endif 01375 01376 #endif // end of guard _CEGUISystem_h_