4,7 → 4,14 |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
|
import com.google.gwt.core.client.GWT; |
import com.google.gwt.core.client.JavaScriptObject; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.LoadEvent; |
import com.google.gwt.event.dom.client.LoadHandler; |
import com.google.gwt.event.dom.client.MouseWheelEvent; |
import com.google.gwt.event.dom.client.MouseWheelHandler; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
97,6 → 104,8 |
*/ |
private boolean initialise = false; |
|
private Panel infosTaxon = new Panel(); |
|
/** |
* Booleen d'initalisation du conteneur d'image |
*/ |
104,16 → 113,6 |
|
private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour revenir à la vue précédente, utilisez la roulette ou les boutons fléchés pour faire défiler les images </div>") ; |
|
/** |
* true pour animer les transitions des animations |
*/ |
private boolean animerTransition = false; |
|
/** |
* duree des animation |
*/ |
private float dureeAnimation = (float) 0.15 ; |
|
/**. |
* boolean de gestion du double clic |
*/ |
123,22 → 122,6 |
|
private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1"); |
|
private int sourisX = 0; |
|
private int sourisY = 0; |
|
private int sourisXFin = 0; |
|
private int sourisYFin = 0; |
|
private float niveauZoom = 1; |
|
private float pasZoom = new Float(0.1); |
|
private int maxZoom = 10; |
|
private float minZoom = new Float(0.5); |
|
protected boolean scroll = false; |
|
/** |
197,9 → 180,15 |
|
//setTopToolbar(tb); |
|
infosTaxon = new Panel(); |
infosTaxon.setHeader(false); |
//infosTaxon.setBorder(false); |
infosTaxon.setHeight("30px"); |
|
this.add(prev, new BorderLayoutData(RegionPosition.WEST)); |
this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER)); |
this.add(suiv, new BorderLayoutData(RegionPosition.EAST)); |
this.add(infosTaxon, new BorderLayoutData(RegionPosition.SOUTH)); |
|
imageConteneur.setMaskDisabled(true); |
this.setBorder(false); |
232,7 → 221,9 |
// si on reçoit une string |
if (nouvelleDonnees instanceof String[] && initialise |
&& conteneurInitialise) { |
|
String[] infos = (String[]) nouvelleDonnees; |
|
// c'est l'url de l'image qu'on associe à la vue |
if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) { |
getImage().setUrl(infos[0]); |
243,8 → 234,16 |
|
setIdImage(infos[3]) ; |
|
//verifierEtRetaillerImage(); |
String infosTaxon = "" ; |
|
if(infos.length == 5 && infos[4] != null) { |
infosTaxon = infos[4]; |
} |
|
setInfosTaxon(infosTaxon); |
|
verifierEtRetaillerImage(); |
} |
} else { |
// sinon on met une image vide |
getImage().setUrl("vide.jpg"); |
287,61 → 286,9 |
*/ |
public void ajouterListeners() { |
|
modeZoom.addListener(new ButtonListenerAdapter() { |
image.addClickHandler(new ClickHandler() { |
|
public void onClick(Button button, EventObject e) { |
// TODO Auto-generated method stub |
if(modeZoom.isPressed()) { |
modeZoom.toggle(false); |
} else { |
modeZoom.toggle(true); |
} |
} |
|
public void onToggle(Button button, boolean pressed) { |
if(pressed) { |
scroll = true; |
image.addStyleName("img-curseur-depl"); |
} else { |
scroll = false; |
image.removeStyleName("img-curseur-depl"); |
niveauZoom = 1; |
verifierEtRetaillerImage(); |
Ext.get(image.getElement()).center(imageConteneur.getElement()); |
} |
} |
}); |
|
image.addLoadListener(new LoadListener() { |
|
public void onError(Widget sender) { |
// TODO Auto-generated method stub |
} |
|
public void onLoad(Widget sender) { |
|
/*int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth()); |
int[] tailleImage = calculerDimensions(getTailleImage(), max, max); |
ExtElement imgElement = Ext.get(image.getElement()); |
if(animerTransition) { |
AnimationConfig a = new AnimationConfig() ; |
a.setDuration((float) dureeAnimation); |
imgElement.setHeight(tailleImage[1], a); |
imgElement.setWidth(tailleImage[0], a); |
} else { |
imgElement.setHeight(tailleImage[1], false); |
imgElement.setWidth(tailleImage[0], false); |
}*/ |
verifierEtRetaillerImage(); |
Ext.get(image.getElement()).center(imageConteneur.getElement()); |
demasquerChargement(); |
} |
|
}); |
|
image.addClickListener(new ClickListener() { |
|
public void onClick(Widget sender) { |
public void onClick(ClickEvent event) { |
if(!scroll) { |
if(enClic) { |
getIMediateur().doubleClicZoomImage(); |
357,101 → 304,48 |
} |
} |
} |
|
}); |
|
image.addMouseWheelListener(new MouseWheelListener() { |
image.addLoadHandler(new LoadHandler() { |
|
public void onMouseWheel(Widget sender, MouseWheelVelocity velocity) { |
public void onLoad(LoadEvent event) { |
|
if(velocity.getDeltaY() > 0) { |
if(scroll) { |
zoomOut(); |
} else { |
suiv.click(); |
verifierEtRetaillerImage(); |
Ext.get(image.getElement()).center(imageConteneur.getElement()); |
demasquerChargement(); |
} |
} else { |
if(scroll) { |
zoomIn(); |
} else { |
prev.click(); |
} |
} |
} |
|
}); |
|
image.addMouseListener(new MouseListener() { |
image.addMouseWheelHandler(new MouseWheelHandler() { |
|
public void onMouseDown(Widget sender, int x, int y) { |
if(scroll) { |
Event.getCurrentEvent().preventDefault(); |
scroll = true; |
sourisX = x; |
sourisY = y; |
image.addStyleName("img-curseur-depl"); |
} |
} |
public void onMouseWheel(MouseWheelEvent event) { |
|
public void onMouseEnter(Widget sender) { |
// TODO Auto-generated method stub |
|
if(event.isNorth()) { |
masquerChargement(); |
getIMediateur().clicBoutonZoomImage("suiv"); |
} else { |
masquerChargement(); |
getIMediateur().clicBoutonZoomImage("prev"); |
} |
|
public void onMouseLeave(Widget sender) { |
// TODO Auto-generated method stub |
|
} |
|
public void onMouseMove(Widget sender, int x, int y) { |
|
sourisXFin = x; |
sourisYFin = y; |
Event.getCurrentEvent().preventDefault(); |
} |
|
public void onMouseUp(Widget sender, int x, int y) { |
|
if(scroll) { |
Event.getCurrentEvent().preventDefault(); |
|
if(sourisX - sourisXFin > 0) { |
Ext.get(image.getElement()).move(Direction.LEFT, sourisX - sourisXFin, false); |
} |
|
if(sourisXFin - sourisX > 0) { |
Ext.get(image.getElement()).move(Direction.RIGHT, sourisXFin - sourisX, false); |
} |
|
if(sourisY - sourisYFin > 0) { |
Ext.get(image.getElement()).move(Direction.UP, sourisY - sourisYFin, false); |
} |
|
if(sourisYFin - sourisY > 0) { |
Ext.get(image.getElement()).move(Direction.DOWN, sourisYFin - sourisY, false); |
} |
} |
} |
|
}); |
|
// gestion du clic sur le bouton précedent |
prev.addClickListener(new ClickListener() { |
prev.addClickHandler(new ClickHandler() { |
|
// en cas de clic |
public void onClick(Widget sender) { |
public void onClick(ClickEvent event) { |
// on notifie le médiateur |
masquerChargement(); |
getIMediateur().clicBoutonZoomImage("prev"); |
} |
|
}); |
|
// gestion du clic sur le bouton suivant |
suiv.addClickListener(new ClickListener() { |
suiv.addClickHandler(new ClickHandler() { |
|
// en cas de clic |
public void onClick(Widget sender) { |
public void onClick(ClickEvent event) { |
// on notifie le médiateur |
masquerChargement(); |
getIMediateur().clicBoutonZoomImage("suiv"); |
488,6 → 382,7 |
* echeant |
*/ |
public void verifierEtRetaillerImage() { |
|
// si l'image est nulle |
if (image == null) { |
// on ne fait rien |
494,89 → 389,28 |
return; |
} |
|
// on prend la taille originale de l'image |
/*int originalX = getTailleImage()[0]; |
int originalY = getTailleImage()[1]; |
|
// on la transforme en float (la division entre entier donne de curieux |
// résultats) |
float fOriginalX = (new Float(originalX)).floatValue(); |
float fOriginalY = (new Float(originalY)).floatValue(); |
|
// et on fait le rapport longueur sur hauteur (pour connaitre le ratio) |
float rapportTaille = fOriginalX / fOriginalY; |
|
// la nouvelle taille est pour le moment égale à l'ancienne |
int nouvelleTailleX = originalX; |
int nouvelleTailleY = originalY; |
|
// on prend la taille du conteneur |
int tailleConteneurX = imageConteneur.getWidth(); |
int tailleConteneurY = imageConteneur.getHeight();*/ |
|
// si celle-ci est égale à 0 (conteneur mal initialisé) |
/* |
* if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0) { // on |
* essaie de la calculer en fonction de la taille du parent et des |
* frères tailleConteneurY = this.getHeight() ; tailleConteneurX = |
* this.getWidth() - prev.getOffsetWidth() * 2 ; |
* } |
*/ |
/* |
// si l'image ne rentre pas telle quelle (longueur ou hauteur trop |
// grande) |
if (originalY > tailleConteneurY || originalX > tailleConteneurX) { |
// si la longueur de l'image est la plus grande des deux |
if (originalX > originalY) { |
// on prend la longueur comme taille de référence, qu'on met à |
// la longueur du conteneur |
nouvelleTailleX = tailleConteneurX; |
// et on recalcule la hauteur, par rapport à la nouvelle |
// longueur, en gardant le format de 'limage |
nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1 |
/ rapportTaille); |
} else { |
// si la hauteur est la plus grande, on fait le même genre |
// d'opération en prenant la hauteur comme référence |
nouvelleTailleY = tailleConteneurY; |
nouvelleTailleX = (int) Math.floor(nouvelleTailleY |
* rapportTaille); |
} |
} |
*/ |
// on modifie enfin la taille de l'image pour qu'elle soit affichée |
int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth()); |
|
int[] tailleImage = new int[2]; |
ExtElement imgElement = Ext.get(image.getElement()); |
|
if(max == imageConteneur.getHeight()) { |
//tailleImage[0] = getTailleImage()[0]; |
//tailleImage[1] = max; |
imgElement.setHeight(max, false); |
if(Ext.isIE()) { |
image.setHeight(calculerDimensions(getTailleImage(),max,max)[1]+"px"); |
image.setWidth(calculerDimensions(getTailleImage(),max,max)[0]+"px"); |
} else { |
//tailleImage[1] = getTailleImage()[0]; |
//tailleImage[0] = max; |
imgElement.setWidth(max, false); |
} |
|
//int[] tailleImage = calculerDimensions(getTailleImage(), max, max); |
//imgElement. |
/*if(animerTransition) { |
AnimationConfig a = new AnimationConfig() ; |
a.setDuration((float) dureeAnimation); |
imgElement.setHeight(tailleImage[1], a); |
imgElement.setWidth(tailleImage[0], a); |
if(max == imageConteneur.getHeight()) { |
tailleImage[0] = getTailleImage()[0]; |
tailleImage[1] = max; |
image.setHeight(max+"px"); |
|
} else { |
imgElement.setHeight(tailleImage[1], false); |
imgElement.setWidth(tailleImage[0], false); |
}*/ |
|
String strZoom = ""+niveauZoom+""; |
strZoom = strZoom.substring(0,3); |
|
valeurZoom.setText("x "+strZoom); |
tailleImage[1] = getTailleImage()[0]; |
tailleImage[0] = max; |
image.setWidth(max+"px"); |
} |
} |
} |
|
public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) { |
|
595,7 → 429,7 |
XYresize[0] = tailleOr*rapport ; |
} |
|
int[] res = {(int)Math.round(XYresize[0]*niveauZoom),(int) Math.round(XYresize[1]*niveauZoom)} ; |
int[] res = {(int)Math.round(XYresize[0]),(int) Math.round(XYresize[1])} ; |
|
return res; |
} |
697,6 → 531,16 |
idImage = id ; |
} |
|
public void setInfosTaxon(String nomTaxon) { |
|
if(nomTaxon != null && !nomTaxon.equals("")) { |
nomTaxon = getNomsObservationsFormatees(nomTaxon); |
} |
|
infosTaxon.setHtml("<div id='infos_taxon'><span class='texte_info_taxon'>"+nomTaxon+"</span></div>"); |
infosTaxon.doLayout(); |
} |
|
/** |
* renvoie la taille originale de l'image |
* |
708,6 → 552,14 |
return taille; |
} |
|
public boolean estPortrait() { |
return imageHeight > imageWidth; |
} |
|
public boolean estPaysage() { |
return !estPortrait(); |
} |
|
/** |
* Accesseur pour le conteneur de l'image |
* @return le conteur de l'image |
718,73 → 570,58 |
|
} |
|
private void zoomOut() { |
if(niveauZoom >= minZoom) { |
niveauZoom -= pasZoom; |
if(niveauZoom <= minZoom) { |
niveauZoom = minZoom; |
} |
verifierEtRetaillerImage(); |
gererDecalage(false); |
} |
} |
private String getNomsObservationsFormatees(String nomObs) { |
|
private void zoomIn() { |
if(niveauZoom < maxZoom ) { |
niveauZoom += pasZoom; |
if(niveauZoom >= maxZoom) { |
niveauZoom = maxZoom; |
} |
verifierEtRetaillerImage(); |
gererDecalage(true); |
} |
} |
String htmlInfobulle = ""; |
|
private void gererDecalage(boolean in) { |
String[][] obs = getObservationsAssociees(nomObs); |
|
float nZoom = niveauZoom; |
for(int i = 0; i < obs.length; i++) { |
|
if(niveauZoom < 1) { |
nZoom = 1/niveauZoom; |
if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) { |
htmlInfobulle += ", "+obs[i][1]; |
} |
} |
|
if(!in) { |
int diffX = imageConteneur.getWidth()/2 - sourisX; |
int diffY = imageConteneur.getHeight()/2 - sourisY; |
htmlInfobulle = htmlInfobulle.replaceFirst(", ", ""); |
|
if(diffX > 0) { |
Ext.get(image.getElement()).move(Direction.RIGHT, (int)((diffX/maxZoom)/nZoom), false); |
return htmlInfobulle; |
} |
|
if(-diffX > 0) { |
Ext.get(image.getElement()).move(Direction.LEFT, (int)(-(diffX/maxZoom)/nZoom), false); |
} |
private String[][] getObservationsAssociees(String nomObs) { |
|
if(diffY > 0) { |
Ext.get(image.getElement()).move(Direction.DOWN, (int)((diffY/maxZoom)/nZoom), false); |
if(nomObs.trim().equals("")) { |
return new String[0][0]; |
} |
|
if(-diffY > 0) { |
Ext.get(image.getElement()).move(Direction.UP, (int)(-(diffY/maxZoom)/nZoom), false); |
String[] obsTab = nomObs.split(";;"); |
String[][] obsAnalysees = new String[obsTab.length][3]; |
|
for(int i = 0; i < obsTab.length; i++) { |
|
obsAnalysees[i] = obsTab[i].split("#"); |
|
} |
} else { |
int diffX = imageConteneur.getWidth()/2; |
int diffY = imageConteneur.getHeight()/2; |
if(diffX > 0) { |
Ext.get(image.getElement()).move(Direction.LEFT, (int)((diffX/maxZoom)/nZoom), false); |
} |
|
if(-diffX > 0) { |
Ext.get(image.getElement()).move(Direction.RIGHT, (int)((-diffX/maxZoom)/nZoom), false); |
return obsAnalysees; |
} |
|
if(diffY > 0) { |
Ext.get(image.getElement()).move(Direction.UP, (int)((diffY/maxZoom)/nZoom), false); |
private boolean[] estAssocieeTransmise(String nomObs) { |
|
String[][] obs = getObservationsAssociees(nomObs); |
boolean[] associeesTranmises = {false, false}; |
|
if(obs.length > 0) { |
associeesTranmises[0] = true; |
} |
|
if(-diffY > 0) { |
Ext.get(image.getElement()).move(Direction.DOWN, (int)(-(diffY/maxZoom)/nZoom), false); |
for(int i = 0; i < obs.length; i++) { |
|
if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) { |
associeesTranmises[1] = true; |
} |
} |
|
return associeesTranmises; |
} |
} |