Mercurial > projects > dwt-linux
changeset 95:d9e5954ee27d
StyleRange
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 18 Jan 2008 02:15:59 +0100 |
parents | d516f11aafe3 |
children | 9ec02606e09d |
files | dwt/custom/StyleRange.d |
diffstat | 1 files changed, 191 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/custom/StyleRange.d Fri Jan 18 02:15:59 2008 +0100 @@ -0,0 +1,191 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.StyleRange; + + +import dwt.DWT; +import dwt.graphics.Color; +import dwt.graphics.TextStyle; +import dwt.internal.CloneableCompatibility; + +static import tango.text.Text; +alias tango.text.Text.Text!(char) StringBuffer; + +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 this() { + super(null, null, null); +} + +/** + * 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 this(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 this(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 #hashCode() + */ +public override int opEquals(Object object) { + if (object is this) return true; + if (auto style = cast(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>equals</code> must return the same value for this + * method. + * + * @return the receiver's hash + * + * @see #equals(Object) + */ +public override hash_t 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; + 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() { + return new StyleRange( start, length, foreground, background, fontStyle ); +} + +/** + * Returns a string containing a concise, human-readable + * description of the receiver. + * + * @return a string representation of the StyleRange + */ +public override char[] 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"); + } + char[] str = super.toString(); + int index = tango.text.Util.locate( str, '{'); + if( index is str.length ) index = -1; + str = str[ index + 1 .. $ ]; + if (str.length > 1) buffer.append(", "); + buffer.append(str); + return buffer.toString(); +} +}