Skip to content

Commit 5222f07

Browse files
committed
PDEX + PPS: make rename and undo work together
1 parent b7caa02 commit 5222f07

3 files changed

Lines changed: 28 additions & 17 deletions

File tree

app/src/processing/app/ui/Editor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2669,7 +2669,11 @@ public void prepareRun() {
26692669

26702670
// make sure any edits have been stored
26712671
//current.setProgram(editor.getText());
2672-
sketch.getCurrentCode().setProgram(getText());
2672+
for (SketchCode sc : sketch.getCode()) {
2673+
try {
2674+
sc.setProgram(sc.getDocumentText());
2675+
} catch (BadLocationException e) { }
2676+
}
26732677

26742678
// // if an external editor is being used, need to grab the
26752679
// // latest version of the code from the file.

java/src/processing/mode/java/pdex/PDEX.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,16 @@
5151
import javax.swing.JScrollPane;
5252
import javax.swing.JTextField;
5353
import javax.swing.JTree;
54+
import javax.swing.text.BadLocationException;
5455
import javax.swing.tree.DefaultMutableTreeNode;
5556
import javax.swing.tree.DefaultTreeCellRenderer;
5657
import javax.swing.tree.DefaultTreeModel;
5758
import javax.swing.tree.TreeModel;
5859

5960
import processing.app.Messages;
60-
import processing.app.Preferences;
6161
import processing.app.Sketch;
62+
import processing.app.SketchCode;
63+
import processing.app.syntax.SyntaxDocument;
6264
import processing.app.ui.EditorStatus;
6365
import processing.app.ui.Toolkit;
6466
import processing.mode.java.JavaEditor;
@@ -657,24 +659,33 @@ void rename(PreprocessedSketch ps, IBinding binding, String newName) {
657659
final int currentOffset = editor.getCaretOffset();
658660
mappedNodes.entrySet().forEach(entry -> {
659661
int tabIndex = entry.getKey();
660-
sketch.setCurrentCode(tabIndex);
662+
SketchCode sketchCode = sketch.getCode(tabIndex);
663+
664+
SyntaxDocument document = (SyntaxDocument) sketchCode.getDocument();
661665

662666
List<SketchInterval> nodes = entry.getValue();
663667
nodes.stream()
664668
// Replace from the end so all unprocess offsets stay valid
665669
.sorted(Comparator.comparing((SketchInterval si) -> si.startTabOffset).reversed())
666670
.forEach(si -> {
667671
// Make sure offsets are in bounds
668-
int length = editor.getTextArea().getDocumentLength();
669-
if (si.startTabOffset >= 0 && si.startTabOffset <= length &&
670-
si.stopTabOffset >= 0 && si.stopTabOffset <= length) {
672+
int documentLength = document.getLength();
673+
if (si.startTabOffset >= 0 && si.startTabOffset <= documentLength &&
674+
si.stopTabOffset >= 0 && si.stopTabOffset <= documentLength) {
671675
// Replace the code
672-
editor.getTextArea().select(si.startTabOffset, si.stopTabOffset);
673-
editor.getTextArea().setSelectedText(newName);
676+
int length = si.stopTabOffset - si.startTabOffset;
677+
try {
678+
document.remove(si.startTabOffset, length);
679+
document.insertString(si.startTabOffset, newName, null);
680+
} catch (BadLocationException e) { /* Whatever */ }
674681
}
675682
});
676683

677-
sketch.setModified(true);
684+
try {
685+
sketchCode.setProgram(document.getText(0, document.getLength()));
686+
} catch (BadLocationException e) { /* Whatever */ }
687+
sketchCode.setModified(true);
688+
editor.repaintHeader();
678689
});
679690

680691
int precedingIntervals =

java/src/processing/mode/java/pdex/PreprocessingService.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -261,14 +261,10 @@ private PreprocessedSketch preprocessSketch(PreprocessedSketch prevResult) {
261261
for (SketchCode sc : sketch.getCode()) {
262262
if (sc.isExtension("pde")) {
263263
tabStartsList.append(workBuffer.length());
264-
if (sketch.getCurrentCode().equals(sc)) {
265-
try {
266-
workBuffer.append(sc.getDocumentText());
267-
} catch (BadLocationException e) {
268-
e.printStackTrace();
269-
}
270-
} else {
271-
workBuffer.append(sc.getProgram());
264+
try {
265+
workBuffer.append(sc.getDocumentText());
266+
} catch (BadLocationException e) {
267+
e.printStackTrace();
272268
}
273269
workBuffer.append('\n');
274270
}

0 commit comments

Comments
 (0)