00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
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
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
00071
00072 static const double DefaultSingleClickTimeout;
00073 static const double DefaultMultiClickTimeout;
00074 static const Size DefaultMultiClickAreaSize;
00075
00076
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
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
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
01086 System(const System& obj);
01087 System& operator=(const System& obj);
01088
01089
01090
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
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
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
01330 const Image* d_defaultMouseCursor;
01331
01332
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 }
01370
01371
01372 #if defined(_MSC_VER)
01373 # pragma warning(pop)
01374 #endif
01375
01376 #endif // end of guard _CEGUISystem_h_