GTK: бесконечный ленивый список виджетов - PullRequest
7 голосов
/ 28 января 2012

Мне нужно отобразить практически бесконечный список интерактивных виджетов с прокруткой и добавлять / удалять их по мере необходимости, когда добавляются новые данные или пользователь прокручивает в некэшированную область.

TreeView (, как спрашивается здесь ) - не вариант, потому что мне нужны полные виджеты как элементы (составленные из стандартных виджетов с несколькими действиями и т. Д., Но CellRenderer не для этого)

Хуже того, я заранее не знаю высоту своих виджетов (хотя не так много различий), поэтому использование VBox может вызвать скачок.

При использовании полосы прокрутки все равно должно быть ощущение, что список был конечным (то есть обновлялся только после завершения прокрутки, чтобы кнопка прокрутки не отскакивала от вашей мыши), а также при изменении размера окна и макета окон, позиция прокрутки не должна меняться слишком сильно (сфокусированный виджет должен оставаться там, где он есть, если, конечно, сфокусированный виджет не был прокручен…).

Какой лучший способ сделать это? Может быть, даже библиотека, которая просто посылает мне сигналы, когда нужно добавить новый виджет?

Или можно заставить ListView сделать это не слишком неприятным способом? (то есть рисовать в буфере за пределами экрана, копировать его в ячейку с помощью CellRenderer, передавать события мыши / клавиатуры на фактический виджет?)

1 Ответ

2 голосов
/ 15 сентября 2012

Если это бесконечный список, то вам не следует пытаться достичь чего-либо с помощью полосы прокрутки - это предназначено только для конечных списков.

Я предлагаю использовать наложение с 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

...