X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Felement%2Fhandler%2Fimpl%2FTextEditorImpl.java;h=8201f49527e3f9098f63761a08bbe0a532b6462c;hb=68494955c9ee84aa894508b9f954ae16cfccce53;hp=90239c398f7a7a8101f59cd2ca7f3525cf6cf4ac;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/TextEditorImpl.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/TextEditorImpl.java index 90239c398..8201f4952 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/TextEditorImpl.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/TextEditorImpl.java @@ -1,117 +1,117 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * 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: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.g2d.element.handler.impl; - -import org.simantics.g2d.element.ElementUtils; -import org.simantics.g2d.element.IElement; -import org.simantics.g2d.element.handler.TextEditor; -import org.simantics.g2d.utils.TextSegment; -import org.simantics.utils.datastructures.hints.IHintContext.Key; -import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; - -public class TextEditorImpl implements TextEditor { - - private static final long serialVersionUID = 7183657432363119779L; - - public static final TextEditor INSTANCE = new TextEditorImpl(); - - public static final Key ACTIVE = new KeyOf(Boolean.class, "TEXT_EDITOR_ACTIVE"); - public static final Key TEXT = new KeyOf(String.class, "TEXT_EDIT_TEXT"); - public static final Key MODIFIER = new KeyOf(Modifier.class, "TEXT_MODIFIER"); - public static final Key TEXT_SELECTION = new KeyOf(TextSegment.class, "TEXT_SELECTION"); - public static final Key CARET_POS = new KeyOf(Integer.class, "CARET_POS"); - - @Override - public boolean isActive(IElement e) { - return ElementUtils.getHintOrDefault(e, ACTIVE, Boolean.FALSE); - } - - @Override - public void setActive(IElement e, boolean value) { - ElementUtils.setOrRemoveHint(e, ACTIVE, value ? Boolean.TRUE : null); - if (!value) { - e.removeHint(CARET_POS); - } - } - - @Override - public String getText(IElement e) { - return e.getHint(TEXT); - } - - @Override - public void setText(IElement e, String text) { - ElementUtils.setOrRemoveHint(e, TEXT, text); - } - - @Override - public Modifier getModifier(IElement e) { - return e.getHint(MODIFIER); - } - - @Override - public void setModifier(IElement e, org.simantics.g2d.element.handler.TextEditor.Modifier modifier) { - ElementUtils.setOrRemoveHint(e, MODIFIER, modifier); - } - - @Override - public Integer getCaretPosition(IElement e) { - Integer pos = e.getHint(CARET_POS); - return pos; - } - - @Override - public TextSegment getSelection(IElement e) { - return e.getHint(TEXT_SELECTION); - } - - private static boolean isValidCaretPosition(String s, int pos) { - int l = s.length(); - return pos >= 0 && pos <= l; - } - - private static void assertValidCaretPosition(String s, int pos) { - boolean valid = isValidCaretPosition(s, pos); - if (!valid) - throw new IllegalArgumentException("caret position " + pos + " is out of bounds in text '" + s + "'"); - } - - @Override - public void setCaretPosition(IElement e, Integer position) { - if (position == null) { - e.removeHint(CARET_POS); - } else { - String text = getText(e); - Integer old = e.getHint(CARET_POS); - if (position.equals(old)) - return; - assertValidCaretPosition(text, position); - e.setHint(CARET_POS, position); - } - } - - @Override - public void setSelection(IElement e, TextSegment segment) { - if (segment == null) { - e.removeHint(TEXT_SELECTION); - } else { - String text = getText(e); - TextSegment old = e.getHint(TEXT_SELECTION); - if (segment.equals(old)) - return; - if (!segment.existsIn(text)) - throw new IllegalArgumentException("segment " + segment + " does not exist in text '" + text + "'"); - e.setHint(TEXT_SELECTION, segment); - } - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * 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: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.g2d.element.handler.impl; + +import org.simantics.g2d.element.ElementUtils; +import org.simantics.g2d.element.IElement; +import org.simantics.g2d.element.handler.TextEditor; +import org.simantics.g2d.utils.TextSegment; +import org.simantics.utils.datastructures.hints.IHintContext.Key; +import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; + +public class TextEditorImpl implements TextEditor { + + private static final long serialVersionUID = 7183657432363119779L; + + public static final TextEditor INSTANCE = new TextEditorImpl(); + + public static final Key ACTIVE = new KeyOf(Boolean.class, "TEXT_EDITOR_ACTIVE"); + public static final Key TEXT = new KeyOf(String.class, "TEXT_EDIT_TEXT"); + public static final Key MODIFIER = new KeyOf(Modifier.class, "TEXT_MODIFIER"); + public static final Key TEXT_SELECTION = new KeyOf(TextSegment.class, "TEXT_SELECTION"); + public static final Key CARET_POS = new KeyOf(Integer.class, "CARET_POS"); + + @Override + public boolean isActive(IElement e) { + return ElementUtils.getHintOrDefault(e, ACTIVE, Boolean.FALSE); + } + + @Override + public void setActive(IElement e, boolean value) { + ElementUtils.setOrRemoveHint(e, ACTIVE, value ? Boolean.TRUE : null); + if (!value) { + e.removeHint(CARET_POS); + } + } + + @Override + public String getText(IElement e) { + return e.getHint(TEXT); + } + + @Override + public void setText(IElement e, String text) { + ElementUtils.setOrRemoveHint(e, TEXT, text); + } + + @Override + public Modifier getModifier(IElement e) { + return e.getHint(MODIFIER); + } + + @Override + public void setModifier(IElement e, org.simantics.g2d.element.handler.TextEditor.Modifier modifier) { + ElementUtils.setOrRemoveHint(e, MODIFIER, modifier); + } + + @Override + public Integer getCaretPosition(IElement e) { + Integer pos = e.getHint(CARET_POS); + return pos; + } + + @Override + public TextSegment getSelection(IElement e) { + return e.getHint(TEXT_SELECTION); + } + + private static boolean isValidCaretPosition(String s, int pos) { + int l = s.length(); + return pos >= 0 && pos <= l; + } + + private static void assertValidCaretPosition(String s, int pos) { + boolean valid = isValidCaretPosition(s, pos); + if (!valid) + throw new IllegalArgumentException("caret position " + pos + " is out of bounds in text '" + s + "'"); + } + + @Override + public void setCaretPosition(IElement e, Integer position) { + if (position == null) { + e.removeHint(CARET_POS); + } else { + String text = getText(e); + Integer old = e.getHint(CARET_POS); + if (position.equals(old)) + return; + assertValidCaretPosition(text, position); + e.setHint(CARET_POS, position); + } + } + + @Override + public void setSelection(IElement e, TextSegment segment) { + if (segment == null) { + e.removeHint(TEXT_SELECTION); + } else { + String text = getText(e); + TextSegment old = e.getHint(TEXT_SELECTION); + if (segment.equals(old)) + return; + if (!segment.existsIn(text)) + throw new IllegalArgumentException("segment " + segment + " does not exist in text '" + text + "'"); + e.setHint(TEXT_SELECTION, segment); + } + } + +}