第二人生的源码分析(九十)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