New file |
0,0 → 1,232 |
package org.tela_botanica.client.vues; |
|
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
|
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.MouseListenerAdapter; |
import com.google.gwt.user.client.ui.Widget; |
import com.gwtext.client.widgets.Panel; |
|
/** |
* Une barre de notation avec des étoiles, tout ce qu'il ya de plus classique, |
* utilisant Ajax (et pas CSS) |
* @author aurelien |
* |
*/ |
public class BarreNotationVue extends Panel implements Rafraichissable { |
|
/** |
* Le médiateur associé |
*/ |
@SuppressWarnings("unused") |
private ImageMediateur iMediateur = null ; |
/** |
* La note actuellement affichée |
*/ |
private int noteEnCours = 0 ; |
/** |
* La note maximum |
*/ |
private int noteMax = 0 ; |
/** |
* Booléen indiquant si une note est affectée à la barre en ce moment |
*/ |
private boolean estNote = false ; |
/** |
* Tablmeau d'images contenant les étoiles affichées |
*/ |
private Image[] etoiles = null ; |
|
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
@SuppressWarnings("unused") |
private BarreNotationVue() |
{ |
super() ; |
} |
|
/** |
* Constructeur avec arguments |
* @param im le médiateur à associer à la vue |
* @param noteMax la note maximale |
*/ |
public BarreNotationVue(ImageMediateur im, int noteMax) |
{ |
iMediateur = im ; |
setNoteMax(noteMax) ; |
this.setSize(200, 100) ; |
this.setBodyBorder(false) ; |
this.setBorder(false) ; |
this.setCls("x-view-notation") ; |
|
ajouterListeners() ; |
|
} |
|
public void ajouterListeners() |
{ |
for (int i = 0; i < etoiles.length; i++) { |
|
etoiles[i].addMouseListener(new MouseListenerAdapter() { |
|
|
// si la souris passe sur la barre |
public void onMouseEnter(Widget sender) { |
|
Image enCours = (Image)sender ; |
|
// on met en surbrillance toutes les étoiles allant de la première jusqu'à |
// celle sous le curseur |
for(int i = 0 ; etoiles[i] != enCours ; i++) |
{ |
etoiles[i].setUrl("note-hover.gif") ; |
} |
enCours.setUrl("note-hover.gif") ; |
|
} |
|
// si la souris sort de la barre |
public void onMouseLeave(Widget sender) { |
|
// on affiche la véritable note |
afficherNote() ; |
} |
|
|
}) ; |
|
etoiles[i].addClickListener(new ClickListener() { |
// si on clique sur une étoiles |
public void onClick(Widget sender) { |
|
int i = 0 ; |
|
// on récupère le numéro de l'étoile sur laquelle on a cliqué |
while(etoiles[i] != (Image)sender) |
{ |
i++ ; |
} |
// et on affecte la note |
noter(i) ; |
|
} |
|
|
}) ; |
} |
|
} |
|
/** |
* Fonction héritée de l'interface rafraichissable |
*/ |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
|
// si on recoit un tableau de string |
if(nouvelleDonnees instanceof String[]) |
{ |
// on récupère le premier élément (un entier, qui contient la note) |
String[] note = (String[])nouvelleDonnees ; |
int noteInt = Integer.parseInt(note[0]) ; |
|
// si l'entier est une note valide |
if(noteInt != -1 && noteInt >= 0) |
{ |
|
noter(noteInt) ; |
} |
// sinon si l'entier vaut -1 |
else |
{ |
// alors on note avec 0 |
// et on met le booleen de notation a false (qui signifie que l'image n'est pas encore notée) |
estNote = false ; |
noteEnCours = 0 ; |
// et demande l'affichage |
afficherNote() ; |
} |
|
} |
|
} |
|
/** |
* Affecte une note à la barre et rafraichit l'affichage |
* @param note la nouvelle note |
*/ |
public void noter(int note) |
{ |
// on affecte la note |
noteEnCours = note ; |
// on met le boolean de notation à true (l'image est notée) |
estNote = true ; |
// et on demande l'affichage |
afficherNote() ; |
} |
|
/** |
* Setteur pour la note maximale |
* @param nMax la nouvelle note maximale |
*/ |
public void setNoteMax(int nMax) |
{ |
// on affecte la note |
noteMax = nMax ; |
// on prépare le tableau d'image |
etoiles = new Image[noteMax] ; |
|
// qu'on remplit par defaut avec des images d'étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i] = new Image("etoile_vide.jpg") ; |
etoiles[i].setStylePrimaryName("x-view-notation-bar") ; |
this.add(etoiles[i]) ; |
} |
} |
|
/** |
* Affiche la note d'une image sous la forme d'étoiles |
*/ |
public void afficherNote() |
{ |
// si l'image est notée |
if(estNote) |
{ |
// on affiche autant d'étoiles que le chiffre de la note |
for(int i = 0 ; i <= noteEnCours ; i++) |
{ |
etoiles[i].setUrl("note-on.gif") ; |
} |
// et si elle est inférieure à la note maximale, on remplit le reste par des étoiles vides |
for (int j = noteEnCours + 1 ; j < noteMax ; j++) |
{ |
etoiles[j].setUrl("note-off.gif") ; |
} |
} |
// sinon |
else |
{ |
// on remplit toute la barre avec des étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i].setUrl("note-off.gif") ; |
} |
} |
|
|
} |
|
/** |
* Accesseur pour la note en cours sous forme de string |
* @return |
*/ |
public String getNote() |
{ |
return ""+noteEnCours ; |
} |
|
} |