GTK:无限懒惰的小部件列表

时间:2012-01-28 02:20:56

标签: c gtk vala

我需要显示几乎无限的交互式小部件滚动列表,并在添加新数据或用户滚动到未缓存区域时根据需要添加/删除它们。

TreeView(as asked about here)不是选项,因为我需要完整的Widgets作为项目(由具有多个操作的标准小部件组成,但CellRenderer不适用于此)

更糟糕的是,我不提前知道我的小部件的高度(虽然没有太大的差异),所以使用VBox可能会导致跳跃。

使用滚动条仍然会感觉好像列表是有限的(即仅在滚动完成后才更新,因此滚动按钮不会跳离鼠标),并且在调整窗口大小并更新窗口布局时,滚动位置不应该改变太多(聚焦的小部件应该保持原样,除非聚焦的小部件被滚动了......)。

最好的方法是什么?也许甚至是一个只在需要添加新小部件时才向我发送信号的库?

或者ListView是否可以以一种不太讨厌的方式强制执行此操作? (即在屏幕外缓冲区上绘图,使用CellRenderer将其复制到单元格中,将鼠标/键盘事件转发到实际的窗口小部件?)

1 个答案:

答案 0 :(得分:2)

如果它是无限列表,那么你不应该尝试用滚动条实现任何东西 - 这只适用于有限列表。

我的建议是使用带2个按钮的叠加层

+------------+
| UP ARROW   |
+------------+
| ITEM  N    |
| ITEM  N+1  |
| ITEM  N+2  |
+------------+
| DOWN ARROW |
+------------+

对于按钮之间的列表,您可能必须自己实现自定义容器窗口小部件。 我建议事先在每个方向缓冲n(> = 2)个小部件/项目。

与自定义容器无关,但与自定义小部件无关 - 这是一个起点

http://zetcode.com/tutorials/cairographicstutorial/customgtkwidget/

http://gnomejournal.org/article/34/writing-a-widget-using-cairo-and-gtk28

http://old.nabble.com/Custom-container-%2B-Child-type-with-interface-td26863728.html