All pastes #805168 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-12-04 03:12 UTC
rendered paste body
/******************************************************
 Cours :             ELE116
 Session :           Automne 2007
 Groupe :            01
 Projet :            Laboratoire #3
 Etudiant(e)(s) :    Nicolas Luna
 					 Rémi St-Onge
 Code(s) perm. :     LUNN27098506
 					 STOR15128308
 Professeur :        Hicham Mahkoum, Jean-François Pambrun
 Nom du fichier :    Vue1.java
 Date cree :         2007-11-29
 Date dern. modif.   
*******************************************************
 Historique des modifications
*******************************************************
 2007-11-29         Version initiale

 Cette classe est 
*******************************************************
// $Log: Vue1.java,v $
// Revision 1.6  2007/12/01 19:33:56  remistonge
// image maintenant scrolable!
//
// Revision 1.5  2007/12/01 17:32:34  remistonge
// modification pour drag and drop
//
// Revision 1.4  2007/11/30 21:47:53  remistonge
// Image modifiable
//
// Revision 1.3  2007/11/30 21:31:02  lunaid
// Ajout du observer pour etre notifier quand le modele change
//
// Revision 1.2  2007/11/29 14:53:38  remistonge
// changement d'encodage des caractères des fichiers.
//
// Revision 1.1  2007/11/28 02:12:45  remistonge
// Version initiale, création des classes vides
//
<<<<<<< Vue1.java
public class Vue1  {
=======
*******************************************************/

import javax.swing.JPanel;
import javax.swing.KeyStroke;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import java.util.Observer;
import java.util.Observable;

	
class Vue1 extends JPanel implements Observer, MouseListener, KeyListener,
							MouseMotionListener, MouseWheelListener
{
	private Image image;
	private int x=0;
	private int y=0;
	private int offsetX;
	private int offsetY;
	private double ancienScale;
	private int ancienX;
	private int ancienY;
	private boolean permettreDrag;
	private boolean permettreScroll;
	private Controleur controleur;
	private int CANEVAS_LARGEUR;
	private int CANEVAS_HAUTEUR; 
	private double scale=1;

	public Vue1(int CANEVAS_LARGEUR, int CANEVAS_HAUTEUR,Controleur controleur)
	{
		image=getToolkit().getImage("image.jpg");
		this.CANEVAS_HAUTEUR = CANEVAS_HAUTEUR;
		this.CANEVAS_LARGEUR = CANEVAS_LARGEUR;
		setSize(getPreferredSize());
		setMinimumSize(getPreferredSize());
		Vue1.this.setBackground(Color.white);


        addMouseListener(this);
        addMouseMotionListener(this);
        addMouseWheelListener(this);
        addKeyListener(this);
        this.setFocusable(true);

	}

	/**
	 * <code>getPreferredSize</code> retourne la dimension du JPanel
	 *
	 * @return a <code>Dimension</code> value
	 */
	public void setImage(String pathImage)
	{
		image=getToolkit().getImage(pathImage);

	}
	public Dimension getPreferredSize()
	{
		return new Dimension(CANEVAS_LARGEUR, CANEVAS_HAUTEUR);
	}

	/**
	 * <code>paintComponent</code> contient le code pour le dessin
	 * "fait sur commande"
	 *
	 * @param g a <code>Graphics</code> value
	 */
	public void paintComponent(Graphics g)
	{
		/* dessiner le fonds (background) -- obligatoire */
		super.paintComponent(g);

		g.setColor(new Color(0xffffff));
		g.fillRect(0, 0, CANEVAS_LARGEUR, CANEVAS_HAUTEUR);
		g.drawImage(image, x, y, (int )(image.getWidth(this)*scale),(int)( image.getHeight(this)*scale),this);
		
	}
	
	Modele modele;
	
	public Vue1(Modele modele)
	{
		this.modele = modele;
		modele.addObserver(this);
	}
	
	public void update(Observable o, Object arg)
	{
		System.out.println("CHANGEMENT OBSERVABLE");
	}
	
	public void mousePressed(MouseEvent e)
	{
		if (e.getX() > x 
				&& (e.getX() < (x+image.getWidth(this)*scale))
				&& e.getY() > y 
				&& (e.getY() < (y+(int)(image.getHeight(this)*scale))))
		{
			ancienX=e.getX();
			ancienY=e.getY();
			offsetX=e.getX()-x;
			offsetY=e.getY()-y;
			permettreDrag=true;
		}

	}
	public void mouseReleased(MouseEvent e)
	{
		if (permettreDrag)
		{
			System.out.println("creation translation: x=" + (int)(e.getX()-offsetX) +
					" y=" + (int)(e.getY()-offsetY) + " scale=" + scale);
			try
			{
				controleur.createTranslation(3, 3, 3, 3);
				
			}
			catch(Error er)
			{
				System.out.println("crash");
			}
			permettreDrag=false;
		}
	}
	public void mouseClicked(MouseEvent e) 
	{
	}
	public void mouseEntered(MouseEvent e) 
	{
	}
	public void mouseExited(MouseEvent e) 
	{
	}
	public void mouseMoved(MouseEvent e) 
	{

	}
	public void mouseDragged(MouseEvent e) 
	{
		if (permettreDrag)
		{
			x=e.getX()-offsetX;
			y=e.getY()-offsetY;
			repaint(); 
		}
	}
	public void mouseWheelMoved(MouseWheelEvent e) 
	{
		if (permettreScroll)
		{
			if(e.getWheelRotation() == 1)
			{
				scale=scale/1.2;
			}
			else
			{
				scale=scale*1.2;		
			}
			repaint(); 
		}
	}
	public void keyPressed(KeyEvent e)
	{

		if(e.getKeyCode()==17)
		{
			ancienScale=scale;
			permettreScroll=true;
		}
	}
	public void keyReleased(KeyEvent e)
	{
		if (e.getKeyCode()==17)
		{
			if (ancienScale != scale)
			{
				System.out.println("creation Scale: x=" + x +
						" y=" +y + " scale=" + scale);
				controleur.createScale(scale, ancienScale);
				permettreScroll=false;
			}
		}

		
	}
	public void	keyTyped(KeyEvent e) 
	{
		
	}


}