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

pas*_*cal 7 c gtk vala

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

TreeView(如此处所述)是没有选项的,因为我需要完整的Widgets作为项目(由具有多个动作等的标准小部件组成,但CellRenderer不适用于此)

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

使用滚动条仍应感觉好像名单是有限的(即只更新后滚动完成,因此scrollbutton不跳从你的鼠标移开),并调整窗口的大小和窗口的布局时被更新,滚动位置不应该改变太多(焦点小部件应该保持原样,除非焦点小部件被滚动掉......).

最好的方法是什么?甚至可能只是在需要添加新窗口小部件时向我发送信号的库?

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

dra*_*hnr 3

如果它是无限列表,那么您不应该尝试使用滚动条实现任何目标 - 这仅适用于有限列表。

我的建议是使用带有 2 个按钮的覆盖层

+------------+
| UP ARROW   |
+------------+
| ITEM  N    |
| ITEM  N+1  |
| ITEM  N+2  |
+------------+
| DOWN ARROW |
+------------+
Run Code Online (Sandbox Code Playgroud)

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

与自定义容器并不真正相关,但自定义小部件 - 一个起点

http://zetcode.com/tutorials/cairgraphicstutorial/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