changeset 90:7ffeace6c47f

Update 3.4M7 to 3.4
author Frank Benoit <benoit@tionex.de>
date Sun, 06 Jul 2008 23:30:07 +0200
parents 040da1cb0d76
children 11e8159caf7a
files dwtx/core/commands/Command.d dwtx/core/commands/CommandManager.d dwtx/core/commands/common/CommandException.d dwtx/core/runtime/Path.d dwtx/jface/action/AbstractGroupMarker.d dwtx/jface/action/ActionContributionItem.d dwtx/jface/action/ContributionManager.d dwtx/jface/action/CoolBarManager.d dwtx/jface/action/ExternalActionManager.d dwtx/jface/action/GroupMarker.d dwtx/jface/action/IAction.d dwtx/jface/action/IContributionItem.d dwtx/jface/action/IContributionManager.d dwtx/jface/action/IContributionManagerOverrides.d dwtx/jface/action/IMenuManager.d dwtx/jface/action/MenuManager.d dwtx/jface/action/Separator.d dwtx/jface/action/SubContributionItem.d dwtx/jface/action/ToolBarContributionItem.d dwtx/jface/bindings/BindingManager.d dwtx/jface/dialogs/DialogSettings.d dwtx/jface/dialogs/PopupDialog.d dwtx/jface/fieldassist/ComboContentAdapter.d dwtx/jface/fieldassist/TextContentAdapter.d dwtx/jface/internal/ConfigureColumnsDialog.d dwtx/jface/operation/ModalContext.d dwtx/jface/preference/PathEditor.d dwtx/jface/preference/PreferenceConverter.d dwtx/jface/preference/PreferenceDialog.d dwtx/jface/preference/PreferenceStore.d dwtx/jface/resource/ColorRegistry.d dwtx/jface/resource/FileImageDescriptor.d dwtx/jface/resource/FontRegistry.d dwtx/jface/resource/ImageRegistry.d dwtx/jface/resource/JFaceResources.d dwtx/jface/resource/StringConverter.d dwtx/jface/resource/URLImageDescriptor.d dwtx/jface/util/Policy.d dwtx/jface/viewers/AbstractTableViewer.d dwtx/jface/viewers/ArrayContentProvider.d dwtx/jface/viewers/CellEditor.d dwtx/jface/viewers/CheckboxCellEditor.d dwtx/jface/viewers/CheckboxTableViewer.d dwtx/jface/viewers/CheckboxTreeViewer.d dwtx/jface/viewers/ColorCellEditor.d dwtx/jface/viewers/ColumnLayoutData.d dwtx/jface/viewers/ColumnPixelData.d dwtx/jface/viewers/ColumnViewer.d dwtx/jface/viewers/ColumnViewerEditor.d dwtx/jface/viewers/ColumnViewerEditorActivationEvent.d dwtx/jface/viewers/ColumnViewerEditorDeactivationEvent.d dwtx/jface/viewers/ColumnViewerToolTipSupport.d dwtx/jface/viewers/ColumnWeightData.d dwtx/jface/viewers/ComboBoxCellEditor.d dwtx/jface/viewers/ComboBoxViewerCellEditor.d dwtx/jface/viewers/DelegatingStyledCellLabelProvider.d dwtx/jface/viewers/IDecoration.d dwtx/jface/viewers/IStructuredContentProvider.d dwtx/jface/viewers/ListViewer.d dwtx/jface/viewers/StructuredSelection.d dwtx/jface/viewers/StructuredViewer.d dwtx/jface/viewers/TableTreeViewer.d dwtx/jface/viewers/TableViewer.d dwtx/jface/viewers/TableViewerFocusCellManager.d dwtx/jface/viewers/TableViewerRow.d dwtx/jface/viewers/TextCellEditor.d dwtx/jface/viewers/TreeViewer.d dwtx/jface/viewers/TreeViewerFocusCellManager.d dwtx/jface/viewers/TreeViewerRow.d dwtx/jface/viewers/ViewerCell.d dwtx/jface/viewers/ViewerRow.d dwtx/jface/viewers/WrappedViewerLabelProvider.d dwtx/jface/viewers/deferred/DeferredContentProvider.d dwtx/jface/viewers/deferred/IConcurrentModel.d dwtx/jface/window/ToolTip.d dwtx/ui/forms/HyperlinkSettings.d dwtx/ui/forms/IManagedForm.d dwtx/ui/forms/IMessageManager.d dwtx/ui/forms/widgets/Form.d dwtx/ui/forms/widgets/ScrolledForm.d dwtx/ui/internal/forms/MessageManager.d dwtx/ui/internal/forms/Messages.d dwtx/ui/internal/forms/widgets/BusyIndicator.d dwtx/ui/internal/forms/widgets/FormImages.d dwtx/ui/internal/forms/widgets/FormTextModel.d dwtx/ui/internal/forms/widgets/FormUtil.d dwtx/ui/internal/forms/widgets/FormsResources.d dwtx/ui/internal/forms/widgets/Paragraph.d dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d dwtx/ui/internal/forms/widgets/TextSegment.d
diffstat 90 files changed, 483 insertions(+), 362 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/core/commands/Command.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/core/commands/Command.d	Sun Jul 06 23:30:07 2008 +0200
@@ -45,6 +45,7 @@
 
 import dwt.dwthelper.utils;
 import tango.text.convert.Format;
