/****************************************************************************** * Copyright (c) 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 ****************************************************************************/ package org.eclipse.gmf.runtime.diagram.ui.label; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.swt.graphics.Image; /** * The purpose of this interface is to provide a generic way for editparts, * editpolicies, text direct edit managers, etc. to deal with label figures * (i.e. figures containing text and/or an image). This way, if a client would * like to provide their own type of label figure they may not need to override * all the pieces that interact with the label figure. * <p> * The methods in this interface are documented in a way that they were intended * to be used; however, if the client is overriding the pieces of GMF that * interact with the label (e.g. editpart, editpolicies, text direct edit * manager) and creating their own label figure, they are free to use this API * as they see fit. For this reason, the supported alignment and placement * values are not documented here. These would be determined by the the client's * label figure being used. * <p> * IMPORTANT: This interface is <EM>not</EM> intended to be implemented by * clients. Clients should inherit from {@link ILabelDelegate.Stub}. New * methods may be added to this interface in the future. * </p> * * @since 2.1 * @author crevells * */ public interface ILabelDelegate { /** * Sets the focus state of the label. Implementors may want to react by * drawing a focus rectangle around the text in the label. * * @param focus * the focus state */ public void setFocus(boolean focus); /** * Gets the focus state of the label. * * @return the focus state of the label */ public boolean hasFocus(); /** * Sets the selected state of the label. Implementors may want to react by * drawing a selection rectangle around the text in the label. * * @param selected * the selected state */ public void setSelected(boolean selected); /** * Gets the selected state of the label. * * @return the selected state of the label */ public boolean isSelected(); /** * Sets the text in the label. This will be called when the text has changed * and the label figure should be updated. * * @param text * the new text */ public void setText(String text); /** * Returns the text of the label. Unless clients require customized * behavior, implementors should generally return the complete text of the * label, regardless of whether it is currently being truncated. * * @return the text in the label */ public String getText(); /** * Sets the label's icon at given index. * * @param image * The icon image or null to remove the icon * @param index * The icon index */ public void setIcon(Image image, int index); /** * Gets the label's icon at given index. * * @param index * the icon index * @return the image */ public Image getIcon(int index); /** * Sets whether the label's text should be striked-through * * @param strikeThrough * whether the label's text should be striked-through */ public void setTextStrikeThrough(boolean strikeThrough); /** * Should the label's text should be striked-through? * * @return true if the label's text should be striked-through; false * otherwise */ public boolean isTextStrikedThrough(); /** * Sets whether the label's text should be underlined * * @param underline * whether the label's text should be underlined */ public void setTextUnderline(boolean underline); /** * Should the label's text should be underlined? * * @return true if the label's text should be underlined; false otherwise */ public boolean isTextUnderlined(); /** * Sets the alignment of the label (icon and text) within the figure. If * this figure's bounds are larger than the size needed to display the * label, the label will be aligned accordingly. * * @param alignment * label alignment */ public void setAlignment(int alignment); /** * Gets the alignment of the label (icon and text) within the figure. * * @return the alignment */ public int getAlignment(); /** * Sets the current placement of the label's text relative to its icon. If * the text placement is set to {@link PositionConstants#EAST}, then the * text would be placed on the right of the icon. Similarly, if text * placement is set to {@link PositionConstants#WEST}, the text will be * placed on the left of the icon; {@link PositionConstants#NORTH} would put * the text above the icon; and {@link PositionConstants#SOUTH} would place * the text below the icon. * * @param placement * the text placement relative to the icon */ public void setTextPlacement(int placement); /** * Gets the placement of the label's text relative to its icon. * * @return the placement */ public int getTextPlacement(); /** * Sets the alignment of the label's icon relative to the label's text * bounds. This is only relevant if the icon's width or height (depending on * the location of the icon relative to the text) is smaller than the text's * width or height. * * @param alignment * the icon alignment relative to the text bounds */ public void setIconAlignment(int alignment); /** * Gets the alignment of the label's icon relative to the label's text * bounds. * * @return the alignment */ public int getIconAlignment(); /** * Sets the alignment of the label's text relative to the label's icon * bounds. This is only relevant if the text's width or height (depending on * the location of the text relative to the icon) is smaller than the icon's * width or height. * * @param alignment * the text alignment relative to the icon bounds */ public void setTextAlignment(int alignment); /** * Gets the alignment of the label's text relative to the label's icon * bounds. * * @return the alignment */ public int getTextAlignment(); /** * Sets the text justification of the label's text. * * @param justification * the text justification */ public void setTextJustification(int justification); /** * Gets the text justification of the label's text. * * @return the text justification */ public int getTextJustification(); /** * Returns true if the label's text wrapping feature is turned on; false * otherwise. * * @return true if the label's text wrapping feature is turned on; false * otherwise */ public boolean isTextWrapOn(); /** * Turns the label's text wrapping feature on or off. * * @param textWrapOn * true if the label's text wrapping feature is to be turned on; * false otherwise */ public void setTextWrapOn(boolean textWrapOn); /** * Returns the bounds of the label's complete text in absolute coordinates. * One use of this method is by the text direct edit manager to determine * the size and location of the cell editor popup. * * @return the bounds of the label's complete text in absolute coordinates */ public Rectangle getTextBounds(); /** * This is a stub implementation of the <code>ILabelDelegate</code> * interface. Clients should subclass this stub to avoid any breakage if API * is added to the ILabelDelegate in the future. Clients only need to * override methods in this stub that our applicable to their label. For * example, if the client's label does not support complicated label * alignment then there is no need to override such methods. All methods do * nothing by default or return some default value. * * @since 2.1 * @author crevells */ public class Stub implements ILabelDelegate { public void setFocus(boolean b) { // do nothing by default, clients may override if desired } public boolean hasFocus() { return false; } public void setSelected(boolean b) { // do nothing by default, clients may override if desired } public boolean isSelected() { return false; } public int getTextJustification() { return PositionConstants.LEFT; } public void setTextJustification(int justification) { // do nothing by default, clients may override if desired } public void setIcon(Image image, int index) { // do nothing by default, clients may override if desired } public Image getIcon(int index) { return null; } public String getText() { return ""; //$NON-NLS-1$ } public void setText(String text) { // do nothing by default, clients may override if desired } public void setAlignment(int alignment) { // do nothing by default, clients may override if desired } public int getAlignment() { return PositionConstants.CENTER; } public void setTextPlacement(int placement) { // do nothing by default, clients may override if desired } public int getTextPlacement() { return PositionConstants.CENTER; } public void setTextAlignment(int alignment) { // do nothing by default, clients may override if desired } public int getTextAlignment() { return PositionConstants.CENTER; } public void setIconAlignment(int alignment) { // do nothing by default, clients may override if desired } public int getIconAlignment() { return PositionConstants.CENTER; } public void setTextStrikeThrough(boolean strikeThrough) { // do nothing by default, clients may override if desired } public boolean isTextStrikedThrough() { return false; } public void setTextUnderline(boolean underline) { // do nothing by default, clients may override if desired } public boolean isTextUnderlined() { return false; } public void setTextWrapOn(boolean textWrappingOn) { // do nothing by default, clients may override if desired } public boolean isTextWrapOn() { return false; } public Rectangle getTextBounds() { return new Rectangle(); } } }