Added proper undo/redo support in the shader editor

experimental
Nehon 10 years ago
parent 7c88da9d5c
commit c310b933c9
  1. 5
      sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/MatDefDataObject.java
  2. 3
      sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/MatDefEditorlElement.java
  3. 9
      sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/ShaderEditPanel.java

@ -37,7 +37,6 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import java.io.IOException; import java.io.IOException;
import javax.swing.JEditorPane; import javax.swing.JEditorPane;
import javax.swing.text.EditorKit;
import org.netbeans.api.project.Project; import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectManager;
import org.netbeans.core.spi.multiview.MultiViewElement; import org.netbeans.core.spi.multiview.MultiViewElement;
@ -54,7 +53,6 @@ import org.openide.loaders.DataObject;
import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.DataObjectExistsException;
import org.openide.loaders.MultiDataObject; import org.openide.loaders.MultiDataObject;
import org.openide.loaders.MultiFileLoader; import org.openide.loaders.MultiFileLoader;
import org.openide.text.CloneableEditorSupport;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle.Messages; import org.openide.util.NbBundle.Messages;
import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.AbstractLookup;
@ -243,8 +241,7 @@ public class MatDefDataObject extends MultiDataObject {
obj.unload(); obj.unload();
} }
}; };
obj.getLookupContents().add(ed);
return ed; return ed;
} }

@ -69,6 +69,7 @@ import javax.swing.JToolBar;
import org.netbeans.core.spi.multiview.CloseOperationState; import org.netbeans.core.spi.multiview.CloseOperationState;
import org.netbeans.core.spi.multiview.MultiViewElement; import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.MultiViewElementCallback; import org.netbeans.core.spi.multiview.MultiViewElementCallback;
import org.netbeans.core.spi.multiview.text.MultiViewEditorElement;
import org.openide.awt.UndoRedo; import org.openide.awt.UndoRedo;
import org.openide.filesystems.FileObject; import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil; import org.openide.filesystems.FileUtil;
@ -433,7 +434,7 @@ public final class MatDefEditorlElement extends JPanel implements MultiViewEleme
@Override @Override
public UndoRedo getUndoRedo() { public UndoRedo getUndoRedo() {
return UndoRedo.NONE; return obj.getLookup().lookup(MultiViewEditorElement.class).getUndoRedo();
} }
@Override @Override

@ -16,6 +16,7 @@ import java.util.List;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JToggleButton; import javax.swing.JToggleButton;
import javax.swing.text.EditorKit; import javax.swing.text.EditorKit;
import org.openide.awt.UndoRedo;
import org.openide.cookies.EditorCookie; import org.openide.cookies.EditorCookie;
import org.openide.filesystems.FileLock; import org.openide.filesystems.FileLock;
import org.openide.filesystems.FileObject; import org.openide.filesystems.FileObject;
@ -32,6 +33,7 @@ public class ShaderEditPanel extends JPanel {
private DataObject currentDataObject = null; private DataObject currentDataObject = null;
private MatDefEditorlElement parent = null; private MatDefEditorlElement parent = null;
private UndoRedo.Manager undoRedoManager;
/** /**
* Creates new form ShaderEditPanel * Creates new form ShaderEditPanel
@ -61,6 +63,7 @@ public class ShaderEditPanel extends JPanel {
public void setParent(MatDefEditorlElement parent) { public void setParent(MatDefEditorlElement parent) {
this.parent = parent; this.parent = parent;
undoRedoManager = (UndoRedo.Manager)parent.getUndoRedo();
} }
public void setFiles(String title, NodePanel.NodeType type, List<FileObject> fos) { public void setFiles(String title, NodePanel.NodeType type, List<FileObject> fos) {
@ -85,6 +88,8 @@ public class ShaderEditPanel extends JPanel {
saveCurrent(); saveCurrent();
try { try {
shaderEditorPane.setDocument(b.dataObject.getLookup().lookup(EditorCookie.class).openDocument()); shaderEditorPane.setDocument(b.dataObject.getLookup().lookup(EditorCookie.class).openDocument());
undoRedoManager.discardAllEdits();
shaderEditorPane.getDocument().addUndoableEditListener(undoRedoManager);
} catch (IOException ex) { } catch (IOException ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} }
@ -94,6 +99,8 @@ public class ShaderEditPanel extends JPanel {
}); });
if (firstItem) { if (firstItem) {
shaderEditorPane.setDocument(b.dataObject.getLookup().lookup(EditorCookie.class).openDocument()); shaderEditorPane.setDocument(b.dataObject.getLookup().lookup(EditorCookie.class).openDocument());
undoRedoManager.discardAllEdits();
shaderEditorPane.getDocument().addUndoableEditListener(undoRedoManager);
currentDataObject = b.dataObject; currentDataObject = b.dataObject;
b.setSelected(true); b.setSelected(true);
firstItem = false; firstItem = false;
@ -224,7 +231,7 @@ public class ShaderEditPanel extends JPanel {
private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
setVisible(false); setVisible(false);
shaderEditorPane.getDocument().removeUndoableEditListener(undoRedoManager);
saveCurrent(); saveCurrent();

Loading…
Cancel
Save