To load this file without formatting, visit http://whoyouknow.co.uk/ants/AntGraph/java/2/src/antgraph/gui/GraphCanvas.java. This is a spam-protection measure; sorry for the inconvenience.

· GraphCanvas.java ·

   1/*
   2 * GraphView.java
   3 *
   4 * Created on 04 March 2007, 13:21
   5 *
   6 * To change this template, choose Tools | Template Manager
   7 * and open the template in the editor.
   8 */
   9
  10package antgraph.gui;
  11
  12import antgraph.Edge;
  13import antgraph.Graph;
  14import antgraph.NoSuchNodeException;
  15import antgraph.Node;
  16import java.awt.Canvas;
  17import java.awt.Color;
  18import java.awt.Graphics;
  19import java.awt.event.MouseAdapter;
  20import java.awt.event.MouseEvent;
  21import java.awt.event.MouseMotionAdapter;
  22import java.awt.image.BufferedImage;
  23
  24/**
  25 *
  26 * @author James
  27 */
  28public class GraphCanvas extends Canvas implements Runnable {
  29
  30    private BufferedImage bi;
  31    private Graphics big;
  32    private Thread animate;    
  33    
  34    public static final int WIDTH = 500, HEIGHT = 500;
  35    private Graph graph;
  36    private Node selectedNode = null;
  37    private Edge selectedEdge = null;
  38    
  39      boolean dragging = false;
  40    /** Creates a new instance of GraphView */
  41    public GraphCanvas() { 
  42        this(new Graph());
  43    }
  44    
  45    public GraphCanvas(Graph g) {
  46        setSize(WIDTH, HEIGHT);
  47        this.graph = g;
  48
  49      
  50        
  51        this.addMouseListener( new MouseAdapter() {
  52           public void mousePressed(MouseEvent e) {
  53               
  54               if(e.getButton() == e.BUTTON1) {
  55                   if(containsNode(e.getX(), e.getY())) {
  56                       if(nodeSelected()) {
  57                           Node a = getSelectedNode();
  58                           Node b = nodeAt(e.getX(), e.getY());
  59                           
  60                           try {
  61                               graph.addEdge(a, b);
  62                               deselectNode();
  63                           }catch (NoSuchNodeException ex) {
  64                               System.out.println(ex); //shouldn't happen
  65                           }
  66                       }else{
  67                           deselectEdge();
  68                           setSelectedNode(nodeAt(e.getX(), e.getY()));
  69                       }
  70                   }else if(containsEdge(e.getX(), e.getY())) {
  71                       
  72                        deselectAll();
  73                      
  74                       setSelectedEdge(edgeAt(e.getX(), e.getY()));
  75
  76                   }else{
  77                       
  78                       if(nodeSelected()) {
  79
  80                             graph.addNode(e.getX(), e.getY());
  81                             try {
  82                                graph.addEdge(getSelectedNode(), nodeAt(e.getX(), e.getY()));
  83                             }catch (NoSuchNodeException ex) {
  84                                   System.out.println(ex); //shouldn't happen
  85                             }  
  86                             
  87                              deselectNode();
  88                       }else{
  89
  90                           graph.addNode(e.getX(), e.getY());
  91                       }
  92                   }
  93               }else if(e.getButton() == e.BUTTON3) {
  94                   if(containsNode(e.getX(), e.getY())) {
  95                       deselectNode();
  96                       
  97                       graph.removeNode(nodeAt(e.getX(), e.getY()));
  98                   }else if(containsEdge(e.getX(), e.getY())) {
  99                        deselectEdge();
 100                       
 101                       graph.removeEdge(edgeAt(e.getX(), e.getY()));                      
 102                   }
 103               }
 104               graph.print();
 105           } 
 106           
 107           
 108           public void mouseReleased(MouseEvent e) {
 109               if(dragging) {
 110                     deselectNode();
 111                     dragging = false;
 112               }
 113           }
 114
 115        });      
 116        
 117        addMouseMotionListener( new MouseMotionAdapter() {
 118            public void mouseDragged(MouseEvent e) {
 119                
 120                if(nodeSelected()) {
 121                    dragging = true;
 122                    getSelectedNode().setLocation(e.getX(), e.getY());
 123                    
 124                }
 125            }
 126        });
 127
 128        bi = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_RGB);
 129        big = bi.createGraphics();        
 130        animate = null;
 131        animate = new Thread(this);
 132        animate.start();    
 133    }
 134
 135    public Graph getGraph() {
 136        return graph;
 137    }
 138
 139    public void setGraph(Graph graph) {
 140        this.graph = graph;
 141    }
 142
 143    public void update(Graphics g) {
 144        clear();
 145        big.setColor(Color.BLACK);
 146        if(graph.getNodes().size() > 0) {
 147
 148            if(graph.getEdges().size() > 0) {
 149            
 150                for(Edge e : graph.getEdges()) {
 151
 152                    e.draw(big);
 153
 154                }
 155            }
 156            
 157            for(Node n : graph.getNodes()) {
 158                n.draw(big);
 159            }
 160
 161            
 162        }
 163        g.drawImage(bi, 0, 0, this);
 164    }
 165
 166    public void paint(Graphics g) {
 167        update(g);
 168    }
 169    
 170    
 171    public void clear() {
 172        big.setColor(Color.WHITE);
 173        big.fillRect(0,0,getWidth(),getHeight());
 174    }
 175    
 176    
 177    
 178    public void run() {
 179        while(animate!=null) {
 180            
 181            try {
 182                animate.sleep(200);
 183
 184                repaint();
 185            }catch (Exception e) {
 186                System.out.println(e);
 187            }
 188            
 189        }
 190        big.dispose();
 191    }    
 192    
 193    public boolean containsNode(int x, int y) {
 194        for(Node n : graph.getNodes())
 195            if(n.contains(x, y))
 196                return true;          
 197        return false;
 198    }
 199    
 200    public Node nodeAt(int x, int y) {
 201        for(Node n : graph.getNodes())
 202            if(n.contains(x, y))
 203                return n;    
 204        return null;
 205    }
 206    
 207    public boolean containsEdge(int x, int y) {
 208        for(Edge e : graph.getEdges())
 209            if(e.contains(x, y))
 210                return true;
 211        return false;
 212    }
 213    
 214    public Edge edgeAt(int x, int y) {
 215        for(Edge e : graph.getEdges())
 216            if(e.contains(x, y))
 217                return e;    
 218        return null;        
 219    }
 220    
 221    public void setSelectedNode(Node n) {
 222        if(getSelectedNode() != null) getSelectedNode().setSelected(false);
 223        n.setSelected(true);
 224        selectedNode = n;
 225    }    
 226    
 227    public Node getSelectedNode() {
 228        return selectedNode;
 229    }
 230    
 231    public void deselectNode() {
 232        if(getSelectedNode() != null) {
 233            getSelectedNode().setSelected(false);
 234            selectedNode = null;
 235        }
 236    }
 237    
 238    public boolean nodeSelected() {
 239        return selectedNode != null;
 240    }
 241    
 242    public void setSelectedEdge(Edge e) {
 243        if(getSelectedEdge() != null) getSelectedEdge().setSelected(false);
 244        e.setSelected(true);
 245        selectedEdge = e;
 246
 247    }        
 248    public Edge getSelectedEdge() {
 249        return selectedEdge;
 250    }
 251    
 252    public void deselectEdge() {
 253        if(getSelectedEdge() != null) {
 254            getSelectedEdge().setSelected(false);
 255            selectedEdge = null;
 256        }
 257    }
 258    
 259    public void deselectAll() {
 260        deselectEdge();
 261        deselectNode();
 262    }    
 263    
 264    public boolean edgeSelected() {
 265        return selectedEdge != null;
 266    }
 267}
 268

· GraphCanvas.java ends ·

Generated by CHIP: Code Highlighting in PHP, version 2.7.0.