Mercurial > projects > dwt-mac
diff dwt/custom/StyleRange.d @ 0:380af2bdd8e5
Upload of whole dwt tree
author | Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com> |
---|---|
date | Sat, 09 Aug 2008 17:00:02 +0200 |
parents | |
children | 1a8b3cb347e0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/custom/StyleRange.d Sat Aug 09 17:00:02 2008 +0200 @@ -0,0 +1,201 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +module dwt.custom; + +import dwt.*; +import dwt.graphics.*; +import dwt.internal.CloneableCompatibility; + +public class StyleRange : TextStyle : CloneableCompatibility { + + /** + * the start offset of the range, zero-based from the document start + */ + public int start; + + /** + * the length of the range + */ + public int length; + + /** + * the font style of the range. It may be a combination of + * DWT.NORMAL, DWT.ITALIC or DWT.BOLD + * + * Note: the font style is not used if the <code>font</code> attribute + * is set + */ + public int fontStyle = DWT.NORMAL; + +/** + * Create a new style range with no styles + * + * @since 3.2 + */ +public StyleRange() { +} + +/** + * Create a new style range from an existing text style. + * + *@param style the text style to copy + * + *@since 3.4 + */ +public StyleRange(TextStyle style) { + super(style); +} + +/** + * Create a new style range. + * + * @param start start offset of the style + * @param length length of the style + * @param foreground foreground color of the style, null if none + * @param background background color of the style, null if none + */ +public StyleRange(int start, int length, Color foreground, Color background) { + super(null, foreground, background); + this.start = start; + this.length = length; +} + +/** + * Create a new style range. + * + * @param start start offset of the style + * @param length length of the style + * @param foreground foreground color of the style, null if none + * @param background background color of the style, null if none + * @param fontStyle font style of the style, may be DWT.NORMAL, DWT.ITALIC or DWT.BOLD + */ +public StyleRange(int start, int length, Color foreground, Color background, int fontStyle) { + this(start, length, foreground, background); + this.fontStyle = fontStyle; +} + +/** + * Compares the argument to the receiver, and returns true + * if they represent the <em>same</em> object using a class + * specific comparison. + * + * @param object the object to compare with this object + * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise + * + * @see #toHash() + */ +public bool opEquals(Object object) { + if (object is this) return true; + if (object instanceof StyleRange) { + StyleRange style = (StyleRange)object; + if (start !is style.start) return false; + if (length !is style.length) return false; + return similarTo(style); + } + return false; +} + +/** + * Returns an integer hash code for the receiver. Any two + * objects that return <code>true</code> when passed to + * <code>opEquals</code> must return the same value for this + * method. + * + * @return the receiver's hash + * + * @see #opEquals(Object) + */ +public int toHash() { + return super.toHash() ^ fontStyle; +} +bool isVariableHeight() { + return font !is null || metrics !is null || rise !is 0; +} +/** + * Returns whether or not the receiver is unstyled (i.e., does not have any + * style attributes specified). + * + * @return true if the receiver is unstyled, false otherwise. + */ +public bool isUnstyled() { + if (font !is null) return false; + if (rise !is 0) return false; + if (metrics !is null) return false; + if (foreground !is null) return false; + if (background !is null) return false; + if (fontStyle !is DWT.NORMAL) return false; + if (underline) return false; + if (strikeout) return false; + if (borderStyle !is DWT.NONE) return false; + return true; +} + +/** + * Compares the specified object to this StyleRange and answer if the two + * are similar. The object must be an instance of StyleRange and have the + * same field values for except for start and length. + * + * @param style the object to compare with this object + * @return true if the objects are similar, false otherwise + */ +public bool similarTo(StyleRange style) { + if (!super.opEquals(style)) return false; + if (fontStyle !is style.fontStyle) return false; + return true; +} + +/** + * Returns a new StyleRange with the same values as this StyleRange. + * + * @return a shallow copy of this StyleRange + */ +public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } +} + +/** + * Returns a String containing a concise, human-readable + * description of the receiver. + * + * @return a String representation of the StyleRange + */ +public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append("StyleRange {"); + buffer.append(start); + buffer.append(", "); + buffer.append(length); + buffer.append(", fontStyle="); + switch (fontStyle) { + case DWT.BOLD: + buffer.append("bold"); + break; + case DWT.ITALIC: + buffer.append("italic"); + break; + case DWT.BOLD | DWT.ITALIC: + buffer.append("bold-italic"); + break; + default: + buffer.append("normal"); + } + String str = super.toString(); + int index = str.indexOf('{'); + str = str.substring(index + 1); + if (str.length() > 1) buffer.append(", "); + buffer.append(str); + return buffer.toString(); +} +}