Skip to content
Snippets Groups Projects
Commit 454ec493 authored by Florian Hölzl's avatar Florian Hölzl
Browse files

improved editor bindings and editor base implementation.

refs 335
parent 51f1f321
No related branches found
No related tags found
No related merge requests found
/*--------------------------------------------------------------------------+
$Id$
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ui.IEditorPart;
/**
* Kernel specific extension of Eclipse {@link IEditorPart}.
*
* @author hoelzl
* @author $Author$
* @version $Rev$
* @ConQAT.Rating RED Hash:
*/
public interface IModelEditor<T extends EObject> extends IEditorPart {
// FIXME (FH): define
/** Returns the edited object. */
T getEditedObject();
/** Sets the highlighting of the given model element to the given value. */
void setHighlight(EObject element, boolean highlighted);
/** Clears all highlightings from the editor. */
void clearAllHighlights();
}
...@@ -26,6 +26,7 @@ import org.eclipse.ui.IEditorSite; ...@@ -26,6 +26,7 @@ import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException; import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart; import org.eclipse.ui.part.EditorPart;
import org.fortiss.tooling.kernel.service.ICommandStackService; import org.fortiss.tooling.kernel.service.ICommandStackService;
import org.fortiss.tooling.kernel.ui.extension.IModelEditor;
import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding; import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler; import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.internal.editor.IActionContributingEditor; import org.fortiss.tooling.kernel.ui.internal.editor.IActionContributingEditor;
...@@ -41,7 +42,7 @@ import org.fortiss.tooling.kernel.ui.internal.editor.ModelElementEditorInput; ...@@ -41,7 +42,7 @@ import org.fortiss.tooling.kernel.ui.internal.editor.ModelElementEditorInput;
* @ConQAT.Rating RED Hash: 1F16F778F300E3605E648ABFB4EE1589 * @ConQAT.Rating RED Hash: 1F16F778F300E3605E648ABFB4EE1589
*/ */
public abstract class EditorBase<T extends EObject> extends EditorPart public abstract class EditorBase<T extends EObject> extends EditorPart
implements IActionContributingEditor { implements IActionContributingEditor, IModelEditor<T> {
/** /**
* The object shown in this editor. This is valid as soon as * The object shown in this editor. This is valid as soon as
...@@ -55,7 +56,8 @@ public abstract class EditorBase<T extends EObject> extends EditorPart ...@@ -55,7 +56,8 @@ public abstract class EditorBase<T extends EObject> extends EditorPart
/** Databinding context used for model changes. */ /** Databinding context used for model changes. */
protected final EMFDataBindingContext dbc = new EMFDataBindingContext(); protected final EMFDataBindingContext dbc = new EMFDataBindingContext();
/** Returns the edited object. */ /** {@inheritDoc} */
@Override
public T getEditedObject() { public T getEditedObject() {
return editedObject; return editedObject;
} }
...@@ -145,4 +147,16 @@ public abstract class EditorBase<T extends EObject> extends EditorPart ...@@ -145,4 +147,16 @@ public abstract class EditorBase<T extends EObject> extends EditorPart
public void setFocus() { public void setFocus() {
// nothing to do // nothing to do
} }
/** {@inheritDoc} */
@Override
public void setHighlight(EObject element, boolean highlighted) {
// nothing to do
}
/** {@inheritDoc} */
@Override
public void clearAllHighlights() {
// nothing to do
}
} }
...@@ -38,6 +38,7 @@ import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; ...@@ -38,6 +38,7 @@ import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.ICommandStackService; import org.fortiss.tooling.kernel.service.ICommandStackService;
import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.service.base.EObjectAwareServiceBase; import org.fortiss.tooling.kernel.service.base.EObjectAwareServiceBase;
import org.fortiss.tooling.kernel.ui.extension.IModelEditor;
import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding; import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding;
import org.fortiss.tooling.kernel.ui.internal.editor.ExtendableMultiPageEditor; import org.fortiss.tooling.kernel.ui.internal.editor.ExtendableMultiPageEditor;
import org.fortiss.tooling.kernel.ui.internal.editor.ModelElementEditorInput; import org.fortiss.tooling.kernel.ui.internal.editor.ModelElementEditorInput;
...@@ -51,7 +52,7 @@ import org.fortiss.tooling.kernel.utils.ModelElementUtils; ...@@ -51,7 +52,7 @@ import org.fortiss.tooling.kernel.utils.ModelElementUtils;
* @author hoelzl * @author hoelzl
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating RED Hash: 5544DDDB18F4389B85B35A1CAA58FD17 * @ConQAT.Rating YELLOW Hash: D719F4D54DBF1707B1BE0B6FEA65624A
*/ */
public class ModelEditorBindingService extends public class ModelEditorBindingService extends
EObjectAwareServiceBase<IModelEditorBinding<EObject>> implements EObjectAwareServiceBase<IModelEditorBinding<EObject>> implements
...@@ -229,4 +230,40 @@ public class ModelEditorBindingService extends ...@@ -229,4 +230,40 @@ public class ModelEditorBindingService extends
} }
} }
} }
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
public <T extends EObject, E extends IModelEditor<T>> E getOpenEditor(
T editedElement, Class<E> editorClass) {
for (IEditorPart part : currentEditors.keySet()) {
if (currentEditors.get(part) == editedElement) {
if (part instanceof ExtendableMultiPageEditor) {
E inner = ((ExtendableMultiPageEditor) part)
.getPageEditor(editorClass);
if (inner != null) {
return inner;
}
} else if (editorClass.isInstance(part)) {
return (E) part;
}
}
}
return null;
}
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
public IModelEditor<EObject> getActiveEditor() {
IEditorPart activeEditor = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if (activeEditor instanceof ExtendableMultiPageEditor) {
return ((ExtendableMultiPageEditor) activeEditor)
.getActiveModelEditor();
} else if (activeEditor instanceof IModelEditor) {
return (IModelEditor<EObject>) activeEditor;
}
return null;
}
} }
...@@ -43,6 +43,7 @@ import org.fortiss.tooling.kernel.ToolingKernelActivator; ...@@ -43,6 +43,7 @@ import org.fortiss.tooling.kernel.ToolingKernelActivator;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.ICommandStackService; import org.fortiss.tooling.kernel.service.ICommandStackService;
import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.extension.IModelEditor;
import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding; import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler; import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.listener.ExtendableMultiPageEditorPageChangeListener; import org.fortiss.tooling.kernel.ui.listener.ExtendableMultiPageEditorPageChangeListener;
...@@ -126,8 +127,9 @@ public class ExtendableMultiPageEditor extends MultiPageEditorPart implements ...@@ -126,8 +127,9 @@ public class ExtendableMultiPageEditor extends MultiPageEditorPart implements
} }
/** Returns the active editor. */ /** Returns the active editor. */
public IEditorPart getActiveEditorPart() { @SuppressWarnings("unchecked")
return getActiveEditor(); public IModelEditor<EObject> getActiveModelEditor() {
return (IModelEditor<EObject>) getActiveEditor();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
...@@ -259,4 +261,21 @@ public class ExtendableMultiPageEditor extends MultiPageEditorPart implements ...@@ -259,4 +261,21 @@ public class ExtendableMultiPageEditor extends MultiPageEditorPart implements
public void commandStackChanged(EventObject event) { public void commandStackChanged(EventObject event) {
firePropertyChange(IWorkbenchPartConstants.PROP_DIRTY); firePropertyChange(IWorkbenchPartConstants.PROP_DIRTY);
} }
/**
* Finds a contributed editor of the given class in the list of editor
* pages.
*/
@SuppressWarnings("unchecked")
public <T extends EObject, E extends IModelEditor<T>> E getPageEditor(
Class<E> editorClass) {
int num = getPageCount();
for (int i = 0; i < num; i++) {
IEditorPart part = getEditor(i);
if (editorClass.isInstance(part)) {
return (E) part;
}
}
return null;
}
} }
...@@ -76,7 +76,7 @@ public class LibraryView extends ViewPart { ...@@ -76,7 +76,7 @@ public class LibraryView extends ViewPart {
private final ExtendableMultiPageEditorPageChangeListener bindingEditorPageChangeListener = new ExtendableMultiPageEditorPageChangeListener() { private final ExtendableMultiPageEditorPageChangeListener bindingEditorPageChangeListener = new ExtendableMultiPageEditorPageChangeListener() {
@Override @Override
public void pageChanged() { public void pageChanged() {
updateEditorFilters(activeBindingEditor.getActiveEditorPart()); updateEditorFilters(activeBindingEditor.getActiveModelEditor());
} }
}; };
...@@ -120,7 +120,7 @@ public class LibraryView extends ViewPart { ...@@ -120,7 +120,7 @@ public class LibraryView extends ViewPart {
activeBindingEditor = (ExtendableMultiPageEditor) editor; activeBindingEditor = (ExtendableMultiPageEditor) editor;
activeBindingEditor activeBindingEditor
.addBindingEditorListener(bindingEditorPageChangeListener); .addBindingEditorListener(bindingEditorPageChangeListener);
updateEditorFilters(activeBindingEditor.getActiveEditorPart()); updateEditorFilters(activeBindingEditor.getActiveModelEditor());
} else if (editor != null) { } else if (editor != null) {
updateEditorFilters(editor); updateEditorFilters(editor);
} }
......
...@@ -20,19 +20,20 @@ package org.fortiss.tooling.kernel.ui.service; ...@@ -20,19 +20,20 @@ package org.fortiss.tooling.kernel.ui.service;
import java.util.List; import java.util.List;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.kernel.ui.extension.IModelEditor;
import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding; import org.fortiss.tooling.kernel.ui.extension.IModelEditorBinding;
import org.fortiss.tooling.kernel.ui.internal.ModelEditorBindingService; import org.fortiss.tooling.kernel.ui.internal.ModelEditorBindingService;
/** /**
* The model editor binding service handles editor registration. It also allows * The model editor service handles editor registration. It also allows opening
* opening and closing of editors. * and closing of editors.
* *
* @see IModelEditorBinding * @see IModelEditorBinding
* *
* @author hoelzl * @author hoelzl
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating GREEN Hash: 6A80D8ED088608C52D21BC3F4B73BE8B * @ConQAT.Rating YELLOW Hash: 8EFBD4397AB482FDAAD1F96749BBEAE0
*/ */
public interface IModelEditorBindingService { public interface IModelEditorBindingService {
...@@ -45,6 +46,17 @@ public interface IModelEditorBindingService { ...@@ -45,6 +46,17 @@ public interface IModelEditorBindingService {
/** Closes editors which depend on the given element or a sub-element. */ /** Closes editors which depend on the given element or a sub-element. */
void closeEditors(EObject parentElement); void closeEditors(EObject parentElement);
/** Returns the currently editor. */
IModelEditor<EObject> getActiveEditor();
/**
* Returns an {@link IModelEditor} instance of the given class for the given
* model if such an editor is currently open. Otherwise, returns
* <code>null</code>.
*/
<T extends EObject, E extends IModelEditor<T>> E getOpenEditor(
T editedElement, Class<E> editorClass);
/** Returns registered editor bindings for the given {@link EObject}. */ /** Returns registered editor bindings for the given {@link EObject}. */
List<IModelEditorBinding<EObject>> getBindings(EObject element); List<IModelEditorBinding<EObject>> getBindings(EObject element);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment