changeset 76:e193036d82c9

Fix continue porting
author Frank Benoit <benoit@tionex.de>
date Sat, 24 May 2008 06:18:55 +0200
parents 5d489b9f966c
children 26c6c9dfd13c
files dwtx/ui/forms/widgets/ToggleHyperlink.d dwtx/ui/internal/forms/MessageManager.d dwtx/ui/internal/forms/widgets/AggregateHyperlinkSegment.d dwtx/ui/internal/forms/widgets/BreakSegment.d dwtx/ui/internal/forms/widgets/BulletParagraph.d dwtx/ui/internal/forms/widgets/BusyIndicator.d dwtx/ui/internal/forms/widgets/ControlSegment.d dwtx/ui/internal/forms/widgets/FormFonts.d dwtx/ui/internal/forms/widgets/FormHeading.d dwtx/ui/internal/forms/widgets/FormImages.d dwtx/ui/internal/forms/widgets/ImageHyperlinkSegment.d dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d dwtx/ui/internal/forms/widgets/TitleRegion.d
diffstat 13 files changed, 188 insertions(+), 130 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/ui/forms/widgets/ToggleHyperlink.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/forms/widgets/ToggleHyperlink.d	Sat May 24 06:18:55 2008 +0200
@@ -13,6 +13,7 @@
 module dwtx.ui.forms.widgets.ToggleHyperlink;
 
 import dwtx.ui.forms.widgets.AbstractHyperlink;
+import dwtx.ui.forms.widgets.ExpandableComposite;
 
 import dwt.DWT;
 import dwt.accessibility.ACC;
@@ -193,7 +194,7 @@
                     name ~= Messages.ToggleHyperlink_accessibleColumn ~ (cast(ExpandableComposite)getParent()).getText();
                     int index = name.indexOf('&');
                     if (index !is -1) {
-                        name = name.substring(0, index) + name.substring(index + 1);
+                        name = name.substring(0, index) ~ name.substring(index + 1);
                     }
                 }
                 e.result = name;