+import tango.io.Stdout;
 
 /**
  * <p>
@@ -862,7 +863,18 @@
             return false;
         }
 
-        return handler.isEnabled();
+        try {
+            return handler.isEnabled();
+        } catch (Exception e) {
+            if (DEBUG_HANDLERS) {
+                // since this has the ability to generate megs of logs, only
+                // provide information if tracing
+                Tracing.printTrace("HANDLERS", "Handler " ~ (cast(Object)handler).toString()  ~ " for "  //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+                        ~ id ~ " threw unexpected exception"); //$NON-NLS-1$
+                ExceptionPrintStackTrace( e, Stdout );
+            }
+        }
+        return false;
     }
 
     /**
--- a/dwtx/core/commands/CommandManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/core/commands/CommandManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/core/commands/common/CommandException.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/core/commands/common/CommandException.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/core/runtime/Path.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/core/runtime/Path.d	Sun Jul 06 23:30:07 2008 +0200
@@ -18,7 +18,7 @@
 
 import dwt.dwthelper.utils;
 
-import tango.io.FileConst;
+import tango.io.model.IFile;
 
 static import tango.text.Text;
 alias tango.text.Text.Text!(char) StringBuffer;
--- a/dwtx/jface/action/AbstractGroupMarker.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/AbstractGroupMarker.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@
  * <p>
  * This class is not intended to be subclassed outside the framework.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public abstract class AbstractGroupMarker : ContributionItem {
     /**
--- a/dwtx/jface/action/ActionContributionItem.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/ActionContributionItem.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ActionContributionItem : ContributionItem {
     alias ContributionItem.fill fill;
--- a/dwtx/jface/action/ContributionManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/ContributionManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/jface/action/CoolBarManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/CoolBarManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/jface/action/ExternalActionManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/ExternalActionManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -436,6 +436,9 @@
             }
         }
 
+        /**
+         * @since 3.4
+         */
         public void preExecute(IAction action, Event event) {
             String actionDefinitionId = action.getActionDefinitionId();
             if (actionDefinitionId is null
@@ -449,6 +452,9 @@
             commandManager.firePreExecute(actionDefinitionId, executionEvent);
         }
 
+        /**
+         * @since 3.4
+         */
         public void postExecuteSuccess(IAction action, Object returnValue) {
             String actionDefinitionId = action.getActionDefinitionId();
             if (actionDefinitionId is null
@@ -458,6 +464,9 @@
             commandManager.firePostExecuteSuccess(actionDefinitionId, returnValue);
         }
 
+        /**
+         * @since 3.4
+         */
         public void postExecuteFailure(IAction action,
                 ExecutionException exception) {
             String actionDefinitionId = action.getActionDefinitionId();
@@ -468,6 +477,9 @@
             commandManager.firePostExecuteFailure(actionDefinitionId, exception);
         }
 
+        /**
+         * @since 3.4
+         */
         public void notDefined(IAction action, NotDefinedException exception) {
             String actionDefinitionId = action.getActionDefinitionId();
             if (actionDefinitionId is null
@@ -477,6 +489,9 @@
             commandManager.fireNotDefined(actionDefinitionId, exception);
         }
 
+        /**
+         * @since 3.4
+         */
         public void notEnabled(IAction action, NotEnabledException exception) {
             String actionDefinitionId = action.getActionDefinitionId();
             if (actionDefinitionId is null
--- a/dwtx/jface/action/GroupMarker.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/GroupMarker.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@
  * This class may be instantiated; it is not intended to be
  * subclassed outside the framework.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class GroupMarker : AbstractGroupMarker {
     /**
--- a/dwtx/jface/action/IAction.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/IAction.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@
  * </p>
  *
  * @see Action
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IAction {
 
--- a/dwtx/jface/action/IContributionItem.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/IContributionItem.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@
  * </p>
  *
  * @see IContributionManager
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IContributionItem {
 
--- a/dwtx/jface/action/IContributionManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/IContributionManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/jface/action/IContributionManagerOverrides.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/IContributionManagerOverrides.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@
  * </p>
  *
  * @since 2.0
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IContributionManagerOverrides {
     /**
--- a/dwtx/jface/action/IMenuManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/IMenuManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@
  * This package provides a concrete menu manager implementation,
  * {@link MenuManager <code>MenuManager</code>}.
  * </p>
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IMenuManager : IContributionManager, IContributionItem {
 
--- a/dwtx/jface/action/MenuManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/MenuManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -609,6 +609,7 @@
      *
      * @return <code>true</code> if the control is created
      *  and not disposed, <code>false</code> otherwise
+     * @since 3.4 protected, was added in 3.1 as private method
      */
     protected bool menuExist() {
         return menu !is null && !menu.isDisposed();
--- a/dwtx/jface/action/Separator.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/Separator.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,6 +31,7 @@
  * This class may be instantiated; it is not intended to be
  * subclassed outside the framework.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Separator : AbstractGroupMarker {
     alias AbstractGroupMarker.fill fill;
--- a/dwtx/jface/action/SubContributionItem.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/SubContributionItem.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,6 +29,7 @@
  * <p>
  * This class is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class SubContributionItem : IContributionItem {
     /**
--- a/dwtx/jface/action/ToolBarContributionItem.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/action/ToolBarContributionItem.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -59,6 +59,7 @@
  * </p>
  *
  * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ToolBarContributionItem : ContributionItem, IToolBarContributionItem {
     alias ContributionItem.fill fill;
--- a/dwtx/jface/bindings/BindingManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/bindings/BindingManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1281,7 +1281,8 @@
     /**
      * @param command
      * @return
-     *      blah
+     *      a trigger sequence, or <code>null</code>
+     * @since 3.4
      */
     public final TriggerSequence getBestActiveBindingFor(ParameterizedCommand command) {
         final Binding[] bindings = getActiveBindingsFor1(command);
--- a/dwtx/jface/dialogs/DialogSettings.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/dialogs/DialogSettings.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,6 +63,7 @@
  * settings.save("c:\\temp\\test\\dialog.xml");
  * </code>
  * </pre>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 
 public class DialogSettings : IDialogSettings {
--- a/dwtx/jface/dialogs/PopupDialog.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/dialogs/PopupDialog.d	Sun Jul 06 23:30:07 2008 +0200
@@ -294,14 +294,14 @@
     /**
      * Image registry key for menu image.
      *
-     * @since 3.3
+     * @since 3.4
      */
     public static const String POPUP_IMG_MENU = "popup_menu_image"; //$NON-NLS-1$
 
     /**
      * Image registry key for disabled menu image.
      *
-     * @since 3.3
+     * @since 3.4
      */
     public static const String POPUP_IMG_MENU_DISABLED = "popup_menu_image_diabled"; //$NON-NLS-1$
 
--- a/dwtx/jface/fieldassist/ComboContentAdapter.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/fieldassist/ComboContentAdapter.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -132,9 +132,7 @@
         (cast(Combo) control).setSelection(new Point(index, index));
     }
 
-    /*
-     * (non-Javadoc)
-     *
+    /**
      * @see dwtx.jface.fieldassist.IControlContentAdapter2#getSelection(dwt.widgets.Control)
      *
      * @since 3.4
@@ -143,9 +141,7 @@
         return (cast(Combo) control).getSelection();
     }
 
-    /*
-     * (non-Javadoc)
-     *
+    /**
      * @see dwtx.jface.fieldassist.IControlContentAdapter2#setSelection(dwt.widgets.Control,
      *      dwt.graphics.Point)
      *
--- a/dwtx/jface/fieldassist/TextContentAdapter.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/fieldassist/TextContentAdapter.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,9 +104,7 @@
         (cast(Text) control).setSelection(new Point(position, position));
     }
 
-    /*
-     * (non-Javadoc)
-     *
+    /**
      * @see dwtx.jface.fieldassist.IControlContentAdapter2#getSelection(dwt.widgets.Control)
      *
      * @since 3.4
@@ -115,9 +113,7 @@
         return (cast(Text) control).getSelection();
     }
 
-    /*
-     * (non-Javadoc)
-     *
+    /**
      * @see dwtx.jface.fieldassist.IControlContentAdapter2#setSelection(dwt.widgets.Control,
      *      dwt.graphics.Point)
      *
--- a/dwtx/jface/internal/ConfigureColumnsDialog.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/internal/ConfigureColumnsDialog.d	Sun Jul 06 23:30:07 2008 +0200
@@ -204,7 +204,7 @@
         Composite composite = cast(Composite) super.createDialogArea(parent);
 
         table = new Table(composite, DWT.BORDER | DWT.SINGLE | DWT.V_SCROLL
-                | DWT.H_SCROLL | DWT.FULL_SELECTION /*
+                | DWT.H_SCROLL /*
                                                      * | DWT.CHECK
                                                      */);
         for (int i = 0; i < columnObjects.length; i++) {
@@ -280,6 +280,8 @@
             }
         });
 
+        Dialog.applyDialogFont(composite);
+
         return composite;
     }
 
--- a/dwtx/jface/operation/ModalContext.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/operation/ModalContext.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,8 @@
  * <p>
  * This class is not intended to be subclassed.
  * </p>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ModalContext {
 
--- a/dwtx/jface/preference/PathEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/preference/PathEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -15,7 +15,7 @@
 import dwtx.jface.preference.ListEditor;
 
 import tango.io.FilePath;
-import tango.io.FileConst;
+import tango.io.model.IFile;
 // import java.util.ArrayList;
 // import java.util.StringTokenizer;
 
--- a/dwtx/jface/preference/PreferenceConverter.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/preference/PreferenceConverter.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -47,6 +47,7 @@
  * be instantiated.
  * </p>
  * Note: touching this class has the side effect of creating a display (static initializer).
+ * @noinstantiate This class is not intended to be instantiated by clients.
  */
 public class PreferenceConverter {
 
--- a/dwtx/jface/preference/PreferenceDialog.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/preference/PreferenceDialog.d	Sun Jul 06 23:30:07 2008 +0200
@@ -737,15 +737,21 @@
             public void selectionChanged(SelectionChangedEvent event) {
                 Object selection = cast(Object) getSingleSelection(event.getSelection());
                 if (cast(IPreferenceNode)selection ) {
-                    if (!isCurrentPageValid()) {
-                        handleError();
-                    } else if (!showPage(cast(IPreferenceNode) selection)) {
-                        // Page flipping wasn't successful
-                        handleError();
-                    } else {
-                        // Everything went well
-                        lastSuccessfulNode = cast(IPreferenceNode) selection;
-                    }
+                    BusyIndicator.showWhile(getShell().getDisplay(), new class(selection) Runnable {
+                        Object selection_;
+                        this(Object o){ selection_=o; }
+                        public void run() {
+                            if (!isCurrentPageValid()) {
+                                handleError();
+                            } else if (!showPage(cast(IPreferenceNode) selection_)) {
+                                // Page flipping wasn't successful
+                                handleError();
+                            } else {
+                                // Everything went well
+                                lastSuccessfulNode = cast(IPreferenceNode) selection_;
+                            }
+                        }
+                    });
                 }
             }
         });
--- a/dwtx/jface/preference/PreferenceStore.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/preference/PreferenceStore.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -298,6 +298,7 @@
  * </p>
  *
  * @see IPreferenceStore
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class PreferenceStore : EventManager,
         IPersistentPreferenceStore {
--- a/dwtx/jface/resource/ColorRegistry.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/ColorRegistry.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,7 @@
  * </p>
  *
  * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ColorRegistry : ResourceRegistry {
 
@@ -105,6 +106,8 @@
         };
     }
 
+    private final bool cleanOnDisplayDisposal;
+
     /**
      * Create a new instance of the receiver that is hooked to the current
      * display.
@@ -141,6 +144,7 @@
         init_displayRunnable();
         Assert.isNotNull(display);
         this.display = display;
+        this.cleanOnDisplayDisposal = cleanOnDisplayDisposal;
         if (cleanOnDisplayDisposal) {
             hookDisplayDispose();
         }
@@ -155,6 +159,16 @@
      * @since 3.1
      */
     private Color createColor(RGB rgb) {
+        if (this.display is null) {
+            Display display = Display.getCurrent();
+            if (display is null) {
+                throw new IllegalStateException();
+            }
+            this.display = display;
+            if (cleanOnDisplayDisposal) {
+                hookDisplayDispose();
+            }
+        }
         return new Color(display, rgb);
     }
 
@@ -275,6 +289,7 @@
 //         disposeColors(staleColors.iterator());
         stringToColor.clear();
         staleColors.clear();
+        display = null;
     }
 
     /* (non-Javadoc)
--- a/dwtx/jface/resource/FileImageDescriptor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/FileImageDescriptor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -25,7 +25,8 @@
 import dwt.graphics.Device;
 import dwt.graphics.Image;
 import dwt.graphics.ImageData;
-import dwtx.core.runtime.Path;
+// import dwtx.core.runtime.FileLocator;
+// import dwtx.core.runtime.Path;
 
 import dwt.dwthelper.utils;
 import dwt.dwthelper.InputStream;
@@ -221,16 +222,15 @@
 //
 //         if (resource is null)
 //             return null;
-//      try {
-//          if (JFaceActivator.getBundleContext() is null) {// Stand-alone case
+//         try {
+//             if (JFaceActivator.getBundleContext() is null) {// Stand-alone case
 //
-//              return new Path(resource.getFile()).toOSString();
-//          }
-//          return new Path(FileLocator.toFileURL(resource).getPath()).toOSString();
+//                 return new Path(resource.getFile()).toOSString();
+//             }
+//             return new Path(FileLocator.toFileURL(resource).getPath()).toOSString();
+//         } catch (IOException e) {
+//             Policy.logException(e);
             return null;
-//      } catch (IOException e) {
-//          Policy.logException(e);
-//          return null;
-//      }
+//         }
     }
 }
--- a/dwtx/jface/resource/FontRegistry.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/FontRegistry.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,6 +70,7 @@
  * </p>
  *
  * Since 3.0 this class extends ResourceRegistry.
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class FontRegistry : ResourceRegistry {
 
@@ -217,6 +218,10 @@
      */
     protected Runnable displayRunnable;
 
+    private bool displayDisposeHooked;
+
+    private final bool cleanOnDisplayDisposal;
+
     /**
      * Creates an empty font registry.
      * <p>
@@ -292,6 +297,7 @@
         //readResourceBundle(location, loader);
         readResourceBundle(location);
 
+        cleanOnDisplayDisposal = true;
         hookDisplayDispose(display);
     }
 
@@ -410,6 +416,7 @@
     public this(Display display, bool cleanOnDisplayDisposal) {
         initInstance();
         Assert.isNotNull(display);
+        this.cleanOnDisplayDisposal = cleanOnDisplayDisposal;
         if (cleanOnDisplayDisposal) {
             hookDisplayDispose(display);
         }
@@ -534,6 +541,9 @@
         if (display is null) {
             return null;
         }
+        if (cleanOnDisplayDisposal && !displayDisposeHooked) {
+            hookDisplayDispose(display);
+        }
 
         FontData[] validData = filterData(fonts, display);
         if (validData.length is 0) {
@@ -732,12 +742,15 @@
 
         stringToFontRecord.clear();
         staleFonts.clear();
+        
+        displayDisposeHooked = false;
     }
 
     /**
      * Hook a dispose listener on the DWT display.
      */
     private void hookDisplayDispose(Display display) {
+        displayDisposeHooked = true;
         display.disposeExec(displayRunnable);
     }
 
--- a/dwtx/jface/resource/ImageRegistry.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/ImageRegistry.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,6 +54,7 @@
  * Unlike the FontRegistry, it is an error to replace images. As a result
  * there are no events that fire when values are changed in the registry
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ImageRegistry {
     /**
--- a/dwtx/jface/resource/JFaceResources.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/JFaceResources.d	Sun Jul 06 23:30:07 2008 +0200
@@ -52,6 +52,8 @@
  * <li>a resource bundle</li>
  * </ul>
  * </p>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class JFaceResources {
 
@@ -493,11 +495,9 @@
         ImageDescriptor descriptor = null;
 
         if (bundle !is null) {
-            /*
-            URL url = FileLocator.find((Bundle) bundle, new Path(path), null);
-            if (url !is null)
-                descriptor = ImageDescriptor.createFromURL(url);
-            */
+//             URL url = FileLocator.find((Bundle) bundle, new Path(path), null);
+//             if (url !is null)
+//                 descriptor = ImageDescriptor.createFromURL(url);
         }
 
         // If we failed then load from the backup file
--- a/dwtx/jface/resource/StringConverter.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/StringConverter.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,8 @@
  * All methods declared on this class are static. This
  * class cannot be instantiated.
  * </p>
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class StringConverter {
 
--- a/dwtx/jface/resource/URLImageDescriptor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/resource/URLImageDescriptor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,24 +130,23 @@
      * @return {@link String} or <code>null</code> if the file cannot be found
      */
     private String getFilePath() {
-
-        return null;
-//      try {
-//          if (JFaceActivator.getBundleContext() is null) {
-//              if (FILE_PROTOCOL.equalsIgnoreCase(url.getProtocol()))
-//                  return new Path(url.getFile()).toOSString();
-//              return null;
-//          }
+//         try {
+//             if (JFaceActivator.getBundleContext() is null) {
+//                 if (FILE_PROTOCOL.equalsIgnoreCase(url.getProtocol()))
+//                     return new Path(url.getFile()).toOSString();
+//                 return null;
+//             }
 //
-//          URL locatedURL = FileLocator.toFileURL(url);
-//          if (FILE_PROTOCOL.equalsIgnoreCase(locatedURL.getProtocol()))
-//              return new Path(locatedURL.getPath()).toOSString();
-//          return null;
+//             URL locatedURL = FileLocator.toFileURL(url);
+//             if (FILE_PROTOCOL.equalsIgnoreCase(locatedURL.getProtocol()))
+//                 return new Path(locatedURL.getPath()).toOSString();
+//             return null;
 //
-//      } catch (IOException e) {
-//          Policy.logException(e);
-//          return null;
-//      }
+//         } catch (IOException e) {
+//             Policy.logException(e);
+//             return null;
+//         }
+        return null;
     }
 
     /*
--- a/dwtx/jface/util/Policy.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/util/Policy.d	Sun Jul 06 23:30:07 2008 +0200
@@ -284,6 +284,7 @@
      * Log the Exception to the logger.
      *
      * @param exception
+     * @since 3.4
      */
     public static void logException(Exception exception) {
         getLog().log(
--- a/dwtx/jface/viewers/AbstractTableViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/AbstractTableViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1037,15 +1037,14 @@
     }
 
     /**
-     * Replace the entries starting at index with elements. This method assumes
-     * all of these values are correct and will not call the content provider to
-     * verify. <strong>Note that this method will create a TableItem for all of
-     * the elements provided</strong>.
-     *
+     * Replace the element at the given index with the given element. This
+     * method will not call the content provider to verify. <strong>Note that
+     * this method will materialize a TableItem the given index.</strong>.
+     * 
      * @param element
      * @param index
      * @see ILazyContentProvider
-     *
+     * 
      * @since 3.1
      */
     public void replace(Object element, int index) {
--- a/dwtx/jface/viewers/ArrayContentProvider.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ArrayContentProvider.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,7 @@
  * </p>
  *
  * @since 2.1
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ArrayContentProvider(T) : IStructuredContentProvider {
 
--- a/dwtx/jface/viewers/CellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/CellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -35,6 +35,8 @@
     /**
      * Struct-like layout data for cell editors, with reasonable defaults for
      * all fields.
+     *
+     * @noextend This class is not intended to be subclassed by clients.
      */
     public static class LayoutData {
         /**
@@ -56,11 +58,13 @@
         /**
          * Minimum height in pixels; by default the height is aligned to the
          * row-height
+         * @since 3.4
          */
         public int minimumHeight = DWT.DEFAULT;
 
         /**
          * The vertical alignment; <code>DWT.CENTER</code> by default.
+         * @since 3.4
          */
         public int verticalAlignment = DWT.CENTER;
     }
@@ -266,7 +270,7 @@
         Assert.isTrue(control is null);
         control = createControl(parent);
         // See 1GD5CA6: ITPUI:ALL - TaskView.setSelection does not work
-        // Control is created with getVisible()istrue by default.
+        // Control is created with getVisible()is true by default.
         // This causes composite.setFocus() to work incorrectly.
         // The cell editor's control grabs focus instead, even if it is not
         // active.
@@ -945,6 +949,7 @@
     /**
      * @param event
      *            deactivation event
+     * @since 3.4
      *
      */
     protected void deactivate(ColumnViewerEditorDeactivationEvent event) {
@@ -963,6 +968,7 @@
      * double click.
      *
      * @return the timeout or <code>0</code>
+     * @since 3.4
      */
     protected int getDoubleClickTimeout() {
         return Display.getCurrent().getDoubleClickTime();
--- a/dwtx/jface/viewers/CheckboxCellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/CheckboxCellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@
  * of the check box is being toggled by the end users; the listener method
  * <code>applyEditorValue</code> is immediately called to signal the change.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class CheckboxCellEditor : CellEditor {
 
--- a/dwtx/jface/viewers/CheckboxTableViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/CheckboxTableViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@
  * with a domain-specific content provider, label provider, element filter (optional),
  * and element sorter (optional).
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class CheckboxTableViewer : TableViewer, ICheckable {
     alias TableViewer.preservingSelection preservingSelection;
--- a/dwtx/jface/viewers/CheckboxTreeViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/CheckboxTreeViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -45,6 +45,7 @@
  * with a domain-specific content provider, label provider, element filter (optional),
  * and element sorter (optional).
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class CheckboxTreeViewer : TreeViewer, ICheckable {
     alias TreeViewer.preservingSelection preservingSelection;
--- a/dwtx/jface/viewers/ColorCellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColorCellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ColorCellEditor : DialogCellEditor {
 
--- a/dwtx/jface/viewers/ColumnLayoutData.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnLayoutData.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@
  * <p>
  * This class is not intended to be subclassed outside the framework.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public abstract class ColumnLayoutData {
 
--- a/dwtx/jface/viewers/ColumnPixelData.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnPixelData.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ColumnPixelData : ColumnLayoutData {
 
--- a/dwtx/jface/viewers/ColumnViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -731,7 +731,7 @@
      *      the new column viewer editor
      */
     public void setColumnViewerEditor(ColumnViewerEditor columnViewerEditor) {
-        Assert.isNotNull(viewerEditor);
+        Assert.isNotNull(columnViewerEditor);
         this.viewerEditor = columnViewerEditor;
     }
 
--- a/dwtx/jface/viewers/ColumnViewerEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnViewerEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -112,6 +112,7 @@
      * Style mask used to turn <b>off</b> the feature that an editor activation
      * is canceled on double click. It is also possible to turn off this feature
      * per cell-editor using {@link CellEditor#getDoubleClickTimeout()}
+     * @since 3.4
      */
     public static final int KEEP_EDITOR_ON_DOUBLE_CLICK = 1 << 6;
 
--- a/dwtx/jface/viewers/ColumnViewerEditorActivationEvent.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnViewerEditorActivationEvent.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,7 +9,7 @@
  *     IBM Corporation - initial API and implementation
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
- ******************************************************************************/
+ *******************************************************************************/
 
 module dwtx.jface.viewers.ColumnViewerEditorActivationEvent;
 
--- a/dwtx/jface/viewers/ColumnViewerEditorDeactivationEvent.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnViewerEditorDeactivationEvent.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
  *                                                 fixes in bug: 178946
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
- ******************************************************************************/
+ *******************************************************************************/
 
 module dwtx.jface.viewers.ColumnViewerEditorDeactivationEvent;
 
@@ -21,6 +21,7 @@
  * This event is fired when an editor deactivated
  *
  * @since 3.3
+ * @noextend This class is not intended to be subclassed by clients.
  *
  */
 public class ColumnViewerEditorDeactivationEvent : EventObject {
@@ -32,16 +33,19 @@
 
     /**
      * The event type
+     * @since 3.4
      */
     public int eventType;
 
     /**
      * Event when editor is canceled
+     * @since 3.4
      */
     public static final int EDITOR_CANCELED = 1;
 
     /**
      * Event when editor is saved
+     * @since 3.4
      */
     public static final int EDITOR_SAVED = 2;
 
--- a/dwtx/jface/viewers/ColumnViewerToolTipSupport.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnViewerToolTipSupport.d	Sun Jul 06 23:30:07 2008 +0200
@@ -133,6 +133,7 @@
      * @param parent
      *            the parent of the control to create
      * @return the control to be displayed in the tool tip area
+     * @since 3.4
      */
     protected Composite createViewerToolTipContentArea(Event event,
             ViewerCell cell, Composite parent) {
--- a/dwtx/jface/viewers/ColumnWeightData.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ColumnWeightData.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,6 +24,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ColumnWeightData : ColumnLayoutData {
 
--- a/dwtx/jface/viewers/ComboBoxCellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ComboBoxCellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -41,6 +41,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ComboBoxCellEditor : AbstractComboBoxCellEditor {
 
--- a/dwtx/jface/viewers/ComboBoxViewerCellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ComboBoxViewerCellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -45,6 +45,7 @@
  * A cell editor that presents a list of items in a combo box. In contrast to
  * {@link ComboBoxCellEditor} it wraps the underlying {@link CCombo} using a
  * {@link ComboViewer}
+ * @since 3.4
  */
 public class ComboBoxViewerCellEditor : AbstractComboBoxCellEditor {
 
--- a/dwtx/jface/viewers/DelegatingStyledCellLabelProvider.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/DelegatingStyledCellLabelProvider.d	Sun Jul 06 23:30:07 2008 +0200
@@ -20,6 +20,7 @@
 import dwtx.jface.viewers.IColorProvider;
 import dwtx.jface.viewers.IFontProvider;
 
+import dwt.custom.StyleRange;
 import dwt.graphics.Color;
 import dwt.graphics.Font;
 import dwt.graphics.Image;
@@ -110,19 +111,26 @@
         Object element = cell.getElement();
 
         StyledString styledString = getStyledText(element);
-        cell.setText(styledString.toString());
-        if (isOwnerDrawEnabled()) {
-            cell.setStyleRanges(styledString.getStyleRanges());
-        } else {
-            cell.setStyleRanges(null);
+        String newText= styledString.toString();
+        
+        StyleRange[] oldStyleRanges= cell.getStyleRanges();
+        StyleRange[] newStyleRanges= isOwnerDrawEnabled() ? styledString.getStyleRanges() : null;
+        
+        if (!Arrays.equals(oldStyleRanges, newStyleRanges)) {
+            cell.setStyleRanges(newStyleRanges);
+            if (cell.getText().equals(newText)) {
+                // make sure there will be a refresh from a change
+                cell.setText(""); //$NON-NLS-1$
+            }
         }
-
+        
+        cell.setText(newText);
         cell.setImage(getImage(element));
         cell.setFont(getFont(element));
         cell.setForeground(getForeground(element));
         cell.setBackground(getBackground(element));
-
-        super.update(cell);
+        
+        // no super call required. changes on item will trigger the refresh.
     }
 
     /**
--- a/dwtx/jface/viewers/IDecoration.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/IDecoration.d	Sun Jul 06 23:30:07 2008 +0200
@@ -25,6 +25,7 @@
  *
  * This interface is not meant to be implemented and will be provided to
  * instances of <code>ILightweightLabelDecorator</code>.
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IDecoration{
 
--- a/dwtx/jface/viewers/IStructuredContentProvider.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/IStructuredContentProvider.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/jface/viewers/ListViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ListViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,7 @@
  * </p>
  *
  * @see TableViewer
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ListViewer : AbstractListViewer {
     alias AbstractListViewer.setSelectionToWidget setSelectionToWidget;
--- a/dwtx/jface/viewers/StructuredSelection.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/StructuredSelection.d	Sun Jul 06 23:30:07 2008 +0200
@@ -31,6 +31,7 @@
  * <p>
  * This class is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class StructuredSelection : IStructuredSelection {
 
--- a/dwtx/jface/viewers/StructuredViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/StructuredViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -2048,7 +2048,7 @@
         for (int i = 0; i < items.length; i++) {
             internalUpdate(items[i], element, properties);
             if (mayExitEarly && refreshOccurred) {
-                // detected a change from refreshOccurredisfalse to refreshOccurredistrue 
+                // detected a change from refreshOccurred is false to refreshOccurred is true 
                 return;
             }
         }
--- a/dwtx/jface/viewers/TableTreeViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TableTreeViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@
  * </p>
  *
  * @deprecated As of 3.1 use {@link TreeViewer} instead
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class TableTreeViewer : AbstractTreeViewer {
     alias AbstractTreeViewer.addTreeListener addTreeListener;
--- a/dwtx/jface/viewers/TableViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TableViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -71,6 +71,7 @@
  * @see DWT#VIRTUAL
  * @see #doFindItem(Object)
  * @see #internalRefresh(Object, bool)
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class TableViewer : AbstractTableViewer {
     alias AbstractTableViewer.refresh refresh;
--- a/dwtx/jface/viewers/TableViewerFocusCellManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TableViewerFocusCellManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -69,6 +69,7 @@
      *            the delegate responsible to highlight selected cell
      * @param navigationStrategy
      *            the strategy used to navigate the cells
+     * @since 3.4
      */
     public this(TableViewer viewer,
             FocusCellHighlighter focusDrawingDelegate,
@@ -79,7 +80,7 @@
     override ViewerCell getInitialFocusCell() {
         Table table = cast(Table) getViewer().getControl();
 
-        if (table.getItemCount() > 0) {
+        if (! table.isDisposed() && table.getItemCount() > 0 && ! table.getItem(0).isDisposed()) {
             return getViewer().getViewerRowFromItem_package(table.getItem(0))
                     .getCell(0);
         }
--- a/dwtx/jface/viewers/TableViewerRow.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TableViewerRow.d	Sun Jul 06 23:30:07 2008 +0200
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *                                               - fix in bug: 174355,195908,198035,215069
+ *                                               - fix in bug: 174355,195908,198035,215069,227421
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
@@ -243,4 +243,8 @@
     private bool isValidOrderIndex(int currentIndex) {
         return currentIndex < this.item.getParent().getColumnOrder().length;
     }
+    
+    int getWidth(int columnIndex) {
+        return item.getParent().getColumn(columnIndex).getWidth();
+    }
 }
--- a/dwtx/jface/viewers/TextCellEditor.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TextCellEditor.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class TextCellEditor : CellEditor {
 
--- a/dwtx/jface/viewers/TreeViewer.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TreeViewer.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,7 @@
  * Users setting up an editable tree with more than 1 column <b>have</b> to pass the
  * DWT.FULL_SELECTION style bit
  * </p>
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class TreeViewer : AbstractTreeViewer {
     alias AbstractTreeViewer.addTreeListener addTreeListener;
--- a/dwtx/jface/viewers/TreeViewerFocusCellManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TreeViewerFocusCellManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -121,6 +121,7 @@
      *            the delegate responsible to highlight selected cell
      * @param navigationStrategy
      *            the strategy used to navigate the cells
+     * @since 3.4
      */
     public this(TreeViewer viewer,
             FocusCellHighlighter focusDrawingDelegate,
@@ -131,7 +132,7 @@
     override ViewerCell getInitialFocusCell() {
         Tree tree = cast(Tree) getViewer().getControl();
 
-        if (tree.getItemCount() > 0) {
+        if (! tree.isDisposed() && tree.getItemCount() > 0 && ! tree.getItem(0).isDisposed()) {
             return getViewer().getViewerRowFromItem_package(tree.getItem(0)).getCell(0);
         }
 
--- a/dwtx/jface/viewers/TreeViewerRow.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/TreeViewerRow.d	Sun Jul 06 23:30:07 2008 +0200
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *                                               - fix in bug: 174355,171126,,195908,198035,215069
+ *                                               - fix in bug: 174355,171126,,195908,198035,215069,227421
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
@@ -397,4 +397,8 @@
     private bool isValidOrderIndex(int currentIndex) {
         return currentIndex < this.item.getParent().getColumnOrder().length;
     }
+
+    int getWidth(int columnIndex) {
+        return item.getParent().getColumn(columnIndex).getWidth();
+    }
 }
--- a/dwtx/jface/viewers/ViewerCell.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ViewerCell.d	Sun Jul 06 23:30:07 2008 +0200
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *                                               - fix in bug: 195908,198035,215069,215735
+ *                                               - fix in bug: 195908,198035,215069,215735,227421
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
@@ -296,7 +296,7 @@
             if (columnIndex >= 0 && columnIndex < row.getColumnCount()) {
                 ViewerCell cell = row.getCellAtVisualIndex(columnIndex);
                 if( cell !is null ) {
-                    while( cell !is null ) {
+                    while( cell !is null && columnIndex < row.getColumnCount() - 1  && columnIndex > 0 ) {
                         if( cell.isVisible() ) {
                             break;
                         }
@@ -416,8 +416,12 @@
             return false;
         return true;
     }
-
+    
+    private int getWidth() {
+        return row.getWidth(columnIndex);
+    }
+    
     private bool isVisible() {
-        return getBounds().width > 0;
+        return getWidth() > 0;
     }
 }
--- a/dwtx/jface/viewers/ViewerRow.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/ViewerRow.d	Sun Jul 06 23:30:07 2008 +0200
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *                                               - fix in bug: 166346,167325,174355,195908,198035,215069
+ *                                               - fix in bug: 166346,167325,174355,195908,198035,215069,227421
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
@@ -383,4 +383,8 @@
     public StyleRange[] getStyleRanges(int columnIndex) {
         return (cast(ArrayWrapperT!(StyleRange)) getItem().getData(KEY_TEXT_LAYOUT ~ to!(String)(columnIndex))).array;
     }
+    
+    int getWidth(int columnIndex) {
+        return getBounds(columnIndex).width;
+    }
 }
--- a/dwtx/jface/viewers/WrappedViewerLabelProvider.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/WrappedViewerLabelProvider.d	Sun Jul 06 23:30:07 2008 +0200
@@ -224,13 +224,13 @@
         if (label.hasNewImage()) {
             cell.setImage(label.getImage());
         }
-        if (colorProvider!is null || label.hasNewBackground()) {
+        if (colorProvider !is null || label.hasNewBackground()) {
             cell.setBackground(label.getBackground());
         }
-        if (colorProvider!is null || label.hasNewForeground()) {
+        if (colorProvider !is null || label.hasNewForeground()) {
             cell.setForeground(label.getForeground());
         }
-        if (fontProvider!is null || label.hasNewFont()) {
+        if (fontProvider !is null || label.hasNewFont()) {
             cell.setFont(label.getFont());
         }
     }
--- a/dwtx/jface/viewers/deferred/DeferredContentProvider.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/deferred/DeferredContentProvider.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
--- a/dwtx/jface/viewers/deferred/IConcurrentModel.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/viewers/deferred/IConcurrentModel.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@
  * </p>
  *
  * @since 3.1
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IConcurrentModel {
 
--- a/dwtx/jface/window/ToolTip.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/jface/window/ToolTip.d	Sun Jul 06 23:30:07 2008 +0200
@@ -65,7 +65,7 @@
 
     /**
      * Don't recreate the tooltip as long the mouse doesn't leave the area
-     * triggering the Tooltip creation
+     * triggering the tooltip creation
      */
     public static const int NO_RECREATE = 1 << 1;
 
@@ -123,11 +123,14 @@
         this.listener = new ToolTipOwnerControlListener();
         this.shellListener = new class Listener {
             public void handleEvent(Event event) {
-                if( control_ !is null && ! control_.isDisposed() ) {
+                if( control_ !is null
+                        && ! control_.isDisposed() ) {
                     control_.getDisplay().asyncExec( dgRunnable( (Event event_){
-                        // Check if the new active shell is the tooltip itself
+                        // Check if the new active shell is the tooltip
+                        // itself
                         if( control_.getDisplay().getActiveShell() !is CURRENT_TOOLTIP) {
                             toolTipHide(CURRENT_TOOLTIP, event_);
+
                         }
                     }, event));
                 }
@@ -140,7 +143,7 @@
     }
 
     /**
-     * Restore arbitary data under the given key
+     * Restore arbitrary data under the given key
      *
      * @param key
      *            the key
@@ -170,8 +173,10 @@
 
     /**
      * Set the shift (from the mouse position triggered the event) used to
-     * display the tooltip. By default the tooltip is shifted 3 pixels to the
-     * left
+     * display the tooltip.
+     * <p>
+     * By default the tooltip is shifted 3 pixels to the right.
+     * </p>
      *
      * @param p
      *            the new shift
@@ -191,6 +196,7 @@
         control.addListener(DWT.MouseMove, listener);
         control.addListener(DWT.MouseExit, listener);
         control.addListener(DWT.MouseDown, listener);
+        control.addListener(DWT.MouseWheel, listener);
     }
 
     /**
@@ -202,10 +208,11 @@
         control.removeListener(DWT.MouseMove, listener);
         control.removeListener(DWT.MouseExit, listener);
         control.removeListener(DWT.MouseDown, listener);
+        control.removeListener(DWT.MouseWheel, listener);
     }
 
     /**
-     * Return whther the tooltip respects bounds of the display.
+     * Return whether the tooltip respects bounds of the display.
      *
      * @return <code>true</code> if the tooltip respects bounds of the display
      */
@@ -228,7 +235,7 @@
     }
 
     /**
-     * Return whther the tooltip respects bounds of the monitor.
+     * Return whether the tooltip respects bounds of the monitor.
      *
      * @return <code>true</code> if tooltip respects the bounds of the monitor
      */
@@ -254,7 +261,7 @@
     /**
      * Should the tooltip displayed because of the given event.
      * <p>
-     * <b>Subclasses may overwrite this to get custom behaviour</b>
+     * <b>Subclasses may overwrite this to get custom behavior</b>
      * </p>
      *
      * @param event
@@ -369,7 +376,8 @@
             // the cursor.x is inside the tip
             Point cursorLocation = tip.getDisplay().getCursorLocation();
 
-            if( cursorLocation.y is location.y && location.x < cursorLocation.x && location.x + size.x > cursorLocation.x ) {
+            if (cursorLocation.y is location.y && location.x < cursorLocation.x
+                    && location.x + size.x > cursorLocation.x) {
                 location.y -= 2;
             }
 
@@ -445,66 +453,59 @@
         if (tip !is null && !tip.isDisposed() && shouldHideToolTip(event)) {
             control.getShell().removeListener(DWT.Deactivate, shellListener);
             currentArea = null;
-            passOnEvent(tip,event);
+            passOnEvent(tip, event);
             tip.dispose();
             CURRENT_TOOLTIP = null;
             afterHideToolTip(event);
         }
     }
 
-    private void passOnEvent(Shell tip,Event event) {
-        if ( control !is null && ! control.isDisposed() && event !is null && event.widget !is control && event.type is DWT.MouseDown) {
+    private void passOnEvent(Shell tip, Event event) {
+        if (control !is null && !control.isDisposed() && event !is null
+              && event.widget !is control && event.type is DWT.MouseDown) {
             Display display = control.getDisplay();
             Point newPt = display.map(tip, null, new Point(event.x, event.y));
 
             Event newEvent = new Event();
-            newEvent.button=event.button;
-            newEvent.character=event.character;
+            newEvent.button = event.button;
+            newEvent.character = event.character;
             newEvent.count = event.count;
-            newEvent.data=event.data;
-            newEvent.detail=event.detail;
-            newEvent.display=event.display;
-            newEvent.doit=event.doit;
-            newEvent.end=event.end;
-            newEvent.gc=event.gc;
-            newEvent.height=event.height;
-            newEvent.index=event.index;
-            newEvent.item=event.item;
-            newEvent.keyCode=event.keyCode;
-            newEvent.start=event.start;
-            newEvent.stateMask=event.stateMask;
-            newEvent.text=event.text;
-            newEvent.time=event.time;
-            newEvent.type=event.type;
-            newEvent.widget=event.widget;
-            newEvent.width=event.width;
+            newEvent.data = event.data;
+            newEvent.detail = event.detail;
+            newEvent.display = event.display;
+            newEvent.doit = event.doit;
+            newEvent.end = event.end;
+            newEvent.gc = event.gc;
+            newEvent.height = event.height;
+            newEvent.index = event.index;
+            newEvent.item = event.item;
+            newEvent.keyCode = event.keyCode;
+            newEvent.start = event.start;
+            newEvent.stateMask = event.stateMask;
+            newEvent.text = event.text;
+            newEvent.time = event.time;
+            newEvent.type = event.type;
+            newEvent.widget = event.widget;
+            newEvent.width = event.width;
             newEvent.x = newPt.x;
             newEvent.y = newPt.y;
 
             tip.close();
-            display.asyncExec(new class(display,newEvent) Runnable {
-                Display display_;
-                Event newEvent_;
-                this( Display a, Event b ){
-                    display_=a;
-                    newEvent_=b;
+            display.asyncExec(dgRunnable( delegate(Display display_, Event newEvent_) {
+                if (IS_OSX) {
+                    try {
+                        Thread.sleep(0.300);
+                    } catch (InterruptedException e) {
+
+                    }
+
+                    display_.post(newEvent_);
+                    newEvent_.type = DWT.MouseUp;
+                    display_.post(newEvent_);
+                } else {
+                    display_.post(newEvent_);
                 }
-                public void run() {
-                    if( IS_OSX ) {
-                        try {
-                            Thread.sleep(0.300);
-                        } catch (InterruptedException e) {
-
-                        }
-
-                        display_.post(newEvent_);
-                        newEvent_.type = DWT.MouseUp;
-                        display_.post(newEvent_);
-                    } else {
-                        display_.post(newEvent_);
-                    }
-                }
-            });
+            }, display,newEvent));
         }
     }
 
@@ -583,7 +584,7 @@
             Composite parent);
 
     /**
-     * This method is called after a Tooltip is hidden.
+     * This method is called after a tooltip is hidden.
      * <p>
      * <b>Subclasses may override to clean up requested system resources</b>
      * </p>
@@ -674,6 +675,7 @@
             case DWT.KeyDown:
             case DWT.MouseDown:
             case DWT.MouseMove:
+            case DWT.MouseWheel:
                 toolTipHide(CURRENT_TOOLTIP, event);
                 break;
             case DWT.MouseHover:
@@ -681,7 +683,7 @@
                 break;
             case DWT.MouseExit:
                 /*
-                 * Check if the mouse exit happend because we move over the
+                 * Check if the mouse exit happened because we move over the
                  * tooltip
                  */
                 if (CURRENT_TOOLTIP !is null && !CURRENT_TOOLTIP.isDisposed()) {
--- a/dwtx/ui/forms/HyperlinkSettings.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/forms/HyperlinkSettings.d	Sun Jul 06 23:30:07 2008 +0200
@@ -23,10 +23,11 @@
 
 /**
  * Manages color and underline mode settings for a group of hyperlinks. The
- * class is extended by HyperlinkGroup but is otwerwise not intended to be
+ * class is extended by HyperlinkGroup but is otherwise not intended to be
  * subclassed.
  *
  * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class HyperlinkSettings {
     /**
--- a/dwtx/ui/forms/IManagedForm.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/forms/IManagedForm.d	Sun Jul 06 23:30:07 2008 +0200
@@ -35,6 +35,7 @@
  *
  * @see ManagedForm
  * @since 3.0
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface IManagedForm {
     /**
--- a/dwtx/ui/forms/IMessageManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/forms/IMessageManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -55,6 +55,7 @@
  * @since 3.3
  * @see IMessageProvider
  * @see IManagedForm
+ * @noimplement This interface is not intended to be implemented by clients.
  */
 
 public interface IMessageManager {
--- a/dwtx/ui/forms/widgets/Form.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/forms/widgets/Form.d	Sun Jul 06 23:30:07 2008 +0200
@@ -97,6 +97,7 @@
  * Although the class is not final, it should not be subclassed.
  *
  * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class Form : Composite {
     private FormHeading head;
--- a/dwtx/ui/forms/widgets/ScrolledForm.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/forms/widgets/ScrolledForm.d	Sun Jul 06 23:30:07 2008 +0200
@@ -50,6 +50,7 @@
  * Although the class is not final, it is not expected to be be extended.
  *
  * @since 3.0
+ * @noextend This class is not intended to be subclassed by clients.
  */
 public class ScrolledForm : SharedScrolledComposite {
     private Form content;
--- a/dwtx/ui/internal/forms/MessageManager.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/MessageManager.d	Sun Jul 06 23:30:07 2008 +0200
@@ -36,7 +36,7 @@
 import tango.util.collection.HashMap;
 import tango.util.Convert;
 import tango.text.Text;
-import tango.io.FileConst;
+import tango.io.model.IFile;
 /**
  * @see IMessageManager
  */
--- a/dwtx/ui/internal/forms/Messages.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/Messages.d	Sun Jul 06 23:30:07 2008 +0200
@@ -22,7 +22,7 @@
 
 //     static {
         // initialize resource bundle
-        //NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+//         NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 //     }
 
     public static String FormDialog_defaultTitle;
@@ -40,7 +40,6 @@
     public static String MessageManager_pErrorSummary;
     public static String ToggleHyperlink_accessibleColumn;
     public static String ToggleHyperlink_accessibleName;
-
     public static String bind(String string, String[] strings) {
         // TODO Auto-generated method stub
         return null;
--- a/dwtx/ui/internal/forms/widgets/BusyIndicator.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/BusyIndicator.d	Sun Jul 06 23:30:07 2008 +0200
@@ -26,6 +26,9 @@
 import dwt.widgets.Canvas;
 import dwt.widgets.Composite;
 import dwt.widgets.Display;
+// import dwtx.core.runtime.FileLocator;
+// import dwtx.core.runtime.Path;
+// import dwtx.core.runtime.Platform;
 import dwtx.jface.resource.ImageDescriptor;
 
 import dwt.dwthelper.utils;
@@ -297,16 +300,15 @@
 
 
     private ImageDescriptor createImageDescriptor(String relativePath) {
-        //DWT_TODO
-//      Bundle bundle = Platform.getBundle("dwtx.ui.forms"); //$NON-NLS-1$
-//      URL url = FileLocator.find(bundle, new Path(relativePath),null);
-//      if (url is null) return null;
-//      try {
-//          url = FileLocator.resolve(url);
-//          return ImageDescriptor.createFromURL(url);
-//      } catch (IOException e) {
-//          return null;
-//      }
+//         Bundle bundle = Platform.getBundle("dwtx.ui.forms"); //$NON-NLS-1$
+//         URL url = FileLocator.find(bundle, new Path(relativePath),null);
+//         if (url is null) return null;
+//         try {
+//             url = FileLocator.resolve(url);
+//             return ImageDescriptor.createFromURL(url);
+//         } catch (IOException e) {
+//             return null;
+//         }
         return null;
     }
 
--- a/dwtx/ui/internal/forms/widgets/FormImages.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormImages.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@
 import dwt.graphics.Color;
 import dwt.graphics.GC;
 import dwt.graphics.Image;
+import dwt.graphics.RGB;
 import dwt.widgets.Display;
 
 import dwt.dwthelper.utils;
@@ -39,22 +40,26 @@
 
     private abstract class ImageIdentifier {
         Display fDisplay;
-        Color[] fColors;
+        RGB[] fRGBs;
         int fLength;
 
         this(Display display, Color[] colors, int length) {
             fDisplay = display;
-            fColors = colors;
+            fRGBs = new RGB[colors.length];
+            for (int i = 0; i < colors.length; i++) {
+                Color color = colors[i];
+                fRGBs[i] = color is null ? null : color.getRGB();
+            }
             fLength = length;
         }
 
         public bool equals(Object obj) {
             if (null !is cast(ImageIdentifier)obj ) {
                 ImageIdentifier id = cast(ImageIdentifier)obj;
-                if (id.fColors.length is fColors.length) {
+                if (id.fRGBs.length is fRGBs.length) {
                     bool result = id.fDisplay.opEquals(fDisplay) && id.fLength is fLength;
-                    for (int i = 0; i < fColors.length && result; i++) {
-                        result = result && id.fColors[i].opEquals(fColors[i]);
+                    for (int i = 0; i < fRGBs.length && result; i++) {
+                        result = result && id.fRGBs[i].opEquals(fRGBs[i]);
                     }
                     return result;
                 }
@@ -64,8 +69,8 @@
 
         public override hash_t toHash() {
             int hash = fDisplay.toHash();
-            for (int i = 0; i < fColors.length; i++)
-                hash = hash * 7 + fColors[i].toHash();
+            for (int i = 0; i < fRGBs.length; i++)
+                hash = hash * 7 + fRGBs[i].toHash();
             hash = hash * 7 + fLength;
             return hash;
         }
@@ -101,14 +106,14 @@
     }
 
     private class ComplexImageIdentifier : ImageIdentifier {
-        Color fBg;
+        RGB fBgRGB;
         bool fVertical;
         int[] fPercents;
 
         public this(Display display, Color[] colors, int length,
                 int[] percents, bool vertical, Color bg) {
             super(display, colors, length);
-            fBg = bg;
+            fBgRGB = bg is null ? null : bg.getRGB();
             fVertical = vertical;
             fPercents = percents;
         }
@@ -118,8 +123,8 @@
                 ComplexImageIdentifier id = cast(ComplexImageIdentifier) obj;
                 if (super.equals(obj)  &&
                         id.fVertical is fVertical && ArrayEquals(id.fPercents, fPercents)) {
-                    if ((id.fBg is null && fBg is null) ||
-                            (id.fBg !is null && id.fBg.opEquals(fBg)))
+                    if ((id.fBgRGB is null && fBgRGB is null) ||
+                            (id.fBgRGB !is null && id.fBgRGB.opEquals(fBgRGB)))
                         return true;
                     // if the only thing that isn't the same is the background color
                     // still return true if it does not matter (percents add up to 100)
--- a/dwtx/ui/internal/forms/widgets/FormTextModel.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormTextModel.d	Sun Jul 06 23:30:07 2008 +0200
@@ -28,6 +28,8 @@
 import dwt.dwthelper.InputStream;
 
 static import tango.text.xml.Document;
+static import tango.io.Buffer;
+
 import tango.util.collection.ArraySeq;
 public class FormTextModel {
 //     private static const DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
@@ -82,13 +84,7 @@
         }
         return sbuf.toString();
     }
-    public void parseTaggedText(String taggedText, bool expandURLs) {
-        implMissing(__FILE__,__LINE__);
-    }
-    public void parseInputStream(InputStream is_, bool expandURLs) {
-        implMissing(__FILE__,__LINE__);
-    }
-/++
+
     /*
      * @see ITextModel#parse(String)
      */
@@ -97,68 +93,85 @@
             reset();
             return;
         }
-        try {
-            InputStream stream = new ByteArrayInputStream(taggedText
-                    .getBytes("UTF8")); //$NON-NLS-1$
-            parseInputStream(stream, expandURLs);
-        } catch (UnsupportedEncodingException e) {
-            DWT.error(DWT.ERROR_UNSUPPORTED_FORMAT, e);
-        }
+        _parseTaggedText(taggedText, expandURLs);
     }
 
     public void parseInputStream(InputStream is_, bool expandURLs) {
-
-        documentBuilderFactory.setNamespaceAware(true);
-        documentBuilderFactory.setIgnoringComments(true);
-
+        auto buf = new tango.io.Buffer.Buffer( 1024 );
+        {
+            int l;
+            byte[1024] a = void;
+            while((l = is_.read(a)) > 0 ){
+                buf.append( a[ 0 .. l ] );
+            }
+        }
+        _parseTaggedText( cast(char[]) buf.slice(), expandURLs );
+//         documentBuilderFactory.setNamespaceAware(true);
+//         documentBuilderFactory.setIgnoringComments(true);
+//
+//         reset();
+//         try {
+//             DocumentBuilder parser = documentBuilderFactory
+//                     .newDocumentBuilder();
+//             InputSource source = new InputSource(is_);
+//             Document doc = parser.parse(source);
+//             processDocument(doc, expandURLs);
+//         } catch (ParserConfigurationException e) {
+//             DWT.error(DWT.ERROR_INVALID_ARGUMENT, e);
+//         } catch (SAXException e) {
+//             DWT.error(DWT.ERROR_INVALID_ARGUMENT, e);
+//         } catch (IOException e) {
+//             DWT.error(DWT.ERROR_IO, e);
+//         }
+    }
+    private void _parseTaggedText( char[] text, bool expandURLs ){
         reset();
-        try {
-            DocumentBuilder parser = documentBuilderFactory
-                    .newDocumentBuilder();
-            InputSource source = new InputSource(is_);
-            Document doc = parser.parse(source);
-            processDocument(doc, expandURLs);
-        } catch (ParserConfigurationException e) {
-            DWT.error(DWT.ERROR_INVALID_ARGUMENT, e);
-        } catch (SAXException e) {
-            DWT.error(DWT.ERROR_INVALID_ARGUMENT, e);
-        } catch (IOException e) {
-            DWT.error(DWT.ERROR_IO, e);
-        }
+//         try {
+//             auto doc = tango.text.xml.Document.Document!(char)();
+//             doc.parse(text);
+//             processDocument(doc, expandURLs);
+//         } catch (XmlException e) {
+//             DWT.error(DWT.ERROR_INVALID_ARGUMENT, e);
+//         } catch (IOException e) {
+//             DWT.error(DWT.ERROR_IO, e);
+//         }
     }
 
-    private void processDocument(Document doc, bool expandURLs) {
-        Node root = doc.getDocumentElement();
-        NodeList children = root.getChildNodes();
-        processSubnodes(paragraphs, children, expandURLs);
-    }
+//     private void processDocument(tango.text.xml.Document.Document!(char) doc, bool expandURLs) {
+//         auto root = doc.query.root.dup;
+//         auto children = root.childs.dup;
+//         processSubnodes(paragraphs, children, expandURLs);
+//     }
 
-    private void processSubnodes(TArraySeqParagraph plist, NodeList children, bool expandURLs) {
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-            if (child.getNodeType() is Node.TEXT_NODE) {
+/+    private void processSubnodes(TArraySeqParagraph plist, NodeList children, bool expandURLs) {
+//o         for (int i = 0; i < children.getLength(); i++) {
+//o             Node child = children.item(i);
+        foreach( child; children ){
+//o             if (child.getNodeType() is Node.TEXT_NODE) {
+            if (child.type is XmlNodeType.Data) {
                 // Make an implicit paragraph
                 String text = getSingleNodeText(child);
-                if (text !is null && !isIgnorableWhiteSpace(text, true)) {
+                if ( !isIgnorableWhiteSpace(text, true)) {
                     Paragraph p = new Paragraph(true);
-                    p.parseRegularText(text, expandURLs, true,
-                            getHyperlinkSettings(), null);
-                    plist.add(p);
-                }
-            } else if (child.getNodeType() is Node.ELEMENT_NODE) {
-                String tag = child.getNodeName().toLowerCase();
-                if (tag.equals("p")) { //$NON-NLS-1$
-                    Paragraph p = processParagraph(child, expandURLs);
-                    if (p !is null)
-                        plist.add(p);
-                } else if (tag.equals("li")) { //$NON-NLS-1$
-                    Paragraph p = processListItem(child, expandURLs);
-                    if (p !is null)
-                        plist.add(p);
+//                     p.parseRegularText(text, expandURLs, true,
+//                             getHyperlinkSettings(), null);
+//                     plist.add(p);
+//                 }
+//             } else if (child.getNodeType() is Node.ELEMENT_NODE) {
+//                 String tag = child.getNodeName().toLowerCase();
+//                 if (tag.equals("p")) { //$NON-NLS-1$
+//                     Paragraph p = processParagraph(child, expandURLs);
+//                     if (p !is null)
+//                         plist.add(p);
+//                 } else if (tag.equals("li")) { //$NON-NLS-1$
+//                     Paragraph p = processListItem(child, expandURLs);
+//                     if (p !is null)
+//                         plist.add(p);
                 }
             }
         }
-    }
+    }+/
+/++
 
     private Paragraph processParagraph(Node paragraph, bool expandURLs) {
         NodeList children = paragraph.getChildNodes();
@@ -275,9 +288,9 @@
             }
         }
     }
-
+++/
     private bool isIgnorableWhiteSpace(String text, bool ignoreSpaces) {
-        for (int i = 0; i < text.length(); i++) {
+        for (int i = 0; i < text.length; i++) {
             char c = text.charAt(i);
             if (ignoreSpaces && c is ' ')
                 continue;
@@ -287,7 +300,7 @@
         }
         return true;
     }
-
+/++
     private ImageSegment processImageSegment(Node image) {
         ImageSegment segment = new ImageSegment();
         processObjectSegment(segment, image, "i."); //$NON-NLS-1$
@@ -376,10 +389,11 @@
         appendText(text, buf, spaceCounter);
         return buf.toString();
     }
+
+    private String getSingleNodeText(tango.text.xml.Document.Document!(char).NodeImpl node) {
+        return getNormalizedText(node.value());
+    }
 /++
-    private String getSingleNodeText(Node node) {
-        return getNormalizedText(node.getNodeValue());
-    }
 
     private String getNodeText(Node node) {
         NodeList children = node.getChildNodes();
@@ -694,7 +708,7 @@
     }
 
     public bool restoreSavedLink() {
-        if (savedSelectedLinkIndex!is -1) {
+        if (savedSelectedLinkIndex !is -1) {
             selectedSegmentIndex = savedSelectedLinkIndex;
             return true;
         }
--- a/dwtx/ui/internal/forms/widgets/FormUtil.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormUtil.d	Sun Jul 06 23:30:07 2008 +0200
@@ -14,6 +14,8 @@
 module dwtx.ui.internal.forms.widgets.FormUtil;
 
 
+// import com.ibm.icu.text.BreakIterator;
+
 import dwt.DWT;
 import dwt.custom.ScrolledComposite;
 import dwt.events.MouseEvent;
@@ -40,42 +42,13 @@
 
 import dwt.dwthelper.utils;
 
-//import com.ibm.icu.text.BreakIterator;
+import  dwtx.dwtxhelper.BreakIterator;
+// import mango.icu.UString;
+// import mango.icu.ULocale;
+// import mango.icu.UBreakIterator;
+
 public class FormUtil {
 
-    //DWT_TODO temp type
-    static class BreakIterator{
-
-        public static const int DONE = 0;
-        char[] text;
-        static BreakIterator inst;
-        public static BreakIterator getWordInstance() {
-            if( inst is null ){
-                inst = new BreakIterator;
-            }
-            return inst;
-        }
-        uint last = 0;
-
-        public void setText(String text) {
-            this.text = text;
-            last = 0;
-        }
-        public int first() {
-            // TODO Auto-generated method stub
-            return text.length > 0 ? 1 : 0;
-        }
-
-        public int next() {
-            // TODO Auto-generated method stub
-            last++;
-            if( last >= text.length ){
-                return DONE;
-            }
-            return last;
-        }
-
-    }
     public static const String PLUGIN_ID = "dwtx.ui.forms"; //$NON-NLS-1$
 
     static const int H_SCROLL_INCREMENT = 5;
@@ -138,13 +111,12 @@
     }
 
     public static int computeMinimumWidth(GC gc, String text) {
-        BreakIterator wb = BreakIterator.getWordInstance();
-        wb.setText(text);
+        auto wb =  UBreakIterator.openWordIterator( ULocale.Default, text );
+        scope(exit) wb.close();
         int last = 0;
-
         int width = 0;
 
-        for (int loc = wb.first(); loc !is BreakIterator.DONE; loc = wb.next()) {
+        for (int loc = wb.first(); loc !is UBreakIterator.DONE; loc = wb.next()) {
             String word = text.substring(last, loc);
             Point extent = gc.textExtent(word);
             width = Math.max(width, extent.x);
@@ -157,8 +129,8 @@
     }
 
     public static Point computeWrapSize(GC gc, String text, int wHint) {
-        BreakIterator wb = BreakIterator.getWordInstance();
-        wb.setText(text);
+        auto wb =  UBreakIterator.openWordIterator( ULocale.Default, text );
+        scope(exit) wb.close();
         FontMetrics fm = gc.getFontMetrics();
         int lineHeight = fm.getHeight();
 
@@ -166,7 +138,7 @@
         int last = 0;
         int height = lineHeight;
         int maxWidth = 0;
-        for (int loc = wb.first(); loc !is BreakIterator.DONE; loc = wb.next()) {
+        for (int loc = wb.first(); loc !is UBreakIterator.DONE; loc = wb.next()) {
             String word = text.substring(saved, loc);
             Point extent = gc.textExtent(word);
             if (extent.x > wHint) {
@@ -196,8 +168,8 @@
 
     public static void paintWrapText(GC gc, String text, Rectangle bounds,
             bool underline) {
-        BreakIterator wb = BreakIterator.getWordInstance();
-        wb.setText(text);
+        auto wb =  UBreakIterator.openWordIterator( ULocale.Default, text );
+        scope(exit) wb.close();
         FontMetrics fm = gc.getFontMetrics();
         int lineHeight = fm.getHeight();
         int descent = fm.getDescent();
@@ -207,7 +179,7 @@
         int y = bounds.y;
         int width = bounds.width;
 
-        for (int loc = wb.first(); loc !is BreakIterator.DONE; loc = wb.next()) {
+        for (int loc = wb.first(); loc !is UBreakIterator.DONE; loc = wb.next()) {
             String line = text.substring(saved, loc);
             Point extent = gc.textExtent(line);
 
--- a/dwtx/ui/internal/forms/widgets/FormsResources.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/FormsResources.d	Sun Jul 06 23:30:07 2008 +0200
@@ -48,7 +48,7 @@
 
     public static int getProgressDelay(int index) {
         /*
-        if (progressDelaysisnull)
+        if (progressDelays is null)
             return 0;
         return progressDelays[index];
         */
--- a/dwtx/ui/internal/forms/widgets/Paragraph.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/Paragraph.d	Sun Jul 06 23:30:07 2008 +0200
@@ -26,7 +26,7 @@
 import dwt.dwthelper.utils;
 import tango.util.collection.ArraySeq;
 import tango.util.collection.HashMap;
-import tango.io.FileConst;
+import tango.io.model.IFile;
 import tango.text.Text;
 
 /**
--- a/dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/TextHyperlinkSegment.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -90,6 +90,10 @@
                 repaintRegion);
         gc.setForeground(savedFg);
     }
+    
+    protected void drawString(GC gc, String s, int clipX, int clipY) {
+        gc.drawString(s, clipX, clipY, false);
+    }
 
     public String getTooltipText() {
         return tooltipText;
--- a/dwtx/ui/internal/forms/widgets/TextSegment.d	Sun Jun 22 22:57:31 2008 +0200
+++ b/dwtx/ui/internal/forms/widgets/TextSegment.d	Sun Jul 06 23:30:07 2008 +0200
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,8 @@
 import dwtx.ui.internal.forms.widgets.SelectionData;
 import dwtx.ui.internal.forms.widgets.FormTextModel;
 
+// import com.ibm.icu.text.BreakIterator;
+
 import dwt.DWT;
 import dwt.graphics.Color;
 import dwt.graphics.Font;
@@ -26,6 +28,10 @@
 import dwt.graphics.Rectangle;
 
 import dwt.dwthelper.utils;
+// import mango.icu.ULocale;
+// import mango.icu.UString;
+// import mango.icu.UBreakIterator;
+import  dwtx.dwtxhelper.BreakIterator;
 import tango.util.collection.ArraySeq;
 
 /**
@@ -34,32 +40,6 @@
  */
 public class TextSegment : ParagraphSegment {
 
-    //DWT_TODO temp type
-    static class BreakIterator{
-
-        public static const int DONE = 0;
-
-        public static BreakIterator getLineInstance() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        public void setText(String text) {
-            // TODO Auto-generated method stub
-
-        }
-
-        public int first() {
-            // TODO Auto-generated method stub
-            return 0;
-        }
-
-        public int next() {
-            // TODO Auto-generated method stub
-            return 0;
-        }
-
-    }
     private String colorId;
 
     private String fontId;
@@ -304,7 +284,9 @@
             if (isSelectable())
                 currentExtent += 1;
 
-            if (i !is 0 && currentExtent + textFragment.length > wHint) {
+            // i !is 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0) means:
+            // only wrap on the first fragment if we are not at the start of a line
+            if ((i !is 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0)) && currentExtent + textFragment.length > wHint) {
                 // overflow
                 int lineWidth = currentExtent;
                 locator.rowHeight = Math.max(locator.rowHeight, lineExtent.y);
@@ -623,13 +605,17 @@
         }
         if (reverse) {
             drawUnderline(gc, swidth, clipX, clipLineY, hover, rolloverMode);
-            gc.drawString(s, clipX, clipY, false);
+            drawString(gc, s, clipX, clipY);
         } else {
-            gc.drawString(s, clipX, clipY, false);
+            drawString(gc, s, clipX, clipY);
             drawUnderline(gc, swidth, clipX, clipLineY, hover, rolloverMode);
         }
     }
 
+    protected void drawString(GC gc, String s, int clipX, int clipY) {
+        gc.drawString(s, clipX, clipY, true);
+    }
+
     private void drawUnderline(GC gc, int swidth, int x, int y, bool hover,
             bool rolloverMode) {
         if (underline || hover || rolloverMode) {
@@ -682,7 +668,9 @@
                 int breakLoc = fragment.index;
                 if (breakLoc is 0)
                     continue;
-                if (i !is 0 && locator.x + lineExtent.x + fragment.length > rightEdge) {
+                // (i !is 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0)) means:
+                // only wrap on the first fragment if we are not at the start of a line
+                if ((i !is 0 || locator.x > locator.getStartX() + (isSelectable() ? 1 : 0)) && locator.x + lineExtent.x + fragment.length > rightEdge) {
                     // overflow
                     int lineWidth = locator.x + lineExtent.x;
                     if (isSelectable())
@@ -732,10 +720,10 @@
         if (textFragments !is null)
             return;
         ArraySeq!(Object) list = new ArraySeq!(Object);
-        BreakIterator wb = BreakIterator.getLineInstance();
-        wb.setText(getText());
+        auto wb =  UBreakIterator.openLineIterator( ULocale.Default, getText() );
+        scope(exit) wb.close();
         int cursor = 0;
-        for (int loc = wb.first(); loc !is BreakIterator.DONE; loc = wb.next()) {
+        for (int loc = wb.first(); loc !is UBreakIterator.DONE; loc = wb.next()) {
             if (loc is 0)
                 continue;
             String word = text.substring(cursor, loc);