diff options
author | Christoph Caks | 2016-08-26 12:48:44 +0000 |
---|---|---|
committer | Christoph Caks | 2016-08-26 12:54:15 +0000 |
commit | 8b9e09148076ef1d49a8857994eea82e3d5ca9a1 (patch) | |
tree | 2089da6f2fc13137d79973b9caec6ca3d6081a92 | |
parent | 0d3b5dbce156dbad17687e532ab1a6b48ddcac4e (diff) | |
download | org.eclipse.efxclipse-8b9e09148076ef1d49a8857994eea82e3d5ca9a1.tar.gz org.eclipse.efxclipse-8b9e09148076ef1d49a8857994eea82e3d5ca9a1.tar.xz org.eclipse.efxclipse-8b9e09148076ef1d49a8857994eea82e3d5ca9a1.zip |
refs #17
-rw-r--r-- | bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java index aacb245f5..c2e13b5d0 100644 --- a/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java +++ b/bundles/runtime/org.eclipse.fx.ui.controls/src/org/eclipse/fx/ui/controls/styledtext/skin/StyledTextSkin.java @@ -28,6 +28,7 @@ import org.eclipse.fx.ui.controls.styledtext.StyledTextArea.LineLocation; import org.eclipse.fx.ui.controls.styledtext.StyledTextContent.TextChangeListener; import org.eclipse.fx.ui.controls.styledtext.TextChangedEvent; import org.eclipse.fx.ui.controls.styledtext.TextChangingEvent; +import org.eclipse.fx.ui.controls.styledtext.TextSelection; import org.eclipse.fx.ui.controls.styledtext.behavior.StyledTextBehavior; import org.eclipse.fx.ui.controls.styledtext.internal.ContentView; import org.eclipse.fx.ui.controls.styledtext.internal.FXBindUtil; @@ -64,7 +65,9 @@ import javafx.scene.Node; import javafx.scene.control.SkinBase; import javafx.scene.control.TextInputDialog; import javafx.scene.input.ContextMenuEvent; +import javafx.scene.input.DataFormat; import javafx.scene.input.MouseEvent; +import javafx.scene.input.TransferMode; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.Region; @@ -417,6 +420,42 @@ public class StyledTextSkin extends SkinBase<StyledTextArea> { }); this.content.lineHeightProperty().bind(getSkinnable().fixedLineHeightProperty()); + + this.content.setOnDragOver(e -> { + Point2D coords = new Point2D(e.getX(), e.getY()); + Optional<Integer> lineIndex = content.getLineIndex(coords); + + if (lineIndex.isPresent()) { + if (lineIndex.get() != -1) { + e.acceptTransferModes(TransferMode.ANY); + updateInsertionMarkerIndex(lineIndex.get()); + } + } + else { + updateInsertionMarkerIndex(-1); + } + + e.consume(); + }); + + this.content.setOnDragDropped(e -> { + + if (e.getDragboard().hasContent(DataFormat.PLAIN_TEXT)) { + + String insert = e.getDragboard().getString(); + + Point2D coords = new Point2D(e.getX(), e.getY()); + Optional<Integer> lineIndex = content.getLineIndex(coords); + if (lineIndex.isPresent() && lineIndex.get() != -1) { + getSkinnable().getContent().replaceTextRange(lineIndex.get(), 0, insert); + getSkinnable().setCaretOffset(lineIndex.get() + insert.length()); + getSkinnable().setSelection(new TextSelection(lineIndex.get(), insert.length())); + updateInsertionMarkerIndex(-1); + e.setDropCompleted(true); + } + } + e.consume(); + }); } public Optional<TextNode> findTextNode(Point2D screenLocation) { |