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

fixed graphical editor base

parent 926ed69c
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.conqat.ide.commons.gef.editpart.EditPartUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditDomain;
import org.eclipse.gef.EditPartFactory;
......@@ -40,7 +41,11 @@ import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.IPostSelectionProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
......@@ -49,8 +54,10 @@ import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.fortiss.tooling.base.ui.ToolingBaseUIActivator;
import org.fortiss.tooling.base.ui.action.ModelElementsActionBase;
import org.fortiss.tooling.base.ui.dnd.DropTargetListener;
import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle;
import org.fortiss.tooling.kernel.ui.services.IEditPartFactoryService;
/**
......@@ -63,10 +70,11 @@ import org.fortiss.tooling.kernel.ui.services.IEditPartFactoryService;
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: 63FF468A2D042586A22495828A0798EF
*/
public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T> {
public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
implements IPostSelectionProvider {
/** Stores the viewer. */
EditPartViewer viewer = new ScrollingGraphicalViewer();
protected EditPartViewer viewer = new ScrollingGraphicalViewer();
/** Actions which need update upon selection changes. */
private final List<String> selectionActions = new ArrayList<String>();
......@@ -105,11 +113,61 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
/** {@inheritDoc} */
@Override
public void createPartControl(Composite parent) {
// action support
viewer.createControl(parent);
getEditDomain().addViewer(viewer);
viewer.setEditPartFactory(createEditPartFactory());
viewer.setContents(getViewerContentObject());
// TODO (FH): add context menu support
// MenuManager contextMenu = getContextMenuManager();
// if (contextMenu != null) {
// viewer.setContextMenu(contextMenu);
// }
getSite().setSelectionProvider(this);
ToolingBaseUIActivator.getDefault().getPreferenceStore()
.addPropertyChangeListener(propertyChangeListener);
createActions();
updateActions(propertyActions);
// zoom support
createZoomSupport();
// drag and drop
viewer.addDropTargetListener(new DropTargetListener(viewer));
}
/** {@inheritDoc} */
@Override
public void dispose() {
ToolingBaseUIActivator.getDefault().getPreferenceStore()
.removePropertyChangeListener(propertyChangeListener);
super.dispose();
}
/**
* Returns the root object used as content root. Sub-classes may override to
* provide a different content root object. The default implementation uses
* {@link EditorBase#getEditedObject()}
*/
protected Object getViewerContentObject() {
return getEditedObject();
}
/** Listener used to refresh on editor preference changes. */
private final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(EVisualStyle.ID)) {
EditPartUtils.fullRefresh(viewer.getRootEditPart());
}
}
};
/** Installs zoom suport for this graphical viewer. */
private void createZoomSupport() {
RootEditPart rootPart = viewer.getRootEditPart();
if (rootPart instanceof ScalableFreeformRootEditPart) {
zoomManager = ((ScalableFreeformRootEditPart) rootPart)
......@@ -123,9 +181,6 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
registerZoomAction();
}
zoomContribution = new ZoomComboContributionItem(getSite().getPage());
// drag and drop
viewer.addDropTargetListener(new DropTargetListener(viewer));
}
/** Registers and returns the id of the given action. */
......@@ -223,4 +278,46 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
public void setFocus() {
viewer.getControl().setFocus();
}
// The following methods are necessary in order to avoid Eclipse Helios SR2
// bug #339360
/** {@inheritDoc} */
@Override
public void addPostSelectionChangedListener(
ISelectionChangedListener listener) {
viewer.addSelectionChangedListener(listener);
}
/** {@inheritDoc} */
@Override
public void removePostSelectionChangedListener(
ISelectionChangedListener listener) {
viewer.removeSelectionChangedListener(listener);
}
/** {@inheritDoc} */
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
viewer.addSelectionChangedListener(listener);
}
/** {@inheritDoc} */
@Override
public ISelection getSelection() {
return viewer.getSelection();
}
/** {@inheritDoc} */
@Override
public void removeSelectionChangedListener(
ISelectionChangedListener listener) {
viewer.removeSelectionChangedListener(listener);
}
/** {@inheritDoc} */
@Override
public void setSelection(ISelection selection) {
viewer.setSelection(selection);
}
}
......@@ -52,7 +52,7 @@
<element name="editPartFactory">
<complexType>
<sequence>
<element ref="modelElementClass"/>
<element ref="modelElementClass" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
<attribute name="factory" type="string" use="required">
<annotation>
......
......@@ -35,12 +35,18 @@ public abstract class NamedCommentedModelElementHandlerBase<T extends INamedComm
/** {@inheritDoc} */
@Override
public String getName(T element) {
if (element.getName() == null) {
return "";
}
return element.getName();
}
/** {@inheritDoc} */
@Override
public String getDescription(T element) {
if (element.getComment() == null) {
return "";
}
return element.getComment();
}
}
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