2012-01-28 14 views
6

Neredeyse sonsuz bir scrollabe interaktif pencere öğesi listesi görüntülemeli ve yeni veri eklendiğinde veya kullanıcı önbelleğe alınmamış bir alana kaydırıldığında bunları gerektiği gibi ekleyip/kaldırmalıyım. Ben öğeler olarak tam Widget'lar gerektiğindenGTK: Sınırsız tembel araç listesi

Bir TreeView (as asked about here), hiçbir seçenektir (vb birden eylemlerle standart gereç içeren, ancak CellRenderer bunun için değil)

Daha da kötüsü, bilmiyorum benim widget'larımın yüksekliği (çok fazla varyans olsa bile), bu yüzden bir VBox kullanmak zıplamaya neden olabilir.

Kaydırma çubuğunu kullanmak, listenin sonlu (sanki kaydırma işlemi bittikten sonra güncelleştirilir, böylece kaydırma çubuğu farenizden atlamaması durumunda güncellenir) ve pencerenin yeniden boyutlandırılması ve pencerelerin düzeninin güncellenmesi gerekir. kaydırma konumu çok fazla değişmemelidir (odaklanmış pencere öğesi, kaydırılan pencere öğesi kaydırılmamışsa…).

Bunu yapmanın en iyi yolu nedir? Belki de yeni bir widget eklenmesi gerektiğinde bana sinyal gönderen bir kütüphane bile olabilir mi?

Veya ListView bunu çok kötü olmayan bir şekilde yapmak için zorlanabilir mi? (yani, bir offscreen buffer üzerinde, CellRenderer kullanarak hücre içine kopyalayın, gerçek widget için fare/klavye olayları aktarın?)

+0

siz "ürkeklik" ile neyi kastediyoruz bir başlangıç ​​noktası? VBox ile ilgili sorun nedir? – lethalman

+0

, kullanıcı yukarı doğru kaydırırsa, ortalama pencere öğesi yüksekliği 200 pikseldir (yani, gerektiğinde gerçek widget'larla değiştirdiğim 200px yüksek bir boş ekranım var) ama en çok 250px ekleyeceğim, her şey görünecek 50px aşağı atlamak için. Bu yüzden VBox'ın Sabit olarak yerleştirileceğini ve bunu engellemek için 50px yukarı kaydırılması gerektiğini sanıyorum, ancak ScrollWindow'un boyutuna artık gerilmeyecek… – pascal

+0

Geçerli parçacığa manuel olarak kaydırmayı deneyebilirsiniz. – lethalman

cevap

1

Bir sonsuzluk listesi ise, bir kaydırma çubuğu ile bir şey elde etmeye çalışmamalısınız - Bu sadece sonlu listeler içindir.

Benim önerim 2 düğmeleri düğmeleri arasında listesi için

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

bir bindirme kullanmaktır, muhtemelen kendini widget'ı özel konteyner uygulamak zorunda kalacaktır. Önceden her yönde n (> = 2) widget/öğeyi tamponlamanızı öneriyorum.

gerçekten özel kaplara ilişkin, ancak özel widget'lar Değil -

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