diff dwtx/jface/text/IInformationControl.d @ 129:eb30df5ca28b

Added JFace Text sources
author Frank Benoit <benoit@tionex.de>
date Sat, 23 Aug 2008 19:10:48 +0200
parents
children c4fb132a086c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtx/jface/text/IInformationControl.d	Sat Aug 23 19:10:48 2008 +0200
@@ -0,0 +1,203 @@
+/*******************************************************************************
+ * 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
+ * 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.text.IInformationControl;
+
+import dwt.dwthelper.utils;
+
+
+import dwt.DWT;
+import dwt.events.DisposeListener;
+import dwt.events.FocusListener;
+import dwt.graphics.Color;
+import dwt.graphics.Point;
+
+
+/**
+ * Interface of a control presenting information. The information is given in
+ * the form of an input object. It can be either the content itself or a
+ * description of the content. The specification of what is required from an
+ * input object is left to the implementers of this interface.
+ * <p>
+ * <em>If this information control is used by a {@link AbstractHoverInformationControlManager}
+ * then that manager will own this control and override any properties that
+ * may have been set before by any other client.</em></p>
+ * <p>
+ * The information control must not grab focus when made visible using
+ * <code>setVisible(true)</code>.
+ *
+ * In order to provide backward compatibility for clients of
+ * <code>IInformationControl</code>, extension interfaces are used as a means
+ * of evolution. The following extension interfaces exist:
+ * <ul>
+ * <li>{@link dwtx.jface.text.IInformationControlExtension} since
+ *     version 2.0 introducing the predicate of whether the control has anything to
+ *     show or would be empty</li>
+ * <li>{@link dwtx.jface.text.IInformationControlExtension2} since
+ *     version 2.1 replacing the original concept of textual input by general input
+ *     objects.</li>
+ * <li>{@link dwtx.jface.text.IInformationControlExtension3} since
+ *     version 3.0 providing access to the control's bounds and introducing
+ *     the concept of persistent size and location.</li>
+ * <li>{@link dwtx.jface.text.IInformationControlExtension4} since
+ *     version 3.3, adding API which allows to set this information control's status field text.</li>
+ * <li>{@link dwtx.jface.text.IInformationControlExtension5} since
+ *     version 3.4, adding API to get the visibility of the control, to
+ *     test whether another control is a child of the information control,
+ *     to compute size constraints based on the information control's main font
+ *     and to return a control creator for an enriched version of this information control.</li>
+ * </ul>
+ * <p>
+ * Clients can implement this interface and its extension interfaces,
+ * subclass {@link AbstractInformationControl}, or use the (text-based)
+ * default implementation {@link DefaultInformationControl}.
+ *
+ * @see dwtx.jface.text.IInformationControlExtension
+ * @see dwtx.jface.text.IInformationControlExtension2
+ * @see dwtx.jface.text.IInformationControlExtension3
+ * @see dwtx.jface.text.IInformationControlExtension4
+ * @see dwtx.jface.text.IInformationControlExtension5
+ * @see AbstractInformationControl
+ * @see DefaultInformationControl
+ * @since 2.0
+ */
+public interface IInformationControl {
+
+    /**
+     * Sets the information to be presented by this information control.
+     * <p>
+     * Replaced by {@link IInformationControlExtension2#setInput(Object)}.
+     *
+     * @param information the information to be presented
+     */
+    void setInformation(String information);
+
+    /**
+     * Sets the information control's size constraints. A constraint value of
+     * {@link DWT#DEFAULT} indicates no constraint. This method must be called before
+     * {@link #computeSizeHint()} is called.
+     * <p>
+     * Note: An information control which implements {@link IInformationControlExtension3}
+     * may ignore this method or use it as hint for its very first appearance.
+     * </p>
+     * @param maxWidth the maximal width of the control  to present the information, or {@link DWT#DEFAULT} for not constraint
+     * @param maxHeight the maximal height of the control to present the information, or {@link DWT#DEFAULT} for not constraint
+     */
+    void setSizeConstraints(int maxWidth, int maxHeight);
+
+    /**
+     * Computes and returns a proposal for the size of this information control depending
+     * on the information to present. The method tries to honor known size constraints but might
+     * return a size that exceeds them.
+     *
+     * @return the computed size hint
+     */
+    Point computeSizeHint();
+
+    /**
+     * Controls the visibility of this information control.
+     * <p>
+     * <strong>Note:</strong> The information control must not grab focus when
+     * made visible.
+     * </p>
+     * 
+     * @param visible <code>true</code> if the control should be visible
+     */
+    void setVisible(bool visible);
+
+    /**
+     * Sets the size of this information control.
+     *
+     * @param width the width of the control
+     * @param height the height of the control
+     */
+    void setSize(int width, int height);
+
+    /**
+     * Sets the location of this information control.
+     *
+     * @param location the location
+     */
+    void setLocation(Point location);
+
+    /**
+     * Disposes this information control.
+     */
+    void dispose();
+
+    /**
+     * Adds the given listener to the list of dispose listeners.
+     * If the listener is already registered it is not registered again.
+     *
+     * @param listener the listener to be added
+     */
+    void addDisposeListener(DisposeListener listener);
+
+    /**
+     * Removes the given listeners from the list of dispose listeners.
+     * If the listener is not registered this call has no effect.
+     *
+     * @param listener the listener to be removed
+     */
+    void removeDisposeListener(DisposeListener listener);
+
+    /**
+     * Sets the foreground color of this information control.
+     *
+     * @param foreground the foreground color of this information control
+     */
+    void setForegroundColor(Color foreground);
+
+    /**
+     * Sets the background color of this information control.
+     *
+     * @param background the background color of this information control
+     */
+    void setBackgroundColor(Color background);
+
+    /**
+     * Returns whether this information control (or one of its children) has the focus.
+     * The suggested implementation is like this (<code>fShell</code> is this information control's shell):
+     * <pre>return fShell.getDisplay().getActiveShell() is fShell</pre>
+     *
+     * @return <code>true</code> when the information control has the focus, otherwise <code>false</code>
+     */
+    bool isFocusControl();
+
+    /**
+     * Sets the keyboard focus to this information control.
+     */
+    void setFocus();
+
+    /**
+     * Adds the given listener to the list of focus listeners.
+     * If the listener is already registered it is not registered again.
+     * <p>
+     * The suggested implementation is to install listeners for {@link DWT#Activate} and {@link DWT#Deactivate}
+     * on the shell and forward events to the focus listeners. Clients are
+     * encouraged to subclass {@link AbstractInformationControl}, which does this
+     * for free.
+     * </p>
+     * 
+     * @param listener the listener to be added
+     */
+    void addFocusListener(FocusListener listener);
+
+    /**
+     * Removes the given listeners from the list of focus listeners.
+     * If the listener is not registered this call has no affect.
+     *
+     * @param listener the listener to be removed
+     */
+    void removeFocusListener(FocusListener listener);
+}