Rev 195 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.image;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 barrepublic void onMouseEnter(Widget sender) {Image enCours = (Image) sender;// on met en surbrillance toutes les étoiles allant de la// première jusqu'à// celle sous le curseurfor (int i = 0; etoiles[i] != enCours; i++) {etoiles[i].setUrl("note-hover.gif");}enCours.setUrl("note-hover.gif");}// si la souris sort de la barrepublic void onMouseLeave(Widget sender) {// on affiche la véritable noteafficherNote();}});etoiles[i].addClickListener(new ClickListener() {// si on clique sur une étoilespublic 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 notenoter(i);}});}}/*** Fonction héritée de l'interface rafraichissable*/public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {// si on recoit un tableau de stringif (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 valideif (noteInt != -1 && noteInt >= 0) {noter(noteInt);}// sinon si l'entier vaut -1else {// 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'affichageafficherNote();}}}/*** Affecte une note à la barre et rafraichit l'affichage** @param note* la nouvelle note*/public void noter(int note) {// on affecte la notenoteEnCours = note;// on met le boolean de notation à true (l'image est notée)estNote = true;// et on demande l'affichageafficherNote();}/*** Setteur pour la note maximale** @param nMax* la nouvelle note maximale*/public void setNoteMax(int nMax) {// on affecte la notenoteMax = nMax;// on prépare le tableau d'imageetoiles = new Image[noteMax];// qu'on remplit par defaut avec des images d'étoiles videsfor (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éeif (estNote) {// on affiche autant d'étoiles que le chiffre de la notefor (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 videsfor (int j = noteEnCours + 1; j < noteMax; j++) {etoiles[j].setUrl("note-off.gif");}}// sinonelse {// on remplit toute la barre avec des étoiles videsfor (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;}}