zoukankan      html  css  js  c++  java
  • duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的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

  • 相关阅读:
    Code Forces Gym 100886J Sockets(二分)
    CSU 1092 Barricade
    CodeChef Mahesh and his lost array
    CodeChef Gcd Queries
    CodeChef GCD2
    CodeChef Sereja and LCM(矩阵快速幂)
    CodeChef Sereja and GCD
    CodeChef Little Elephant and Balance
    CodeChef Count Substrings
    hdu 4001 To Miss Our Children Time( sort + DP )
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4209716.html
Copyright © 2011-2022 走看看