From c6d6641aed4b0cfe4ceffdb46172bf94e6593974 Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Wed, 15 Dec 2010 10:25:32 +0300 Subject: [PATCH] IDEA-62589 Soft wraps: the caret is shown in a position where nothing can be actually typed 1. Performing 'soft wrap -> hard wrap' conversion if user starts typing in soft wrap-introduced virtual space; 2. Corresponding test is added; --- .../editor/impl/SoftWrapModelImpl.java | 13 ++++---- ...apApplianceOnDocumentModificationTest.java | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java index 7799c6888ebe..af88b5231bd8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java @@ -446,11 +446,14 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi if (!isInsideSoftWrap(visualCaretPosition)) { return; } - //TODO den implement - //if (myDocumentChangeManager.makeHardWrap(caretModel.getOffset())) { - // // Restore caret position. - // caretModel.moveToVisualPosition(visualCaretPosition); - //} + + SoftWrap softWrap = myStorage.getSoftWrap(caretModel.getOffset()); + if (softWrap == null) { + return; + } + + myEditor.getDocument().replaceString(softWrap.getStart(), softWrap.getEnd(), softWrap.getText()); + caretModel.moveToVisualPosition(visualCaretPosition); } @Override diff --git a/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java b/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java index f051b7849536..d7d990ba6573 100644 --- a/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java +++ b/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceOnDocumentModificationTest.java @@ -538,6 +538,36 @@ public class SoftWrapApplianceOnDocumentModificationTest extends AbstractEditorP assertEquals(expectedVisualLine, caretModel.getVisualPosition().line); } + public void testSoftWrapToHardWrapConversion() throws IOException { + String text = + "this is line 1\n" + + "this is line 2\n" + + "this is line 3\n" + + "this is line 4\n" + + "this is line 5"; + + init(50, text); + VisualPosition changePosition = new VisualPosition(1, 0); + myEditor.getCaretModel().moveToVisualPosition(changePosition); + + int logicalLinesBefore = myEditor.offsetToLogicalPosition(text.length()).line; + int offsetBefore = myEditor.getCaretModel().getOffset(); + + LogicalPosition logicalPositionBefore = myEditor.visualToLogicalPosition(changePosition); + assertEquals(1, logicalPositionBefore.softWrapLinesOnCurrentLogicalLine); + assertTrue(logicalPositionBefore.column > 0); + + SoftWrap softWrap = getSoftWrapModel().getSoftWrap(offsetBefore); + assertNotNull(softWrap); + + type('a'); + + LogicalPosition logicalPositionAfter = myEditor.visualToLogicalPosition(changePosition); + assertEquals(new LogicalPosition(1, 0, 0, 0, 0, 0, 0), logicalPositionAfter); + assertEquals(offsetBefore + softWrap.getText().length() + 1, myEditor.getCaretModel().getOffset()); + assertEquals(logicalLinesBefore + 1, myEditor.offsetToLogicalPosition(text.length()).line); + } + //public void testPastingInsideSelection() throws IOException { // String text = // "this is line number 0\n" +