Home » Eclipse Projects » GEF » [Help needed] GEF-Editor doesn't update ...
[Help needed] GEF-Editor doesn't update ... [message #248115] |
Tue, 07 April 2009 07:05  |
Eclipse User |
|
|
|
Originally posted by: juergen.scheffler.gmx.de
Hi there,
I wrote a RCP with a GEF-Editor and Property-View.
The Prop-View shows the name, the coorinates and size of the drawn
figures as key-value pairs.
When I move a figure the Prop-View updates itself.
When I edit the name field in the Prop-View the GEF-Editor does not
update. I have to click on the editor to refresh the actual editor "view".
I use a Model generated by EMF, so I can't code in directly in the
Model. I thought I have to code sth like listeners there. I'm clueless
now. Do you have some hints? Shall I post classes here?
As I began with GEF I read that I have to edit the Model (objects) and
GEF recognizes that and updates the rest by itself...hmm as
described..it does not.
Greetings
Juergen
|
|
| |
Re: [Help needed] GEF-Editor doesn't update ... [message #248162 is a reply to message #248129] |
Wed, 08 April 2009 12:33   |
Eclipse User |
|
|
|
Originally posted by: juergen.scheffler.gmx.de
Ben Vitale schrieb:
> (responses below)
>
> juergen.scheffler@gmx.de wrote:
>> Hi there,
>>
>> I wrote a RCP with a GEF-Editor and Property-View.
>> The Prop-View shows the name, the coorinates and size of the drawn
>> figures as key-value pairs.
>> When I move a figure the Prop-View updates itself.
>> When I edit the name field in the Prop-View the GEF-Editor does not
>> update. I have to click on the editor to refresh the actual editor
>> "view".
>
> Can you elaborate on what you mean, click to refresh?
In simple words: I edit a string field in the prop-view and make a click
in the gef-editor --> the string text gets refreshed in a label in a
figure. But only if I click on the editor or add sth to the editor. When
I edit the string in prop-view and push enter, the propview has the new
string but the editor the old string.
Again: If a paint or paintFigure method is called, every is fine, but
this doesnt get invoked. In other words: a) I think the editor is not
connected properly to the Model, so the editor doesnt get notified. b)
or I have to call a refreshVisual(), but I dont really know.
I made a short video (wmv or avi):
http://rapidshare.com/files/218943119/gefmodelrefresh.wmv.ht ml
http://rapidshare.com/files/218942488/gefmodelrefresh.avi.ht ml
Can you explain, how I make the editor listen to model changes?
I put the editor code below this text, maybe it helps. Maybe it has sth
to do with the getAdapter method, but I dont know.
>
>>
>> I use a Model generated by EMF, so I can't code in directly in the
>> Model. I thought I have to code sth like listeners there. I'm clueless
>> now. Do you have some hints? Shall I post classes here?
>
> The generated EMF objects should have notification built in. I suspect
> that is working fine since your properties view is refreshing when you
> move the figures (which are updating the model).
I really wonder now, why this works. Maybe because its a standard
Property View. I just implement the standard class.
public class MyPropSource implements IPropertySource {...}
Do you have an example on: how to connect a selfmade RCP View to the
gef/emf model?
>
> Try setting some breakpoints in your model classes to see if they are
> receiving the changes as you commit them in the property view.
How do I do that? f.e. I open the Node.class and set a breakpoint there
and then run debug mode, correct?! for what do I have to look?
>
> Also, on an unrelated note, you *can* edit the generated code. Suggest
> having a look at the EMF documentation.
thx, I see.
CODE:
package de.scheffler.cpeditor.editors.processeditor;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.apache.log4j.Logger;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.commands.CommandStackListener;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.dnd.TemplateTransferDropTargetListener;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editparts.LayerManager;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.palette.PaletteViewerProvider;
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPref erences;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.parts.SelectionSynchronizer;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.TransferDropTargetListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.ecore.EPackage;
import de.scheffler.cpeditor.helper.EcoreFactory;
import de.scheffler.cpeditor.helper.Globals;
import de.scheffler.cpeditor.model.Diagram;
import de.scheffler.cpeditor.model.ModelFactory;
import de.scheffler.cpeditor.model.ModelPackage;
import de.scheffler.cpeditor.model.Node;
import de.scheffler.cpeditor.model.impl.DiagramImpl;
import de.scheffler.cpeditor.model.impl.NodeImpl;
import de.scheffler.cpeditor.parts.CPeditorEditPartFactory;
import de.scheffler.cpeditor.parts.DiagramEditPart;
import de.scheffler.cpeditor.parts.MyScalableFreeformRootEditPart;
import de.scheffler.cpeditor.*;
public class ProcessEditorWithFlyoutPalette
extends GraphicalEditorWithFlyoutPalette
implements CommandStackListener, ISelectionListener, Adapter {
final static Logger logger =
Logger.getLogger(ProcessEditorWithFlyoutPalette.class);
public static final String ID =
"de.scheffler.cpeditor.editors.processeditorwithpalette";
private Diagram processdiagram;//
ModelFactory.eINSTANCE.createDiagram();//new DiagramImpl();
private GraphicalViewer graphicalViewer;
//private PaletteViewer pviewer;
private DefaultEditDomain editDomain;
private CPeditorEditPartFactory epf;
private ProcessEditorWithFlyoutPalette npeThis;
Action exportBMPAction;
public static final String EXPORT_BMP = "BMP";
Action hideConLayerAction;
public static final String HIDE_CONLAYER = "HIDE_CONLAYER";
Action toggleGridAction;
public static final String TOGGLE_GRID = "TOGGLE_GRID";
private List editPartActionIDs = new ArrayList();
public ProcessEditorWithFlyoutPalette() {
try {
editDomain = new DefaultEditDomain(this);
setEditDomain(editDomain);
npeThis = this;
logger.info(Globals.isVisible_ConLayer()+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ");
} catch (Exception e) {
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#init(org.eclipse.ui .IEditorSite,
org.eclipse.ui.IEditorInput)
*/
@Override
public void init(IEditorSite site, IEditorInput input) throws
PartInitException {
//super.init(site, input);
//this.editDomain = new DefaultEditDomain(this);
logger.info("HERE I AM");
setSite(site);
setInput(input);
getCommandStack().addCommandStackListener(this);
getSite().getWorkbenchWindow().getSelectionService().addSele ctionListener(this);
/**
// Drag and Drop Kram, dazu muss die Klasse Adapter impementiert werden
((ProcessEditorInput) input).getProcessDiagram().eAdapters().add(this);
*/
setPartName(input.getName());
createActions();
createToolbar();
}
protected void createActions() {
try {
super.createActions();
if (exportBMPAction == null) {
exportBMPAction = new Action() {
public String getId() {
return EXPORT_BMP;
}
public void run() {
// reset all
ProcessEditorWithFlyoutPalette ce =
((ProcessEditorWithFlyoutPalette) getSite()
.getPage().getActiveEditor());
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) ce
.getGraphicalViewer().getRootEditPart();
Device device = ce.getGraphicalViewer().getControl()
.getDisplay();
// wenn das Gitter vorm bmp export sichtbar war, soll es auch
dannach wieder sichtbar sein und umgekehrt.
// Für den bmp export wird es kurz augeblendet
boolean visible_before_save = root.getLayer("GRID").isVisible();
// Den FreeFormLayer und(!) den Connection-Layer holen
IFigure figure =
root.getLayer(ScalableFreeformRootEditPart.PRINTABLE_LAYERS) ;
root.getLayer("GRID").setVisible(false);
//LAYER TEST
//LayerManager layermanager = (LayerManager)
graphicalViewer.getEditPartRegistry().get(LayerManager.ID);
//System.out.println(layermanager.getLayer(LayerConstants.CO NNECTION_LAYER).getBackgroundColor().toString());;
//root.getLayer(LayerConstants.CONNECTION_LAYER).setBackgrou ndColor(ColorConstants.red);
//System.out.println(root.getLayer(LayerConstants.CONNECTION _LAYER).getForegroundColor().toString());
//boolean visible =
root.getLayer(LayerConstants.CONNECTION_LAYER).isVisible();
//if(visible){
//root.getLayer(LayerConstants.CONNECTION_LAYER).setVisible( false);
//}else{root.getLayer(LayerConstants.CONNECTION_LAYER).setVi sible(true);}
Rectangle r = figure.getBounds();
ByteArrayOutputStream result = new ByteArrayOutputStream();
Image image = null;
GC gc = null;
Graphics g = null;
try {
image = new Image(device, r.width, r.height);
gc = new GC(image);
g = new SWTGraphics(gc);
g.translate(r.x * -1, r.y * -1);
figure.paint(g);
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] { image
.getImageData() };
imageLoader.save(result, SWT.IMAGE_BMP);
} finally {
if (g != null) {
g.dispose();
}
if (gc != null) {
gc.dispose();
}
if (image != null) {
image.dispose();
}
}
try {
FileDialog dialog = new FileDialog(npeThis.getSite()
.getShell(), SWT.SAVE);
dialog
.setFilterNames(new String[] { "Bitmaps (*.bmp)" });
dialog.setFilterExtensions(new String[] { "*.bmp" });
String path = dialog.open();
if (!path.endsWith(".bmp")) {
path.concat(".bmp");
}
File f = new File(path);
if (f.exists()) {
MessageDialog md = new MessageDialog(npeThis
.getSite().getShell(), "Datei ersetzen?",
null, "Wollen Sie die Datei \""
+ f.getName()
+ "\" wirklich ersetzen?",
MessageDialog.QUESTION, new String[] {
"Ja", "Nein" }, 1);
int answer = md.open();
if (answer == MessageDialog.OK) {
FileOutputStream fos = new FileOutputStream(f);
fos.write(result.toByteArray());
fos.flush();
fos.close();
}
} else {
FileOutputStream fos = new FileOutputStream(f);
fos.write(result.toByteArray());
fos.flush();
fos.close();
}
if(visible_before_save)
root.getLayer("GRID").setVisible(true);
} catch (FileNotFoundException e) {
e.printStackTrace();
if(visible_before_save)
root.getLayer("GRID").setVisible(true);
} catch (IOException e) {
e.printStackTrace();
if(visible_before_save)
root.getLayer("GRID").setVisible(true);
}finally {
if(visible_before_save)
root.getLayer("GRID").setVisible(true);
}
}
};
exportBMPAction.setToolTipText("als Bitmap exportieren");
Image iBMP = new Image(Display.getDefault(), this
.getClass().getResourceAsStream("picture_save.png"));
ImageDescriptor idBMP = ImageDescriptor.createFromImage(iBMP);
exportBMPAction.setImageDescriptor(idBMP);
exportBMPAction.setEnabled(true);
}
if (hideConLayerAction == null) {
//LayerManager layermanager = (LayerManager)
graphicalViewer.getEditPartRegistry().get(LayerManager.ID);
//System.out.println(layermanager.getLayer(LayerConstants.CO NNECTION_LAYER).getBackgroundColor().toString());;
//layermanager.getLayer(LayerConstants.CONNECTION_LAYER).set BackgroundColor(ColorConstants.green);
hideConLayerAction = new Action() {
public String getId() {
return HIDE_CONLAYER;
}
public void run() {
ProcessEditorWithFlyoutPalette ce =
((ProcessEditorWithFlyoutPalette) getSite()
.getPage().getActiveEditor());
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) ce
.getGraphicalViewer().getRootEditPart();
boolean visible =
root.getLayer(LayerConstants.CONNECTION_LAYER).isVisible();
if(visible) {
root.getLayer(LayerConstants.CONNECTION_LAYER).setVisible(fa lse);
Globals.setVisible_ConLayer(false);
//hideConLayerAction.setChecked(false);
//hideConLayerAction.setToolTipText("Verbindungen einblenden");
}
else {
root.getLayer(LayerConstants.CONNECTION_LAYER).setVisible(tr ue);
Globals.setVisible_ConLayer(true);
//hideConLayerAction.setChecked(true);
//hideConLayerAction.setToolTipText("Verbindungen ausblenden");
}
}
};
hideConLayerAction.setToolTipText("Verbindungen zeigen/verstecken");
Image iBMP = new Image(Display.getDefault(), this
.getClass().getResourceAsStream("arrow.gif"));
ImageDescriptor idBMP = ImageDescriptor.createFromImage(iBMP);
hideConLayerAction.setImageDescriptor(idBMP);
hideConLayerAction.setEnabled(true);
//if(Globals.isVisible_ConLayer()){hideConLayerAction.setChe cked(true);}else
hideConLayerAction.setChecked(false);
//hideConLayerAction.setToolTipText("Verbindungen ausblenden");
}
// FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
if (toggleGridAction == null) {
//LayerManager layermanager = (LayerManager)
graphicalViewer.getEditPartRegistry().get(LayerManager.ID);
//System.out.println(layermanager.getLayer(LayerConstants.CO NNECTION_LAYER).getBackgroundColor().toString());;
//layermanager.getLayer(LayerConstants.CONNECTION_LAYER).set BackgroundColor(ColorConstants.green);
toggleGridAction = new Action() {
public String getId() {
return TOGGLE_GRID;
}
public void run() {
ProcessEditorWithFlyoutPalette ce =
((ProcessEditorWithFlyoutPalette) getSite()
.getPage().getActiveEditor());
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) ce
.getGraphicalViewer().getRootEditPart();
Device device = ce.getGraphicalViewer().getControl()
.getDisplay();
// Den FreeFormLayer und(!) den Connection-Layer holen
IFigure figure =
root.getLayer(ScalableFreeformRootEditPart.PRINTABLE_LAYERS) ;
// BBBBBBBBBBBBBBBBBBBBBBBB
boolean visible = root.getLayer("GRID").isVisible();
if(visible) {
root.getLayer("GRID").setVisible(false);
}
else {
root.getLayer("GRID").setVisible(true);
}
}
};
toggleGridAction.setToolTipText("Gitter an/aus");
Image iBMP = new Image(Display.getDefault(), this
.getClass().getResourceAsStream("grid.gif"));
ImageDescriptor idBMP = ImageDescriptor.createFromImage(iBMP);
toggleGridAction.setImageDescriptor(idBMP);
toggleGridAction.setEnabled(true);
//if(Globals.isVisible_ConLayer()){hideConLayerAction.setChe cked(true);}else
hideConLayerAction.setChecked(false);
//hideConLayerAction.setToolTipText("Verbindungen ausblenden");
}
//FFFFFFFFFFFFFFFFFFFFF
} catch (Exception e) {
e.printStackTrace();
}
/*
ProcessEditorWithFlyoutPalette ce = ((ProcessEditorWithFlyoutPalette)
getSite()
.getPage().getActiveEditor());
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) ce
.getGraphicalViewer().getRootEditPart();
root.getLayer("GRID").setVisible(true);*/
}
/**
* Erstellt die Toolbar
*/
protected void createToolbar() {
try {
//hideConLayerAction.setChecked(true);
IToolBarManager toolbarManager = getEditorSite().getActionBars()
.getToolBarManager();
IContributionItem[] ici = toolbarManager.getItems();
IContributionItem item = toolbarManager.find("HIDE_CONLAYER");
boolean found = false;
for (int i = 0; i < ici.length; i++) {
if (ici[i].getId().equalsIgnoreCase(EXPORT_BMP)) {
found = true;logger.debug(found+"DEGUUUUUG");
break;
}
}
if (found == false) {
toolbarManager.add(exportBMPAction);
toolbarManager.add(hideConLayerAction);
toolbarManager.add(toggleGridAction);
//hideConLayerAction.setChecked(true);
}else {}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Palette Anfang
*/
@Override
protected PaletteRoot getPaletteRoot() {
PaletteRoot root = new PaletteViewerCreator().createPaletteRoot(this);
//root.setVisible(false);
return root;
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#ge tPalettePreferences()
*/
protected FlyoutPreferences getPalettePreferences() {
return new PaletteFlyoutPreferences();
}
/*
* (non-Javadoc)
*
* @see
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#cr eatePaletteViewerProvider()
*/
protected PaletteViewerProvider createPaletteViewerProvider() {
SchemaPaletteViewerProvider schemaPaletteViewerProvider = new
SchemaPaletteViewerProvider(editDomain);
return schemaPaletteViewerProvider;
}
//TODO vorübergehende Test Methode, die richtige ist oben drüber
/**
protected PaletteViewerProvider createPaletteViewerProvider() {
return new PaletteViewerProvider(getEditDomain()) {
protected void configurePaletteViewer(PaletteViewer viewer) {
super.configurePaletteViewer(viewer);
// create a drag source listener for this palette viewer
// together with an appropriate transfer drop target listener, this
will enable
// model element creation by dragging a
CombinatedTemplateCreationEntries
// from the palette into the editor
// @see ShapesEditor#createTransferDropTargetListener()
viewer.addDragSourceListener(new
TemplateTransferDragSourceListener(viewer));
}
};
}
*/
/*
public PaletteViewer getPaletteViewer() {
//return getPaletteViewerProvider().getEditDomain().getPaletteViewer( );
//this.pviewer =
getPaletteViewerProvider().getEditDomain().getPaletteViewer( );
//System.out.println(pviewer.getPaletteRoot().getLabel()+" <---- root");
return pviewer;
//return viewer;
}
*/
/*
public void setPaletteViewer() {
this.pviewer =
getPaletteViewerProvider().getEditDomain().getPaletteViewer( );
//System.out.println(pviewer.getPaletteRoot().getLabel()+" <---- root");
}
*/
/*
* (non-Javadoc)
*
* @see
org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#cr eatePaletteViewerProvider()
*/
//protected PaletteViewerProvider createPaletteViewerProvider() {
//return new SchemaPaletteViewerProvider(editDomain);
//}
/**
* Palette Ende
*/
/**
* @see
org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEdit orInput)
*/
protected void setInput(IEditorInput input) {
//System.out.println(getClass()+" setInput Method called");
logger.info("Method called");
super.setInput(input);
processdiagram = ((ProcessEditorInput) input).getProcessDiagram();
/*
ProcessEditorInput processInput = ((ProcessEditorInput) input);
processdiagram = processInput.getProcessDiagram();
setPartName(processInput.getName());
*/
}
public Diagram getProcessDiagram() {
return processdiagram;
}
public void setProcessDiagram (Diagram diagram) {
this.processdiagram = diagram;
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#commandStackChanged (java.util.EventObject)
*/
@Override
public void commandStackChanged(EventObject event) {
super.commandStackChanged(event);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#createActions()
*/
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#createGraphicalView er(org.eclipse.swt.widgets.Composite)
*/
@Override
//TODO: WEITERMACHEN
protected void createGraphicalViewer(Composite parent) {
//super.createGraphicalViewer(parent);
//IEditorSite editorSite = getEditorSite();
ScalableFreeformRootEditPart myScalableFreeFormRootEditPart = new
MyScalableFreeformRootEditPart();
//myScalableFreeFormRootEditPart.getLayer(org.eclipse.gef.La yerConstants.PRIMARY_LAYER).setOpaque(false);
//myScalableFreeFormRootEditPart.getLayer(org.eclipse.gef.La yerConstants.PRIMARY_LAYER).setVisible(false);
//myScalableFreeFormRootEditPart.getLayer(org.eclipse.gef.La yerConstants.CONNECTION_LAYER).setOpaque(true);;
GraphicalViewer viewer = new ScrollingGraphicalViewer();
this.graphicalViewer = viewer;
// ab hier
//setGraphicalViewer(this.graphicalViewer);
viewer.setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, true);
viewer.createControl(parent);
// configure the viewer TESTFARBE, wenn man mal durch die Layer
durchguckt, wenn z. B. der ConLayer asugeblendet wird
//TODO hinterster Hintergrund
viewer.getControl().setBackground(ColorConstants.white);
//graphicalViewer.getControl().setBackground(ColorConstants. blue);
//logger.warn(viewer.getControl().getBackground().toString() );
//logger.warn(graphicalViewer.getControl().getBackground().t oString());
// Root EditPart setzen
viewer.setRootEditPart(myScalableFreeFormRootEditPart);
//viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));
//viewer.addDropTargetListener(new DataEditDropTargetListener(viewer));
// initialize the viewer with input
//epf.createEditPart(null, processdiagram);
//dem Viewer eine EditPartFactory zuweisen, die das interne
Datenmodell erzeugen soll
viewer.setEditPartFactory(new CPeditorEditPartFactory());
//GraphicalViewer viewer = new GraphicalViewerCreator(editorSite)
// .createViewer(parent, myScalableFreeFormRootEditPart,
getEditorInput());
/*GraphicalViewerKeyHandler graphicalViewerKeyHandler = new
GraphicalViewerKeyHandler(
viewer);
KeyHandler parentKeyHandler = graphicalViewerKeyHandler
.setParent(getCommonKeyHandler());
viewer.setKeyHandler(parentKeyHandler);*/
getEditDomain().addViewer(viewer);
getSite().setSelectionProvider(viewer);
//TODO wichtig! Verbindung des Viewers mit dem "echten" Datenmodell
if (processdiagram == null){logger.debug("processdiagram == null ==
true");}
viewer.setContents(processdiagram);
/*
// add the ShortestPathConnectionRouter
MyScalableFreeformRootEditPart root =
(MyScalableFreeformRootEditPart)viewer.getRootEditPart();
ConnectionLayer connLayer =
(ConnectionLayer)root.getLayer(LayerConstants.CONNECTION_LAY ER);
GraphicalEditPart contentEditPart = (GraphicalEditPart)root.getContents();
ShortestPathConnectionRouter router = new
ShortestPathConnectionRouter(contentEditPart.getFigure());
connLayer.setConnectionRouter(router);
logger.info("TEST TEST");
*/
//viewer.addDropTargetListener(new
TemplateTransferDropTargetListener(getGraphicalViewer()));
// listen for dropped parts, Palette to Editor
// @see SchemaPaletteViewerProvider
viewer.addDropTargetListener(createTransferDropTargetListene r());
// configure the context menu provider
ContextMenuProvider cmProvider = new
CPEditorContextMenuProvider(viewer, getActionRegistry());
viewer.setContextMenu(cmProvider);
getSite().registerContextMenu(cmProvider, viewer);
//LayerManager layermanager = (LayerManager)
graphicalViewer.getEditPartRegistry().get(LayerManager.ID);
//System.out.println(layermanager.getLayer(LayerConstants.CO NNECTION_LAYER).getBackgroundColor().toString());;
//layermanager.getLayer(LayerConstants.CONNECTION_LAYER).set BackgroundColor(ColorConstants.green);
}
/* private Object getRootModel()
{
return modelResource.getContents().get(0);
}*/
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#createPartControl(o rg.eclipse.swt.widgets.Composite)
*/
/* @Override
public void createPartControl(Composite parent) {
//createGraphicalViewer(parent);
//configureGraphicalViewer();
//graphicalViewer = new GraphicalViewerImpl();
//graphicalViewer.createControl(parent);
//graphicalViewer.setEditDomain(new EditDomain());
//Color color = new Color(null,255,0,0);
//configureGraphicalViewer();
/*
try{
graphicalViewer = new GraphicalViewerImpl();
graphicalViewer.createControl(parent);
graphicalViewer.setEditDomain(new EditDomain());
//configureGraphicalViewer();
graphicalViewer.setEditPartFactory(new CPeditorEditPartFactory() {
public EditPart createEditPart(EditPart context, Object model) {
EditPart result = new AbstractGraphicalEditPart() {
/*
protected IFigure createFigure() {
//Shape rect = new RectangleFigure();
//rect.setBounds(new Rectangle(5,5,5,5));
// return new RectangleFigure();
//Rectangle r = new Rectangle(5,5,5,5);
//Label l = new Label("Label");
//l.setForegroundColor(ColorConstants.orange);
//l.setOpaque(false);
//l.setBounds(new Rectangle(r.x,r.y,r.width,r.height));
return l;
}
protected void createEditPolicies() {
}
@Override
protected IFigure createFigure() {
// TODO Auto-generated method stub
return null;
}
};
result.setModel(model);
return result;
}
});
//graphicalViewer.setContents(new Object());
//configureGraphicalViewer();
//graphicalViewer.setEditPartFactory(epf);
}
catch (Exception e) {
e.printStackTrace();
}
}
*/
/**
@Override
protected void initializeGraphicalViewer() {
super.configureGraphicalViewer();
*/
/**
GraphicalViewer viewer = getGraphicalViewer();
viewer.setContents(getProcessDiagram()); // set the contents of this
editor
// add the ShortestPathConnectionRouter
ScalableFreeformRootEditPart root =
(ScalableFreeformRootEditPart)viewer.getRootEditPart();
ConnectionLayer connLayer =
(ConnectionLayer)root.getLayer(LayerConstants.CONNECTION_LAY ER);
GraphicalEditPart contentEditPart = (GraphicalEditPart)root.getContents();
ShortestPathConnectionRouter router =
new ShortestPathConnectionRouter(contentEditPart.getFigure());
connLayer.setConnectionRouter(router);
// listen for dropped parts
viewer.addDropTargetListener(createTransferDropTargetListene r());
*/
// }
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#dispose()
*/
@Override
public void dispose() {
/*
((ProcessEditorInput)
getEditorInput()).getProcessDiagram().eAdapters().remove(thi s);
getCommandStack().removeCommandStackListener(this);
getSite().getWorkbenchWindow().getSelectionService()
.removeSelectionListener(this);
getActionRegistry().dispose();
*/
super.dispose();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#isSaveAsAllowed()
*/
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void doSave(IProgressMonitor monitor) {
return;
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#doSaveAs()
*/
@Override
public void doSaveAs() {
// TODO Auto-generated method stub
return;
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#firePropertyChange( int)
*/
@Override
protected void firePropertyChange(int property) {
// TODO Auto-generated method stub
super.firePropertyChange(property);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getActionRegistry()
*/
@Override
protected ActionRegistry getActionRegistry() {
// TODO Auto-generated method stub
return super.getActionRegistry();
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#getAdapter(java.lan g.Class)
*/
@Override
public Object getAdapter(Class type) {
// aus Richards Klasse
//return super.getAdapter(type);
if (type == GraphicalViewer.class || type == EditPartViewer.class)
return getGraphicalViewer();
else if (type == CommandStack.class)
return getCommandStack();
else if (type == EditDomain.class)
return getEditDomain();
// eingefügt von mir
else if (type == DefaultEditDomain.class)
return getEditDomain();
else if (type == ActionRegistry.class)
return getActionRegistry();
return super.getAdapter(type);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getCommandStack()
*/
public CommandStack getCommandStack() {
return getEditDomain().getCommandStack();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getGraphicalViewer( )
*/
@Override
protected GraphicalViewer getGraphicalViewer() {
return graphicalViewer;
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#setGraphicalViewer( org.eclipse.gef.GraphicalViewer)
*/
@Override
protected void setGraphicalViewer(GraphicalViewer viewer) {
this.graphicalViewer = viewer;
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getPropertyActions( )
*/
@Override
protected List getPropertyActions() {
// TODO Auto-generated method stub
return super.getPropertyActions();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getSelectionActions ()
*/
@Override
protected List getSelectionActions() {
// TODO Auto-generated method stub
return super.getSelectionActions();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getSelectionSynchro nizer()
*/
@Override
protected SelectionSynchronizer getSelectionSynchronizer() {
// TODO Auto-generated method stub
return super.getSelectionSynchronizer();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#getStackActions()
*/
@Override
protected List getStackActions() {
// TODO Auto-generated method stub
return super.getStackActions();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#hookGraphicalViewer ()
*/
@Override
protected void hookGraphicalViewer() {
// TODO Auto-generated method stub
super.hookGraphicalViewer();
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeActionReg istry()
*/
@Override
protected void initializeActionRegistry() {
// TODO Auto-generated method stub
super.initializeActionRegistry();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#isDirty()
*/
public boolean isDirty() {
return false;
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#selectionChanged(or g.eclipse.ui.IWorkbenchPart,
org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// TODO Auto-generated method stub
super.selectionChanged(part, selection);
updateActions(editPartActionIDs);
logger.info("selectionChanged");
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#setActionRegistry(o rg.eclipse.gef.ui.actions.ActionRegistry)
*/
@Override
protected void setActionRegistry(ActionRegistry registry) {
// TODO Auto-generated method stub
super.setActionRegistry(registry);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#setFocus()
*/
@Override
public void setFocus() {
super.setFocus();
}
/* (non-Javadoc)
* @see
org.eclipse.gef.ui.parts.GraphicalEditor#updateActions(java. util.List)
*/
@Override
protected void updateActions(List actionIds) {
// TODO Auto-generated method stub
super.updateActions(actionIds);
}
// ab hier EMF Adapter Methoden
@Override
public Notifier getTarget() {
// genauso bei Richard
return null;
}
@Override
public boolean isAdapterForType(Object type) {
// genauso bei Richard
return false;
}
@Override
public void notifyChanged(Notification notification) {
if (!(getPartName().equalsIgnoreCase(getEditorInput().getName() ))) {
setPartName(getEditorInput().getName());
}
}
@Override
public void setTarget(Notifier newTarget) {
// genauso bei Richard
}
// bis hier EMF Adapter Methoden
// ab hier Drag & Drop Methoden
/**
* von Shapes Example geklaut und verändert, da ich hier nicht die
simple factory nutzen kann,
* sondern ich ja eine Ecore Factory habe.
* Create a transfer drop target listener. When using a
CombinedTemplateCreationEntry
* tool in the palette, this will enable model element creation by
dragging from the palette.
* @see #createPaletteViewerProvider()
*/
private TransferDropTargetListener createTransferDropTargetListener() {
return new TemplateTransferDropTargetListener(getGraphicalViewer()) {
protected CreationFactory getFactory(Object template) {
EcoreFactory ecf = (EcoreFactory)template;
//System.out.println(template.getClass());
//return new SimpleFactory((Class) template);
return ecf;
}
};
}
// bis hier Drag & Drop Methoden
}
|
|
| | | | |
Re: [Help needed] GEF-Editor doesn't update ... [SOLVED] [message #248213 is a reply to message #248200] |
Thu, 09 April 2009 16:47   |
Eclipse User |
|
|
|
Originally posted by: juergen.scheffler.gmx.de
Ben Vitale schrieb:
> juergen.scheffler@gmx.de wrote:
>> I set a breakpoint at "LeistungsplatzhalterEditPart" in the
>> refreshVisuals() method and added the code: getFigure().repaint();
>> After this, I started the Editor and you wont believe the figure got
>> refreshed after pressing enter!!! Is this the "correct way"? Can you
>
> In most cases it should not be necessary to call repaint() directly. For
> example, if your figure contains a Label figure, and you are setting the
> new text on the Label, it should take care of forcing a repaint. But if
> its working then I'd leave it alone.
>
>> please explain how the Editpart gets notified. I dont understand the
>> concept of notification. Does the redbook help me or can I find more
>> special infos?
>
> When the Node class updates its name field, it sends an event to its
> listeners. The EditPart has previously attached itself as a listener in
> its activate() method. When it receives the event, it calls
> refreshVisuals(). Typically this is the flow.
>
> -Ben
Here the full EditPart code. Do you know why I need the "repaint" call?
Is the getAdapter method wrong?
__________________________________
package de.scheffler.cpeditor.parts;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import org.eclipse.draw2d.ChopboxAnchor;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.EllipseAnchor;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Polyline;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.RoundedRectangle;
import org.eclipse.draw2d.Triangle;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.ComponentEditPolicy;
import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy;
import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.GroupRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.views.properties.IPropertySource;
import de.scheffler.cpeditor.figures.LeistungsplatzhalterFigure;
import de.scheffler.cpeditor.figures.NodeFigure;
import de.scheffler.cpeditor.model.Connection;
import de.scheffler.cpeditor.model.Leistungsplatzhalter;
import de.scheffler.cpeditor.model.ModelPackage;
import de.scheffler.cpeditor.model.Node;
import de.scheffler.cpeditor.model.commands.ConnectionCreateCommand ;
import de.scheffler.cpeditor.model.commands.ConnectionReconnectComm and;
import de.scheffler.cpeditor.model.commands.NodeDeleteCommand;
import de.scheffler.cpeditor.policies.NodeGraphicalNodeEditPolicy;
import de.scheffler.cpeditor.views.MyPropSource;
import org.eclipse.draw2d.Shape;
public class LeistungsplatzhalterEditPart
extends AbstractGraphicalEditPart
implements Adapter, org.eclipse.gef.NodeEditPart
{
//private static final int MIN_SIZE = 50;
//private static final int MAX_SIZE = 250;
private ConnectionAnchor anchor;
private IPropertySource propertySource = null;
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate ()
*/
@Override
public void activate()
{
super.activate();
getTarget().eAdapters().add(this);
}
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactiva te()
*/
@Override
public void deactivate()
{
super.deactivate();
getTarget().eAdapters().remove(this);
}
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicie s()
*/
@Override
protected void createEditPolicies() {
// allow removal of the associated model element
installEditPolicy(EditPolicy.COMPONENT_ROLE, new
ComponentEditPolicy() {
@Override
protected Command getDeleteCommand(GroupRequest request)
{
NodeDeleteCommand ndc = new NodeDeleteCommand((Node)
getHost().getModel());
// ndc.setLabel("dasdasdad");
return ndc;
//return new NodeDeleteCommand((Node) getHost().getModel());
}
});
// allow the creation of connections
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new
NodeGraphicalNodeEditPolicy());
}
/* (non-Javadoc)
* @see
org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFi gure()
*/
@Override
protected IFigure createFigure() {
//Node node = (Node) getModel();
System.out.println(" Create Figure called !!! ");
return new LeistungsplatzhalterFigure((Leistungsplatzhalter) getModel());
/*
IFigure fig = new RectangleFigure();
fig.setOpaque(false);
//fig.setBackgroundColor(ColorConstants.green);
fig.setBackgroundColor(new Color(Display.getDefault(),131,202,255));
RoundedRectangle r = new RoundedRectangle();
r.setCornerDimensions(new Dimension(100,100));
r.setSize(200, 200);
r.setLocation(new Point(5,5));
// r.setBorder(new LineBorder(ColorConstants.blue,2));
r.setLineStyle(Graphics.LINE_DASHDOT);
r.setLineWidth(2);
r.setForegroundColor(ColorConstants.red);
fig.add(r);
*/
/*
int x,y;
x = bounds.x;
y = bounds.y;
Polyline line = new Polyline();
PointList pointList = new PointList();
System.out.println(model.getX());
pointList.addPoint(model.getX()+50, 50);
pointList.addPoint(model.getX()+100, 0);
pointList.addPoint(model.getX()+150, 50);
pointList.addPoint(model.getX()+100, 100);
pointList.addPoint(model.getX()+50, 50);
line.setPoints(pointList);
*/
//return fig;
}
/* (non-Javadoc)
* @see org.eclipse.emf.common.notify.Adapter#getTarget()
*/
public Notifier getTarget()
{
return (Notifier) getModel();
}
/* (non-Javadoc)
* @see
org.eclipse.emf.common.notify.Adapter#setTarget(org.eclipse. emf.common.notify.Notifier)
*/
public void setTarget(Notifier newTarget)
{
setModel(newTarget);
}
/* (non-Javadoc)
* @see
org.eclipse.emf.common.notify.Adapter#isAdapterForType(java. lang.Object)
*/
public boolean isAdapterForType(Object type)
{
return false;
}
/* (non-Javadoc)
* @see
org.eclipse.emf.common.notify.Adapter#notifyChanged(org.ecli pse.emf.common.notify.Notification)
*/
public void notifyChanged(Notification notification)
{
int featureId = notification.getFeatureID(Node.class);
switch (notification.getEventType())
{
case Notification.SET:
case Notification.UNSET:
switch (featureId)
{
case ModelPackage.NODE__X:
case ModelPackage.NODE__Y:
case ModelPackage.NODE__WIDTH:
case ModelPackage.NODE__HEIGHT:
case ModelPackage.NODE__NAME:
refreshVisuals();
break;
}
break;
case Notification.ADD:
case Notification.ADD_MANY:
case Notification.REMOVE:
case Notification.REMOVE_MANY:
switch (featureId)
{
case ModelPackage.NODE__IN:
refreshTargetConnections();
break;
case ModelPackage.NODE__OUT:
refreshSourceConnections();
break;
}
break;
}
}
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
@Override
protected void refreshVisuals()
{
Node model = (Node) getModel();
Rectangle bounds =
new Rectangle(model.getX(), model.getY(), model.getWidth(),
model.getHeight());
getFigure().revalidate();
getFigure().repaint();
/*
int MIN_SIZE = 100;
int MAX_SIZE = 500;
if (bounds.width < MIN_SIZE)
{
bounds.width = MIN_SIZE;
}
if (bounds.height < MIN_SIZE)
{
bounds.height = MIN_SIZE;
}
*/
/*
if (bounds.width > MAX_SIZE)
{
bounds.width = MAX_SIZE;
}
if (bounds.height > MAX_SIZE)
{
bounds.height = MAX_SIZE;
}
*/
((GraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(), bounds);
/*
IFigure figure = getFigure();
Node element = (Node) getModel();
figure.setLocation(new Point(element.getX(), element
.getY()));
figure.setSize(element.getWidth(), element.getHeight());
*/
}
/* (non-Javadoc)
* @see
org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModel SourceConnections()
*/
@Override
protected List getModelSourceConnections()
{
return ((Node) getModel()).getOut();
}
/* (non-Javadoc)
* @see
org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModel TargetConnections()
*/
@Override
protected List getModelTargetConnections()
{
return ((Node) getModel()).getIn();
}
protected ConnectionAnchor getConnectionAnchor()
{
if (anchor == null)
{
anchor = new ChopboxAnchor(getFigure());
}
return anchor;
}
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connection)
{
return getConnectionAnchor();
}
public ConnectionAnchor getSourceConnectionAnchor(Request request)
{
return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(
ConnectionEditPart connection)
{
return getConnectionAnchor();
}
public ConnectionAnchor getTargetConnectionAnchor(Request request)
{
return getConnectionAnchor();
}
@Override
public Object getAdapter(Class key) {
/*
* override the default behavior defined in AbstractEditPart which would
* expect the model to be a property sourced. instead the editpart can
* provide a property source
*/
if (IPropertySource.class == key) {
return getPropertySource();
}
return super.getAdapter(key);
}
protected IPropertySource getPropertySource() {
// lazy creation and reusing
if (propertySource == null) {
propertySource = new MyPropSource(getModel());
}
return propertySource;
}
}
|
|
| | | |
Goto Forum:
Current Time: Tue Apr 15 01:06:02 EDT 2025
Powered by FUDForum. Page generated in 0.06231 seconds
|