diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java index 4bcd68ec4c3aa8d68b27c321a290da8534c4bbb2..80074f0e77deafaff3d7003b996e9a17cd7a984d 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java @@ -20,6 +20,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.text.IUndoManager; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; @@ -56,7 +57,7 @@ public abstract class AbstractTextPanelEditor imp private IValueController valueController; private IEditorSite subSite; - private BaseTextEditor editor; + private EDITOR editor; @Override public StyledText createControl(IValueController valueController) { @@ -77,7 +78,7 @@ public abstract class AbstractTextPanelEditor imp return editor.getEditorControl(); } - protected abstract BaseTextEditor createEditorParty(IValueController valueController); + protected abstract EDITOR createEditorParty(IValueController valueController); @Override public void contributeActions(@NotNull IContributionManager manager, @NotNull final StyledText control) throws DBCException { @@ -117,18 +118,18 @@ public abstract class AbstractTextPanelEditor imp } } - protected BaseTextEditor getTextEditor() { + protected EDITOR getTextEditor() { return editor; } - protected void initEditorSettings(StyledText control) { + private void initEditorSettings(StyledText control) { boolean wwEnabled = ValueViewerPanel.getPanelSettings().getBoolean(PREF_TEXT_EDITOR_WORD_WRAP); if (wwEnabled != control.getWordWrap()) { control.setWordWrap(wwEnabled); } } - protected void applyEditorStyle() { + private void applyEditorStyle() { BaseTextEditor textEditor = getTextEditor(); if (textEditor != null && ValueViewerPanel.getPanelSettings().getBoolean(PREF_TEXT_EDITOR_AUTO_FORMAT)) { try { @@ -146,6 +147,9 @@ public abstract class AbstractTextPanelEditor imp if (adapter.isAssignableFrom(textEditor.getClass())) { return adapter.cast(textEditor); } + if (adapter == IUndoManager.class) { + return adapter.cast(textEditor.getTextViewer().getUndoManager()); + } return textEditor.getAdapter(adapter); } return null; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java index 53005e5bc998f04633c74e47447727a0a4b980b7..839920a39554c8f3f6f8e8fff1ce1bd39265ec1e 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java @@ -22,10 +22,10 @@ import org.jkiss.dbeaver.ui.editors.text.BaseTextEditor; /** * TextPanelEditor */ -public class TextPanelEditor extends AbstractTextPanelEditor { +public class TextPanelEditor extends AbstractTextPanelEditor { @Override - protected BaseTextEditor createEditorParty(IValueController valueController) { + protected TextEditorPart createEditorParty(IValueController valueController) { return new TextEditorPart(); } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java index cff2dcbeb77d9cd8231f83b5da5f17115b9db06c..d1e46fed1d73c191be2f6bafafd4cea7a7bf46a6 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java @@ -26,7 +26,7 @@ import org.jkiss.dbeaver.ui.editors.xml.XMLEditor; public class XMLPanelEditor extends AbstractTextPanelEditor { @Override - protected BaseTextEditor createEditorParty(IValueController valueController) { + protected XMLEditor createEditorParty(IValueController valueController) { return new XMLEditor(); } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java index 50716018988c871e76dd5070c8c29f0f363468b2..0e8928fd7cc57f71fb27a5bc2c336671095254eb 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java @@ -20,6 +20,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.text.IUndoManager; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -371,33 +372,42 @@ public class EntityEditor extends MultiPageDatabaseEditor public void undoChanges() { - DBECommandContext commandContext = getCommandContext(); - if (commandContext != null && commandContext.getUndoCommand() != null) { - if (!getDatabaseObject().isPersisted() && commandContext.getUndoCommands().size() == 1) { - //getSite().getPage().closeEditor(this, true); - //return; - // Undo of last command in command context will close editor - // Let's ask user about it - if (ConfirmationDialog.showConfirmDialog( - null, - DBeaverPreferences.CONFIRM_ENTITY_REJECT, - ConfirmationDialog.QUESTION, - getDatabaseObject().getName()) != IDialogConstants.YES_ID) - { - return; + IUndoManager undoManager = getAdapter(IUndoManager.class); + if (undoManager != null) { + undoManager.undo(); + } else { + DBECommandContext commandContext = getCommandContext(); + if (commandContext != null && commandContext.getUndoCommand() != null) { + if (!getDatabaseObject().isPersisted() && commandContext.getUndoCommands().size() == 1) { + //getSite().getPage().closeEditor(this, true); + //return; + // Undo of last command in command context will close editor + // Let's ask user about it + if (ConfirmationDialog.showConfirmDialog( + null, + DBeaverPreferences.CONFIRM_ENTITY_REJECT, + ConfirmationDialog.QUESTION, + getDatabaseObject().getName()) != IDialogConstants.YES_ID) { + return; + } } + commandContext.undoCommand(); + firePropertyChange(IEditorPart.PROP_DIRTY); } - commandContext.undoCommand(); - firePropertyChange(IEditorPart.PROP_DIRTY); } } public void redoChanges() { - DBECommandContext commandContext = getCommandContext(); - if (commandContext != null && commandContext.getRedoCommand() != null) { - commandContext.redoCommand(); - firePropertyChange(IEditorPart.PROP_DIRTY); + IUndoManager undoManager = getAdapter(IUndoManager.class); + if (undoManager != null) { + undoManager.redo(); + } else { + DBECommandContext commandContext = getCommandContext(); + if (commandContext != null && commandContext.getRedoCommand() != null) { + commandContext.redoCommand(); + firePropertyChange(IEditorPart.PROP_DIRTY); + } } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditorPropertyTester.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditorPropertyTester.java index 1b7db275b3b5a8184efad89cfa6269b7fe4a6c0a..f46f155cd1a7ce2385506edfc764a9f4b0170650 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditorPropertyTester.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditorPropertyTester.java @@ -17,6 +17,7 @@ package org.jkiss.dbeaver.ui.editors.entity; import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.jface.text.IUndoManager; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.ui.ActionUtils; @@ -43,15 +44,27 @@ public class EntityEditorPropertyTester extends PropertyTester return false; } EntityEditor editor = (EntityEditor)receiver; - DBECommandContext commandContext = editor.getEditorInput().getCommandContext(); - if (commandContext != null) { + if (PROP_DIRTY.equals(property)) { + return editor.isDirty(); + } + + IUndoManager undoManager = editor.getAdapter(IUndoManager.class); + if (undoManager != null) { switch (property) { case PROP_CAN_UNDO: - return commandContext.getUndoCommand() != null; + return undoManager.undoable(); case PROP_CAN_REDO: - return commandContext.getRedoCommand() != null; - case PROP_DIRTY: - return editor.isDirty(); + return undoManager.redoable(); + } + } else { + DBECommandContext commandContext = editor.getEditorInput().getCommandContext(); + if (commandContext != null) { + switch (property) { + case PROP_CAN_UNDO: + return commandContext.getUndoCommand() != null; + case PROP_CAN_REDO: + return commandContext.getRedoCommand() != null; + } } }