+ */
+public class UndoRedoTest extends NbTestCase implements ChangeListener {
+ private int cnt;
+
+ public UndoRedoTest(String n) {
+ super(n);
+ }
+
+ public void testUndoDeliversChanges() {
+ UndoRedo.Manager ur = new UndoRedo.Manager();
+ doUndoRedoTest(ur);
+ }
+
+ public void testUndoDeliversChangesWithTooManyEdits() {
+ UndoRedo.Manager ur = new UndoRedo.Manager() {
+ @Override
+ public boolean canUndo() {
+ if (super.canUndo()) {
+ undoableEditHappened(new UndoableEditEvent(this, new MyEdit(true)));
+ }
+ return super.canUndo();
+ }
+ };
+ doUndoRedoTest(ur);
+ }
+
+ private void doUndoRedoTest(UndoRedo.Manager ur) {
+ assertFalse("Nothing to undo", ur.canUndo());
+ ur.addChangeListener(this);
+ MyEdit me = new MyEdit();
+ ur.undoableEditHappened(new UndoableEditEvent(this, me));
+ assertEquals("One change", 1, cnt);
+ assertTrue("Can undo now", ur.canUndo());
+ ur.undo();
+ assertFalse("Cannot undo", ur.canUndo());
+ assertEquals("Snd change", 2, cnt);
+
+ assertTrue("But redo", ur.canRedo());
+ ur.redo();
+ assertEquals("Third change", 3, cnt);
+ assertEquals("One undo", 1, me.undo);
+ assertEquals("One redo", 1, me.redo);
+ }
+
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ cnt++;
+ }
+ private static final class MyEdit implements UndoableEdit, PropertyChangeListener {
+ private int undo;
+ private int redo;
+ private int cnt;
+ private boolean ignore;
+
+ public MyEdit() {
+ this(false);
+ }
+
+ public MyEdit(boolean ignore) {
+ this.ignore = ignore;
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if ("enabled".equals(evt.getPropertyName())) {
+ cnt++;
+ }
+ }
+
+ @Override
+ public void undo() throws CannotUndoException {
+ undo++;
+ }
+
+ @Override
+ public boolean canUndo() {
+ return true;
+ }
+
+ @Override
+ public void redo() throws CannotRedoException {
+ redo++;
+ }
+
+ @Override
+ public boolean canRedo() {
+ return true;
+ }
+
+ @Override
+ public void die() {
+ }
+
+ @Override
+ public boolean addEdit(UndoableEdit anEdit) {
+ if (anEdit instanceof MyEdit && ((MyEdit)anEdit).ignore) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean replaceEdit(UndoableEdit anEdit) {
+ return false;
+ }
+
+ @Override
+ public boolean isSignificant() {
+ return true;
+ }
+
+ @Override
+ public String getPresentationName() {
+ return "My Edit";
+ }
+
+ @Override
+ public String getUndoPresentationName() {
+ return "My Undo";
+ }
+
+ @Override
+ public String getRedoPresentationName() {
+ return "My Redo";
+ }
+ }
+
+}
\ No newline at end of file
diff -r e97507293f86 openide.text/manifest.mf
--- a/openide.text/manifest.mf Mon Mar 22 11:22:31 2010 +0100
+++ b/openide.text/manifest.mf Mon Mar 22 11:41:18 2010 +0100
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
OpenIDE-Module: org.openide.text
OpenIDE-Module-Install: org/netbeans/modules/openide/text/Installer.class
-OpenIDE-Module-Specification-Version: 6.29
+OpenIDE-Module-Specification-Version: 6.30
OpenIDE-Module-Localizing-Bundle: org/openide/text/Bundle.properties
AutoUpdate-Essential-Module: true
diff -r e97507293f86 openide.text/src/org/openide/text/CloneableEditorSupport.java
--- a/openide.text/src/org/openide/text/CloneableEditorSupport.java Mon Mar 22 11:22:31 2010 +0100
+++ b/openide.text/src/org/openide/text/CloneableEditorSupport.java Mon Mar 22 11:41:18 2010 +0100
@@ -117,10 +117,13 @@
* but does not implement
* those interfaces. It is up to the subclass to decide which interfaces
* really implement and which not.
+ *
+ * Since 6.30 implements {@link UndoRedo#Provider}.
*
* @author Jaroslav Tulach
*/
-public abstract class CloneableEditorSupport extends CloneableOpenSupport {
+public abstract class CloneableEditorSupport extends CloneableOpenSupport
+implements UndoRedo.Provider {
private static final RequestProcessor RP = new RequestProcessor("org.openide.text Document Processing");
/** Common name for editor mode. */
@@ -340,10 +343,12 @@
}
/**
- * Gets the undo redo manager.
+ * Gets the undo redo manager. Made public since 6.30 as the class implements
+ * {@link UndoRedo#Provider}.
* @return the manager
*/
- protected final synchronized UndoRedo.Manager getUndoRedo() {
+ @Override
+ public final synchronized UndoRedo.Manager getUndoRedo() {
CloneableEditorSupport redirect = CloneableEditorSupportRedirector.findRedirect(this);
if (redirect != null) {
return redirect.getUndoRedo();
diff -r e97507293f86 openide.windows/manifest.mf
--- a/openide.windows/manifest.mf Mon Mar 22 11:22:31 2010 +0100
+++ b/openide.windows/manifest.mf Mon Mar 22 11:41:18 2010 +0100
@@ -1,6 +1,6 @@
Manifest-Version: 1.0
OpenIDE-Module: org.openide.windows
-OpenIDE-Module-Specification-Version: 6.32
+OpenIDE-Module-Specification-Version: 6.33
OpenIDE-Module-Localizing-Bundle: org/openide/windows/Bundle.properties
AutoUpdate-Essential-Module: true
diff -r e97507293f86 openide.windows/module-auto-deps.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openide.windows/module-auto-deps.xml Mon Mar 22 11:41:18 2010 +0100
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+ #180614: TopComponent implements UndoRedo.Provider
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r e97507293f86 openide.windows/src/org/openide/windows/TopComponent.java
--- a/openide.windows/src/org/openide/windows/TopComponent.java Mon Mar 22 11:22:31 2010 +0100
+++ b/openide.windows/src/org/openide/windows/TopComponent.java Mon Mar 22 11:41:18 2010 +0100
@@ -112,7 +112,7 @@
*
* @author Jaroslav Tulach, Petr Hamernik, Jan Jancura
*/
-public class TopComponent extends JComponent implements Externalizable, Accessible, HelpCtx.Provider, Lookup.Provider {
+public class TopComponent extends JComponent implements Externalizable, Accessible, HelpCtx.Provider, Lookup.Provider, UndoRedo.Provider {
/** UI logger to notify about invocation of an action */
private static Logger UILOG = Logger.getLogger("org.netbeans.ui.actions"); // NOI18N
/** generated Serialized Version UID */
diff -r e97507293f86 parsing.api/nbproject/project.xml
--- a/parsing.api/nbproject/project.xml Mon Mar 22 11:22:31 2010 +0100
+++ b/parsing.api/nbproject/project.xml Mon Mar 22 11:41:18 2010 +0100
@@ -141,6 +141,14 @@