EdgeView.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package view;
  2. import java.awt.BasicStroke;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.Point;
  7. import java.util.ArrayList;
  8. import javax.swing.JPanel;
  9. import bk.LayoutType;
  10. import graph.LayeredGraphEdge;
  11. /**
  12. * A drawable representation of an edge.
  13. * @author kolja
  14. *
  15. */
  16. public class EdgeView extends JPanel implements AnimatedView {
  17. private static final long serialVersionUID = 1L;
  18. private LayeredGraphEdge model;
  19. private LayoutType layout;
  20. public EdgeView( LayeredGraphEdge model, LayoutType lt ) {
  21. this.model = model;
  22. layout = lt;
  23. }
  24. @Override
  25. public void paint( Graphics g )
  26. {
  27. paintComponent( g );
  28. }
  29. private int getScaledX( int x )
  30. {
  31. double scale = Math.min( getWidth() / (double)getVirtualWidth(), getHeight() / (double)getVirtualHeight());
  32. x *= scale;
  33. return x;
  34. }
  35. private int getScaledY( int y )
  36. {
  37. double scale = Math.min( getWidth() / (double)getVirtualWidth(), getHeight() / (double)getVirtualHeight());
  38. y *= scale;
  39. return y;
  40. }
  41. @Override
  42. public void paintComponent( Graphics g )
  43. {
  44. ((Graphics2D)g).setStroke(new BasicStroke(1));
  45. g.setColor( Color.LIGHT_GRAY );
  46. if( model.isConflicted( layout ) )
  47. g.setColor( Color.RED );
  48. ArrayList<Point> bps = model.getLinePoints( layout );
  49. int x = getVirtualX();
  50. int y = getVirtualY();
  51. for( int i = 1; i < bps.size(); i++ )
  52. {
  53. g.drawLine( getScaledX((int)bps.get( i - 1 ).getX() - x), getScaledY((int)bps.get( i - 1 ).getY() - y), getScaledX((int)bps.get( i ).getX() - x), getScaledY((int)bps.get( i ).getY() - y ));
  54. }
  55. ((Graphics2D)g).fill( RenderHelper.createArrowShape( new Point( getScaledX( bps.get( 0 ).x - x ), getScaledY( bps.get( 0 ).y - y ) ), new Point( getScaledX( bps.get( bps.size() - 1 ).x - x ), getScaledY( bps.get( bps.size() - 1 ).y - y ) ) ) );
  56. }
  57. @Override
  58. public int getVirtualX() {
  59. int min = Integer.MAX_VALUE;
  60. ArrayList<Point> bps = model.getLinePoints( layout );
  61. for( Point p : bps )
  62. min = Math.min( min, (int)p.getX() - 5 );
  63. return min;
  64. }
  65. @Override
  66. public int getVirtualY() {
  67. int min = Integer.MAX_VALUE;
  68. ArrayList<Point> bps = model.getLinePoints( layout );
  69. for( Point p : bps )
  70. min = Math.min( min, (int)p.getY() - 5 );
  71. return min;
  72. }
  73. @Override
  74. public int getVirtualWidth() {
  75. int max = Integer.MIN_VALUE;
  76. ArrayList<Point> bps = model.getLinePoints( layout );
  77. for( Point p : bps )
  78. max = Math.max( max, (int)p.getX() + 5 );
  79. return max - getVirtualX();
  80. }
  81. @Override
  82. public int getVirtualHeight() {
  83. int max = Integer.MIN_VALUE;
  84. ArrayList<Point> bps = model.getLinePoints( layout );
  85. for( Point p : bps )
  86. max = Math.max( max, (int)p.getY() + 5 );
  87. return max - getVirtualY();
  88. }
  89. }