duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug

简介: 转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947         这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947


        这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。


问题描述:


        在仿酷狗程序中,动态添加音乐项目到播放列表里,这是必须的功能,动态添加的功能已经做好。但是我发现,当一个分组本来在收缩状态下,这是给它动态添加音乐项目就会发生很搞笑的问题:分组是收缩状态,而动态添加的项目却显示了出来,如图:


          


       可以看到,一共有20个音乐项目,原本的10个已经在收缩状态下所以没有显示,而新添加的项目却直接显示了出来。这里应该有两种处理逻辑:


         1)动态添加子项目时,发现分组处于收缩状态后,新添加的项目自动隐藏而不显示出来

         2)动态添加子项目时,发现分组处于展开状态后,新添加的项目自动展开


       修复这个bug只要,在CTreeNodeUI添加元素时进行判断,控制新加元素的显示隐藏属性就可以了。修改CTreeNodeUI的AddAt和AddChildNode函数。修改后的函数如下:


	bool CTreeNodeUI::AddAt( CControlUI* pControl, int iIndex )
	{
        if (!pControl)
            return false;

        //省略多余代码····
        else
        {
            //parent TreeNode not bind TreeView just insert to parent TreeNode
            bRet = mTreeNodes.InsertAt(iIndex, pControl);
        }

		if(bRet)  //add by redrain 2014.11.7
		{
			pControl->SetVisible(GetFolderButton()->IsSelected());
		}

		return bRet;
	}


	bool CTreeNodeUI::AddChildNode( CTreeNodeUI* _pTreeNodeUI )
	{
		if (!_pTreeNodeUI)
			return false;

		if (_tcsicmp(_pTreeNodeUI->GetClass(), _T("TreeNodeUI")) != 0)
			return false;


		_pTreeNodeUI = CalLocation(_pTreeNodeUI);

		bool nRet = true;

		if(pTreeView){
			CTreeNodeUI* pNode = static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(mTreeNodes.GetSize()-1));
			if(!pNode || !pNode->GetLastNode())
				nRet = pTreeView->AddAt(_pTreeNodeUI,GetTreeIndex()+1) >= 0;
			else nRet = pTreeView->AddAt(_pTreeNodeUI,pNode->GetLastNode()->GetTreeIndex()+1) >= 0;
		}

		if(nRet)
		{
			_pTreeNodeUI->SetVisible(GetFolderButton()->IsSelected());    //add by redrain 2014.11.7
			mTreeNodes.Add(_pTreeNodeUI);
		}
		
		return nRet;
	}


总结:



      bug的修复代码已经提交到我自己的Duilib库。

      我的Duilib库代码下载地址:点击打开链接



  Redrain  2014.12.30

目录
相关文章
|
XML 开发框架 .NET
【牛刀小试】——Repeater控件常见错误及几种相似控件的区别
【牛刀小试】——Repeater控件常见错误及几种相似控件的区别
189 0
【牛刀小试】——Repeater控件常见错误及几种相似控件的区别
QtApplets-自定义控件-6-属性研究(未成功)
QtApplets-自定义控件-6-属性研究(未成功)
147 0
QtApplets-自定义控件-6-属性研究(未成功)
PyQt5 技术篇-如何彻底删除控件?布局移除控件方法。
PyQt5 技术篇-如何彻底删除控件?布局移除控件方法。
925 0
PyQt5 技术篇-如何彻底删除控件?布局移除控件方法。
|
SQL
【实现】表单控件里的子控件的变化。
     前情回顾: 【实现】表单控件的UI布局,实现方式         上一篇说的是表单布局上的变化,也就是通过TR、TD的设置,实现了多行多列的效果。那么格子画好了,我们 可以往里面放控件了。
883 0
easyui 1.4.3 窗口创建或拖动超过父元素 边界 BUG 解决方法
使用EASYUI 窗口时,创建或者移动 会超过父元素边界,不能关闭,非常别扭。 风来了.fox 标记:主要这边 就是要注意的地方 /** * * @param title * @param href * @param width * @param height * @param modal * @param minimizable * @param maximiz
1141 0
|
容器
duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/45560943         DuiLib的容器控件可以用bordersize统一指定边框宽度,也可以用rightbordersize、bottombordersize等属性单独指定某一个边框的宽度。
1233 0