2017-03-19 5 views
11

टी एल के बीच का पुल, डॉ

थॉमस Schindl के लेख JFace-Viewer and Eclipse Databinding with > 10.000 Objects (जो एक बहुत अच्छा विचार है पता चलता है) के आधार पर, मैं एक नियमित रूपांतरित करना चाहते हैं TreeViewer + Nebula's GridTreeViewer जो ObservableListTreeContentProvider, एक VisibleRangeChangedListener और Eclipse Data Binding का उपयोग करता करने के लिए कई ITreeContentProvider कार्यान्वयन यह "सुस्त" (lazier) और डेटा लोड पर मांग बनाते हैं।TreeViewer GridTreeViewer रहे हैं: मौजूदा ITreeContentProviders और "सुस्त" ObservableListTreeContentProvider

ObservableListTreeContentProvider के साथ समान पदानुक्रमों का उपयोग करने के लिए मुझे अपने मौजूदा नियमित ITreeContentProvider कार्यान्वयन को फिर से लिखना चाहिए? क्या मैं पुराने और नए समाधान के बीच शायद "पुल" बना सकता हूं? DelegatingListProperty का उपयोग किसी भी तरह this की तरह? कोई अन्य विचार?
मुझे कुछ बहुत ही सरल उदाहरण मिले, लेकिन मुझे वास्तव में इस तरह के जटिल पदानुक्रमित पेड़ प्रारूप में डेटा बाइंडिंग का उपयोग करने की अवधारणा नहीं मिलती है।

उदाहरण पेड़ & सामग्री प्रदाताओं:

सामग्री प्रदाता 1 .:

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

सामग्री प्रदाता 2 .:

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

लंबे समय तक स्पष्टीकरण

मैं एक दृश्य जहां मैं प्रदर्शित करें बड़ी मात्रा में objec ts एक पदानुक्रमित पेड़ प्रारूप में एक कस्टम TreeViewer का उपयोग कर क्लासिक ITreeContentProvider और LabelProvider + ITableLabelProvider कार्यान्वयन के साथ। एक मेनू भी है जहां उपयोगकर्ता चुन सकते हैं कि वे किस प्रारूप में प्रदर्शित इस पदानुक्रम को देखना चाहते हैं। जब उपयोगकर्ता एक और डिस्प्ले प्रारूप चुनता है, तो केवल एक चीज होती है कि एक और ITreeContentProvider कार्यान्वयन दर्शक को सेट हो जाता है और मैं दर्शक को प्रोग्रामेटिक रूप से रीफ्रेश करता हूं।
यह काम करता है, लेकिन तत्वों की बड़ी संख्या के कारण (कुछ मामलों में, 100-200k पंक्तियां, कृपया कारणों से मत पूछें, इसे केवल काम करना है), आइटम प्रदर्शित करना धीमा हो सकता है, कभी-कभी यूआई फ्रीज़, क्योंकि वहाँ TreeItems पर इतने सारे श्रोताओं हैं, दृश्य ताज़ा बहुत समय लेता है, आदि ...

तो मैं एक आलसी समाधान किसी तरह का उपयोग करने के लिए मॉडल तत्वों को पहले ही करते हुए करना चाहते हैं स्मृति में भरा हुआ।
मैंने पहले से ही SWT.VIRTUAL and ILazyTreeContentProvider का प्रयास किया है, लेकिन यह खराब प्रदर्शन किया गया है (भले ही viewer.setUseHashlookup(true) का उपयोग कर रहा हो) और समस्याग्रस्त था (जब स्क्रॉलिंग, ट्री इटम्स लोड होने में काफी समय लगा, तो bugs था, सॉर्टिंग, फ़िल्टरिंग इत्यादि के साथ समस्याएं थीं।)।

अब मैं थॉमस शिंडल के ब्लॉग आलेख को पढ़ता हूं: JFace-Viewer and Eclipse Databinding with > 10.000 Objects। मैं कोशिश करना चाहते हैं इस Eclipse Nebula Grid का उपयोग कर के GridTreeViewer और + ObservableListTreeContentProvider (जो भी है एक ITreeContentProvider कार्यान्वयन) और एक VisibleRangeChangedListener और "सुस्त" लेबल प्रदाता (लेख में की तरह)। क्या मैं किसी भी तरह से अपने मौजूदा ITreeContentProvider कार्यान्वयन का उपयोग कर सकता हूं और इस के बीच एक "पुल" और ObservableListTreeContentProvider का निर्माण कर सकता हूं?


BTW मैं Nebula NatTable जाँच की, लेकिन मैंने पाया यह बहुत मुश्किल इस नए समाधान करने के लिए मौजूदा सामग्री प्रदाताओं विस्थापित करने के लिए, अपने एपीआई और उसके दृष्टिकोण पूरी तरह से अलग है (पदानुक्रम बच्चे से माता-पिता के लिए जा रहा है, न कि इसके विपरीत) , और Trees से संबंधित दस्तावेज अभी भी खाली है।

उत्तर

0

नेबुला ने कुछ समय पहले ग्रिड आभासी बना दिया है। यहां दर्शक के लिए स्निपेट हैं जिनमें आलसी सामग्री प्रदाता के लिए कुछ उदाहरण हैं।

http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/tree/examples/org.eclipse.nebula.snippets/src/org/eclipse/nebula/snippets/grid/viewer

संबंधित मुद्दे