00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "MyGUI_Precompiled.h"
00024 #include "MyGUI_Gui.h"
00025 #include "MyGUI_Widget.h"
00026
00027 #include "MyGUI_InputManager.h"
00028 #include "MyGUI_SubWidgetManager.h"
00029 #include "MyGUI_LogManager.h"
00030 #include "MyGUI_SkinManager.h"
00031 #include "MyGUI_WidgetManager.h"
00032 #include "MyGUI_LayerManager.h"
00033 #include "MyGUI_FontManager.h"
00034 #include "MyGUI_ControllerManager.h"
00035 #include "MyGUI_PointerManager.h"
00036 #include "MyGUI_ClipboardManager.h"
00037 #include "MyGUI_LayoutManager.h"
00038 #include "MyGUI_PluginManager.h"
00039 #include "MyGUI_DynLibManager.h"
00040 #include "MyGUI_DelegateManager.h"
00041 #include "MyGUI_LanguageManager.h"
00042 #include "MyGUI_ResourceManager.h"
00043 #include "MyGUI_RenderManager.h"
00044 #include "MyGUI_FactoryManager.h"
00045
00046 namespace MyGUI
00047 {
00048
00049 const std::string INSTANCE_TYPE_NAME("Gui");
00050
00051 Gui* Gui::msInstance = nullptr;
00052
00053 Gui* Gui::getInstancePtr()
00054 {
00055 return msInstance;
00056 }
00057
00058 Gui& Gui::getInstance()
00059 {
00060 MYGUI_ASSERT(0 != msInstance, "instance " << INSTANCE_TYPE_NAME << " was not created");
00061 return (*msInstance);
00062 }
00063
00064 Gui::Gui() :
00065 mIsInitialise(false)
00066 {
00067 MYGUI_ASSERT(0 == msInstance, "instance " << INSTANCE_TYPE_NAME << " is exsist");
00068 msInstance = this;
00069 }
00070
00071 Gui::~Gui()
00072 {
00073 msInstance = nullptr;
00074 }
00075
00076 void Gui::initialise(const std::string& _core, const std::string& _logFileName)
00077 {
00078
00079 LogManager::registerSection(MYGUI_LOG_SECTION, _logFileName);
00080
00081 MYGUI_ASSERT(false == mIsInitialise, INSTANCE_TYPE_NAME << " initialised twice");
00082
00083 MYGUI_LOG(Info, "* Initialise: " << INSTANCE_TYPE_NAME);
00084 MYGUI_LOG(Info, "* MyGUI version "
00085 << MYGUI_VERSION_MAJOR << "."
00086 << MYGUI_VERSION_MINOR << "."
00087 << MYGUI_VERSION_PATCH);
00088
00089
00090 mResourceManager = new ResourceManager();
00091 mLayerManager = new LayerManager();
00092 mWidgetManager = new WidgetManager();
00093 mInputManager = new InputManager();
00094 mSubWidgetManager = new SubWidgetManager();
00095 mSkinManager = new SkinManager();
00096 mFontManager = new FontManager();
00097 mControllerManager = new ControllerManager();
00098 mPointerManager = new PointerManager();
00099 mClipboardManager = new ClipboardManager();
00100 mLayoutManager = new LayoutManager();
00101 mDynLibManager = new DynLibManager();
00102 mPluginManager = new PluginManager();
00103 mDelegateManager = new DelegateManager();
00104 mLanguageManager = new LanguageManager();
00105 mFactoryManager = new FactoryManager();
00106
00107 mResourceManager->initialise();
00108 mLayerManager->initialise();
00109 mWidgetManager->initialise();
00110 mInputManager->initialise();
00111 mSubWidgetManager->initialise();
00112 mSkinManager->initialise();
00113 mFontManager->initialise();
00114 mControllerManager->initialise();
00115 mPointerManager->initialise();
00116 mClipboardManager->initialise();
00117 mLayoutManager->initialise();
00118 mDynLibManager->initialise();
00119 mPluginManager->initialise();
00120 mDelegateManager->initialise();
00121 mLanguageManager->initialise();
00122 mFactoryManager->initialise();
00123
00124 WidgetManager::getInstance().registerUnlinker(this);
00125
00126
00127 if ( _core.empty() == false ) mResourceManager->load(_core);
00128
00129 mViewSize = RenderManager::getInstance().getViewSize();
00130 resizeWindow(mViewSize);
00131
00132 MYGUI_LOG(Info, INSTANCE_TYPE_NAME << " successfully initialized");
00133 mIsInitialise = true;
00134 }
00135
00136 void Gui::shutdown()
00137 {
00138 if (false == mIsInitialise) return;
00139 MYGUI_LOG(Info, "* Shutdown: " << INSTANCE_TYPE_NAME);
00140
00141 _destroyAllChildWidget();
00142
00143
00144 mPointerManager->shutdown();
00145 mInputManager->shutdown();
00146 mSkinManager->shutdown();
00147 mSubWidgetManager->shutdown();
00148 mLayerManager->shutdown();
00149 mFontManager->shutdown();
00150 mControllerManager->shutdown();
00151 mClipboardManager->shutdown();
00152 mLayoutManager->shutdown();
00153 mPluginManager->shutdown();
00154 mDynLibManager->shutdown();
00155 mDelegateManager->shutdown();
00156 mLanguageManager->shutdown();
00157 mResourceManager->shutdown();
00158 mFactoryManager->shutdown();
00159
00160 WidgetManager::getInstance().unregisterUnlinker(this);
00161 mWidgetManager->shutdown();
00162
00163 delete mPointerManager;
00164 delete mWidgetManager;
00165 delete mInputManager;
00166 delete mSkinManager;
00167 delete mSubWidgetManager;
00168 delete mLayerManager;
00169 delete mFontManager;
00170 delete mControllerManager;
00171 delete mClipboardManager;
00172 delete mLayoutManager;
00173 delete mDynLibManager;
00174 delete mPluginManager;
00175 delete mDelegateManager;
00176 delete mLanguageManager;
00177 delete mResourceManager;
00178 delete mFactoryManager;
00179
00180 MYGUI_LOG(Info, INSTANCE_TYPE_NAME << " successfully shutdown");
00181
00182
00183 LogManager::unregisterSection(MYGUI_LOG_SECTION);
00184
00185 mIsInitialise = false;
00186 }
00187
00188 bool Gui::injectMouseMove( int _absx, int _absy, int _absz) { return mInputManager->injectMouseMove(_absx, _absy, _absz); }
00189 bool Gui::injectMousePress( int _absx, int _absy, MouseButton _id ) { return mInputManager->injectMousePress(_absx, _absy, _id); }
00190 bool Gui::injectMouseRelease( int _absx, int _absy, MouseButton _id ) { return mInputManager->injectMouseRelease(_absx, _absy, _id); }
00191
00192 bool Gui::injectKeyPress(KeyCode _key, Char _text) { return mInputManager->injectKeyPress(_key, _text); }
00193 bool Gui::injectKeyRelease(KeyCode _key) { return mInputManager->injectKeyRelease(_key); }
00194
00195
00196 WidgetPtr Gui::baseCreateWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name)
00197 {
00198 WidgetPtr widget = WidgetManager::getInstance().createWidget(_style, _type, _skin, _coord, _align, nullptr, nullptr, this, _name);
00199 mWidgetChild.push_back(widget);
00200
00201 if (!_layer.empty()) LayerManager::getInstance().attachToLayerNode(_layer, widget);
00202 return widget;
00203 }
00204
00205 WidgetPtr Gui::findWidgetT(const std::string& _name, bool _throw)
00206 {
00207 for (VectorWidgetPtr::iterator iter = mWidgetChild.begin(); iter!=mWidgetChild.end(); ++iter)
00208 {
00209 WidgetPtr widget = (*iter)->findWidget(_name);
00210 if (widget != nullptr) return widget;
00211 }
00212 MYGUI_ASSERT(!_throw, "Widget '" << _name << "' not found");
00213 return nullptr;
00214 }
00215
00216
00217 void Gui::_destroyChildWidget(WidgetPtr _widget)
00218 {
00219 MYGUI_ASSERT(nullptr != _widget, "invalid widget pointer");
00220
00221 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
00222 if (iter != mWidgetChild.end())
00223 {
00224
00225 MyGUI::WidgetPtr widget = *iter;
00226
00227
00228 *iter = mWidgetChild.back();
00229 mWidgetChild.pop_back();
00230
00231
00232 mWidgetManager->unlinkFromUnlinkers(_widget);
00233
00234
00235 _deleteWidget(widget);
00236 }
00237 else MYGUI_EXCEPT("Widget '" << _widget->getName() << "' not found");
00238 }
00239
00240
00241 void Gui::_destroyAllChildWidget()
00242 {
00243 while (false == mWidgetChild.empty())
00244 {
00245
00246 WidgetPtr widget = mWidgetChild.back();
00247 mWidgetChild.pop_back();
00248
00249
00250
00251
00252 mWidgetManager->unlinkFromUnlinkers(widget);
00253
00254
00255 _deleteWidget(widget);
00256 }
00257 }
00258
00259 bool Gui::load(const std::string& _file)
00260 {
00261 return mResourceManager->load(_file);
00262 }
00263
00264 void Gui::destroyWidget(WidgetPtr _widget)
00265 {
00266 mWidgetManager->destroyWidget(_widget);
00267 }
00268
00269 void Gui::destroyWidgets(VectorWidgetPtr& _widgets)
00270 {
00271 mWidgetManager->destroyWidgets(_widgets);
00272 }
00273
00274 void Gui::destroyWidgets(EnumeratorWidgetPtr& _widgets)
00275 {
00276 mWidgetManager->destroyWidgets(_widgets);
00277 }
00278
00279 void Gui::setVisiblePointer(bool _value)
00280 {
00281 mPointerManager->setVisible(_value);
00282 }
00283
00284 bool Gui::isVisiblePointer()
00285 {
00286 return mPointerManager->isVisible();
00287 }
00288
00289 void Gui::injectFrameEntered(float _time)
00290 {
00291 eventFrameStart(_time);
00292 }
00293
00294 void Gui::_unlinkWidget(WidgetPtr _widget)
00295 {
00296 eventFrameStart.clear(_widget);
00297 }
00298
00299 void Gui::_linkChildWidget(WidgetPtr _widget)
00300 {
00301 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
00302 MYGUI_ASSERT(iter == mWidgetChild.end(), "widget already exist");
00303 mWidgetChild.push_back(_widget);
00304 }
00305
00306 void Gui::_unlinkChildWidget(WidgetPtr _widget)
00307 {
00308 VectorWidgetPtr::iterator iter = std::remove(mWidgetChild.begin(), mWidgetChild.end(), _widget);
00309 MYGUI_ASSERT(iter != mWidgetChild.end(), "widget not found");
00310 mWidgetChild.erase(iter);
00311 }
00312
00313 void Gui::resizeWindow(const IntSize& _size)
00314 {
00315 IntSize oldViewSize = mViewSize;
00316 mViewSize = _size;
00317
00318
00319 for (VectorWidgetPtr::iterator iter = mWidgetChild.begin(); iter!=mWidgetChild.end(); ++iter)
00320 {
00321 ((ICroppedRectangle*)(*iter))->_setAlign(oldViewSize, true);
00322 }
00323 }
00324
00325 }