2012-01-28 49 views
6

当需要添加新数据或用户滚动到未缓存区域时,我需要显示交互窗口小部件的无限滚动列表,并根据需要添加/删除它们。GTK:窗口小部件的无限延迟列表

一个TreeView(as asked about here)是没办法,因为我需要完整的小工具如项目(具有多个动作等标准部件组成,但的CellRenderer是不是这个)

更糟的是,我不知道我的小工具的高度提前(虽然没有太大的变化),所以使用VBox可能会导致跳动。

使用滚动条应该仍然感觉好像列表是有限的(即只有在滚动完成后才更新,以便滚动按钮不会从您的鼠标跳开),并且在调整窗口大小并更新窗口布局时,滚动位置不应该改变太多(焦点小部件应该保持在原来的位置,除非当然重点小部件滚动了......)。

这样做的最好方法是什么?也许即使是一个图书馆,只是发送信号时,需要添加一个新的小部件?

或者ListView被强制以不太恶劣的方式做到这一点? (即使用屏幕外缓冲区,使用CellRenderer将其复制到单元格中,将鼠标/键盘事件中继到实际的窗口小部件?)

+0

你所说的 “跳动” 是什么意思? VBox有什么问题? – lethalman 2012-01-28 09:26:21

+0

如果用户向上滚动,平均窗口小部件高度是200px(即,我有一些空白窗格的高度超出视野,我根据需要用实际窗口部件替换)但是我在顶部添加一个250px的窗口,所有内容都会显示跳到50px。所以我猜VBox必须放在固定的位置,然后向上移动50px以防止这种情况发生,但是它不会再延伸到ScrollWindow的大小了... – pascal 2012-01-28 15:13:39

+0

您可以尝试手动滚动到当前窗口小部件。 – lethalman 2012-01-28 17:41:26

回答

1

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

我的建议是使用的覆盖,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