Archive for 03月, 2008
MMS列表的烦恼
星期五, 03月 21st, 2008GMLive有一个播放流地址的mms列表。但是这个列表只是安装时的一个文件。固定写好了几个频道。
而这些地址有可能会失效。也有可能有网友发现新的流地址。 但也不能及时地更新这个地址。因此我
一直是想把这个mms列表做成是上网下载的,和sopcast的列表类似。但由专门的人来维护编辑。这样
可以及时有效地加入新频道和去掉失效的频道。
只是,找不到一个好的地方来放这个列表。 要是能有个类似wiki的页,方便下载又方便编辑。或者是
要在本地修改完后上传覆盖吗?大家有什么好的想法啊!
Gtkmm系列:TreeModelFilter的简单用法
星期四, 03月 13th, 2008Gtkmm是Gtk+的C++绑定。不过在国内比较少开发者采用,因此中文资料也不多。
彼人目前正在使用Gtkmm开发两个开源的项目。因此也学习了不少Gtkmm的用法。
因此打算作一系列文章,探讨下Gtkmm里某些控件的用法。丰富一下中文Gtkmm
资料。不过,这不是教程,有些文章会基于项目里的代码来说明,所以是面向
有些基础的开发者的,让大家在搜索的时候能找到些资料,而这些说明又能帮
到您的话,那我的目的就算是达到了。
TreeModelFilter的简单用法
TreeModelFilter是用于过滤TreeModel的一个类。或者这样说吧。
这个功能大意就是查找匹配的好友成员,让其显示。
这里将会作个简要的说明。代码说明基于 iCalk(http://code.google.com/p/icalk)
声明好我们的TreeModelFilter成员在您的TreeView实现的头文件里。
Glib::RefPtr <Gtk::TreeModelFilter> m_treemodelfilter;
从TreeStore中生成TreeModelFilter:
m_treemodelfilter = Gtk::TreeModelFilter::create(m_treestore);
m_treestore 就是您代码中设置好的TreeStore类.
用TreeModelFilter代替TreeStore类成为这个TreeView的model:
set_model(m_treemodelfilter);
这样将会使用你的TreeView里的元素成为可被过滤的。
最后设置过滤函数:
m_treemodelfilter->set_visible_func(sigc::mem_fun(*this,&BuddyView::
list_visible_func));
这个set_visible_func,将会依次调用TreeView里的元素,判断是否符合过滤条件,
返回真则显示,返回假则隐藏。(BuddyView是icalk里的TreeView的继承类).
然后再来看看这个过滤函数的内容:
bool BuddyView::list_visible_func(const Gtk::TreeIter& iter)
{
/** 得到此列中表示好友成员的jabber id */
Glib::ustring email = (*iter)[buddyColumns.id];
/** 得到此列中表示好友成员的昵称*/
Glib::ustring name = (*iter)[buddyColumns.nickname];
/** 得到此列中表示好友成员的类型,在icalk中,会设置为成员或组*/
int type = (*iter)[buddyColumns.status];
/** filterText是过滤的关键字,为空则返回真,即全部显示*/
if(filterText.empty())
return true;
/** 在jabber id中查找是否匹配关键字 */
else if(email.lowercase().find(filterText.lowercase())!=Glib::ustring::npos)
return true;
/** 在昵称中查找是否匹配关键字 */
else if(name.lowercase().find(filterText.lowercase())!=Glib::ustring::npos)
return true;
/** 如果此列是一个组的话,返回真*/
else if(type == STATUS_GROUP )
return true;
/** 以上条件都不匹配,返回假,隐藏*/
return false;
}
在设置完毕之后,就需要发动过滤引擎了,我们只需要设置关键字filterText,然后
调用一下m_treemodelfilter的成员函数refilter()就行了。 在icalk的代码里是:
void BuddyView::setFilterText(const Glib::ustring& text)
{
filterText = text;
m_treemodelfilter->refilter();
}
下来的工作是获取一个Gtk::Entry,让用户输入关键字。将这个关键字传递给上面
的setFilterText()就可以了。更详细的代码可以参看icalk的BuddyView.cpp文件。
say something
星期日, 03月 2nd, 2008随便谈点什么吧。
最近在Gtalk上加了几个好友。几个Window的程序员和一个Linux的程序员。
window的程序是国内的,都在做私有项目,薪水都很高。但感觉都很迫切。对啥迫切
呢?对现状,对赚钱。都很有商业头脑。和他们谈完我往往要自卑一下(咋我这么没上
进心哩)。
还有一个Linux的程序员,是gloox库(跨平台xmpp协议基础库)的作者。一个德国的小
青年。gloox虽说是开源的库,但这是由公司支持的。 爽不。写开源的东西还能拿钱哩。
这就是国内外环境的不同吧。我主要是和他交流gloox库的问题。了解到不少第一线的
资料哩。比如我最关心的jingle协议问题,作者已经计划在下一版中添加了。
概而言之,国内开源开发者得顶住更多的压力吧。
顺便说说wind吧,现在应该在北京了。祝面试成功。早日脱离生活的压力,回归开源。