WidgetManager
来源:互联网 发布:steam网络失败登录过多 编辑:程序博客网 时间:2024/06/06 12:34
照例列出WidgetManager的全部家当:
mDelegates 用来存储parse XML的delegate
重头在于
mFactoryList obsolete
mVectorIUnlinkWidget
mUnlinkWidgets
这里只是大战前的猜测:
mFactoryList 中存放的是IWidgetFactory
重点分析:
引入代码:
这种模式在MyGUI中应该是过时的:
因为关于IWidgetFactory的操作都是
//TODO正如FactoryManager中提到的Manager类之沟通与子类的协调者,
负责employer之间的注册于与离退,
对于:mUnlinkWidgets 注册,
void WidgetManager::addWidgetToUnlink(Widget* _widget){if (_widget) mUnlinkWidgets.push_back(_widget);}
离退:
void WidgetManager::unlinkFromUnlinkers(Widget* _widget){for (VectorIUnlinkWidget::iterator iter = mVectorIUnlinkWidget.begin(); iter!=mVectorIUnlinkWidget.end(); ++iter){(*iter)->_unlinkWidget(_widget);}// вызывать последним, обнулитсяremoveWidgetFromUnlink(_widget);}
void WidgetManager::removeWidgetFromUnlink(Widget*& _widget){VectorWidgetPtr::iterator iter = std::find(mUnlinkWidgets.begin(), mUnlinkWidgets.end(), _widget);if (iter != mUnlinkWidgets.end()){(*iter) = mUnlinkWidgets.back();mUnlinkWidgets.pop_back();}else{_widget = nullptr;}}对于:mVectorIUnlinkWidget
这个有点儿复杂,是说,对于Widget向每个IUnlinkWidget manager 注册的控件而言,
Widget Manager 使得其退注册。
void WidgetManager::registerUnlinker(IUnlinkWidget * _unlink){unregisterUnlinker(_unlink);mVectorIUnlinkWidget.push_back(_unlink);}unregisterUnlinker
void WidgetManager::unregisterUnlinker(IUnlinkWidget * _unlink){for (size_t pos=0; pos<mVectorIUnlinkWidget.size(); pos++){if (mVectorIUnlinkWidget[pos] == _unlink){mVectorIUnlinkWidget[pos] = mVectorIUnlinkWidget[mVectorIUnlinkWidget.size()-1];mVectorIUnlinkWidget.pop_back();break;}}}
离退:
createWidget 创建Widget分两步:
1)通过FacotryManager 创建Widget
2)然后再初始化:
_style, _coord, _align, skin, _parent, _cropeedParent, _creator, _name
返回 widget
Widget* WidgetManager::createWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, Widget* _parent, ICroppedRectangle * _cropeedParent, IWidgetCreator * _creator, const std::string& _name)
{IObject* object = FactoryManager::getInstance().createObject("Widget", _type);if (object != nullptr){Widget* widget = object->castType<Widget>();ResourceSkin* skin = SkinManager::getInstance().getByName(_skin);widget->_initialise(_style, _coord, _align, skin, _parent, _cropeedParent, _creator, _name);return widget;}// старый вариант создания这句的意思是Obsolete for (SetWidgetFactory::iterator factory = mFactoryList.begin(); factory != mFactoryList.end(); ++factory){if ((*factory)->getTypeName() == _type){Widget* widget = (*factory)->createWidget(_style, _skin, _coord, _align, _parent, _cropeedParent, _creator, _name);return widget;}}MYGUI_EXCEPT("factory '" << _type << "' not found");return nullptr;}
根据以上三点分析:
Widget 至少完成三种职能:
1,被调用来创建Widget 并对其初始化, skin之类的操作
2,被其他Manager(//TODO 在后续拔出后幕)所调用
来注册,Widget 和 IUnlinkWidget(对于每个manager 而言)
对于Initialize
void WidgetManager::initialise(){MYGUI_ASSERT(!mIsInitialise, INSTANCE_TYPE_NAME << " initialised twice");MYGUI_LOG(Info, "* Initialise: " << INSTANCE_TYPE_NAME);//registerUnlinker(this);FactoryManager& factory = FactoryManager::getInstance();factory.registerFactory<Button>("Widget");factory.registerFactory<Canvas>("Widget");factory.registerFactory<ComboBox>("Widget");factory.registerFactory<DDContainer>("Widget");factory.registerFactory<Edit>("Widget");factory.registerFactory<HScroll>("Widget");factory.registerFactory<ItemBox>("Widget");factory.registerFactory<List>("Widget");factory.registerFactory<ListBox>("Widget");factory.registerFactory<ListCtrl>("Widget");factory.registerFactory<MenuBar>("Widget");factory.registerFactory<MenuCtrl>("Widget");factory.registerFactory<MenuItem>("Widget");factory.registerFactory<Message>("Widget");factory.registerFactory<MultiList>("Widget");factory.registerFactory<PopupMenu>("Widget");factory.registerFactory<Progress>("Widget");factory.registerFactory<ScrollView>("Widget");factory.registerFactory<StaticImage>("Widget");factory.registerFactory<StaticText>("Widget");factory.registerFactory<Tab>("Widget");factory.registerFactory<TabItem>("Widget");factory.registerFactory<VScroll>("Widget");factory.registerFactory<Widget>("Widget");factory.registerFactory<Window>("Widget");#ifndef MYGUI_DONT_USE_OBSOLETEfactory.registerFactory<RenderBox>("Widget");factory.registerFactory<Sheet>("Widget");#endif // MYGUI_DONT_USE_OBSOLETEMYGUI_LOG(Info, INSTANCE_TYPE_NAME << " successfully initialized");mIsInitialise = true;}
FactoryManager 类觉得应该叫WidgetCreateFactoryManager
因为它的职能是用来注册MyGUI 所支持Widget的所用种类:
觉得这里是个亮点,因为全部都是hard code 将来MyGUI插件化肯定是要用来动态加载。
值得一提的是MyGUI 将一些控件该成更人性化。
摘自MyGUI 官网:
http://redmine.mygui.info/repositories/entry/mygui/tags/MyGUI3.2/ChangeLog.txt
78 -- Widgets --79- VScroll and HScroll replaced with single ScrollBar class.80- Edit renamed into EditBox.81- List renamed into ListBox.82- MenuCtrl renamed into MenuControl.83- MultiList renamed into MultiListBox.84- Progress renamed into ProgressBar.85- StaticImage renamed into ImageBox.86- StaticText renamed into TextBox.87- Tab renamed into TabControl.88- New Window property Moveable.89- Message moved from Core to Common.90- MultiListBox now support different modes of columns resizing.91- Button properties StateCheck and ButtonPressed replaced with single property StateSelected.92- ListBox and ComboBox now support ToolTip.93- Menu items can be checked now, tick icon appears.94- Property AlignVert renamed into VerticalAlignment.95- Hidden widget lose input and focus.96- Active elements visualisation in list now properly respond to changes in the list.97- All text related properties was moved from Widget to TextBox.
- WidgetManager
- 印象码——中国第一家验证码广告云服务平台
- 将一个句子按单词反序
- Linux压缩与解压命令
- 第四周任务1
- 一、杀毒软件原理基础
- WidgetManager
- 二 杀毒软件原理
- MyEclipse的快捷使用(含关联源码和Doc的方式)
- 三 杀毒软件原理 (
- Struts2默认验证器、自定义验证器
- PYTHON模块之socket
- About Segmentation Fault in Linux ( SIGSEGV )
- Android 调节屏幕的亮度
- [Effective C++第三版•中文版][第20条]尽量使用“引用常量”传参,而不是传值
原创粉丝点击热门IT博客热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸非常干燥蜕皮怎么办 脸过敏脱皮干燥怎么办 脸上粗糙毛孔大怎么办 烫伤后留下红斑怎么办 脸上好像过敏痒怎么办 孕妇脸上长红斑怎么办 婴儿脸上起粉刺怎么办 脸上起红斑脱皮怎么办 两侧脸上有红斑怎么办 眼睛红怎么办快速消除 网面球鞋发黄怎么办 感觉脸特别烫怎么办 眼睛起红血丝怎么办 师傅不教徒弟怎么办 秀米复制不了怎么办 朋友圈被限制了怎么办 联通光纤网速慢怎么办 移动光纤网速慢怎么办 电信光纤网速慢怎么办 遭遇歹徒怎么办微视频 面对持刀歹徒怎么办 遇到持刀歹徒怎么办 面对拿刀歹徒怎么办 遇到歹徒时应该怎么办 家里被小偷盯上怎么办 在商场发现小偷怎么办 感觉家里进小偷怎么办 惹着不要命的人怎么办 游泳时遇到漩涡怎么办 宝马x1被追尾怎么办 老婆自私不讲理怎么办 老婆懒不做家务怎么办 老婆脾气暴躁易怒怎么办 老婆蛮横不讲理怎么办 泼妇老婆不讲理怎么办 和老婆无法沟通怎么办 pos机被冻结怎么办 第三方支付牌照怎么办 id帐户被锁定怎么办 银行老员工裁员怎么办 纳税信用等级d级怎么办