2012-01-28 82 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