2012-01-28 35 views
6

Tôi cần hiển thị một danh sách cuộn vô tận của các tiện ích tương tác và thêm/xóa chúng khi cần thiết khi dữ liệu mới được thêm vào hoặc người dùng cuộn vào một khu vực không bị cắt.GTK: Danh sách các tiện ích vô hạn lười biếng

Một TreeView (as asked about here) là không có lựa chọn, bởi vì, tôi cần Widgets đầy đủ như các mặt hàng (bao gồm các widget tiêu chuẩn với nhiều hành động vv, nhưng CellRenderer không phải là cho việc này)

Tệ hơn nữa, tôi không biết chiều cao của vật dụng của tôi trước (mặc dù không có nhiều thay đổi), vì vậy việc sử dụng VBox có thể gây ra sự tăng vọt.

Sử dụng thanh cuộn sẽ vẫn cảm thấy như thể danh sách là hữu hạn (tức là chỉ cập nhật sau khi cuộn xong để thanh cuộn không nhảy khỏi chuột) và khi thay đổi kích thước cửa sổ và bố cục cửa sổ được cập nhật , vị trí cuộn không được thay đổi quá nhiều (tiện ích tập trung nên ở vị trí hiện tại, trừ khi tất nhiên tiện ích con tập trung bị cuộn đi…).

Cách tốt nhất để làm điều này là gì? Có lẽ ngay cả một thư viện mà chỉ gửi cho tôi tín hiệu khi một widget mới cần phải được thêm vào?

Hoặc ListView có thể bị ép buộc để thực hiện điều này theo cách không quá khó chịu không? (tức là vẽ trên một bộ đệm ngoài màn hình, sao chép vào ô bằng cách sử dụng CellRenderer, chuyển tiếp các sự kiện chuột/bàn phím đến tiện ích thực tế?)

+0

Ý anh là gì bằng cách "giật mình"? Vấn đề với VBox là gì? – lethalman

+0

nếu người dùng cuộn lên trên, chiều cao của tiện ích con trung bình là 200px (nghĩa là tôi có một số ô trống cao hơn 200px mà tôi thay thế bằng các vật dụng thực tế khi cần thiết) nhưng tôi thêm vào 250px ở trên cùng, mọi thứ sẽ xuất hiện để nhảy xuống 50px. Vì vậy, tôi đoán VBox sẽ phải được đặt trong một cố định và di chuyển lên 50px để ngăn chặn điều này, nhưng sau đó nó sẽ không được kéo dài đến kích thước của ScrollWindow nữa ... – pascal

+0

Bạn có thể thử di chuyển theo cách thủ công đến tiện ích hiện tại. – lethalman

Trả lời

1

Nếu nó là danh sách vô cực, thì bạn không nên cố gắng đạt được bất kỳ thứ gì bằng thanh cuộn - điều này chỉ dành cho các danh sách hữu hạn.

Đề nghị của tôi là sử dụng một lớp phủ với 2 nút

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

Để xem danh sách giữa các nút, có thể bạn sẽ phải thực hiện một container tùy chỉnh phụ tùng chính mình. Tôi đề nghị nên đệm trước (> = 2) vật dụng/vật phẩm theo từng hướng.

Không thực sự liên quan đến container tùy chỉnh, nhưng các widget tùy chỉnh - một điểm khởi đầu

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

Các vấn đề liên quan