From 841fec9a098b99de673f6b79d8072c7986e02efe Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Tue, 16 Jun 2015 10:49:53 +0200 Subject: * fixed c&p when not editable * fixed IAE when calling setText("") --- .../fx/ui/controls/styledtext/DefaultContent.java | 2 +- .../fx/ui/controls/styledtext/StyledTextArea.java | 27 ++++++++++++++-------- .../styledtext/behavior/StyledTextBehavior.java | 13 +++++------ 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/DefaultContent.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/DefaultContent.java index cd75199fc..adf665289 100644 --- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/DefaultContent.java +++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/DefaultContent.java @@ -907,7 +907,7 @@ class DefaultContent implements StyledTextContent { TextChangedEvent textSet = TextChangedEvent.textSet(this); for (TextChangeListener l : this.textListeners) { - l.textChanged(textSet); + l.textSet(textSet); } } diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/StyledTextArea.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/StyledTextArea.java index bbc84daf0..f76c37da4 100644 --- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/StyledTextArea.java +++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/StyledTextArea.java @@ -130,15 +130,15 @@ public class StyledTextArea extends Control { private int lastTextChangeStart; - private int lastTextChangeNewLineCount; +// private int lastTextChangeNewLineCount; private int lastTextChangeNewCharCount; - private int lastTextChangeReplaceLineCount; +// private int lastTextChangeReplaceLineCount; private int lastTextChangeReplaceCharCount; - private int lastCharCount; +// private int lastCharCount; /** * Create a new control @@ -158,14 +158,15 @@ public class StyledTextArea extends Control { // } void handleTextChanging(TextChangingEvent event) { + System.err.println("CHANGING: " + event); if (event.replaceCharCount < 0) { event.offset += event.replaceCharCount; event.replaceCharCount *= -1; } this.lastTextChangeStart = event.offset; - this.lastTextChangeNewLineCount = event.newLineCount; +// this.lastTextChangeNewLineCount = event.newLineCount; this.lastTextChangeNewCharCount = event.newCharCount; - this.lastTextChangeReplaceLineCount = event.replaceLineCount; +// this.lastTextChangeReplaceLineCount = event.replaceLineCount; this.lastTextChangeReplaceCharCount = event.replaceCharCount; this.renderer.textChanging(event); @@ -180,20 +181,27 @@ public class StyledTextArea extends Control { void handleTextSet(TextChangedEvent event) { int newCharCount = getCharCount(); - this.lastCharCount = newCharCount; +// this.lastCharCount = newCharCount; + if( this.caretOffsetProperty.get() > newCharCount ) { + setSelection(new TextSelection(newCharCount, 0)); + } + + if (getSkin() instanceof StyledTextSkin) { + ((StyledTextSkin) getSkin()).recalculateItems(); + } } void handleTextChanged(TextChangedEvent event) { // int firstLine = getContent().getLineAtOffset(lastTextChangeStart); - + if (getSkin() instanceof StyledTextSkin) { ((StyledTextSkin) getSkin()).recalculateItems(); } updateSelection(this.lastTextChangeStart, this.lastTextChangeReplaceCharCount, this.lastTextChangeNewCharCount); - this.lastCharCount += this.lastTextChangeNewCharCount; - this.lastCharCount -= this.lastTextChangeReplaceCharCount; +// this.lastCharCount += this.lastTextChangeNewCharCount; +// this.lastCharCount -= this.lastTextChangeReplaceCharCount; } void updateSelection(int startOffset, int replacedLength, int newLength) { @@ -1390,6 +1398,7 @@ public class StyledTextArea extends Control { */ public void setSelection(@NonNull TextSelection selection) { if (selection.length == 0) { + System.err.println("SETTING OFFSET: " + selection.offset); setCaretOffset(selection.offset); } else { // this.caretOffsetProperty.set(selection.offset+selection.length); diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java index 2de97ba55..b8198ded0 100644 --- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java +++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/behavior/StyledTextBehavior.java @@ -261,14 +261,13 @@ public class StyledTextBehavior extends BehaviorBase { break; } } - case C: - if( getControl().getEditable() ) { - if( event.isShortcutDown() ) { - getControl().copy(); - event.consume(); - break; - } + case C: { + if( event.isShortcutDown() ) { + getControl().copy(); + event.consume(); + break; } + } default: if( getControl().getEditable() ) { String text = event.getText(); -- cgit v1.2.3