Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Ratz2017-07-10 09:29:45 +0000
committerSebastian Ratz2017-11-15 17:08:01 +0000
commit6758b1974631342370488a9a781e6b30b528c5ae (patch)
tree0dbf862d1a9f1acab588ed729d3cc349e280d910
parent4e9bd88ff6da2d59ca521a78e1ee397cc1ebcfd8 (diff)
downloadeclipse.platform.text-6758b1974631342370488a9a781e6b30b528c5ae.tar.gz
eclipse.platform.text-6758b1974631342370488a9a781e6b30b528c5ae.tar.xz
eclipse.platform.text-6758b1974631342370488a9a781e6b30b528c5ae.zip
Bug 518939 - Fix text zoom enablement in multi page editorsI20171119-2000I20171118-1500I20171117-2000I20171116-2000I20171115-2000
Change-Id: I2b13a98af986419a38b63043aa680b3e8d628fd2 Signed-off-by: Sebastian Ratz <sebastian.ratz@sap.com>
-rw-r--r--org.eclipse.ui.workbench.texteditor.tests/META-INF/MANIFEST.MF5
-rw-r--r--org.eclipse.ui.workbench.texteditor.tests/pom.xml2
-rw-r--r--org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/AbstractTextZoomHandlerTest.java231
-rw-r--r--org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/WorkbenchTextEditorTestSuite.java3
-rw-r--r--org.eclipse.ui.workbench.texteditor/plugin.xml14
-rw-r--r--org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextZoomHandler.java20
6 files changed, 253 insertions, 22 deletions
diff --git a/org.eclipse.ui.workbench.texteditor.tests/META-INF/MANIFEST.MF b/org.eclipse.ui.workbench.texteditor.tests/META-INF/MANIFEST.MF
index 4a1e176ec..6df2e3b71 100644
--- a/org.eclipse.ui.workbench.texteditor.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.ui.workbench.texteditor.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui.workbench.texteditor.tests
-Bundle-Version: 3.11.100.qualifier
+Bundle-Version: 3.12.0.qualifier
Bundle-Vendor: %Plugin.providerName
Bundle-Localization: plugin
Export-Package:
@@ -15,6 +15,7 @@ Require-Bundle:
org.eclipse.ui.workbench.texteditor;bundle-version="[3.5.0,4.0.0)",
org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
org.junit;bundle-version="4.12.0",
- org.eclipse.text.tests;bundle-version="[3.5.0,4.0.0)"
+ org.eclipse.text.tests;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.5.0,4.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Eclipse-BundleShape: dir
diff --git a/org.eclipse.ui.workbench.texteditor.tests/pom.xml b/org.eclipse.ui.workbench.texteditor.tests/pom.xml
index a8128a687..a2a8006e8 100644
--- a/org.eclipse.ui.workbench.texteditor.tests/pom.xml
+++ b/org.eclipse.ui.workbench.texteditor.tests/pom.xml
@@ -19,7 +19,7 @@
</parent>
<groupId>org.eclipse.ui</groupId>
<artifactId>org.eclipse.ui.workbench.texteditor.tests</artifactId>
- <version>3.11.100-SNAPSHOT</version>
+ <version>3.12.0-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>
<properties>
<testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/AbstractTextZoomHandlerTest.java b/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/AbstractTextZoomHandlerTest.java
new file mode 100644
index 000000000..f8e0fba49
--- /dev/null
+++ b/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/AbstractTextZoomHandlerTest.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2017 SAP SE and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * SAP SE - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.workbench.texteditor.tests;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.core.expressions.EvaluationContext;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.ISources;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.AbstractMultiEditor;
+import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+import org.eclipse.ui.texteditor.TextZoomInHandler;
+
+public class AbstractTextZoomHandlerTest {
+
+ @Test
+ public void textZoomIsSupportedForAbstractTextEditor() {
+ IEditorPart part= new TestAbstractTextEditor();
+
+ assertZoomSupported(part, true);
+ }
+
+ @Test
+ public void textZoomIsNotSupportedForNonTextEditor() {
+ IEditorPart part= new TestNonTextEditor();
+
+ assertZoomSupported(part, false);
+ }
+
+ @Test
+ public void textZoomIsSupportedForMultiPageEditorPartWithAbstractTextEditorPage() {
+ EditorPart part= new TestMultiPageEditorPart(new TestAbstractTextEditor());
+
+ assertZoomSupported(part, true);
+ }
+
+ @Test
+ public void textZoomIsNotSupportedForMultiPageEditorPartWithNonTextPage() {
+ EditorPart part= new TestMultiPageEditorPart(new TestNonTextEditor());
+
+ assertZoomSupported(part, false);
+ }
+
+ @Test
+ public void textZoomIsSupportedForMultiEditorWithTextPage() {
+ EditorPart part= new TestMultiEditor(new TestAbstractTextEditor());
+
+ assertZoomSupported(part, true);
+ }
+
+ @Test
+ public void textZoomIsNotSupportedForMultiEditorWithNonTextPage() {
+ EditorPart part= new TestMultiEditor(new TestNonTextEditor());
+
+ assertZoomSupported(part, false);
+ }
+
+ @Test
+ public void textZoomIsSupportedForAdaptableToAbstractTextEditor() {
+ IEditorPart part= new TestAdaptableToAbstractTestEditor();
+
+ assertZoomSupported(part, true);
+ }
+
+ @Test
+ public void textZoomIsNotSupportedForGenericObject() {
+ assertZoomSupported(new Object(), false);
+ }
+
+ private void assertZoomSupported(Object receiver, boolean expectedEnabled) {
+ TextZoomInHandler textZoomHandler= new TextZoomInHandler();
+
+ EvaluationContext evaluationContext= new EvaluationContext(null, new Object());
+ evaluationContext.addVariable(ISources.ACTIVE_EDITOR_NAME, receiver);
+
+ textZoomHandler.setEnabled(evaluationContext);
+
+ boolean actualEnabled= textZoomHandler.isEnabled();
+
+ assertEquals(expectedEnabled, actualEnabled);
+ }
+
+ private static class TestAbstractTextEditor extends AbstractTextEditor {
+
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException { //
+ }
+ }
+
+ private static class TestNonTextEditor extends EditorPart {
+
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) { //
+ }
+
+ @Override
+ public void doSaveAs() { //
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException { //
+ }
+
+ @Override
+ public boolean isDirty() { //
+ return false;
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() { //
+ return false;
+ }
+
+ @Override
+ public void createPartControl(Composite parent) { //
+ }
+
+ @Override
+ public void setFocus() { //
+ }
+ }
+
+ private static class TestAdaptableToAbstractTestEditor extends TestNonTextEditor {
+
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ if (adapter == AbstractTextEditor.class) {
+ return adapter.cast(new TestAbstractTextEditor());
+ }
+ return null;
+ }
+ }
+
+ private static class TestMultiEditor extends AbstractMultiEditor {
+
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ public TestMultiEditor(IEditorPart child) {
+ setChildren(new IEditorPart[] { child });
+ }
+
+ @Override
+ public void createPartControl(Composite parent) { //
+ }
+
+ @Override
+ protected void innerEditorsCreated() { //
+ }
+
+ @Override
+ public Composite getInnerEditorContainer(IEditorReference innerEditorReference) {
+ return null;
+ }
+ }
+
+ private static class TestMultiPageEditorPart extends MultiPageEditorPart {
+
+ private IEditorPart child;
+
+ public TestMultiPageEditorPart(IEditorPart child) {
+ this.child= child;
+ }
+
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ @Override
+ public void doSaveAs() { //
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) { //
+ }
+
+ @Override
+ protected void createPages() { //
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException { //
+ }
+
+ @Override
+ public Object getSelectedPage() {
+ return child;
+ }
+ }
+
+}
diff --git a/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/WorkbenchTextEditorTestSuite.java b/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/WorkbenchTextEditorTestSuite.java
index ec8d26677..7c3a171f1 100644
--- a/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/WorkbenchTextEditorTestSuite.java
+++ b/org.eclipse.ui.workbench.texteditor.tests/src/org/eclipse/ui/workbench/texteditor/tests/WorkbenchTextEditorTestSuite.java
@@ -33,7 +33,8 @@ import org.eclipse.ui.workbench.texteditor.tests.rulers.RulerTestSuite;
ChangeRegionTest.class,
RulerTestSuite.class,
HunkComputerTest.class,
- ScreenshotTest.class
+ ScreenshotTest.class,
+ AbstractTextZoomHandlerTest.class
})
public class WorkbenchTextEditorTestSuite {
// see @SuiteClasses
diff --git a/org.eclipse.ui.workbench.texteditor/plugin.xml b/org.eclipse.ui.workbench.texteditor/plugin.xml
index 7316269fb..c5b9c212c 100644
--- a/org.eclipse.ui.workbench.texteditor/plugin.xml
+++ b/org.eclipse.ui.workbench.texteditor/plugin.xml
@@ -1308,24 +1308,10 @@
<handler
class="org.eclipse.ui.texteditor.TextZoomInHandler"
commandId="org.eclipse.ui.edit.text.zoomIn">
- <enabledWhen>
- <with variable="activePart">
- <instanceof
- value="org.eclipse.ui.texteditor.ITextEditor">
- </instanceof>
- </with>
- </enabledWhen>
</handler>
<handler
class="org.eclipse.ui.texteditor.TextZoomOutHandler"
commandId="org.eclipse.ui.edit.text.zoomOut">
- <enabledWhen>
- <with variable="activePart">
- <instanceof
- value="org.eclipse.ui.texteditor.ITextEditor">
- </instanceof>
- </with>
- </enabledWhen>
</handler>
</extension>
<extension
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextZoomHandler.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextZoomHandler.java
index d65e48989..d08250311 100644
--- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextZoomHandler.java
+++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextZoomHandler.java
@@ -22,6 +22,7 @@ import org.eclipse.swt.graphics.FontData;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
@@ -31,7 +32,8 @@ import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.ISources;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.part.AbstractMultiEditor;
import org.eclipse.ui.part.MultiPageEditorPart;
@@ -93,7 +95,10 @@ abstract class AbstractTextZoomHandler extends AbstractHandler {
}
private AbstractTextEditor getActiveTextEditor(ExecutionEvent event) {
- IWorkbenchPart part= HandlerUtil.getActiveEditor(event);
+ return getActiveTextEditor(HandlerUtil.getActiveEditor(event));
+ }
+
+ private AbstractTextEditor getActiveTextEditor(IEditorPart part) {
if (part instanceof AbstractTextEditor) {
return (AbstractTextEditor)part;
} else if ((part instanceof AbstractMultiEditor) && ((AbstractMultiEditor)part).getActiveEditor() instanceof AbstractTextEditor) {
@@ -105,8 +110,15 @@ abstract class AbstractTextZoomHandler extends AbstractHandler {
}
@Override
- public boolean isEnabled() {
- return true;
+ public void setEnabled(Object evaluationContext) {
+ boolean enabled = false;
+ if (evaluationContext instanceof IEvaluationContext) {
+ Object activeEditor = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_EDITOR_NAME);
+ if (activeEditor instanceof IEditorPart) {
+ enabled = getActiveTextEditor((IEditorPart) activeEditor) != null;
+ }
+ }
+ setBaseEnabled(enabled);
}
/**

Back to the top