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
00077 static const String EventGUISheetChanged;
00078 static const String EventSingleClickTimeoutChanged;
00079 static const String EventMultiClickTimeoutChanged;
00080 static const String EventMultiClickAreaSizeChanged;
00081 static const String EventDefaultFontChanged;
00082 static const String EventDefaultMouseCursorChanged;
00083 static const String EventMouseMoveScalingChanged;
00084
00085 static const String EventDisplaySizeChanged;
00087 static const String EventRenderedStringParserChanged;
00088
00089
00090
00091
00121 static System& create(Renderer& renderer,
00122 ResourceProvider* resourceProvider = 0,
00123 XMLParser* xmlParser = 0,
00124 ImageCodec* imageCodec = 0,
00125 ScriptModule* scriptModule = 0,
00126 const String& configFile = "",
00127 const String& logFile = "CEGUI.log");
00128
00130 static void destroy();
00131
00139 Renderer* getRenderer(void) const {return d_renderer;}
00140
00141
00149 static System& getSingleton(void);
00150
00151
00159 static System* getSingletonPtr(void);
00160
00161
00172 void setDefaultFont(const String& name);
00173
00174
00185 void setDefaultFont(Font* font);
00186
00187
00195 Font* getDefaultFont(void) const {return d_defaultFont;}
00196
00197
00205 void signalRedraw() {d_gui_redraw = true;}
00206
00207
00215 bool isRedrawRequested() const {return d_gui_redraw;}
00216
00217
00227 void renderGUI(void);
00228
00229
00240 Window* setGUISheet(Window* sheet);
00241
00242
00250 Window* getGUISheet(void) const {return d_activeSheet;}
00251
00252
00262 double getSingleClickTimeout(void) const {return d_click_timeout;}
00263
00264
00276 double getMultiClickTimeout(void) const {return d_dblclick_timeout;}
00277
00278
00289 const Size& getMultiClickToleranceAreaSize(void) const {return d_dblclick_size;}
00290
00291
00311 void setSingleClickTimeout(double timeout);
00312
00313
00334 void setMultiClickTimeout(double timeout);
00335
00336
00350 void setMultiClickToleranceAreaSize(const Size& sz);
00351
00365 bool isMouseClickEventGenerationEnabled() const;
00366
00380 void setMouseClickEventGenerationEnabled(const bool enable);
00381
00390 const Image* getDefaultMouseCursor(void) const {return d_defaultMouseCursor;}
00391
00392
00404 void setDefaultMouseCursor(const Image* image);
00405
00406
00417 void setDefaultMouseCursor(MouseCursorImage image) {setDefaultMouseCursor((const Image*)image);}
00418
00419
00435 void setDefaultMouseCursor(const String& imageset, const String& image_name);
00436
00437
00445 Window* getWindowContainingMouse(void) const {return d_wndWithMouse;}
00446
00447
00455 ScriptModule* getScriptingModule(void) const;
00456
00467 void setScriptingModule(ScriptModule* scriptModule);
00468
00476 ResourceProvider* getResourceProvider(void) const;
00477
00488 void executeScriptFile(const String& filename, const String& resourceGroup = "") const;
00489
00490
00502 int executeScriptGlobal(const String& function_name) const;
00503
00504
00515 void executeScriptString(const String& str) const;
00516
00517
00525 float getMouseMoveScaling(void) const;
00526
00527
00538 void setMouseMoveScaling(float scaling);
00539
00540
00549 void notifyWindowDestroyed(const Window* window);
00550
00551
00559 uint getSystemKeys(void) const { return d_sysKeys; }
00560
00573 void setXMLParser(const String& parserName);
00574
00592 void setXMLParser(XMLParser* parser);
00593
00598 XMLParser* getXMLParser(void) const { return d_xmlParser; }
00599
00600
00614 void setDefaultTooltip(Tooltip* tooltip);
00615
00631 void setDefaultTooltip(const String& tooltipType);
00632
00641 Tooltip* getDefaultTooltip(void) const { return d_defaultTooltip; }
00642
00643
00652 void setModalTarget(Window* target) {d_modalTarget = target;}
00653
00661 Window* getModalTarget(void) const {return d_modalTarget;}
00662
00707 static void setDefaultXMLParserName(const String& parserName);
00708
00718 static const String getDefaultXMLParserName();
00719
00734 bool updateWindowContainingMouse();
00735
00740 ImageCodec& getImageCodec() const;
00741
00746 void setImageCodec(const String& codecName);
00747
00758 void setImageCodec(ImageCodec& codec);
00759
00764 static void setDefaultImageCodecName(const String& codecName);
00765
00770 static const String& getDefaultImageCodecName();
00771
00789 void notifyDisplaySizeChanged(const Size& new_size);
00790
00804 RenderedStringParser* getDefaultCustomRenderedStringParser() const;
00805
00820 void setDefaultCustomRenderedStringParser(RenderedStringParser* parser);
00821
00822
00823
00824
00839 bool injectMouseMove(float delta_x, float delta_y);
00840
00841
00850 bool injectMouseLeaves(void);
00851
00852
00864 bool injectMouseButtonDown(MouseButton button);
00865
00866
00878 bool injectMouseButtonUp(MouseButton button);
00879
00880
00892 bool injectKeyDown(uint key_code);
00893
00894
00906 bool injectKeyUp(uint key_code);
00907
00908
00920 bool injectChar(utf32 code_point);
00921
00922
00934 bool injectMouseWheelChange(float delta);
00935
00936
00951 bool injectMousePosition(float x_pos, float y_pos);
00952
00953
00964 bool injectTimePulse(float timeElapsed);
00965
00990 bool injectMouseButtonClick(const MouseButton button);
00991
01016 bool injectMouseButtonDoubleClick(const MouseButton button);
01017
01042 bool injectMouseButtonTripleClick(const MouseButton button);
01043
01044 private:
01045
01046 System(const System& obj);
01047 System& operator=(const System& obj);
01048
01049
01050
01051
01081 System(Renderer& renderer, ResourceProvider* resourceProvider,
01082 XMLParser* xmlParser, ImageCodec* imageCodec,
01083 ScriptModule* scriptModule, const String& configFile,
01084 const String& logFile);
01085
01090 ~System(void);
01091
01105 Window* getTargetWindow(const Point& pt, const bool allow_disabled) const;
01106
01107
01115 Window* getKeyboardTargetWindow(void) const;
01116
01117
01128 Window* getNextTargetWindow(Window* w) const;
01129
01130
01141 SystemKey mouseButtonToSyskey(MouseButton btn) const;
01142
01143
01159 SystemKey keyCodeToSyskey(Key::Scan key, bool direction);
01160
01162 void outputLogHeader();
01163
01165 void addStandardWindowFactories();
01166
01168 void createSingletons();
01169
01171 void destroySingletons();
01172
01174 void setupXMLParser();
01175
01177 void cleanupXMLParser();
01178
01180 bool mouseMoveInjection_impl(MouseEventArgs& ma);
01181
01183 void setupImageCodec(const String& codecName);
01184
01186 void cleanupImageCodec();
01187
01189 void initialiseVersionString();
01190
01191
01192
01193
01200 void onGUISheetChanged(WindowEventArgs& e);
01201
01202
01207 void onSingleClickTimeoutChanged(EventArgs& e);
01208
01209
01214 void onMultiClickTimeoutChanged(EventArgs& e);
01215
01216
01221 void onMultiClickAreaSizeChanged(EventArgs& e);
01222
01223
01228 void onDefaultFontChanged(EventArgs& e);
01229
01230
01235 void onDefaultMouseCursorChanged(EventArgs& e);
01236
01237
01242 void onMouseMoveScalingChanged(EventArgs& e);
01243
01244
01245
01246
01247
01248 Renderer* d_renderer;
01249 ResourceProvider* d_resourceProvider;
01250 bool d_ourResourceProvider;
01251 Font* d_defaultFont;
01252 bool d_gui_redraw;
01253
01254 Window* d_wndWithMouse;
01255 Window* d_activeSheet;
01256 Window* d_modalTarget;
01257
01258 String d_strVersion;
01259
01260 uint d_sysKeys;
01261 bool d_lshift;
01262 bool d_rshift;
01263 bool d_lctrl;
01264 bool d_rctrl;
01265 bool d_lalt;
01266 bool d_ralt;
01267
01268 double d_click_timeout;
01269 double d_dblclick_timeout;
01270 Size d_dblclick_size;
01271
01272 MouseClickTrackerImpl* const d_clickTrackerPimpl;
01273
01274
01275 const Image* d_defaultMouseCursor;
01276
01277
01278 ScriptModule* d_scriptModule;
01279 String d_termScriptName;
01280
01281 float d_mouseScalingFactor;
01282
01283 XMLParser* d_xmlParser;
01284 bool d_ourXmlParser;
01285 DynamicModule* d_parserModule;
01286
01287 Tooltip* d_defaultTooltip;
01288 bool d_weOwnTooltip;
01289
01290 static String d_defaultXMLParserName;
01291
01293 ImageCodec* d_imageCodec;
01295 bool d_ourImageCodec;
01299 DynamicModule* d_imageCodecModule;
01301 static String d_defaultImageCodecName;
01303 bool d_ourLogger;
01305 RenderedStringParser* d_customRenderedStringParser;
01307 bool d_generateMouseClickEvents;
01308 };
01309
01310 }
01311
01312
01313 #if defined(_MSC_VER)
01314 # pragma warning(pop)
01315 #endif
01316
01317 #endif // end of guard _CEGUISystem_h_