package e104.skeleton ;

import javax.swing.JFrame ;

import java.awt.Component ;
import java.awt.Container ;
import java.awt.Graphics2D ;
import java.awt.Graphics ;
import java.awt.Dimension ;
import java.awt.Color ;
import java.awt.Rectangle ;

import java.awt.event.MouseAdapter ;
import java.awt.event.MouseMotionAdapter ;
import java.awt.event.MouseEvent ;

class PersistentCanvas extends Component {

    Rectangle r = null ;

    PersistentCanvas() {
    }

    public void paint(Graphics graphics) {
	   Graphics2D g = (Graphics2D)graphics ;

	   g.setColor(getBackground()) ;
	   g.fillRect(0, 0, getWidth(), getHeight()) ;
    
	   if (r==null) return ;

	   g.setColor(Color.LIGHT_GRAY) ;
	   g.fill(r) ;
	   g.setColor(Color.BLACK) ;
	   g.draw(r) ;
    }
	   
}

/**
 * @author Nicolas Roussel (roussel@lri.fr)
 *
 */
public class GraphicalEditor extends JFrame {

    private PersistentCanvas canvas ;

    public GraphicalEditor(String title, int width, int height) {
	   super(title) ;

	   Container pane = getContentPane() ;

	   canvas = new PersistentCanvas() ;
	   canvas.setBackground(Color.WHITE) ;
	   canvas.setPreferredSize(new Dimension(width,height)) ;
	   pane.add(canvas) ;

	   canvas.addMouseListener(new MouseAdapter() {
			 public void mousePressed(MouseEvent evt) {
				int width=0, height=0 ;
				canvas.r = new Rectangle(evt.getX(), evt.getY(), width, height) ;
				canvas.repaint() ;
			 }
			 public void mouseReleased(MouseEvent evt) {
				canvas.r = null ;
				canvas.repaint() ;
			 }
		  }) ;
    
	   canvas.addMouseMotionListener(new MouseMotionAdapter() {
			 public void mouseDragged(MouseEvent evt) {
				if (canvas.r==null) return ;
				canvas.r.width = evt.getX() - canvas.r.x ;
				canvas.r.height = evt.getY() - canvas.r.y ;
				canvas.repaint() ;
			 }
		  }) ;

	   pack() ;
	   setVisible(true) ;
    }

    public static void main(String[] args) {
	   GraphicalEditor editor = new GraphicalEditor("GraphicalEditor",800,600) ;
	   editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
    }

}
