2017-03-19 50 views
11

TL; DR

podstawie art Thomas Schindl „s JFace-Viewer and Eclipse Databinding with > 10.000 Objects (co sugeruje bardzo dobry pomysł), chciałbym przekonwertować regularne TreeViewer + wiele ITreeContentProvider implementacje do Nebula's GridTreeViewer który wykorzystuje ObservableListTreeContentProvider, a VisibleRangeChangedListener i Eclipse Data Binding do sprawiają, że „leniwy” (leniwy) i ładowania danych na żądanie.TreeViewer do GridTreeViewer: most między istniejącymi ITreeContentProviders i "leniwej" ObservableListTreeContentProvider

W jaki sposób powinienem przepisać moje istniejące regularne implementacje ITreeContentProvider, aby używać tych samych hierarchii z ObservableListTreeContentProvider? Czy mogę zrobić "pomost" pomiędzy starym a nowym rozwiązaniem? Używanie DelegatingListProperty w jakiś sposób jak this? Jakieś inne pomysły?
Znalazłem zbyt proste przykłady, ale tak naprawdę nie mam pojęcia o użyciu powiązania danych w tak złożonym hierarchicznym formacie drzewa.

Przykład drzewa & dostawców treści:

dostawcy treści 1 .:

|- A1 
    |-- B1 
     |-- MyMessage1 
|- A2 
    |-- B2 
     |-- MyMessage2 

Content dostawcą 2 .:

|- C1 
    |-- D1 
     |-- MyMessage1 
|- C2 
    |-- D2 
     |-- MyMessage2 

dłuższe objaśnienie

Mam widoku gdzie wyświetl ogromną ilość obiektów ts w hierarchicznej drzewa formacie użyciu niestandardowego TreeViewer z klasycznym ITreeContentProvider i LabelProvider + ITableLabelProvider wdrożeń. Istnieje również menu, w którym użytkownik może wybrać, w jakim formacie chce wyświetlać tę hierarchię. Kiedy użytkownik wybiera inny format wyświetlania, jedyne, co się dzieje, to to, że kolejna implementacja ITreeContentProvider zostaje ustawiona na przeglądarkę i programowo odświeżam przeglądarkę.
Działa, ale ze względu na ogromną liczbę elementów (w niektórych przypadkach 100-200k wierszy, proszę nie pytać o powody, po prostu musi działać), wyświetlanie elementów może być powolne, czasami interfejs zawiesza się, ponieważ w TreeItems jest tylu słuchaczy, odświeżanie widoku zajmuje dużo czasu, itd ...

Chciałbym użyć pewnego rodzaju leniwego rozwiązania mając już elementy modelu załadowane do pamięci.
Próbowałem już SWT.VIRTUAL and ILazyTreeContentProvider, ale działało źle (nawet jeśli używałem viewer.setUseHashlookup(true)) i było problematyczne (podczas przewijania, załadowanie TreeItems zajęło dużo czasu, miało swoje problemy z sortowaniem, filtrowaniem itp. bugs).

Teraz czytam artykuł bloga Thomasa Schindla: JFace-Viewer and Eclipse Databinding with > 10.000 Objects. Chciałbym spróbować tego przy użyciu Eclipse Nebula Grid „s GridTreeViewer i + ObservableListTreeContentProvider (który jest również implementacja ITreeContentProvider) i«leniwy»usługodawca etykieta VisibleRangeChangedListener i (jak w artykule). Czy mogę w jakiś sposób użyć istniejących implementacji ITreeContentProvider i zbudować "pomost" między tym a nowym ObservableListTreeContentProvider?


BTW sprawdziłem Nebula NatTable, ale okazało się to bardzo trudne do migracji istniejących dostawców treści do tego nowego rozwiązania, jego API i jego podejście jest zupełnie inna (hierarchia począwszy od dziecka do rodzica, a nie odwrotnie stronę) , a dokumentacja związana z Trees jest nadal pusta.

Odpowiedz