From cfcf76023688d9613ee43db0a97449125bc26440 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Wed, 24 Dec 2014 13:15:56 +0300 Subject: [PATCH] Ipython Notebook: fixed cell movement for cells with the same text There is no need to replace the whole document if text in cells were the same. We should explicitly add synchronize request because document is not modified. --- .../ipnb/editor/actions/IpnbMoveCellDownAction.java | 1 - .../ipnb/editor/actions/IpnbMoveCellUpAction.java | 1 - .../plugins/ipnb/editor/panels/IpnbFilePanel.java | 9 ++++++++- .../org/jetbrains/plugins/ipnb/format/IpnbParser.java | 2 ++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java index 924891372ce5..123cfb46e7d1 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java @@ -24,7 +24,6 @@ public class IpnbMoveCellDownAction extends AnAction { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { ipnbFilePanel.moveCell(true); - ipnbFilePanel.saveToFile(); } }); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java index e3df036a5040..026e663d3a00 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java @@ -24,7 +24,6 @@ public class IpnbMoveCellUpAction extends AnAction { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { ipnbFilePanel.moveCell(false); - ipnbFilePanel.saveToFile(); } }); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 0de2d5795688..77922d5ac5f7 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -224,6 +224,8 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D addCell(siblingPanel, true); setSelectedCell(selectedCell); } + saveToFile(); + } public void deleteSelectedCell() { @@ -248,6 +250,11 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D public void saveToFile() { final String oldText = myDocument.getText(); final String newText = IpnbParser.newDocumentText(this); + if (newText == null) return; + if (oldText.equals(newText)) { + new Alarm().addRequest(new MySynchronizeRequest(), 10, ModalityState.stateForComponent(this)); + return; + } try { final ReplaceInfo replaceInfo = findFragmentToChange(oldText, newText); if (replaceInfo.getStartOffset() != -1) { @@ -283,7 +290,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider, D } } - public static ReplaceInfo findFragmentToChange(final String oldText, final String newText) { + public static ReplaceInfo findFragmentToChange(@NotNull final String oldText, @NotNull final String newText) { if (oldText.equals(newText)) { return new ReplaceInfo(-1, -1, null); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java index d6b66beda5ec..b9c48ebfe8ab 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java @@ -9,6 +9,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; import org.jetbrains.plugins.ipnb.format.cells.*; @@ -66,6 +67,7 @@ public class IpnbParser { writeToFile(ipnbPanel.getIpnbFile().getPath(), json); } + @Nullable public static String newDocumentText(@NotNull final IpnbFilePanel ipnbPanel) { final IpnbFile ipnbFile = ipnbPanel.getIpnbFile(); if (ipnbFile == null) return null;