Mercurial > projects > dwt-addons
diff dwtx/jface/text/TextSelection.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/TextSelection.d Sat Aug 23 19:10:48 2008 +0200 @@ -0,0 +1,191 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 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.TextSelection; + +import dwt.dwthelper.utils; + + +/** + * Standard implementation of {@link dwtx.jface.text.ITextSelection}. + * <p> + * Makes advantage of the weak contract of correctness of its interface. If + * generated from a selection provider, it only remembers its offset and length + * and computes the remaining information on request.</p> + */ +public class TextSelection : ITextSelection { + + /** Internal empty text selection */ + private final static ITextSelection NULL= new TextSelection(); + + /** + * Returns a shared instance of an empty text selection. + * + * @return a shared instance of an empty text selection + */ + public static ITextSelection emptySelection() { + return NULL; + } + + /** Document which delivers the data of the selection */ + private IDocument fDocument; + /** Offset of the selection */ + private int fOffset; + /** Length of the selection */ + private int fLength; + + + /** + * Creates an empty text selection. + */ + private TextSelection() { + this(null, -1, -1); + } + + /** + * Creates a text selection for the given range. This + * selection object describes generically a text range and + * is intended to be an argument for the <code>setSelection</code> + * method of selection providers. + * + * @param offset the offset of the range + * @param length the length of the range + */ + public TextSelection(int offset, int length) { + this(null, offset, length); + } + + /** + * Creates a text selection for the given range of the given document. + * This selection object is created by selection providers in responds + * <code>getSelection</code>. + * + * @param document the document whose text range is selected in a viewer + * @param offset the offset of the selected range + * @param length the length of the selected range + */ + public TextSelection(IDocument document, int offset, int length) { + fDocument= document; + fOffset= offset; + fLength= length; + } + + /** + * + * Returns true if the offset and length are smaller than 0. + * A selection of length 0, is a valid text selection as it + * describes, e.g., the cursor position in a viewer. + * + * @return <code>true</code> if this selection is empty + * @see dwtx.jface.viewers.ISelection#isEmpty() + */ + public bool isEmpty() { + return fOffset < 0 || fLength < 0; + } + + /* + * @see dwtx.jface.text.ITextSelection#getOffset() + */ + public int getOffset() { + return fOffset; + } + + /* + * @see dwtx.jface.text.ITextSelection#getLength() + */ + public int getLength() { + return fLength; + } + + /* + * @see dwtx.jface.text.ITextSelection#getStartLine() + */ + public int getStartLine() { + + try { + if (fDocument !is null) + return fDocument.getLineOfOffset(fOffset); + } catch (BadLocationException x) { + } + + return -1; + } + + /* + * @see dwtx.jface.text.ITextSelection#getEndLine() + */ + public int getEndLine() { + try { + if (fDocument !is null) { + int endOffset= fOffset + fLength; + if (fLength !is 0) + endOffset--; + return fDocument.getLineOfOffset(endOffset); + } + } catch (BadLocationException x) { + } + + return -1; + } + + /* + * @see dwtx.jface.text.ITextSelection#getText() + */ + public String getText() { + try { + if (fDocument !is null) + return fDocument.get(fOffset, fLength); + } catch (BadLocationException x) { + } + + return null; + } + + /* + * @see java.lang.Object#equals(Object) + */ + public bool equals(Object obj) { + if (obj is this) + return true; + + if (obj is null || getClass() !is obj.getClass()) + return false; + + TextSelection s= (TextSelection) obj; + bool sameRange= (s.fOffset is fOffset && s.fLength is fLength); + if (sameRange) { + + if (s.fDocument is null && fDocument is null) + return true; + if (s.fDocument is null || fDocument is null) + return false; + + try { + String sContent= s.fDocument.get(fOffset, fLength); + String content= fDocument.get(fOffset, fLength); + return sContent.equals(content); + } catch (BadLocationException x) { + } + } + + return false; + } + + /* + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + int low= fDocument !is null ? fDocument.hashCode() : 0; + return (fOffset << 24) | (fLength << 16) | low; + } +} +