第二人生的源码分析(九十)LLScrollListCtrl实现列表显示

在第二人生的UI显示里,滚动列表也使用比较多的,由于多项列表选择的情况下,使用滚动列表往往使用界面使用起来更方便实用。如下面的登录界面,就有使用到滚动列表的控件:
 
从上图里可以看到最右边使用到一个滚动列表来显示不同的服务器,这样方便用户选择不同的服务器登录。那这个滚动列表是怎么样实现的呢?接着下来就分析这个类的代码,类的继承关系如下:
#001 class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
#002    public LLCtrlListInterface, public LLCtrlScrollInterface
 
它的显示代码如下:
#001 void LLScrollListCtrl::draw()
#002 {
 
判断这个控件是否可见,如果可见就显示出来。
#003    if( getVisible() )
#004    {
 
判断是否需要排序。
#005        // if user specifies sort, make sure it is maintained
#006        if (needsSorting() && !isSorted())
#007        {
#008            sortItems();
#009        }
#010 
 
是否需要显示滚动条。
#011        if (mNeedsScroll)
#012        {
#013            scrollToShowSelected();
#014            mNeedsScroll = FALSE;
#015        }
#016        LLRect background(0, getRect().getHeight(), getRect().getWidth(), 0);
 
显示滚动列表的背景。
#017        // Draw background
#018        if (mBackgroundVisible)
#019        {
#020            LLGLSNoTexture no_texture;
#021            gGL.color4fv( getEnabled() ? mBgWriteableColor.mV : mBgReadOnlyColor.mV );
#022            gl_rect_2d(background);
#023        }
#024 
 
更新显示列宽度。
#025        if (mColumnsDirty)
#026        {
#027            updateColumns();
#028            mColumnsDirty = FALSE;
#029        }
#030 
 
下面开始显示所有列表元素。
#031        drawItems();
#032 
 
是否有边框显示,如果有就显示出来。
#033        if (mBorder)
#034        {
#035            mBorder->setKeyboardFocusHighlight(gFocusMgr.getKeyboardFocus() == this);
#036        }
#037 
 
调用基类的显示函数。
#038        LLUICtrl::draw();
#039    }
#040 }
#041 
 
通过上面的函数,就可以把上图看到的列表显示出来,下一次再来看看怎么样添加列表项和详细地显示列表项的代码。
 
 
第二人生开发包提供,价格198元/套(含邮费)。
包括内容如下:
1.    《第二人生的源码分析》PDF文档。
2.    第二人生客户端源程序。
3.    2G U盘一个,主要用来拷贝源程序以及相关开发工具。
 
提供三个月的技术服务,
提供快速编译指导,比如通过QQ远程编译操作。
提供完整的书参考。
 
联系方式:
QQ:             9073204
MSN:            caimouse1976@sina.com
EMAIL:          ccaimouse@gmail.com
posted @ 2008-06-14 21:41  ajuanabc  阅读(134)  评论(0编辑  收藏  举报