New file |
0,0 → 1,223 |
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("note_off.gif"); |
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 la note en cours sous forme d'une chaine de charactères |
*/ |
public String getNote() { |
return "" + noteEnCours; |
} |
|
} |