@@ -245,14 +246,14 @@
                 });
     }
     private void onKeyDown(Event e) {
-        if (e.keyCodeisDWT.ARROW_RIGHT) {
+        if (e.keyCode is DWT.ARROW_RIGHT) {
             // expand if collapsed
             if (!isExpanded()) {
                 handleActivate(e);
             }
             e.doit=false;
         }
-        else if (e.keyCodeisDWT.ARROW_LEFT) {
+        else if (e.keyCode is DWT.ARROW_LEFT) {
             // collapse if expanded
             if (isExpanded()) {
                 handleActivate(e);
--- a/dwtx/ui/internal/forms/MessageManager.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/MessageManager.d	Sat May 24 06:18:55 2008 +0200
@@ -35,15 +35,16 @@
 import tango.util.collection.ArraySeq;
 import tango.util.collection.HashMap;
 import tango.util.Convert;
-
+import tango.text.Text;
+import tango.io.FileConst;
 /**
  * @see IMessageManager
  */
 
 public class MessageManager : IMessageManager {
 
-    private static final DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER_;
-    private static final DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER(){
+    private static DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER_;
+    private static DefaultPrefixProvider DEFAULT_PREFIX_PROVIDER(){
         if( DEFAULT_PREFIX_PROVIDER_ is null ){
             synchronized(MessageManager.classinfo){
                 if( DEFAULT_PREFIX_PROVIDER_ is null ){
@@ -99,17 +100,22 @@
         return standardInformation_;
     }
 
-    private static const String[] SINGLE_MESSAGE_SUMMARY_KEYS = [
+    private static String[] SINGLE_MESSAGE_SUMMARY_KEYS;
+    private static String[] MULTIPLE_MESSAGE_SUMMARY_KEYS;
+
+    static this(){
+        SINGLE_MESSAGE_SUMMARY_KEYS = [
             Messages.MessageManager_sMessageSummary,
             Messages.MessageManager_sMessageSummary,
             Messages.MessageManager_sWarningSummary,
             Messages.MessageManager_sErrorSummary ];
 
-    private static const String[] MULTIPLE_MESSAGE_SUMMARY_KEYS = [
+        MULTIPLE_MESSAGE_SUMMARY_KEYS = [
             Messages.MessageManager_pMessageSummary,
             Messages.MessageManager_pMessageSummary,
             Messages.MessageManager_pWarningSummary,
             Messages.MessageManager_pErrorSummary ];
+    }
 
     static class Message : IMessage {
         Control control;
@@ -215,10 +221,11 @@
 
     class ControlDecorator {
         private ControlDecoration decoration;
-        private ArraySeq!(Message) controlMessages = new ArraySeq!(Message);
+        private ArraySeq!(Object) controlMessages;
         private String prefix;
 
         this(Control control) {
+            controlMessages = new ArraySeq!(Object);
             this.decoration = new ControlDecoration(control, decorationPosition, scrolledForm.getBody());
         }
 
@@ -255,7 +262,9 @@
         }
 
         void addAll(ArraySeq!(Object) target) {
-            target.addAll(controlMessages);
+            foreach( o; controlMessages ){
+                target.append(o);
+            }
         }
 
         void addMessage(Object key, String text, Object data, int type) {
@@ -277,7 +286,7 @@
         }
 
         bool removeMessages() {
-            if (controlMessages.isEmpty())
+            if (controlMessages.drained())
                 return false;
             controlMessages.clear();
             if (isAutoUpdate())
@@ -286,7 +295,7 @@
         }
 
         public void update() {
-            if (controlMessages.isEmpty()) {
+            if (controlMessages.drained()) {
                 decoration.setDescriptionText(null);
                 decoration.hide();
             } else {
@@ -343,7 +352,7 @@
 
         if (dec is null) {
             dec = new ControlDecorator(control);
-            decorators.put(control, dec);
+            decorators.add(control, dec);
         }
         dec.addMessage(key, messageText, data, type);
         if (isAutoUpdate())
@@ -370,7 +379,7 @@
      * @see dwtx.ui.forms.IMessageManager#removeMessages()
      */
     public void removeMessages() {
-        if (!messages.isEmpty()) {
+        if (!messages.drained()) {
             messages.clear();
             if (isAutoUpdate())
                 updateForm();
@@ -414,12 +423,12 @@
      */
     public void removeAllMessages() {
         bool needsUpdate = false;
-        for (Enumeration enm = decorators.elements(); enm.hasMoreElements();) {
-            ControlDecorator control = cast(ControlDecorator) enm.nextElement();
+        foreach( v; decorators ){
+            ControlDecorator control = cast(ControlDecorator) v;
             if (control.removeMessages())
                 needsUpdate = true;
         }
-        if (!messages.isEmpty()) {
+        if (!messages.drained()) {
             messages.clear();
             needsUpdate = true;
         }
@@ -437,7 +446,7 @@
         if (message is null) {
             message = new Message(key, messageText, type, data);
             message.prefix = prefix;
-            list.add(message);
+            list.append(message);
         } else {
             message.message = messageText;
             message.type = type;
@@ -453,7 +462,7 @@
     private Message findMessage(Object key, ArraySeq!(Object) list) {
         for (int i = 0; i < list.size(); i++) {
             Message message = cast(Message) list.get(i);
-            if (message.getKey().equals(key))
+            if (message.getKey().opEquals(key))
                 return message;
         }
         return null;
@@ -466,8 +475,8 @@
      */
     public void update() {
         // Update decorations
-        for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
-            ControlDecorator dec = cast(ControlDecorator) iter.next();
+        foreach( v; decorators ){
+            ControlDecorator dec = cast(ControlDecorator) v;
             dec.update();
         }
         // Update the form
@@ -479,10 +488,12 @@
      */
 
     private void updateForm() {
-        ArrayList mergedList = new ArrayList();
-        mergedList.addAll(messages);
-        for (Enumeration enm = decorators.elements(); enm.hasMoreElements();) {
-            ControlDecorator dec = cast(ControlDecorator) enm.nextElement();
+        ArraySeq!(Object) mergedList = new ArraySeq!(Object);
+        foreach( o; messages ){
+            mergedList.append(o);
+        }
+        foreach( v; decorators ){
+            ControlDecorator dec = cast(ControlDecorator) v;
             dec.addAll(mergedList);
         }
         update(mergedList);
@@ -490,7 +501,7 @@
 
     private void update(ArraySeq!(Object) mergedList) {
         pruneControlDecorators();
-        if (scrolledForm.getForm().getHead().getBounds().height is 0 || mergedList.isEmpty() || mergedList is null) {
+        if (scrolledForm.getForm().getHead().getBounds().height is 0 || mergedList.drained() || mergedList is null) {
             scrolledForm.setMessage(null, IMessageProvider.NONE);
             return;
         }
@@ -520,13 +531,14 @@
     private static String getFullMessage(IMessage message) {
         if (message.getPrefix() is null)
             return message.getMessage();
-        return message.getPrefix() + message.getMessage();
+        return message.getPrefix() ~ message.getMessage();
     }
 
-    private ArraySeq!(Message) createPeers(ArraySeq!(Message) messages) {
-        auto peers = new ArraySeq!(Message);
+    private ArraySeq!(Object) createPeers(ArraySeq!(Object) messages) {
+        auto peers = new ArraySeq!(Object);
         int maxType = 0;
-        foreach( message; messages ){
+        foreach( o; messages ){
+            auto message = cast(Message)o;
             if (message.type > maxType) {
                 peers.clear();
                 maxType = message.type;
@@ -538,32 +550,28 @@
     }
 
     private String createDetails(ArraySeq!(Object) messages, bool excludePrefix) {
-        StringWriter sw = new StringWriter();
-        PrintWriter out_ = new PrintWriter(sw);
+        auto txt = new tango.text.Text.Text!(char);
 
         for (int i = 0; i < messages.size(); i++) {
             if (i > 0)
-                out_.println();
+                txt.append( FileConst.NewlineString );
             IMessage m = cast(IMessage) messages.get(i);
-            out_.print(excludePrefix ? m.getMessage() : getFullMessage(m));
+            txt.append(excludePrefix ? m.getMessage() : getFullMessage(m));
         }
-        out_.flush();
-        return sw.toString();
+        return txt.toString();
     }
 
     public static String createDetails(IMessage[] messages) {
         if (messages is null || messages.length is 0)
             return null;
-        StringWriter sw = new StringWriter();
-        PrintWriter out_ = new PrintWriter(sw);
+        auto txt = new tango.text.Text.Text!(char);
 
         for (int i = 0; i < messages.length; i++) {
             if (i > 0)
-                out_.println();
-            out_.print(getFullMessage(messages[i]));
+                txt.append( FileConst.NewlineString );
+            txt.append(getFullMessage(messages[i]));
         }
-        out_.flush();
-        return sw.toString();
+        return txt.toString();
     }
 
     /*
@@ -576,10 +584,10 @@
     }
 
     private void pruneControlDecorators() {
-        for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
-            ControlDecorator dec = cast(ControlDecorator) iter.next();
+        foreach( o; decorators.dup ){
+            ControlDecorator dec = cast(ControlDecorator) o;
             if (dec.isDisposed())
-                iter.remove();
+                decorators.remove(o);
         }
     }
 
@@ -599,8 +607,8 @@
      */
     public void setMessagePrefixProvider(IMessagePrefixProvider provider) {
         this.prefixProvider = provider;
-        for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
-            ControlDecorator dec = cast(ControlDecorator) iter.next();
+        foreach( o; decorators ){
+            ControlDecorator dec = cast(ControlDecorator) o;
             dec.updatePrefix();
         }
     }
@@ -621,8 +629,8 @@
      */
     public void setDecorationPosition(int position) {
         this.decorationPosition = position;
-        for (Iterator iter = decorators.values().iterator(); iter.hasNext();) {
-            ControlDecorator dec = cast(ControlDecorator) iter.next();
+        foreach( o; decorators ){
+            ControlDecorator dec = cast(ControlDecorator) o;
             dec.updatePosition();
         }
     }
--- a/dwtx/ui/internal/forms/widgets/AggregateHyperlinkSegment.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/AggregateHyperlinkSegment.d	Sat May 24 06:18:55 2008 +0200
@@ -12,37 +12,45 @@
  *******************************************************************************/
 module dwtx.ui.internal.forms.widgets.AggregateHyperlinkSegment;
 
-import java.util.Hashtable;
-import java.util.Vector;
+import dwtx.ui.internal.forms.widgets.ParagraphSegment;
+import dwtx.ui.internal.forms.widgets.IHyperlinkSegment;
+import dwtx.ui.internal.forms.widgets.TextHyperlinkSegment;
+import dwtx.ui.internal.forms.widgets.ImageHyperlinkSegment;
+import dwtx.ui.internal.forms.widgets.Locator;
+import dwtx.ui.internal.forms.widgets.SelectionData;
 
 import dwt.graphics.Color;
 import dwt.graphics.GC;
 import dwt.graphics.Rectangle;
 
+import dwt.dwthelper.utils;
+import tango.util.collection.ArraySeq;
+
 /**
  * This segment contains a collection of images and links that all belong to one
  * logical hyperlink.
  */
-public class AggregateHyperlinkSegment extends ParagraphSegment implements
+public class AggregateHyperlinkSegment : ParagraphSegment,
         IHyperlinkSegment {
     private String href;
 
-    private Vector segments = new Vector();
+    private ArraySeq!(Object) segments;
 
-    public AggregateHyperlinkSegment() {
+    public this() {
+        segments = new ArraySeq!(Object);
     }
 
     public void add(TextHyperlinkSegment segment) {
-        segments.add(segment);
+        segments.append(segment);
     }
 
     public void add(ImageHyperlinkSegment segment) {
-        segments.add(segment);
+        segments.append(segment);
     }
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#advanceLocator(dwt.graphics.GC,
      *      int, dwtx.ui.internal.forms.widgets.Locator,
      *      java.util.Hashtable, bool)
@@ -51,7 +59,7 @@
             Hashtable objectTable, bool computeHeightOnly) {
         bool newLine = false;
         for (int i = 0; i < segments.size(); i++) {
-            ParagraphSegment segment = (ParagraphSegment) segments.get(i);
+            ParagraphSegment segment = cast(ParagraphSegment) segments.get(i);
             if (segment.advanceLocator(gc, wHint, loc, objectTable,
                     computeHeightOnly))
                 newLine = true;
@@ -76,14 +84,14 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#repaint(dwt.graphics.GC,
      *      bool)
      */
     public void paint(GC gc, bool hover, Hashtable resourceTable,
             bool selected, SelectionData selData, Rectangle repaintRegion) {
         for (int i = 0; i < segments.size(); i++) {
-            ParagraphSegment segment = (ParagraphSegment) segments.get(i);
+            ParagraphSegment segment = cast(ParagraphSegment) segments.get(i);
             segment.paint(gc, hover, resourceTable, selected, selData,
                     repaintRegion);
         }
@@ -92,7 +100,7 @@
     public String getText() {
         StringBuffer buf = new StringBuffer();
         for (int i = 0; i < segments.size(); i++) {
-            IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
+            IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i);
             buf.append(segment.getText());
         }
         return buf.toString();
@@ -100,7 +108,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#paintFocus(dwt.graphics.GC,
      *      dwt.graphics.Color, dwt.graphics.Color,
      *      bool)
@@ -108,14 +116,14 @@
     public void paintFocus(GC gc, Color bg, Color fg, bool selected,
             Rectangle repaintRegion) {
         for (int i = 0; i < segments.size(); i++) {
-            IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
+            IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i);
             segment.paintFocus(gc, bg, fg, selected, repaintRegion);
         }
     }
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#getBounds()
      */
     public Rectangle getBounds() {
@@ -123,7 +131,7 @@
                 0, 0);
         // TODO this is wrong
         for (int i = 0; i < segments.size(); i++) {
-            IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
+            IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i);
             Rectangle sbounds = segment.getBounds();
             bounds.x = Math.min(bounds.x, sbounds.x);
             bounds.y = Math.min(bounds.y, sbounds.y);
@@ -135,7 +143,7 @@
 
     public bool contains(int x, int y) {
         for (int i = 0; i < segments.size(); i++) {
-            IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
+            IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i);
             if (segment.contains(x, y))
                 return true;
         }
@@ -144,7 +152,7 @@
 
     public bool intersects(Rectangle rect) {
         for (int i = 0; i < segments.size(); i++) {
-            IHyperlinkSegment segment = (IHyperlinkSegment) segments.get(i);
+            IHyperlinkSegment segment = cast(IHyperlinkSegment) segments.get(i);
             if (segment.intersects(rect))
                 return true;
         }
@@ -153,7 +161,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#layout(dwt.graphics.GC,
      *      int, dwtx.ui.internal.forms.widgets.Locator,
      *      java.util.Hashtable, bool,
@@ -162,14 +170,14 @@
     public void layout(GC gc, int width, Locator locator,
             Hashtable resourceTable, bool selected) {
         for (int i = 0; i < segments.size(); i++) {
-            ParagraphSegment segment = (ParagraphSegment) segments.get(i);
+            ParagraphSegment segment = cast(ParagraphSegment) segments.get(i);
             segment.layout(gc, width, locator, resourceTable, selected);
         }
     }
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.ParagraphSegment#computeSelection(dwt.graphics.GC,
      *      java.util.Hashtable, bool,
      *      dwtx.ui.internal.forms.widgets.SelectionData)
@@ -177,21 +185,21 @@
     public void computeSelection(GC gc, Hashtable resourceTable,
             SelectionData selData) {
         for (int i = 0; i < segments.size(); i++) {
-            ParagraphSegment segment = (ParagraphSegment) segments.get(i);
+            ParagraphSegment segment = cast(ParagraphSegment) segments.get(i);
             segment.computeSelection(gc, resourceTable, selData);
         }
     }
 
     public void clearCache(String fontId) {
         for (int i = 0; i < segments.size(); i++) {
-            ParagraphSegment segment = (ParagraphSegment) segments.get(i);
+            ParagraphSegment segment = cast(ParagraphSegment) segments.get(i);
             segment.clearCache(fontId);
         }
     }
 
     public String getTooltipText() {
         if (segments.size() > 0)
-            return ((ParagraphSegment) segments.get(0)).getTooltipText();
+            return (cast(ParagraphSegment) segments.get(0)).getTooltipText();
         return super.getTooltipText();
     }
 
--- a/dwtx/ui/internal/forms/widgets/BreakSegment.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/BreakSegment.d	Sat May 24 06:18:55 2008 +0200
@@ -12,28 +12,34 @@
  *******************************************************************************/
 module dwtx.ui.internal.forms.widgets.BreakSegment;
 
-import java.util.Hashtable;
+import dwtx.ui.internal.forms.widgets.ParagraphSegment;
+import dwtx.ui.internal.forms.widgets.Locator;
+import dwtx.ui.internal.forms.widgets.SelectionData;
+
+//import java.util.Hashtable;
 
 import dwt.graphics.FontMetrics;
 import dwt.graphics.GC;
 import dwt.graphics.Rectangle;
 
+import dwt.dwthelper.utils;
+
 /**
  * This segment serves as break within a paragraph. It has no data -
  * just starts a new line and resets the locator.
  */
 
-public class BreakSegment extends ParagraphSegment {
+public class BreakSegment : ParagraphSegment {
     /* (non-Javadoc)
      * @see dwtx.ui.forms.internal.widgets.ParagraphSegment#advanceLocator(dwt.graphics.GC, int, dwtx.ui.forms.internal.widgets.Locator, java.util.Hashtable)
      */
     public bool advanceLocator(GC gc, int wHint, Locator locator,
             Hashtable objectTable, bool computeHeightOnly) {
-        if (locator.rowHeightis0) {
+        if (locator.rowHeight is 0) {
             FontMetrics fm = gc.getFontMetrics();
             locator.rowHeight = fm.getHeight();
         }
-        if (computeHeightOnly) locator.collectHeights();        
+        if (computeHeightOnly) locator.collectHeights();
         locator.x = locator.indent;
         locator.y += locator.rowHeight;
         locator.rowHeight = 0;
@@ -56,13 +62,13 @@
     public void layout(GC gc, int width, Locator locator, Hashtable ResourceTable,
             bool selected) {
         locator.resetCaret();
-        if (locator.rowHeightis0) {
+        if (locator.rowHeight is 0) {
             FontMetrics fm = gc.getFontMetrics();
             locator.rowHeight = fm.getHeight();
         }
         locator.y += locator.rowHeight;
         locator.rowHeight = 0;
-        locator.rowCounter++;       
+        locator.rowCounter++;
     }
 
     /* (non-Javadoc)
--- a/dwtx/ui/internal/forms/widgets/BulletParagraph.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/BulletParagraph.d	Sat May 24 06:18:55 2008 +0200
@@ -12,7 +12,12 @@
  *******************************************************************************/
 module dwtx.ui.internal.forms.widgets.BulletParagraph;
 
-import java.util.Hashtable;
+import dwtx.ui.internal.forms.widgets.Paragraph;
+import dwtx.ui.internal.forms.widgets.Locator;
+import dwtx.ui.internal.forms.widgets.SelectionData;
+import dwtx.ui.internal.forms.widgets.IHyperlinkSegment;
+
+//import java.util.Hashtable;
 
 import dwt.graphics.Color;
 import dwt.graphics.GC;
@@ -20,12 +25,14 @@
 import dwt.graphics.Point;
 import dwt.graphics.Rectangle;
 
-public class BulletParagraph extends Paragraph {
-    public static final int CIRCLE = 1;
+import dwt.dwthelper.utils;
 
-    public static final int TEXT = 2;
+public class BulletParagraph : Paragraph {
+    public static const int CIRCLE = 1;
 
-    public static final int IMAGE = 3;
+    public static const int TEXT = 2;
+
+    public static const int IMAGE = 3;
 
     private int style = CIRCLE;
 
@@ -43,10 +50,10 @@
 
     /**
      * Constructor for BulletParagraph.
-     * 
+     *
      * @param addVerticalSpace
      */
-    public BulletParagraph(bool addVerticalSpace) {
+    public this(bool addVerticalSpace) {
         super(addVerticalSpace);
     }
 
@@ -118,7 +125,7 @@
     private void layoutBullet(GC gc, Locator loc, int lineHeight,
             Hashtable resourceTable) {
         int x = loc.x - getIndent() + getBulletIndent();
-        int rowHeight = ((int[]) loc.heights.get(0))[0];
+        int rowHeight = (cast(ArrayWrapperInt) loc.heights.get(0)).array[0];
         if (style is CIRCLE) {
             int y = loc.y + rowHeight / 2 - CIRCLE_DIAM / 2;
             bbounds = new Rectangle(x, y, CIRCLE_DIAM, CIRCLE_DIAM);
@@ -127,7 +134,7 @@
             Point textSize = gc.textExtent(text);
             bbounds = new Rectangle(x, loc.y, textSize.x, textSize.y);
         } else if (style is IMAGE && text !is null) {
-            Image image = (Image) resourceTable.get(text);
+            Image image = cast(Image) resourceTable.get(text);
             if (image !is null) {
                 Rectangle ibounds = image.getBounds();
                 int y = loc.y + rowHeight / 2 - ibounds.height / 2;
@@ -156,7 +163,7 @@
         } else if (style is TEXT && text !is null) {
             gc.drawText(text, x, y);
         } else if (style is IMAGE && text !is null) {
-            Image image = (Image) resourceTable.get(text);
+            Image image = cast(Image) resourceTable.get(text);
             if (image !is null)
                 gc.drawImage(image, x, y);
         }
--- a/dwtx/ui/internal/forms/widgets/BusyIndicator.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/BusyIndicator.d	Sat May 24 06:18:55 2008 +0200
@@ -122,7 +122,7 @@
                     try {
                         Thread.sleep(MILLISECONDS_OF_DELAY/1000.0);
                     } catch (InterruptedException e) {
-                        e.printStackTrace();
+                        ExceptionPrintStackTrace(e);
                     }
 
 
@@ -216,8 +216,8 @@
         Image offScreenImage = new Image(display, bounds.width, bounds.height);
         GC offScreenImageGC = new GC(offScreenImage);
         busyThread = new BusyThread(bounds, display, offScreenImageGC, offScreenImage);
-        busyThread.setPriority(Thread.NORM_PRIORITY + 2);
-        busyThread.setDaemon(true);
+        busyThread.priority((Thread.PRIORITY_MIN + Thread.PRIORITY_MAX )/2 + 2);
+        busyThread.isDaemon(true);
         busyThread.start();
     }
 
--- a/dwtx/ui/internal/forms/widgets/ControlSegment.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/ControlSegment.d	Sat May 24 06:18:55 2008 +0200
@@ -15,19 +15,28 @@
 import dwtx.ui.internal.forms.widgets.ObjectSegment;
 import dwtx.ui.internal.forms.widgets.IFocusSelectable;
 import dwtx.ui.internal.forms.widgets.Locator;
+import dwtx.ui.internal.forms.widgets.FormUtil;
 
 import dwt.DWT;
 import dwt.graphics.GC;
 import dwt.graphics.Point;
+import dwt.graphics.Rectangle;
 import dwt.widgets.Canvas;
 import dwt.widgets.Composite;
 import dwt.widgets.Control;
 
 public class ControlSegment : ObjectSegment, IFocusSelectable {
+
+
     private bool fill;
     private int width = DWT.DEFAULT;
     private int height = DWT.DEFAULT;
 
+    // reimpl for interface
+    Rectangle getBounds(){
+        return super.getBounds();
+    }
+
     public this() {
     }
 
@@ -54,7 +63,7 @@
 
     protected Point getObjectSize(Hashtable resourceTable, int wHint) {
         Control control = getControl(resourceTable);
-        if (controlisnull)
+        if (control is null)
             return new Point(0,0);
         int realWhint = FormUtil.getWidthHint(wHint, control);
         Point size = control.computeSize(realWhint, DWT.DEFAULT);
--- a/dwtx/ui/internal/forms/widgets/FormFonts.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormFonts.d	Sat May 24 06:18:55 2008 +0200
@@ -23,7 +23,7 @@
 
 public class FormFonts {
 
-    alias HashMap!(String,Object) HashMapStrToObj;
+    alias HashMap!(Object,Object) HashMapStrToObj;
 
     private static FormFonts instance;
 
@@ -91,8 +91,8 @@
             return result.getFont();
         }
         Font boldFont = createBoldFont(display, font);
-        fonts.put(fid, new FontReference(boldFont));
-        ids.put(boldFont, fid);
+        fonts.add(fid, new FontReference(boldFont));
+        ids.add(boldFont, fid);
         return boldFont;
     }
 
--- a/dwtx/ui/internal/forms/widgets/FormHeading.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormHeading.d	Sat May 24 06:18:55 2008 +0200
@@ -13,6 +13,8 @@
 module dwtx.ui.internal.forms.widgets.FormHeading;
 
 import dwtx.ui.internal.forms.widgets.TitleRegion;
+import dwtx.ui.internal.forms.widgets.FormImages;
+import dwtx.ui.internal.forms.widgets.FormsResources;
 
 import dwt.DWT;
 import dwt.custom.CLabel;
@@ -90,11 +92,11 @@
 
     private ToolBarManager toolBarManager;
 
-    private SizeCache toolbarCache = new SizeCache();
+    private SizeCache toolbarCache;
 
-    private SizeCache clientCache = new SizeCache();
+    private SizeCache clientCache;
 
-    private SizeCache messageCache = new SizeCache();
+    private SizeCache messageCache;
 
     private TitleRegion titleRegion;
 
@@ -115,7 +117,7 @@
             if (messageRegion !is null)
                 messageRegion.updateToolTip(details);
             if (getMessageType() > 0
-                    && (details is null || details.length() is 0))
+                    && (details is null || details.length is 0))
                 details = getMessage();
             titleRegion.updateToolTip(details);
         }
@@ -341,7 +343,11 @@
             return size;
         }
     }
-
+    this(){
+        toolbarCache = new SizeCache();
+        clientCache = new SizeCache();
+        messageCache = new SizeCache();
+    }
     /* (non-Javadoc)
      * @see dwt.widgets.Control#forceFocus()
      */
@@ -426,7 +432,7 @@
             ensureControlExists();
             if (needHyperlink()) {
                 messageHyperlink.setText(newMessage);
-                messageHyperlink.setHref(messages);
+                messageHyperlink.setHref(new ArrayWrapperT!(IMessage)(messages));
             } else {
                 messageLabel.setText(newMessage);
             }
@@ -481,7 +487,7 @@
         public void addMessageHyperlinkListener(IHyperlinkListener listener) {
             if (listeners is null)
                 listeners = new ListenerList();
-            listeners.add(listener);
+            listeners.add(cast(Object)listener);
             ensureControlExists();
             if (messageHyperlink !is null)
                 messageHyperlink.addHyperlinkListener(listener);
@@ -491,7 +497,7 @@
 
         private void removeMessageHyperlinkListener(IHyperlinkListener listener) {
             if (listeners !is null) {
-                listeners.remove(listener);
+                listeners.remove(cast(Object)listener);
                 if (messageHyperlink !is null)
                     messageHyperlink.removeHyperlinkListener(listener);
                 if (listeners.isEmpty())
@@ -510,7 +516,7 @@
                     messageHyperlink = new Hyperlink(this.outer, DWT.NULL);
                     messageHyperlink.setUnderlined(true);
                     messageHyperlink.setText(message);
-                    messageHyperlink.setHref(messages);
+                    messageHyperlink.setHref(new ArrayWrapperT!(IMessage)(messages));
                     Object[] llist = listeners.getListeners();
                     for (int i = 0; i < llist.length; i++)
                         messageHyperlink
@@ -519,7 +525,7 @@
                         messageToolTipManager.createToolTip(messageHyperlink, false);
                 } else if (!messageHyperlink.getVisible()) {
                     messageHyperlink.setText(message);
-                    messageHyperlink.setHref(messages);
+                    messageHyperlink.setHref(new ArrayWrapperT!(IMessage)(messages));
                     messageHyperlink.setVisible(true);
                 }
             } else {
@@ -991,9 +997,9 @@
 
     public void putColor(String key, Color color) {
         if (color is null)
-            colors.remove(key);
+            colors.removeKey(key);
         else
-            colors.put(key, color);
+            colors.add(key, color);
     }
 
     public Color getColor(String key) {
--- a/dwtx/ui/internal/forms/widgets/FormImages.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormImages.d	Sat May 24 06:18:55 2008 +0200
@@ -52,9 +52,9 @@
             if (null !is cast(ImageIdentifier)obj ) {
                 ImageIdentifier id = cast(ImageIdentifier)obj;
                 if (id.fColors.length is fColors.length) {
-                    bool result = id.fDisplay.equals(fDisplay) && id.fLength is fLength;
+                    bool result = id.fDisplay.opEquals(fDisplay) && id.fLength is fLength;
                     for (int i = 0; i < fColors.length && result; i++) {
-                        result = result && id.fColors[i].equals(fColors[i]);
+                        result = result && id.fColors[i].opEquals(fColors[i]);
                     }
                     return result;
                 }
@@ -117,7 +117,7 @@
             if (null !is cast(ComplexImageIdentifier)obj ) {
                 ComplexImageIdentifier id = cast(ComplexImageIdentifier) obj;
                 if (super.equals(obj)  &&
-                        id.fVertical is fVertical && Arrays.equals(id.fPercents, fPercents)) {
+                        id.fVertical is fVertical && Arrays.opEquals(id.fPercents, fPercents)) {
                     if ((id.fBg is null && fBg is null) ||
                             (id.fBg !is null && id.fBg.equals(fBg)))
                         return true;
@@ -174,8 +174,8 @@
             return result.getImage();
         }
         Image image = createGradient(display, color1, color2, realtheight, theight, marginHeight);
-        images.put(id, new ImageReference(image));
-        ids.put(image, id);
+        images.add(id, new ImageReference(image));
+        ids.add(image, id);
         return image;
     }
 
--- a/dwtx/ui/internal/forms/widgets/ImageHyperlinkSegment.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/ImageHyperlinkSegment.d	Sat May 24 06:18:55 2008 +0200
@@ -12,25 +12,30 @@
  *******************************************************************************/
 module dwtx.ui.internal.forms.widgets.ImageHyperlinkSegment;
 
-import java.util.Hashtable;
+import dwtx.ui.internal.forms.widgets.IHyperlinkSegment;
+import dwtx.ui.internal.forms.widgets.ImageSegment;
+
+//import java.util.Hashtable;
 
 import dwt.graphics.Color;
 import dwt.graphics.GC;
 import dwt.graphics.Rectangle;
 
-public class ImageHyperlinkSegment extends ImageSegment implements
+import dwt.dwthelper.utils;
+
+public class ImageHyperlinkSegment : ImageSegment,
         IHyperlinkSegment {
     private String href;
     private String text;
 
     private String tooltipText;
 
-    public ImageHyperlinkSegment() {
+    public this() {
     }
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#setHref(java.lang.String)
      */
     public void setHref(String href) {
@@ -39,7 +44,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#getHref()
      */
     public String getHref() {
@@ -64,7 +69,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#isWordWrapAllowed()
      */
     public bool isWordWrapAllowed() {
@@ -73,7 +78,7 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#setWordWrapAllowed(bool)
      */
     public void setWordWrapAllowed(bool value) {
@@ -82,13 +87,13 @@
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see dwtx.ui.internal.forms.widgets.IHyperlinkSegment#getText()
      */
     public String getText() {
-        return text!isnull?text:""; //$NON-NLS-1$
+        return text !is null?text:""; //$NON-NLS-1$
     }
-    
+
     public void setText(String text) {
         this.text = text;
     }
@@ -107,7 +112,7 @@
     public void setTooltipText(String tooltipText) {
         this.tooltipText = tooltipText;
     }
-    
+
     public bool isSelectable() {
         return true;
     }
--- a/dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d	Sat May 24 06:18:55 2008 +0200
@@ -12,18 +12,23 @@
  *******************************************************************************/
 module dwtx.ui.internal.forms.widgets.TextHyperlinkSegment;
 
-import java.util.Hashtable;
+import dwtx.ui.internal.forms.widgets.TextSegment;
+import dwtx.ui.internal.forms.widgets.IHyperlinkSegment;
+import dwtx.ui.internal.forms.widgets.SelectionData;
 
 import dwt.graphics.Color;
 import dwt.graphics.GC;
 import dwt.graphics.Rectangle;
 import dwtx.ui.forms.HyperlinkSettings;
 
+import dwt.dwthelper.utils;
+//import tango.util.collection.HashMap;
+
 /**
  * @version 1.0
  * @author
  */
-public class TextHyperlinkSegment extends TextSegment implements
+public class TextHyperlinkSegment : TextSegment,
         IHyperlinkSegment {
     private String href;
 
@@ -33,7 +38,7 @@
 
     private HyperlinkSettings settings;
 
-    public TextHyperlinkSegment(String text, HyperlinkSettings settings,
+    public this(String text, HyperlinkSettings settings,
             String fontId) {
         super(text, fontId);
         this.settings = settings;
@@ -65,8 +70,8 @@
         Color savedFg = gc.getForeground();
         Color newFg = hover ? settings.getActiveForeground() : settings
                 .getForeground();
-        if (newFg!isnull)
-            gc.setForeground(newFg); 
+        if (newFg !is null)
+            gc.setForeground(newFg);
         super.paint(gc, hover, resourceTable, selected, rolloverMode, selData,
                 repaintRegion);
         gc.setForeground(savedFg);
@@ -79,7 +84,7 @@
     public void setTooltipText(String tooltip) {
         this.tooltipText = tooltip;
     }
-    
+
     public bool isSelectable() {
         return true;
     }
--- a/dwtx/ui/internal/forms/widgets/TitleRegion.d	Sat May 24 05:11:16 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/TitleRegion.d	Sat May 24 06:18:55 2008 +0200
@@ -56,6 +56,9 @@
  * Form heading title.
  */
 public class TitleRegion : Canvas {
+
+    alias Canvas.computeSize computeSize;
+
     public static const int STATE_NORMAL = 0;
     public static const int STATE_HOVER_LIGHT = 1;
     public static const int STATE_HOVER_FULL = 2;