diff dwtx/jface/viewers/StructuredViewer.d @ 104:04b47443bb01

Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections. These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 15:01:33 +0200
parents 7ffeace6c47f
children
line wrap: on
line diff
--- a/dwtx/jface/viewers/StructuredViewer.d	Sun Aug 03 17:01:51 2008 +0200
+++ b/dwtx/jface/viewers/StructuredViewer.d	Thu Aug 07 15:01:33 2008 +0200
@@ -41,9 +41,6 @@
 import dwtx.jface.viewers.StructuredSelection;
 import dwtx.jface.viewers.IStructuredSelection;
 
-import tango.util.collection.ArraySeq;
-import tango.util.collection.model.Seq;
-import tango.util.collection.model.SeqView;
 
 import dwt.custom.TableTreeItem;
 import dwt.dnd.DragSource;
@@ -69,6 +66,7 @@
 import dwtx.jface.util.SafeRunnable;
 
 import dwt.dwthelper.utils;
+import dwtx.dwtxhelper.Collection;
 import dwt.dwthelper.Runnable;
 
 /**
@@ -109,7 +107,7 @@
      * This viewer's filters (element type: <code>ViewerFilter</code>).
      * <code>null</code> means there are no filters.
      */
-    private Seq!(ViewerFilter) filters;
+    private List filters;
 
     /**
      * Indicates whether a selection change is in progress on this viewer.
@@ -597,9 +595,9 @@
      */
     public void addFilter(ViewerFilter filter) {
         if (filters is null) {
-            filters = new ArraySeq!(ViewerFilter);
+            filters = new ArrayList();
         }
-        filters.append(filter);
+        filters.add(filter);
         refresh();
     }
 
@@ -732,8 +730,7 @@
      */
     protected Object[] filter(Object[] elements) {
         if (filters !is null) {
-            ArraySeq!(Object) filtered = new ArraySeq!(Object);
-            filtered.capacity(elements.length);
+            ArrayList filtered = new ArrayList(elements.length);
             Object root = getRoot();
             for (int i = 0; i < elements.length; i++) {
                 bool add = true;
@@ -744,7 +741,7 @@
                     }
                 }
                 if (add) {
-                    filtered.append(elements[i]);
+                    filtered.add(elements[i]);
                 }
             }
             return filtered.toArray();
