Go to the documentation of this file.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_ControllerManager.h"
00026 #include "MyGUI_WidgetManager.h"
00027 #include "MyGUI_Common.h"
00028 #include "MyGUI_FactoryManager.h"
00029
00030 #include "MyGUI_ControllerEdgeHide.h"
00031 #include "MyGUI_ControllerFadeAlpha.h"
00032 #include "MyGUI_ControllerPosition.h"
00033
00034 namespace MyGUI
00035 {
00036
00037 MYGUI_INSTANCE_IMPLEMENT(ControllerManager);
00038
00039 void ControllerManager::initialise()
00040 {
00041 MYGUI_ASSERT(false == mIsInitialise, INSTANCE_TYPE_NAME << " initialised twice");
00042 MYGUI_LOG(Info, "* Initialise: " << INSTANCE_TYPE_NAME);
00043
00044 WidgetManager::getInstance().registerUnlinker(this);
00045
00046 const std::string factory_type = "Controller";
00047
00048 FactoryManager::getInstance().registryFactory<ControllerEdgeHide>(factory_type);
00049 FactoryManager::getInstance().registryFactory<ControllerFadeAlpha>(factory_type);
00050 FactoryManager::getInstance().registryFactory<ControllerPosition>(factory_type);
00051
00052 MYGUI_LOG(Info, INSTANCE_TYPE_NAME << " successfully initialized");
00053 mIsInitialise = true;
00054 }
00055
00056 void ControllerManager::shutdown()
00057 {
00058 if (false == mIsInitialise) return;
00059 MYGUI_LOG(Info, "* Shutdown: " << INSTANCE_TYPE_NAME);
00060
00061 const std::string factory_type = "Controller";
00062
00063 FactoryManager::getInstance().unregistryFactory<ControllerEdgeHide>(factory_type);
00064 FactoryManager::getInstance().unregistryFactory<ControllerFadeAlpha>(factory_type);
00065 FactoryManager::getInstance().unregistryFactory<ControllerPosition>(factory_type);
00066
00067 WidgetManager::getInstance().unregisterUnlinker(this);
00068 clear();
00069
00070 MYGUI_LOG(Info, INSTANCE_TYPE_NAME << " successfully shutdown");
00071 mIsInitialise = false;
00072 }
00073
00074 void ControllerManager::clear()
00075 {
00076 for (ListControllerItem::iterator iter=mListItem.begin(); iter!=mListItem.end(); ++iter)
00077 {
00078 delete (*iter).second;
00079 }
00080 mListItem.clear();
00081 }
00082
00083 ControllerItem* ControllerManager::createItem(const std::string& _type)
00084 {
00085 IObject* object = FactoryManager::getInstance().createObject("Controller", _type);
00086 return object->castType<ControllerItem>();
00087 }
00088
00089 void ControllerManager::addItem(WidgetPtr _widget, ControllerItem * _item)
00090 {
00091
00092 if (0 == mListItem.size()) Gui::getInstance().eventFrameStart += newDelegate(this, &ControllerManager::frameEntered);
00093
00094
00095 _item->prepareItem(_widget);
00096
00097 for (ListControllerItem::iterator iter=mListItem.begin(); iter!=mListItem.end(); ++iter)
00098 {
00099
00100 if ((*iter).first == _widget)
00101 {
00102 if ((*iter).second->getTypeName() == _item->getTypeName())
00103 {
00104 delete (*iter).second;
00105 (*iter).second = _item;
00106 return;
00107 }
00108 }
00109 }
00110
00111
00112 mListItem.push_back(PairControllerItem(_widget, _item));
00113 }
00114
00115 void ControllerManager::removeItem(WidgetPtr _widget)
00116 {
00117
00118 for (ListControllerItem::iterator iter=mListItem.begin(); iter!=mListItem.end(); ++iter)
00119 {
00120 if ((*iter).first == _widget) (*iter).first = nullptr;
00121 }
00122 }
00123
00124 void ControllerManager::_unlinkWidget(WidgetPtr _widget)
00125 {
00126 removeItem(_widget);
00127 }
00128
00129 void ControllerManager::frameEntered(float _time)
00130 {
00131 for (ListControllerItem::iterator iter=mListItem.begin(); iter!=mListItem.end(); )
00132 {
00133 if (nullptr == (*iter).first)
00134 {
00135 delete (*iter).second;
00136
00137 iter = mListItem.erase(iter);
00138 continue;
00139 }
00140
00141 if ((*iter).second->addTime((*iter).first, _time))
00142 {
00143 ++iter;
00144 continue;
00145 }
00146
00147
00148 (*iter).first = nullptr;
00149 }
00150
00151 if (0 == mListItem.size()) Gui::getInstance().eventFrameStart -= newDelegate(this, &ControllerManager::frameEntered);
00152 }
00153
00154 }