changeset 84:7ab2f0b11096

Added explicit control info to workaround missing reflection.
author Frank Benoit <benoit@tionex.de>
date Fri, 20 Jun 2008 14:23:16 +0200
parents 028aedd523ad
children 31d465ea8ac5
files dwtx/jface/layout/LayoutGenerator.d
diffstat 1 files changed, 76 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/jface/layout/LayoutGenerator.d	Fri Jun 20 13:00:15 2008 +0200
+++ b/dwtx/jface/layout/LayoutGenerator.d	Fri Jun 20 14:23:16 2008 +0200
@@ -28,6 +28,7 @@
 import dwtx.jface.util.Geometry;
 
 import dwt.dwthelper.utils;
+import tango.text.convert.Format;
 
 /* package */class LayoutGenerator {
 
@@ -137,12 +138,12 @@
         bool hScroll = hasStyle(control, DWT.H_SCROLL);
         bool vScroll = hasStyle(control, DWT.V_SCROLL);
 
-        bool containsText = hasMethod(control, "setText", [ ArrayWrapperString.classinfo ] ); //$NON-NLS-1$
+        bool containsText = hasMethodSetText(control);//, "setText", [ ArrayWrapperString.classinfo ] ); //$NON-NLS-1$
 
         // If the control has a setText method, an addModifyListener method, and
         // does not have
         // the DWT.READ_ONLY flag, assume it contains user-editable text.
-        bool userEditable = !hasStyle(control, DWT.READ_ONLY) && containsText && hasMethod(control, "addModifyListener", [ ModifyListener.classinfo ]); //$NON-NLS-1$
+        bool userEditable = !hasStyle(control, DWT.READ_ONLY) && containsText && hasMethodAddModifyListener(control);//, "addModifyListener", [ ModifyListener.classinfo ]); //$NON-NLS-1$
 
         // For controls containing user-editable text...
         if (userEditable) {
@@ -195,17 +196,78 @@
         return GridDataFactory.fillDefaults().grab(grabHorizontal, vScroll).align_(DWT.FILL, vAlign).hint(hHint, vScroll ? defaultSize.y : DWT.DEFAULT);
     }
 
-    private static bool hasMethod(Control control, String name, ClassInfo[] parameterTypes) {
-        ClassInfo c = control.classinfo;
-        implMissing(__FILE__,__LINE__);
-        pragma(msg, "FIXME dwtx.jface.layout.LayoutGenerator hasMethod reflection" );
-        return true;
-/+        try {
-            return c.getMethod(name, parameterTypes) !is null;
-        } catch (SecurityException e) {
-            return false;
-        } catch (NoSuchMethodException e) {
-            return false;
-        }+/
+    struct ControlInfo {
+        char[] name;
+        bool   hasSetText;
+        bool   hasAddModifierListener;
     }
+    static ControlInfo[] controlInfo = [
+        { "dwt.custom.CBanner.CBanner", false, false },
+        { "dwt.custom.CCombo.CCombo", true, true },
+        { "dwt.custom.CLabel.CLabel", true, false },
+        { "dwt.custom.CTabFolder.CTabFolder", false, false },
+        { "dwt.custom.SashForm.SashForm", false, false },
+        { "dwt.custom.ScrolledComposite.ScrolledComposite", false, false },
+        { "dwt.custom.StyledText.StyledText", true, true },
+        { "dwt.custom.TableCursor.TableCursor", false, false },
+        { "dwt.custom.TableTree.TableTree", false, false },
+        { "dwt.custom.ViewForm.ViewForm", false, false },
+        { "dwt.opengl.GLCanvas.GLCanvas", false, false },
+        { "dwt.widgets.Button.Button", true, false },
+        { "dwt.widgets.Canvas.Canvas", false, false },
+        { "dwt.widgets.Combo.Combo", true, true },
+        { "dwt.widgets.Composite.Composite", false, false },
+        { "dwt.widgets.Control.Control", false, false },
+        { "dwt.widgets.CoolBar.CoolBar", false, false },
+        { "dwt.widgets.DateTime.DateTime", false, false },
+        { "dwt.widgets.Decorations.Decorations", true, false },
+        { "dwt.widgets.ExpandBar.ExpandBar", false, false },
+        { "dwt.widgets.Group.Group", true, false },
+        { "dwt.widgets.Label.Label", true, false },
+        { "dwt.widgets.Link.Link", true, false },
+        { "dwt.widgets.List.List", false, false },
+        { "dwt.widgets.ProgressBar.ProgressBar", false, false },
+        { "dwt.widgets.Sash.Sash", false, false },
+        { "dwt.widgets.Scale.Scale", false, false },
+        { "dwt.widgets.Scrollable.Scrollable", false, false },
+        { "dwt.widgets.Shell.Shell", true, false },
+        { "dwt.widgets.Slider.Slider", false, false },
+        { "dwt.widgets.Spinner.Spinner", false, true },
+        { "dwt.widgets.TabFolder.TabFolder", false, false },
+        { "dwt.widgets.Table.Table", false, false },
+        { "dwt.widgets.Text.Text", true, true },
+        { "dwt.widgets.ToolBar.ToolBar", false, false },
+        { "dwt.widgets.Tree.Tree", false, false },
+    ];
+    private static bool hasMethodSetText(Control control) {
+        char[] name = control.classinfo.name;
+        foreach( ci; controlInfo ){
+            if( ci.name == name ){
+                return ci.hasSetText;
+            }
+        }
+        throw new Exception( Format( "{}:{} Control was not found for reflection info: {}", __FILE__, __LINE__, name ));
+    }
+    private static bool hasMethodAddModifyListener(Control control) {
+        char[] name = control.classinfo.name;
+        foreach( ci; controlInfo ){
+            if( ci.name == name ){
+                return ci.hasAddModifierListener;
+            }
+        }
+        throw new Exception( Format( "{}:{} Control was not found for reflection info: {}", __FILE__, __LINE__, name ));
+    }
+//    private static bool hasMethod(Control control, String name, ClassInfo[] parameterTypes) {
+//        ClassInfo c = control.classinfo;
+//        implMissing(__FILE__,__LINE__);
+//        pragma(msg, "FIXME dwtx.jface.layout.LayoutGenerator hasMethod reflection" );
+//        return true;
+///+        try {
+//            return c.getMethod(name, parameterTypes) !is null;
+//        } catch (SecurityException e) {
+//            return false;
+//        } catch (NoSuchMethodException e) {
+//            return false;
+//        }+/
+//    }
 }