9,20 → 9,52 |
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é |
*/ |
private ImageMediateur iMediateur = null ; |
/** |
* La note actuellement affichée |
*/ |
private int noteEnCours = 0 ; |
/** |
* La note maximum |
*/ |
private int noteMax = 0 ; |
/** |
* La note au dessus de laquelle se trouve le curseur (pour gérer le rollover) |
*/ |
private int noteCurseur = 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é) |
*/ |
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 ; |
44,24 → 76,27 |
etoiles[i].addMouseListener(new MouseListenerAdapter() { |
|
|
|
// si la souris passe sur la barre |
public void onMouseEnter(Widget sender) { |
|
Image enCours = (Image)sender ; |
int nEnCours = 0 ; |
|
// 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("etoile_curseur.jpg") ; |
etoiles[i].setUrl("etoile_curseur.png") ; |
nEnCours = i ; |
} |
enCours.setUrl("etoile_curseur.jpg") ; |
enCours.setUrl("etoile_curseur.png") ; |
|
} |
|
|
// si la souris sort de la barre |
public void onMouseLeave(Widget sender) { |
|
// on affiche la véritable note |
afficherNote() ; |
} |
|
69,16 → 104,17 |
}) ; |
|
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) ; |
|
} |
89,24 → 125,33 |
|
} |
|
|
/** |
* 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[]) |
{ |
estNote = false ; |
|
{ |
// on récupère le premier élément (un entier, qui contient la note) |
String[] note = (String[])nouvelleDonnees ; |
int noteInt = Integer.parseInt(note[0]) ; |
|
if(noteInt != -1) |
|
// 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() ; |
} |
|
114,18 → 159,32 |
|
} |
|
/** |
* 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") ; |
133,25 → 192,32 |
} |
} |
|
/** |
* 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("etoile_notee.jpg") ; |
etoiles[i].setUrl("etoile_notee.png") ; |
} |
|
// 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("etoile_vide.jpg") ; |
etoiles[j].setUrl("etoile_vide.png") ; |
} |
} |
// sinon |
else |
{ |
// on remplit toute la barre avec des étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i].setUrl("etoile_vide.jpg") ; |
etoiles[i].setUrl("etoile_vide.png") ; |
} |
} |
|
158,6 → 224,10 |
|
} |
|
/** |
* Accesseur pour la note en cours sous forme de string |
* @return |
*/ |
public String getNote() |
{ |
return ""+noteEnCours ; |