comparison dwtx/jface/viewers/StructuredViewer.d @ 54:a6683645b0d7

Fix ignored labelprovider for TreeViewer (See WrapperViewerLabelProvider.d), removed the debugging prints
author Frank Benoit <benoit@tionex.de>
date Sat, 12 Apr 2008 17:53:06 +0200
parents ea8ff534f622
children 46a6e0e6ccd4
comparison
equal deleted inserted replaced
53:28f6c339768e 54:a6683645b0d7
68 import dwtx.jface.util.OpenStrategy; 68 import dwtx.jface.util.OpenStrategy;
69 import dwtx.jface.util.SafeRunnable; 69 import dwtx.jface.util.SafeRunnable;
70 70
71 import dwt.dwthelper.utils; 71 import dwt.dwthelper.utils;
72 import dwt.dwthelper.Runnable; 72 import dwt.dwthelper.Runnable;
73 import tango.util.log.Trace;
74 73
75 /** 74 /**
76 * Abstract base implementation for structure-oriented viewers (trees, lists, 75 * Abstract base implementation for structure-oriented viewers (trees, lists,
77 * tables). Supports custom sorting, filtering, and rendering. 76 * tables). Supports custom sorting, filtering, and rendering.
78 * <p> 77 * <p>
829 * @see IDoubleClickListener#doubleClick 828 * @see IDoubleClickListener#doubleClick
830 */ 829 */
831 protected void fireDoubleClick(DoubleClickEvent event) { 830 protected void fireDoubleClick(DoubleClickEvent event) {
832 Object[] listeners = doubleClickListeners.getListeners(); 831 Object[] listeners = doubleClickListeners.getListeners();
833 for (int i = 0; i < listeners.length; ++i) { 832 for (int i = 0; i < listeners.length; ++i) {
834 SafeRunnable.run(new class(cast(IDoubleClickListener) listeners[i]) SafeRunnable { 833 SafeRunnable.run(new class(cast(IDoubleClickListener) listeners[i], event) SafeRunnable {
835 IDoubleClickListener l; 834 IDoubleClickListener l;
836 this(IDoubleClickListener a){ 835 DoubleClickEvent event_;
836 this(IDoubleClickListener a,DoubleClickEvent b){
837 l = a; 837 l = a;
838 event_=b;
838 } 839 }
839 public void run() { 840 public void run() {
840 l.doubleClick(event); 841 l.doubleClick(event_);
841 } 842 }
842 }); 843 });
843 } 844 }
844 } 845 }
845 package void fireDoubleClick_package(DoubleClickEvent event) { 846 package void fireDoubleClick_package(DoubleClickEvent event) {
856 * @see IOpenListener#open(OpenEvent) 857 * @see IOpenListener#open(OpenEvent)
857 */ 858 */
858 protected void fireOpen(OpenEvent event) { 859 protected void fireOpen(OpenEvent event) {
859 Object[] listeners = openListeners.getListeners(); 860 Object[] listeners = openListeners.getListeners();
860 for (int i = 0; i < listeners.length; ++i) { 861 for (int i = 0; i < listeners.length; ++i) {
861 SafeRunnable.run(new class(cast(IOpenListener) listeners[i]) SafeRunnable { 862 SafeRunnable.run(new class(cast(IOpenListener) listeners[i],event) SafeRunnable {
862 IOpenListener l; 863 IOpenListener l;
863 this(IOpenListener a){ 864 OpenEvent event_;
865 this(IOpenListener a, OpenEvent b){
864 l = a; 866 l = a;
867 event_=b;
865 } 868 }
866 public void run() { 869 public void run() {
867 l.open(event); 870 l.open(event_);
868 } 871 }
869 }); 872 });
870 } 873 }
871 } 874 }
872 package void fireOpen_package(OpenEvent event) { 875 package void fireOpen_package(OpenEvent event) {
884 * @see #addPostSelectionChangedListener(ISelectionChangedListener) 887 * @see #addPostSelectionChangedListener(ISelectionChangedListener)
885 */ 888 */
886 protected void firePostSelectionChanged(SelectionChangedEvent event) { 889 protected void firePostSelectionChanged(SelectionChangedEvent event) {
887 Object[] listeners = postSelectionChangedListeners.getListeners(); 890 Object[] listeners = postSelectionChangedListeners.getListeners();
888 for (int i = 0; i < listeners.length; ++i) { 891 for (int i = 0; i < listeners.length; ++i) {
889 SafeRunnable.run(new class(cast(ISelectionChangedListener) listeners[i]) SafeRunnable { 892 SafeRunnable.run(new class(cast(ISelectionChangedListener) listeners[i],event) SafeRunnable {
890 ISelectionChangedListener l; 893 ISelectionChangedListener l;
891 this(ISelectionChangedListener a){ 894 SelectionChangedEvent event_;
895 this(ISelectionChangedListener a,SelectionChangedEvent b){
892 l = a; 896 l = a;
897 event_=b;
893 } 898 }
894 public void run() { 899 public void run() {
895 l.selectionChanged(event); 900 l.selectionChanged(event_);
896 } 901 }
897 }); 902 });
898 } 903 }
899 } 904 }
900 905
1299 Object widgetOrWidgets = elementMap.get(element); 1304 Object widgetOrWidgets = elementMap.get(element);
1300 if (widgetOrWidgets is null) { 1305 if (widgetOrWidgets is null) {
1301 elementMap.put(element, item); 1306 elementMap.put(element, item);
1302 } else if ( auto w = cast(Widget)widgetOrWidgets ) { 1307 } else if ( auto w = cast(Widget)widgetOrWidgets ) {
1303 if (widgetOrWidgets !is item) { 1308 if (widgetOrWidgets !is item) {
1304 elementMap.put(element, new ArrayWrapperObject([ cast(Object) 1309 elementMap.put(element, new ArrayWrapperT!(Widget)( [ w, item ] ));
1305 w, item ]));
1306 } 1310 }
1307 } else { 1311 } else {
1308 Widget[] widgets = (cast(ArrayWrapperT!(Widget)) widgetOrWidgets).array; 1312 Widget[] widgets = (cast(ArrayWrapperT!(Widget)) widgetOrWidgets).array;
1309 int indexOfItem = -1; 1313 int indexOfItem = -1;
1310 foreach( idx, w; widgets ){ 1314 foreach( idx, w; widgets ){
1316 if (indexOfItem is -1) { 1320 if (indexOfItem is -1) {
1317 int length_ = widgets.length; 1321 int length_ = widgets.length;
1318 System.arraycopy(widgets, 0, 1322 System.arraycopy(widgets, 0,
1319 widgets = new Widget[length_ + 1], 0, length_); 1323 widgets = new Widget[length_ + 1], 0, length_);
1320 widgets[length_] = item; 1324 widgets[length_] = item;
1321 elementMap.put(element, new ArrayWrapperObject(widgets)); 1325 elementMap.put(element, new ArrayWrapperT!(Widget)(widgets));
1322 } 1326 }
1323 } 1327 }
1324 } 1328 }
1325 } 1329 }
1326 1330
1518 * that labels for existing elements are unchanged. 1522 * that labels for existing elements are unchanged.
1519 * 1523 *
1520 * @since 2.0 1524 * @since 2.0
1521 */ 1525 */
1522 public void refresh(Object element, bool updateLabels) { 1526 public void refresh(Object element, bool updateLabels) {
1523 preservingSelection(new class Runnable { 1527 preservingSelection(new class(element, updateLabels) Runnable {
1524 Object element_; 1528 Object element_;
1525 bool updateLabels_; 1529 bool updateLabels_;
1526 this(){ 1530 this(Object a, bool b){
1527 element_ = element; 1531 element_ = a;
1528 updateLabels_ = updateLabels; 1532 updateLabels_ = b;
1529 } 1533 }
1530 public void run() { 1534 public void run() {
1531 internalRefresh(element_, updateLabels_); 1535 internalRefresh(element_, updateLabels_);
1532 } 1536 }
1533 }); 1537 });
1619 */ 1623 */
1620 public void setFilters(ViewerFilter[] filters) { 1624 public void setFilters(ViewerFilter[] filters) {
1621 if (filters.length is 0) { 1625 if (filters.length is 0) {
1622 resetFilters(); 1626 resetFilters();
1623 } else { 1627 } else {
1624 this.filters = new ArraySeq!(ViewerFilter); 1628 auto tmp = new ArraySeq!(ViewerFilter);
1625 foreach( f; filters ){ 1629 foreach( f; filters ){
1626 this.filters.append(f); 1630 tmp.append(f);
1627 } 1631 }
1632 this.filters = tmp;
1628 refresh(); 1633 refresh();
1629 } 1634 }
1630 } 1635 }
1631 1636
1632 /** 1637 /**
1928 if(length is 1) { 1933 if(length is 1) {
1929 elementMap.remove(element); 1934 elementMap.remove(element);
1930 } else { 1935 } else {
1931 Widget[] updatedWidgets = new Widget[length - 1]; 1936 Widget[] updatedWidgets = new Widget[length - 1];
1932 System.arraycopy(widgets, 1, updatedWidgets, 0, length -1 ); 1937 System.arraycopy(widgets, 1, updatedWidgets, 0, length -1 );
1933 elementMap.put(element, new ArrayWrapperObject( updatedWidgets)); 1938 elementMap.put(element, new ArrayWrapperT!(Widget)( updatedWidgets));
1934 } 1939 }
1935 } else { 1940 } else {
1936 Widget[] updatedWidgets = new Widget[length - 1]; 1941 Widget[] updatedWidgets = new Widget[length - 1];
1937 System.arraycopy(widgets, 0, updatedWidgets, 0, indexOfItem); 1942 System.arraycopy(widgets, 0, updatedWidgets, 0, indexOfItem);
1938 System.arraycopy(widgets, indexOfItem + 1, updatedWidgets, indexOfItem, length - indexOfItem - 1); 1943 System.arraycopy(widgets, indexOfItem + 1, updatedWidgets, indexOfItem, length - indexOfItem - 1);
1939 elementMap.put(element, new ArrayWrapperObject(updatedWidgets)); 1944 elementMap.put(element, new ArrayWrapperT!(Widget)(updatedWidgets));
1940 } 1945 }
1941 } 1946 }
1942 } 1947 }
1943 } 1948 }
1944 1949
2053 * @param properties 2058 * @param properties
2054 * the properties that have changed, or <code>null</code> to 2059 * the properties that have changed, or <code>null</code> to
2055 * indicate unknown 2060 * indicate unknown
2056 */ 2061 */
2057 protected void internalUpdate(Widget widget, Object element, String[] properties) { 2062 protected void internalUpdate(Widget widget, Object element, String[] properties) {
2058 Trace.formatln( "{} {}:", __FILE__, __LINE__ );
2059 bool needsRefilter_ = false; 2063 bool needsRefilter_ = false;
2060 if (properties !is null) { 2064 if (properties !is null) {
2061 for (int i = 0; i < properties.length; ++i) { 2065 for (int i = 0; i < properties.length; ++i) {
2062 needsRefilter_ = needsRefilter(element, properties[i]); 2066 needsRefilter_ = needsRefilter(element, properties[i]);
2063 if (needsRefilter_) { 2067 if (needsRefilter_) {
2161 * Build a label up for the element using the supplied label provider. 2165 * Build a label up for the element using the supplied label provider.
2162 * @param updateLabel The ViewerLabel to collect the result in 2166 * @param updateLabel The ViewerLabel to collect the result in
2163 * @param element The element being decorated. 2167 * @param element The element being decorated.
2164 */ 2168 */
2165 protected void buildLabel(ViewerLabel updateLabel, Object element){ 2169 protected void buildLabel(ViewerLabel updateLabel, Object element){
2166 Trace.formatln( "{} {}:", __FILE__, __LINE__ );
2167 2170
2168 if ( auto vlp = cast(IViewerLabelProvider)getLabelProvider() ) { 2171 if ( auto vlp = cast(IViewerLabelProvider)getLabelProvider() ) {
2169 IViewerLabelProvider itemProvider = cast(IViewerLabelProvider) getLabelProvider(); 2172 IViewerLabelProvider itemProvider = cast(IViewerLabelProvider) getLabelProvider();
2170 itemProvider.updateLabel(updateLabel, element); 2173 itemProvider.updateLabel(updateLabel, element);
2171 2174
2199 * @param updateLabel The ViewerLabel to collect the result in 2202 * @param updateLabel The ViewerLabel to collect the result in
2200 * @param element The element being decorated. 2203 * @param element The element being decorated.
2201 * @param labelProvider ILabelProvider the labelProvider for the receiver. 2204 * @param labelProvider ILabelProvider the labelProvider for the receiver.
2202 */ 2205 */
2203 void buildLabel(ViewerLabel updateLabel, Object element, IViewerLabelProvider labelProvider){ 2206 void buildLabel(ViewerLabel updateLabel, Object element, IViewerLabelProvider labelProvider){
2204 Trace.formatln( "{} {}:", __FILE__, __LINE__ );
2205 2207
2206 labelProvider.updateLabel(updateLabel, element); 2208 labelProvider.updateLabel(updateLabel, element);
2207 2209
2208 colorAndFontCollector.setUsedDecorators(); 2210 colorAndFontCollector.setUsedDecorators();
2209 2211
2226 * @param updateLabel The ViewerLabel to collect the result in 2228 * @param updateLabel The ViewerLabel to collect the result in
2227 * @param elementPath The path of the element being decorated. 2229 * @param elementPath The path of the element being decorated.
2228 * @param labelProvider ILabelProvider the labelProvider for the receiver. 2230 * @param labelProvider ILabelProvider the labelProvider for the receiver.
2229 */ 2231 */
2230 void buildLabel(ViewerLabel updateLabel, TreePath elementPath,ITreePathLabelProvider labelProvider){ 2232 void buildLabel(ViewerLabel updateLabel, TreePath elementPath,ITreePathLabelProvider labelProvider){
2231 Trace.formatln( "{} {}:", __FILE__, __LINE__ );
2232 2233
2233 labelProvider.updateLabel(updateLabel, elementPath); 2234 labelProvider.updateLabel(updateLabel, elementPath);
2234 2235
2235 colorAndFontCollector.setUsedDecorators(); 2236 colorAndFontCollector.setUsedDecorators();
2236 2237
2253 * @param updateLabel The ViewerLabel to collect the result in 2254 * @param updateLabel The ViewerLabel to collect the result in
2254 * @param element The element being decorated. 2255 * @param element The element being decorated.
2255 * @param labelProvider ILabelProvider the labelProvider for the receiver. 2256 * @param labelProvider ILabelProvider the labelProvider for the receiver.
2256 */ 2257 */
2257 void buildLabel(ViewerLabel updateLabel, Object element,ILabelProvider labelProvider){ 2258 void buildLabel(ViewerLabel updateLabel, Object element,ILabelProvider labelProvider){
2258 Trace.formatln( "{} {}:", __FILE__, __LINE__ );
2259 updateLabel.setText(labelProvider.getText(element)); 2259 updateLabel.setText(labelProvider.getText(element));
2260 updateLabel.setImage(labelProvider.getImage(element)); 2260 updateLabel.setImage(labelProvider.getImage(element));
2261 } 2261 }
2262 2262
2263 /** 2263 /**