/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package feuille.drawing.lib;
import feuille.drawing.lib.IShape;
import java.awt.Point;
import java.awt.Rectangle;
/**
*
* @author The Wingate 2940
*/
public class ReStart implements IShape, Cloneable {
//Les points de coordonnées 'origine' et 'dernier'.
java.awt.Point origin, last;
//Les variables suivantes avertissent d'une chagement de position en cours
//sur le point 'origine' (ochange) ou le point dernier (lchange).
boolean oChange = false; boolean lChange = false;
//marked sert à signalé un changement de position de façon globale.
boolean marked = false;
private Thickness thickness = Thickness.Big;
//Un "point" est défini par un rectangle sur le dessin et virtuellement;
//ce rectangle sert de conteneur de coordonnées.
//Les coordonnées du centre du rectangle étant les coordonnées réelles.
private Rectangle rect = new Rectangle();
private boolean inSelection = false, firstInSelection = false;
/** Création d'un déplacement. */
public ReStart(){
//nothing
}
/** Création d'un déplacement avec coordonnées. */
public ReStart(int originX1, int originY1, int lastX2, int lastY2){
rect.setRect(
lastX2-thickness.getThickness()/2,
lastY2-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
origin = new java.awt.Point(originX1,originY1);
last = new java.awt.Point(lastX2, lastY2);
}
public enum Thickness{
Big(10),Large(8),Medium(6),Small(4);
private int thick;
Thickness(int thick){
this.thick = thick;
}
public int getThickness(){
return thick;
}
}
public void updateThickness(Thickness thickness){
this.thickness = thickness;
rect.setRect(
origin.x-thickness.getThickness()/2,
origin.y-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
}
@Override
public String getCommand() {
return "m "+(int)last.getX()+" "+(int)last.getY();
}
@Override
public void setOriginPoint(int x, int y) {
origin = new java.awt.Point(x,y);
}
@Override
public Point getOriginPoint() {
return origin;
}
@Override
public void setLastPoint(int x, int y) {
last = new java.awt.Point(x, y);
}
@Override
public Point getLastPoint() {
return last;
}
@Override
public void setMarked(boolean b) {
marked = b;
}
@Override
public boolean getMarked() {
return marked;
}
/** Renvoie <b>true</b> si la coordonnée est concernée par un changement. */
public boolean isPointisinRectangle(java.awt.Point p){
return rect.contains(p);
}
/** Renvoie <b>true</b> si une extrémité du "move" est concernée par
* un changement et définit lequel dans l'élément "move". */
public boolean isPointisNear(java.awt.Point p){
int xp = (int)p.getX(); int yp = (int)p.getY();
Rectangle rect2 = new Rectangle(
xp-thickness.getThickness()/2,
yp-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
if(rect2.contains(origin)){oChange=true; return true;}
if(rect2.contains(last)){lChange=true; return true;}
return false;
}
/** Met à jour la position du point concerné. */
public void updatePointPosition(java.awt.Point p){
int x = (int)p.getX();
int y = (int)p.getY();
rect.setRect(
x-thickness.getThickness()/2,
y-thickness.getThickness()/2,
thickness.getThickness(),
thickness.getThickness());
origin = p;
last = p;
// if(oChange==true){origin = p;}
// if(lChange==true){last = p;}
}
/** Retourne à la configuration par défaut. */
public void updatehasEnded(){
oChange=false;
lChange=false;
}
@Override
public Object clone() {
Object o = null;
try {
// On récupère l'instance à renvoyer par l'appel de la
// méthode super.clone()
o = super.clone();
} catch(CloneNotSupportedException cnse) {
// Ne devrait jamais arriver car nous implémentons
// l'interface Cloneable
cnse.printStackTrace(System.err);
}
// on renvoie le clone
return o;
}
@Override
public void setInSelection(boolean b){
inSelection = b;
}
@Override
public boolean isInSelection(){
return inSelection;
}
public boolean hasCoordinates(int x, int y){
if(x == last.x && y == last.y){
return true;
}
return false;
}
public boolean hasCoordinates(java.awt.Point p){
if(p.x == last.x && p.y == last.y){
return true;
}
return false;
}
@Override
public void setFirstInSelection(boolean b){
firstInSelection = b;
}
@Override
public boolean isFirstInSelection(){
return firstInSelection;
}
}