WidgetManager

照例列出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_OBSOLETE

		factory.registerFactory<RenderBox>("Widget");
		factory.registerFactory<Sheet>("Widget");

#endif // MYGUI_DONT_USE_OBSOLETE

		MYGUI_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.

 


0
0
猜你在找
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
快速回复 TOP
    个人资料

    geometry_
    • 访问:67094次
    • 积分:1420
    • 等级:
    • 排名:第17920名
    • 原创:71篇
    • 转载:15篇
    • 译文:3篇
    • 评论:15条
    文章分类
  • xml(1)
  • occ(7)
  • stl(3)
  • OCC_ModelingData(5)
  • OCC_ModelingAlgorithms(2)
  • OCC_Module FoundationClasses(9)
  • Toolkit TKMath(5)
  • Toolkit TKernel(2)
  • Package gp(2)
  • Toolkit TKG3d(3)
  • Package Geom(3)
  • math term(1)
  • poster(1)
  • Open CASCADE Geometry demo(1)
  • MIT Algorithm Intro(1)
  • bug(1)
  • Package TColStd(1)
  • 技术文摘感(1)
  • mfc-occ(1)
  • MYG(0)
  • MYGUI(35)
  • string(1)
  • CMAKE & VS2010(1)
  • 点击打开链接(1)
  • OpenMesh(5)
  • vc调试(1)
  • BSplineCurve(2)
  • continuous(1)
  • deBUG(1)
  • Refactoring(1)
  • Opcode(3)
  • qt(2)
  • openGL(1)
  • dynamic(1)
  • game design(1)
  • qmake(1)
  • node.js addon(2)
  • premake(1)
    文章存档
  • 2013年08月(3)
  • 2013年06月(1)
  • 2012年11月(1)
  • 2012年10月(2)
  • 2012年08月(1)
  • 2012年06月(2)
  • 2012年05月(3)
  • 2012年04月(11)
  • 2012年03月(36)
  • 2012年02月(29)
    阅读排行
  • Geom_BSplineCurve Class(5194)
  • MyGUI 功能与架构(3354)
  • qt dependant doesn not exist.(2817)
  • VC2010 创建 MFC Open Cascade 单文档 3d view(2117)
  • vs2010 debug 与 release enum 差别(1968)
  • ILayer(1649)
  • stl 输入输出代码 int 转string string 转int 与分割字符串(1275)
  • LayerManager(1188)
  • nodejs addon binding osg(1117)
  • MyGUI 3.2.0 出炉了(1107)
    评论排行
  • VC2010 创建 MFC Open Cascade 单文档 3d view(5)
  • qt dependant doesn not exist.(2)
  • MyGUI 功能与架构(2)
  • IUnlinkWidget(2)
  • frameEntered -- Widget class(1)
  • xml 解析器(1)
  • MyGUI 3.2.0 出炉了(1)
  • Geometry 1 由点创建线段(1)
  • occ sample geometry 分析初探2(0)
  • node.js addon osg binding 2(0)
    推荐文章
    • *Android自定义ViewGroup打造各种风格的SlidingMenu
    • * Android 6.0 运行时权限处理完全解析
    • * 数据库性能优化之SQL语句优化
    • *Animation动画详解(七)——ObjectAnimator基本使用
    • * Chromium网页URL加载过程分析
    • * 大数据三种典型云服务模式
    最新评论
  • frameEntered -- Widget class

    zoujyjs: Hi,请问博主这个UML图和序列图是怎么得到的?有这个看源码方便多了。

  • qt dependant doesn not exist.

    HUOYANGXIYANG: 怎么解决?是缺少哪个库吗

  • qt dependant doesn not exist.

    HUOYANGXIYANG: C:\pro - 5\QT--MY\QKD_DC\mainwindow.cpp:121:21: er...

  • MyGUI 功能与架构

    vvsxr: 不错,收藏,以后看

  • VC2010 创建 MFC Open Cascade 单文档 3d view

    tuyong888: 可以发一份给我么吗,急,[email protected]

  • VC2010 创建 MFC Open Cascade 单文档 3d view

    geometry_: @soloralun:我也找不到那个网页了.

  • VC2010 创建 MFC Open Cascade 单文档 3d view

    geometry_: @liming056:您具体问题是什么?

  • Geometry 1 由点创建线段

    liming056: 我想问哈你的配置的情况,求?

  • VC2010 创建 MFC Open Cascade 单文档 3d view

    liming056: 可不可以给我发一份啊,急求 [email protected]

  • IUnlinkWidget

    liigo: 评论怎么不显示?

你可能感兴趣的:(manager,properties,String,object,list,iterator)