Rev 5 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
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 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("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é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*/public String getNote(){return ""+noteEnCours ;}}