00001 package cz.vutbr.fit.dudka.SGVis.Visual;
00002
00003 import java.awt.geom.Rectangle2D;
00004
00005 import prefuse.Display;
00006 import prefuse.Visualization;
00007 import prefuse.action.GroupAction;
00008 import prefuse.controls.DragControl;
00009 import prefuse.controls.FocusControl;
00010 import prefuse.controls.HoverActionControl;
00011 import prefuse.controls.NeighborHighlightControl;
00012 import prefuse.controls.PanControl;
00013 import prefuse.controls.WheelZoomControl;
00014 import prefuse.controls.ZoomToFitControl;
00015 import prefuse.util.GraphicsLib;
00016 import prefuse.util.display.DisplayLib;
00017 import prefuse.visual.sort.TreeDepthItemSorter;
00018
00024 public class GraphDisplay extends Display {
00025 private static final long serialVersionUID = 1L;
00026
00031 public GraphDisplay(GraphView view) {
00032 super(view.getVisualization());
00033
00034
00035 setSize(600,600);
00036 setItemSorter(new TreeDepthItemSorter());
00037 addControlListener(new DragControl());
00038 addControlListener(new WheelZoomControl());
00039 addControlListener(new PanControl());
00040 addControlListener(new FocusControl(1, "filter"));
00041 addControlListener(new NeighborHighlightControl("repaint"));
00042 addControlListener(new HoverActionControl("repaint"));
00043 ZoomToFitControl zoomToFit = new ZoomToFitControl();
00044 zoomToFit.setZoomOverItem(false);
00045 addControlListener(zoomToFit);
00046 GraphNodeContextMenu nodeContextMenu = new GraphNodeContextMenu(view);
00047 addControlListener(nodeContextMenu.getControlListener());
00048
00049
00050 m_vis.putAction("zoomToFit", new ZoomToFitAction("tree", this));
00051
00052
00053 m_vis.alwaysRunAfter("animate", "zoomToFit");
00054 }
00055
00060 private class ZoomToFitAction extends GroupAction {
00061 private Display display;
00062 public ZoomToFitAction(String graphGroup, Display display) {
00063 super(graphGroup);
00064 this.display = display;
00065 }
00066 public void run(double frac) {
00067 Visualization vis = display.getVisualization();
00068 Rectangle2D bounds = vis.getBounds(Visualization.ALL_ITEMS);
00069 GraphicsLib.expand(bounds, 50 + (int)(1/display.getScale()));
00070 DisplayLib.fitViewToBounds(display, bounds, 500);
00071 }
00072 }
00073
00074 }