@@ -830,17 +827,9 @@
     protected void fireDoubleClick(DoubleClickEvent event) {
         Object[] listeners = doubleClickListeners.getListeners();
         for (int i = 0; i < listeners.length; ++i) {
-            SafeRunnable.run(new class(cast(IDoubleClickListener) listeners[i], event) SafeRunnable {
-                IDoubleClickListener l;
-                DoubleClickEvent event_;
-                this(IDoubleClickListener a,DoubleClickEvent b){
-                    l = a;
-                    event_=b;
-                }
-                public void run() {
-                    l.doubleClick(event_);
-                }
-            });
+            SafeRunnable.run( dgSafeRunnable( (IDoubleClickListener l, DoubleClickEvent event_){
+                l.doubleClick(event_);
+            }, cast(IDoubleClickListener) listeners[i], event));
         }
     }
     package void fireDoubleClick_package(DoubleClickEvent event) {
@@ -859,17 +848,9 @@
     protected void fireOpen(OpenEvent event) {
         Object[] listeners = openListeners.getListeners();
         for (int i = 0; i < listeners.length; ++i) {
-            SafeRunnable.run(new class(cast(IOpenListener) listeners[i],event) SafeRunnable {
-                IOpenListener l;
-                OpenEvent event_;
-                this(IOpenListener a, OpenEvent b){
-                    l = a;
-                    event_=b;
-                }
-                public void run() {
-                    l.open(event_);
-                }
-            });
+            SafeRunnable.run( dgSafeRunnable( (IOpenListener l,OpenEvent event_){
+                l.open(event_);
+            }, cast(IOpenListener) listeners[i],event));
         }
     }
     package void fireOpen_package(OpenEvent event) {
@@ -889,17 +870,9 @@
     protected void firePostSelectionChanged(SelectionChangedEvent event) {
         Object[] listeners = postSelectionChangedListeners.getListeners();
         for (int i = 0; i < listeners.length; ++i) {
-            SafeRunnable.run(new class(cast(ISelectionChangedListener) listeners[i],event) SafeRunnable {
-                ISelectionChangedListener l;
-                SelectionChangedEvent event_;
-                this(ISelectionChangedListener a,SelectionChangedEvent b){
-                    l = a;
-                    event_=b;
-                }
-                public void run() {
-                    l.selectionChanged(event_);
-                }
-            });
+            SafeRunnable.run( dgSafeRunnable( (ISelectionChangedListener l, SelectionChangedEvent event_){
+                l.selectionChanged(event_);
+            },cast(ISelectionChangedListener) listeners[i],event));
         }
     }
 
@@ -928,7 +901,8 @@
     protected Object[] getFilteredChildren(Object parent) {
         Object[] result = getRawChildren(parent);
         if (filters !is null) {
-            foreach (f;filters) {
+            for (Iterator iter = filters.iterator(); iter.hasNext();) {
+                ViewerFilter f = cast(ViewerFilter) iter.next();
                 result = f.filter(this, parent, result);
             }
         }
@@ -945,7 +919,7 @@
         if (filters is null) {
             return new ViewerFilter[0];
         }
-        return filters.toArray();
+        return arraycast!(ViewerFilter)(filters.toArray());
     }
 
     /**
@@ -1024,7 +998,7 @@
         if (control is null || control.isDisposed()) {
             return StructuredSelection.EMPTY;
         }
-        auto list = getSelectionFromWidget();
+        List list = getSelectionFromWidget();
         return new StructuredSelection(list, comparer);
     }
 
@@ -1034,8 +1008,8 @@
      *
      * @return the list of selected elements
      */
-    protected abstract SeqView!(Object) getSelectionFromWidget();
-    package SeqView!(Object) getSelectionFromWidget_package(){
+    protected abstract List getSelectionFromWidget();
+    package List getSelectionFromWidget_package(){
         return getSelectionFromWidget();
     }
 
@@ -1310,19 +1284,13 @@
                 }
             } else {
                 Widget[] widgets = (cast(ArrayWrapperT!(Widget)) widgetOrWidgets).array;
-                int indexOfItem = -1;
-                foreach( idx, w; widgets ){
-                    if( w == item ){
-                        indexOfItem = idx;
-                        break;
-                    }
-                }
+                int indexOfItem = Arrays.asList(widgets).indexOf(item);
                 if (indexOfItem is -1) {
                     int length_ = widgets.length;
                     System.arraycopy(widgets, 0,
                             widgets = new Widget[length_ + 1], 0, length_);
                     widgets[length_] = item;
-                    elementMap.put(element, new ArrayWrapperT!(Widget)(widgets));
+                    elementMap.put(element, new ArrayWrapperObject(widgets));
                 }
             }
         }
@@ -1349,7 +1317,8 @@
         }
 
         if (filters !is null) {
-            foreach( filter; filters ){
+            for (int i = 0, n = filters.size(); i < n; ++i) {
+                ViewerFilter filter = cast(ViewerFilter) filters.get(i);
                 if (filter.isFilterProperty(element, property)) {
                     return true;
                 }
@@ -1490,15 +1459,9 @@
      *            the element
      */
     public void refresh(Object element) {
-        preservingSelection(new class(element) Runnable {
-            Object element_;
-            this(Object a){
-                element_ = a;
-            }
-            public void run() {
-                internalRefresh(element_);
-            }
-        });
+        preservingSelection( dgRunnable( (Object element_){
+            internalRefresh(element_);
+        }, element ));
     }
 
     /**
@@ -1521,17 +1484,9 @@
      * @since 2.0
      */
     public void refresh(Object element, bool updateLabels) {
-        preservingSelection(new class(element, updateLabels) Runnable {
-            Object element_;
-            bool updateLabels_;
-            this(Object a, bool b){
-                element_ = a;
-                updateLabels_ = b;
-            }
-            public void run() {
-                internalRefresh(element_, updateLabels_);
-            }
-        });
+        preservingSelection( dgRunnable( (Object element_, bool updateLabels_){
+            internalRefresh(element_, updateLabels_);
+        },element, updateLabels));
     }
 
     /**
@@ -1595,17 +1550,16 @@
         if (filters !is null) {
             // Note: can't use List.remove(Object). Use identity comparison
             // instead.
-            int delIdx = 0;
-            foreach( o; filters ){
+            for (Iterator i = filters.iterator(); i.hasNext();) {
+                Object o = i.next();
                 if (o is filter) {
-                    filters.removeAt(delIdx);
+                    i.remove();
                     refresh();
                     if (filters.size() is 0) {
                         filters = null;
                     }
                     return;
                 }
-                delIdx++;
             }
         }
     }
@@ -1622,11 +1576,7 @@
         if (filters.length is 0) {
             resetFilters();
         } else {
-            auto tmp = new ArraySeq!(ViewerFilter);
-            foreach( f; filters ){
-                tmp.append(f);
-            }
-            this.filters = tmp;
+            this.filters = new ArrayList(Arrays.asList(filters));
             refresh();
         }
     }
@@ -1738,7 +1688,7 @@
      *            <code>true</code> if the selection is to be made visible,
      *            and <code>false</code> otherwise
      */
-    protected abstract void setSelectionToWidget(SeqView!(Object) l, bool reveal);
+    protected abstract void setSelectionToWidget(List l, bool reveal);
 
     /**
      * Converts the selection to a <code>List</code> and calls
@@ -1759,7 +1709,7 @@
         if ( auto ss = cast(IStructuredSelection) selection ) {
             setSelectionToWidget(ss.toList(), reveal);
         } else {
-            setSelectionToWidget(cast(SeqView!(Object)) null, reveal);
+            setSelectionToWidget(cast(List) null, reveal);
         }
     }
 
@@ -1915,13 +1865,7 @@
                 }
             } else {
                 Widget[] widgets = ( cast(ArrayWrapperT!(Widget)) widgetOrWidgets).array;
-                int indexOfItem = -1;
-                foreach( idx, w; widgets ){
-                    if( w == item ){
-                        indexOfItem = idx;
-                        break;
-                    }
-                }
+                int indexOfItem = Arrays.asList(widgets).indexOf(item);
                 if (indexOfItem is -1) {
                     return;
                 }
@@ -1932,13 +1876,13 @@
                     } else {
                         Widget[] updatedWidgets = new Widget[length - 1];
                         System.arraycopy(widgets, 1, updatedWidgets, 0, length -1 );
-                        elementMap.put(element, new ArrayWrapperT!(Widget)( updatedWidgets));
+                        elementMap.put(element, new ArrayWrapperObject( updatedWidgets));
                     }
                 } else {
                     Widget[] updatedWidgets = new Widget[length - 1];
                     System.arraycopy(widgets, 0, updatedWidgets, 0, indexOfItem);
                     System.arraycopy(widgets, indexOfItem + 1, updatedWidgets, indexOfItem, length - indexOfItem - 1);
-                    elementMap.put(element, new ArrayWrapperT!(Widget)(updatedWidgets));
+                    elementMap.put(element, new ArrayWrapperObject(updatedWidgets));
                 }
             }
         }
@@ -1946,7 +1890,7 @@
 
     // flag to indicate that a full refresh took place. See bug 102440.
     private bool refreshOccurred;
-    
+
     /**
      * Updates the given elements' presentation when one or more of their
      * properties change. Only the given elements are updated.
@@ -2048,7 +1992,7 @@
         for (int i = 0; i < items.length; i++) {
             internalUpdate(items[i], element, properties);
             if (mayExitEarly && refreshOccurred) {
-                // detected a change from refreshOccurred is false to refreshOccurred is true 
+                // detected a change from refreshOccurred is false to refreshOccurred is true
                 return;
             }
         }
@@ -2084,12 +2028,10 @@
             }
         }
         if (needsRefilter_) {
-            preservingSelection(new class Runnable {
-                public void run() {
-                    internalRefresh(getRoot());
-                    refreshOccurred = true;
-                }
-            });
+            preservingSelection(dgRunnable( {
+                internalRefresh(getRoot());
+                refreshOccurred = true;
+            }));
             return;
         }