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
00035 #ifndef _SO3_WIDGET_MANAGER_H_
00036 #define _SO3_WIDGET_MANAGER_H_
00037
00038 #include "../SCOLBasic/SO3Prerequisites.h"
00039 #include "SO3WidgetFactory.h"
00040 #include "SO3WidgetListener.h"
00041 #include <Ogre.h>
00042
00043 namespace SO3
00044 {
00045
00048 class _SO3_Export SWidgetManager : public Ogre::Singleton<SWidgetManager>
00049 {
00050 public:
00051 protected:
00052 private:
00053 typedef std::map<std::string, SWidgetFactory*> WidgetFactoryList;
00054 typedef std::map<std::string, SWidget*> WidgetList;
00055 typedef std::multimap<unsigned short, SWidget*> WidgetListByZOrder;
00056 typedef std::set<SWidgetListener*> WidgetListenerList;
00057 WidgetFactoryList widgetFactoryList;
00058 WidgetList widgetList;
00059 WidgetList overlayedWidgetList;
00060 WidgetListByZOrder widgetListByZOrder;
00061 WidgetListenerList widgetListenerList;
00062 SWidget* focusedWidget;
00063
00064 public:
00068 SWidgetManager();
00069
00073 ~SWidgetManager();
00074
00077 void AddWidgetFactory(SWidgetFactory* newWidgetFactory);
00078
00081 void RemoveWidgetFactory(SWidgetFactory* existingWidgetFactory);
00082
00085 void RemoveWidgetFactory(std::string existingWidgetFactoryName);
00086
00090 SWidget* CreateWidget(SScene* targetScene, std::string widgetName, int xPos, int yPos, unsigned short width, unsigned short height, SViewPort* targetViewport, unsigned int widgetZOrder, std::string widgetType);
00091
00095 SWidget* CreateWidget(SScene* targetScene, std::string widgetName, int xPos, int yPos, unsigned short width, unsigned short height, SViewPort* targetViewport, std::string widgetType);
00096
00100 SWidget* CreateWidget(SScene* targetScene, std::string widgetName, unsigned short width, unsigned short height, SMaterial* targetMaterial, unsigned short targetTechnique, unsigned short targetPass, unsigned short targetTextureUnit, std::string widgetType);
00101
00104 void DeleteWidget(SWidget* existingWidget);
00105
00108 void AddWidgetListener(SWidgetListener* newWidgetListener);
00109
00112 void RemoveWidgetListener(SWidgetListener* existingWidgetListener);
00113
00117 static SWidgetManager& getSingleton();
00118
00119
00120
00121
00122 static SWidgetManager* getSingletonPtr();
00123
00131 void InjectMouseMove(SWindow* originWindow, int xPos, int yPos, MouseButtonId button);
00132
00140 void InjectMouseWheel(SWindow* originWindow, int scrollX, int scrollY, int relativeScroll);
00141
00149 void InjectMouseDown(SWindow* originWindow, int xPos, int yPos, MouseButtonId button);
00150
00158 void InjectMouseUp(SWindow* originWindow, int xPos, int yPos, MouseButtonId button);
00159
00162 void InjectKeyEvent(UINT msg, WindowHandle hwnd, WPARAM wParam, LPARAM lParam);
00163
00166 void InjectTextEvent(std::string text);
00167
00170 void UpdateWidgetsZOrder();
00171
00174 void UpdateFocusedWidget(SWidget* focusTargetedWidget);
00175
00178 SWidget* GetFocusedWidget();
00179
00183 void _FireScriptWidgetEvent(SWidget* targetedWidget, SWidget::WidgetScriptFunction functionCalled);
00184 protected:
00185 private:
00188 SWidget* GetWidgetUnder(SWindow* originWindow, int posX, int posY);
00189
00192 void _FireEnterWidgetEvent(SWidget* targetedWidget);
00193
00196 void _FireInsideWidgetEvent(SWidget* targetedWidget);
00197
00200 void _FireExitWidgetEvent(SWidget* targetedWidget);
00201
00204 void _FireMouseDownWidgetEvent(SWidget* targetedWidget, int mousePosX, int mousePosY, MouseButtonId mouseButton);
00205
00208 void _FireMouseUpWidgetEvent(SWidget* targetedWidget, int mousePosX, int mousePosY, MouseButtonId mouseButton);
00209
00212 void _FireMouseWheelWidgetEvent(SWidget* targetedWidget, int relativeScroll);
00213 };
00214
00215 }
00216
00217 #endif