diff dwtx/jface/preference/ColorFieldEditor.d @ 34:b3c8e32d406f

preference
author Frank Benoit <benoit@tionex.de>
date Sat, 05 Apr 2008 01:45:47 +0200
parents
children ea8ff534f622
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtx/jface/preference/ColorFieldEditor.d	Sat Apr 05 01:45:47 2008 +0200
@@ -0,0 +1,193 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
+ *******************************************************************************/
+module dwtx.jface.preference.ColorFieldEditor;
+
+import dwtx.jface.preference.FieldEditor;
+import dwtx.jface.preference.ColorSelector;
+import dwtx.jface.preference.PreferenceConverter;
+
+import dwt.graphics.Font;
+import dwt.graphics.GC;
+import dwt.graphics.Point;
+import dwt.layout.GridData;
+import dwt.widgets.Button;
+import dwt.widgets.Composite;
+import dwt.widgets.Control;
+import dwtx.jface.resource.JFaceResources;
+import dwtx.jface.util.IPropertyChangeListener;
+import dwtx.jface.util.PropertyChangeEvent;
+
+import dwt.dwthelper.utils;
+
+/**
+ * A field editor for a color type preference.
+ */
+public class ColorFieldEditor : FieldEditor {
+
+    /**
+     * The color selector, or <code>null</code> if none.
+     */
+    private ColorSelector colorSelector;
+
+    /**
+     * Creates a new color field editor
+     */
+    protected this() {
+        //No default behavior
+    }
+
+    /**
+     * Creates a color field editor.
+     *
+     * @param name
+     *            the name of the preference this field editor works on
+     * @param labelText
+     *            the label text of the field editor
+     * @param parent
+     *            the parent of the field editor's control
+     */
+    public this(String name, String labelText, Composite parent) {
+        super(name, labelText, parent);
+    }
+
+    /*
+     * (non-Javadoc) Method declared on FieldEditor.
+     */
+    protected void adjustForNumColumns(int numColumns) {
+        (cast(GridData) colorSelector.getButton().getLayoutData()).horizontalSpan = numColumns - 1;
+    }
+
+    /**
+     * Computes the size of the color image displayed on the button.
+     * <p>
+     * This is an internal method and should not be called by clients.
+     * </p>
+     *
+     * @param window
+     *            the window to create a GC on for calculation.
+     * @return Point The image size
+     *
+     */
+    protected Point computeImageSize(Control window) {
+        // Make the image height as high as a corresponding character. This
+        // makes sure that the button has the same size as a "normal" text
+        // button.
+        GC gc = new GC(window);
+        Font f = JFaceResources.getFontRegistry().get(
+                JFaceResources.DEFAULT_FONT);
+        gc.setFont(f);
+        int height = gc.getFontMetrics().getHeight();
+        gc.dispose();
+        Point p = new Point(height * 3 - 6, height);
+        return p;
+    }
+
+
+    /* (non-Javadoc)
+     * @see dwtx.jface.preference.FieldEditor#doFillIntoGrid(dwt.widgets.Composite, int)
+     */
+    protected void doFillIntoGrid(Composite parent, int numColumns) {
+        Control control = getLabelControl(parent);
+        GridData gd = new GridData();
+        gd.horizontalSpan = numColumns - 1;
+        control.setLayoutData(gd);
+
+        Button colorButton = getChangeControl(parent);
+        colorButton.setLayoutData(new GridData());
+
+    }
+
+
+    /* (non-Javadoc)
+     * @see dwtx.jface.preference.FieldEditor#doLoad()
+     */
+    protected void doLoad() {
+        if (colorSelector is null) {
+            return;
+        }
+        colorSelector.setColorValue(PreferenceConverter.getColor(
+                getPreferenceStore(), getPreferenceName()));
+    }
+
+    /*
+     * (non-Javadoc) Method declared on FieldEditor.
+     */
+    protected void doLoadDefault() {
+        if (colorSelector is null) {
+            return;
+        }
+        colorSelector.setColorValue(PreferenceConverter.getDefaultColor(
+                getPreferenceStore(), getPreferenceName()));
+    }
+
+    /*
+     * (non-Javadoc) Method declared on FieldEditor.
+     */
+    protected void doStore() {
+        PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(),
+                colorSelector.getColorValue());
+    }
+
+    /**
+     * Get the color selector used by the receiver.
+     *
+     * @return ColorSelector/
+     */
+    public ColorSelector getColorSelector() {
+        return colorSelector;
+    }
+
+    /**
+     * Returns the change button for this field editor.
+     *
+     * @param parent
+     *            The control to create the button in if required.
+     * @return the change button
+     */
+    protected Button getChangeControl(Composite parent) {
+        if (colorSelector is null) {
+            colorSelector = new ColorSelector(parent);
+            colorSelector.addListener(new class IPropertyChangeListener {
+                // forward the property change of the color selector
+                public void propertyChange(PropertyChangeEvent event) {
+                    this.outer.fireValueChanged(event.getProperty(),
+                            event.getOldValue(), event.getNewValue());
+                    setPresentsDefaultValue(false);
+                }
+            });
+
+        } else {
+            checkParent(colorSelector.getButton(), parent);
+        }
+        return colorSelector.getButton();
+    }
+
+    /*
+     * (non-Javadoc) Method declared on FieldEditor.
+     */
+    public int getNumberOfControls() {
+        return 2;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see dwtx.jface.preference.FieldEditor#setEnabled(bool,
+     *      dwt.widgets.Composite)
+     */
+    public void setEnabled(bool enabled, Composite parent) {
+        super.setEnabled(enabled, parent);
+        getChangeControl(parent).setEnabled(enabled);
+    }
+
+}