/* Soot - a J*va Optimization Framework
* Copyright (C) 2004 Jennifer Lhotak
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package ca.mcgill.sable.soot.cfg;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.*;
import org.eclipse.gef.ui.parts.*;
import org.eclipse.gef.*;
import org.eclipse.gef.editparts.*;
import ca.mcgill.sable.soot.cfg.model.*;
import ca.mcgill.sable.soot.cfg.editParts.*;
//import org.eclipse.gef.palette.*;
import org.eclipse.jface.action.*;
import org.eclipse.gef.ui.actions.*;
public class CFGEditor extends GraphicalEditor {
private CFGGraph cfgGraph;
public CFGEditor() {
DefaultEditDomain defaultEditDomain = new DefaultEditDomain(this);
setEditDomain(defaultEditDomain);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
*/
protected void initializeGraphicalViewer() {
getGraphicalViewer().setContents(cfgGraph);
}
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
ScalableRootEditPart root = new ScalableRootEditPart();
getGraphicalViewer().setRootEditPart(root);
ZoomManager zManager = root.getZoomManager();
double [] zoomLevels = new double[10];
for (int i = 0; i < zoomLevels.length; i++){
zoomLevels[i] = (i + 1) * 0.25;
}
zManager.setZoomLevels(zoomLevels);
IAction zoomIn = new ZoomInAction(zManager);
IAction zoomOut = new ZoomOutAction(((ScalableRootEditPart)getGraphicalViewer().getRootEditPart()).getZoomManager());
getActionRegistry().registerAction(zoomIn);
getActionRegistry().registerAction(zoomOut);
getSite().getKeyBindingService().registerAction(zoomIn);
getSite().getKeyBindingService().registerAction(zoomOut);
getGraphicalViewer().setEditPartFactory(new CFGPartFactory());
getGraphicalViewer().setKeyHandler(new GraphicalViewerKeyHandler(getGraphicalViewer()));
StopAction stop = new StopAction(this);
getActionRegistry().registerAction(stop);
this.getSelectionActions().add(stop.getId());
UnStopAction unStop = new UnStopAction(this);
getActionRegistry().registerAction(unStop);
this.getSelectionActions().add(unStop.getId());
CFGMenuProvider menuProvider = new CFGMenuProvider(getGraphicalViewer(), getActionRegistry(), this);
getGraphicalViewer().setContextMenu(menuProvider);
getSite().registerContextMenu(menuProvider, getGraphicalViewer());
}
// this is for zoom
protected void createActions(){
super.createActions();
/* System.out.println("creating actions");
ScrollingGraphicalViewer viewer = (ScrollingGraphicalViewer)getGraphicalViewer();
ScalableRootEditPart root = ((ScalableRootEditPart)viewer.getRootEditPart());
ZoomManager zManager = root.getZoomManager();
IAction zoomIn = new ZoomInAction(zManager);
IAction zoomOut = new ZoomOutAction(((ScalableRootEditPart)getGraphicalViewer().getRootEditPart()).getZoomManager());
getActionRegistry().registerAction(zoomIn);
getActionRegistry().registerAction(zoomOut);
getSite().getKeyBindingService().registerAction(zoomIn);
getSite().getKeyBindingService().registerAction(zoomOut);
*/
}
protected void setInput(IEditorInput input){
super.setInput(input);
if (input instanceof CFGGraph){
setCfgGraph((CFGGraph)input);
}
// could also read from a dot file
}
/* (non-Javadoc)
* @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor)
*/
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub
/*System.out.println("saving cfgs");
// idea is to save to dot file
String fileNameBase = SootPlugin.getDefault().getCurrentProject().getFolder("sootOutput").getLocation().toOSString();
AnnotatedCFGSaver saver = new AnnotatedCFGSaver(getCfgGraph(), fileNameBase, this.getTitle());
saver.saveGraph();
isSaved = true;
firePropertyChange(IEditorPart.PROP_DIRTY);
*/
}
/*public void setContentsChanged(){
isSaved = false;
firePropertyChange(IEditorPart.PROP_DIRTY);
}*/
/* (non-Javadoc)
* @see org.eclipse.ui.ISaveablePart#doSaveAs()
*/
public void doSaveAs() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.ui.IEditorPart#gotoMarker(org.eclipse.core.resources.IMarker)
*/
public void gotoMarker(IMarker marker) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.ui.ISaveablePart#isDirty()
*/
public boolean isDirty() {
// TODO Auto-generated method stub
//return !isSaved;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed()
*/
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}
/**
* @return
*/
public CFGGraph getCfgGraph() {
return cfgGraph;
}
/**
* @param graph
*/
public void setCfgGraph(CFGGraph graph) {
cfgGraph = graph;
}
public void setTitle(String name){
super.setTitle(name);
}
public void setTitleTooltip(String text){
super.setTitleToolTip(text);
}
public String getToolTipText(){
return "cfg editor";
}
}