6,12 → 6,18 |
|
import com.google.gwt.user.client.DOM; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.LoadListener; |
import com.google.gwt.user.client.ui.Widget; |
import com.gwtext.client.core.AnimationConfig; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ExtElement; |
import com.gwtext.client.core.RegionPosition; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.ToolTip; |
import com.gwtext.client.widgets.layout.BorderLayout; |
import com.gwtext.client.widgets.layout.BorderLayoutData; |
import com.gwtext.client.widgets.menu.BaseItem; |
64,11 → 70,20 |
*/ |
private String idImage = "0" ; |
|
private String[] infosImages = null ; |
private String[] infosImages[] = null ; |
|
private int index = 0 ; |
|
/** |
* true pour animer les transitions |
*/ |
private boolean animerTransition = false; |
/** |
* Détermine la durée de la transition |
*/ |
private float dureeAnimation = (float) 0.15; |
|
/** |
* Booleen d'initalisation général |
*/ |
private boolean initialise = false; |
77,6 → 92,12 |
* Booleen d'initalisation du conteneur d'image |
*/ |
private boolean conteneurInitialise = false; |
|
private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ; |
|
com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("Agrandissement") ; |
|
Image imgAgrandie = null; |
|
/** |
* Constructeur sans argument (privé car ne doit être utilisé) |
101,6 → 122,8 |
prev.setStylePrimaryName("x-view-zoom-button-p"); |
suiv.setStylePrimaryName("x-view-zoom-button-s"); |
|
imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ; |
|
// on crée une image qui gère le double clic et la roulette de la souris |
image = new Image() { |
|
126,6 → 149,11 |
int[] xy = {event.getClientX(),event.getClientY()} ; |
afficherMenu(xy) ; |
} |
|
// lors du double clic |
if (Event.ONDBLCLICK == DOM.eventGetType(event)) { |
afficherPanneauAgrandi(); |
} |
} |
|
}; |
132,7 → 160,7 |
|
image.setPixelSize(150, 150); |
|
infosImages = new String[0] ; |
infosImages = new String[0][0] ; |
|
this.setHeader(true); |
|
184,19 → 212,17 |
boolean repandreRafraichissement) { |
|
// si on reçoit une string |
if (nouvelleDonnees instanceof String[] && initialise |
&& conteneurInitialise && ((String[])nouvelleDonnees).length != 0) { |
infosImages = (String[]) nouvelleDonnees; |
if (nouvelleDonnees instanceof String[][] && initialise |
&& conteneurInitialise && ((String[][])nouvelleDonnees).length != 0) { |
infosImages = (String[][]) nouvelleDonnees; |
index = 0 ; |
afficherImage() ; |
|
} else { |
// sinon on met une image vide |
infosImages = new String[0] ; |
getImage().setUrl("ill_liaison.png"); |
imageWidth = getImage().getWidth(); |
imageHeight = getImage().getHeight(); |
verifierEtRetaillerImage(); |
infosImages = null ; |
afficherImage(); |
|
} |
} |
|
203,30 → 229,26 |
public void afficherImage() |
{ |
// c'est l'url de l'image qu'on associe à la vue |
if(infosImages.length != 0) |
if(infosImages != null && infosImages.length != 0) |
{ |
activerPanneau() ; |
getImage().setUrl(convertirIdEnUrl(infosImages[index])); |
imageWidth =getImage().getWidth(); |
getImage().setUrl(convertirIdEnUrl(infosImages[index][0])); |
imageWidth = Integer.parseInt(infosImages[index][1]); |
imageHeight = Integer.parseInt(infosImages[index][2]); |
verifierEtRetaillerImage(); |
} else { |
getImage().setUrl("ill_liaison.png"); |
imageWidth = getImage().getWidth(); |
imageHeight = getImage().getHeight(); |
verifierEtRetaillerImage(); |
if(imgZoom.isVisible()) { |
agrandirImage(); |
} |
prev.setEnabled(false); |
suiv.setEnabled(false); |
} |
else |
{ |
desactiverPanneau() ; |
} |
} |
|
/** |
* Desactive visuellement le panneau et les boutons |
*/ |
public void desactiverPanneau() { |
getImage().setUrl(""); |
prev.setEnabled(false); |
suiv.setEnabled(false); |
} |
|
/** |
* Active visuellement le panneau et les boutons |
*/ |
public void activerPanneau() { |
310,7 → 332,7 |
*/ |
public String getIdImage() |
{ |
return infosImages[index] ; |
return infosImages[index][0] ; |
} |
|
/** |
376,7 → 398,7 |
|
public void raz() { |
|
infosImages = new String[0] ; |
infosImages = new String[0][0] ; |
getImage().setUrl(""); |
|
} |
389,7 → 411,7 |
int nouvelleTaille = infosImages.length - 1 ; |
int indexSupp = index ; |
|
String[] nouveauInfosImages = new String[nouvelleTaille] ; |
String[][] nouveauInfosImages = new String[nouvelleTaille][3] ; |
int j = 0 ; |
|
for(int i = 0 ; i < infosImages.length ; i++) { |
460,72 → 482,28 |
* echeant |
*/ |
public void verifierEtRetaillerImage() { |
|
// si l'image est nulle |
if (image == null) { |
// on ne fait rien |
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(); |
|
int maxConteneur = Math.min(tailleConteneurX, tailleConteneurY); |
int max = Math.min(maxConteneur, 300); |
|
// si l'image ne rentre pas telle quelle (longueur ou hauteur trop |
// grande) |
// si la longueur de l'image est la plus grande des deux |
|
int maxImage = Math.max(originalX, originalY); |
|
if(maxImage == originalX) { |
// on prend la longueur comme taille de référence, qu'on met à |
// la longueur du conteneur |
nouvelleTailleX = max; |
// 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 = max; |
nouvelleTailleX = (int) Math.floor(nouvelleTailleY |
* rapportTaille); |
} |
*/ |
// on modifie enfin la taille de l'image pour qu'elle soit affichée |
int[] dim = calculerDimensions(getTailleImage()); |
int[] dim = calculerDimensions(getTailleImage(),300,imageConteneur.getWidth()); |
getImage().setSize("" + dim[0] + "px", |
"" + dim[1] + "px"); |
|
doLayout(); |
|
doLayout(); |
if(imgZoom.isVisible()) { |
agrandirImage(); |
} |
} |
|
public int[] calculerDimensions(int[] tailleXY) { |
public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) { |
|
float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ; |
float tailleOr = Math.min(300,imageConteneur.getWidth()) ; |
float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ; |
float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ; |
float[] XYresize = new float[2]; |
|
543,5 → 521,66 |
|
return res; |
} |
|
protected void agrandirImage() { |
|
String urlAgrandie = ""; |
|
if(infosImages == null) { |
urlAgrandie = "ill_liaison.png"; |
setTailleImage(265, 270); |
} else { |
urlAgrandie = convertirIdEnUrl(infosImages[index][0]).replace("_M", "_L") ; |
urlAgrandie = urlAgrandie.replace("/M/", "/L/") ; |
} |
|
if(imgAgrandie == null) { |
imgAgrandie = new Image(urlAgrandie); |
imgZoom.add(imgAgrandie); |
|
imgAgrandie.addLoadListener(new LoadListener() { |
|
public void onError(Widget sender) { |
// TODO Auto-generated method stub |
|
} |
|
public void onLoad(Widget sender) { |
int[] tailleImage = calculerDimensions(getTailleImage(),getTailleImage()[1],Window.getClientHeight()*0.75); |
//imgZoom.setSize(tailleImage[0], tailleImage[1]); |
//imgAgrandie.setSize(tailleImage[0]+"px", tailleImage[1]+"px"); |
ExtElement imgElement = Ext.get(imgAgrandie.getElement()); |
if(animerTransition) { |
AnimationConfig a = new AnimationConfig() ; |
a.setDuration((float) dureeAnimation); |
imgElement.setHeight(tailleImage[1], a); |
imgElement.setWidth(tailleImage[0], a); |
|
ExtElement winElement = Ext.get(imgZoom.getElement()); |
winElement.setHeight(tailleImage[1], a); |
winElement.setWidth(tailleImage[0], a); |
} else { |
imgElement.setHeight(tailleImage[1], false); |
imgElement.setWidth(tailleImage[0], false); |
|
ExtElement winElement = Ext.get(imgZoom.getElement()); |
winElement.setHeight(tailleImage[1], false); |
winElement.setWidth(tailleImage[0], false); |
} |
} |
|
|
}); |
|
} else { |
imgAgrandie.setUrl(urlAgrandie); |
imgAgrandie.setVisible(true); |
} |
} |
|
private void afficherPanneauAgrandi() { |
imgZoom.show(this.getElement()); |
agrandirImage(); |
} |
} |
|