// -*- Mode: Jde -*-
//
// File           : Paperi.java
//
// Author         : Esko Nuutila <Esko.Nuutila@hut.fi>
//
// Created        : Mon Sep 24 14:20:31 2001 by enu
// Last modified  : Mon Sep 24 14:22:11 2001 by enu
//

import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;

// Tämä luokka toteuttaa panelin, johon piirto kohdistuu
// Kotitehtävien tekemiseksi ei tarvi tutustua tähän koodiin tai ymmärtää sitä.
// Jos käännettäessä tulee jokin virhe, älä muuta tätä luokkaa vaan omaa koodiasi.
public class Paperi extends JPanel {

    protected class ViivaKomento {
	protected double x1;
	protected double y1;
	protected double x2;
	protected double y2;
	protected Color väri;

	ViivaKomento(double x1, double y1, double x2, double y2, Color väri) {
	    this.x1 = x1;
	    this.y1 = y1;
	    this.x2 = x2;
	    this.y2 = y2;
	    this.väri = väri;
	}

	void tee(Graphics g) {
	    g.setColor(väri);
	    g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);
	}
    }

    private double leveys;
    private double korkeus;
    private Color väri;
    private List komennot;

    public Paperi(double leveys, double korkeus) {
	super();
	this.leveys = leveys;
	this.korkeus = korkeus;
	setPreferredSize(new Dimension((int)(leveys+8), (int)(korkeus+8)));
	setBorder(new EmptyBorder(4, 4, 4, 4));
	setBackground(Color.white);
	väri = Color.black;
	komennot = new LinkedList();
    }

    protected double leveys() { return leveys; }

    protected double korkeus() { return korkeus; }

    protected Color väri() { return väri; }

    protected void asetaVäri(Color väri) {
	this.väri = väri;
    }

    public void pyyhiKaikki() {
	komennot = new LinkedList();
    }

    public void lisääViiva(double x1, double y1, double x2, double y2) {
	komennot.add(new ViivaKomento(x1, korkeus - y1, x2, korkeus - y2, väri));
    }

    public void paintComponent(Graphics g) {
	super.paintComponent(g);
	//	System.err.println("paintComponent");
	Iterator it = komennot.iterator();
	while (it.hasNext()) {
	    ViivaKomento komento = (ViivaKomento)it.next();
	    //	    System.err.println("  " + komento);
	    komento.tee(g);
	}
    }
}
