12,8 → 12,9 |
/** |
* 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 { |
|
21,212 → 22,202 |
* Le médiateur associé |
*/ |
@SuppressWarnings("unused") |
private ImageMediateur iMediateur = null ; |
private ImageMediateur iMediateur = null; |
/** |
* La note actuellement affichée |
*/ |
private int noteEnCours = 0 ; |
private int noteEnCours = 0; |
/** |
* La note maximum |
*/ |
private int noteMax = 0 ; |
private int noteMax = 0; |
/** |
* Booléen indiquant si une note est affectée à la barre en ce moment |
*/ |
private boolean estNote = false ; |
private boolean estNote = false; |
/** |
* Tablmeau d'images contenant les étoiles affichées |
*/ |
private Image[] etoiles = null ; |
|
private Image[] etoiles = null; |
|
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
@SuppressWarnings("unused") |
private BarreNotationVue() |
{ |
super() ; |
private BarreNotationVue() { |
super(); |
} |
|
|
/** |
* Constructeur avec arguments |
* @param im le médiateur à associer à la vue |
* @param noteMax la note maximale |
* |
* @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 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() |
{ |
|
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'à |
|
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") ; |
for (int i = 0; etoiles[i] != enCours; i++) { |
etoiles[i].setUrl("note-hover.gif"); |
} |
enCours.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() ; |
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++ ; |
} |
|
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) ; |
|
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[]) |
{ |
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]) ; |
|
String[] note = (String[]) nouvelleDonnees; |
int noteInt = Integer.parseInt(note[0]); |
|
// si l'entier est une note valide |
if(noteInt != -1 && noteInt >= 0) |
{ |
|
noter(noteInt) ; |
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 ; |
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() ; |
afficherNote(); |
} |
|
|
} |
|
|
} |
|
|
/** |
* Affecte une note à la barre et rafraichit l'affichage |
* @param note la nouvelle note |
* |
* @param note |
* la nouvelle note |
*/ |
public void noter(int note) |
{ |
public void noter(int note) { |
// on affecte la note |
noteEnCours = note ; |
noteEnCours = note; |
// on met le boolean de notation à true (l'image est notée) |
estNote = true ; |
estNote = true; |
// et on demande l'affichage |
afficherNote() ; |
afficherNote(); |
} |
|
|
/** |
* Setteur pour la note maximale |
* @param nMax la nouvelle note maximale |
* |
* @param nMax |
* la nouvelle note maximale |
*/ |
public void setNoteMax(int nMax) |
{ |
public void setNoteMax(int nMax) { |
// on affecte la note |
noteMax = nMax ; |
noteMax = nMax; |
// on prépare le tableau d'image |
etoiles = new Image[noteMax] ; |
|
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]) ; |
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() |
{ |
public void afficherNote() { |
// si l'image est notée |
if(estNote) |
{ |
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") ; |
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") ; |
// 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 |
{ |
else { |
// on remplit toute la barre avec des étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i].setUrl("note-off.gif") ; |
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 ; |
public String getNote() { |
return "" + noteEnCours; |
} |
|
} |