Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 47 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
45 aperonnet 1
package org.tela_botanica.client.vues;
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
 
6
import com.google.gwt.user.client.ui.ClickListener;
7
import com.google.gwt.user.client.ui.Image;
8
import com.google.gwt.user.client.ui.MouseListenerAdapter;
9
import com.google.gwt.user.client.ui.Widget;
10
import com.gwtext.client.widgets.Panel;
11
 
48 aperonnet 12
/**
13
 * Une barre de notation avec des étoiles, tout ce qu'il ya de plus classique,
14
 * utilisant Ajax (et pas CSS)
15
 * @author aurelien
16
 *
17
 */
45 aperonnet 18
public class BarreNotationVue extends Panel implements Rafraichissable {
19
 
48 aperonnet 20
	/**
21
	 * Le médiateur associé
22
	 */
45 aperonnet 23
	private ImageMediateur iMediateur = null ;
48 aperonnet 24
	/**
25
	 * La note actuellement affichée
26
	 */
45 aperonnet 27
	private int noteEnCours = 0 ;
48 aperonnet 28
	/**
29
	 * La note maximum
30
	 */
45 aperonnet 31
	private int noteMax = 0 ;
48 aperonnet 32
	/**
33
	 * La note au dessus de laquelle se trouve le curseur (pour gérer le rollover)
34
	 */
45 aperonnet 35
	private int noteCurseur = 0 ;
48 aperonnet 36
	/**
37
	 * Booléen indiquant si une note est affectée à la barre en ce moment
38
	 */
46 aperonnet 39
	private boolean estNote = false ;
48 aperonnet 40
	/**
41
	 * Tablmeau d'images contenant les étoiles affichées
42
	 */
45 aperonnet 43
	private Image[] etoiles = null ;
44
 
48 aperonnet 45
	/**
46
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
47
	 */
45 aperonnet 48
	private BarreNotationVue()
49
	{
50
		super() ;
51
	}
52
 
48 aperonnet 53
	/**
54
	 * Constructeur avec arguments
55
	 * @param im le médiateur à associer à la vue
56
	 * @param noteMax la note maximale
57
	 */
45 aperonnet 58
	public BarreNotationVue(ImageMediateur im, int noteMax)
59
	{
60
		iMediateur = im ;
61
		setNoteMax(noteMax) ;
46 aperonnet 62
		this.setSize(200, 100) ;
63
		this.setBodyBorder(false) ;
64
		this.setBorder(false) ;
45 aperonnet 65
 
66
		ajouterListeners() ;
67
 
68
	}
69
 
70
	public void ajouterListeners()
71
	{
72
		for (int i = 0; i < etoiles.length; i++) {
73
 
74
			noteCurseur = i ;
75
 
76
			etoiles[i].addMouseListener(new MouseListenerAdapter() {
77
 
78
 
48 aperonnet 79
				// si la souris passe sur la barre
45 aperonnet 80
				public void onMouseEnter(Widget sender) {
81
 
82
					Image enCours = (Image)sender ;
83
					int nEnCours = 0 ;
84
 
48 aperonnet 85
					// on met en surbrillance toutes les étoiles allant de la première jusqu'à
86
					// celle sous le curseur
45 aperonnet 87
					for(int i = 0 ; etoiles[i] != enCours ; i++)
88
					{
48 aperonnet 89
						etoiles[i].setUrl("etoile_curseur.png") ;
45 aperonnet 90
						nEnCours = i ;
91
					}
48 aperonnet 92
						enCours.setUrl("etoile_curseur.png") ;
45 aperonnet 93
 
94
				}
95
 
48 aperonnet 96
				// si la souris sort de la barre
45 aperonnet 97
				public void onMouseLeave(Widget sender) {
98
 
48 aperonnet 99
					// on affiche la véritable note
46 aperonnet 100
					afficherNote() ;
45 aperonnet 101
				}
102
 
103
 
104
			}) ;
105
 
106
			etoiles[i].addClickListener(new ClickListener() {
48 aperonnet 107
				// si on clique sur une étoiles
45 aperonnet 108
				public void onClick(Widget sender) {
109
 
110
					int i = 0 ;
111
 
48 aperonnet 112
					// on récupère le numéro de l'étoile sur laquelle on a cliqué
45 aperonnet 113
					while(etoiles[i] != (Image)sender)
114
					{
115
						i++ ;
116
					}
48 aperonnet 117
					// et on affecte la note
46 aperonnet 118
					noter(i) ;
45 aperonnet 119
 
120
				}
121
 
122
 
123
			}) ;
124
		}
125
 
126
	}
127
 
48 aperonnet 128
	/**
129
	 * Fonction héritée de l'interface rafraichissable
130
	 */
45 aperonnet 131
	public void rafraichir(Object nouvelleDonnees,
132
			boolean repandreRaffraichissement) {
133
 
48 aperonnet 134
		// si on recoit un tableau de string
46 aperonnet 135
		if(nouvelleDonnees instanceof String[])
48 aperonnet 136
		{
137
			// on récupère le premier élément (un entier, qui contient la note)
46 aperonnet 138
			String[] note = (String[])nouvelleDonnees ;
139
			int noteInt = Integer.parseInt(note[0]) ;
48 aperonnet 140
 
141
			// si l'entier est une note valide
142
			if(noteInt != -1 && noteInt >= 0)
46 aperonnet 143
			{
48 aperonnet 144
 
46 aperonnet 145
				noter(noteInt) ;
146
			}
48 aperonnet 147
			// sinon si l'entier vaut -1
46 aperonnet 148
			else
149
			{
48 aperonnet 150
				// alors on note avec 0
151
				// et on met le booleen de notation a false (qui signifie que l'image n'est pas encore notée)
152
				estNote = false ;
46 aperonnet 153
				noteEnCours = 0 ;
48 aperonnet 154
				// et demande l'affichage
46 aperonnet 155
				afficherNote() ;
156
			}
157
 
158
		}
159
 
45 aperonnet 160
	}
161
 
48 aperonnet 162
	/**
163
	 * Affecte une note à la barre et rafraichit l'affichage
164
	 * @param note la nouvelle note
165
	 */
46 aperonnet 166
	public void noter(int note)
167
	{
48 aperonnet 168
		// on affecte la note
46 aperonnet 169
		noteEnCours = note ;
48 aperonnet 170
		// on met le boolean de notation à true (l'image est notée)
46 aperonnet 171
		estNote = true ;
48 aperonnet 172
		// et on demande l'affichage
46 aperonnet 173
		afficherNote() ;
174
	}
175
 
48 aperonnet 176
	/**
177
	 * Setteur pour la note maximale
178
	 * @param nMax la nouvelle note maximale
179
	 */
45 aperonnet 180
	public void setNoteMax(int nMax)
181
	{
48 aperonnet 182
		// on affecte la note
45 aperonnet 183
		noteMax = nMax ;
48 aperonnet 184
		// on prépare le tableau d'image
45 aperonnet 185
		etoiles = new Image[noteMax] ;
186
 
48 aperonnet 187
		// qu'on remplit par defaut avec des images d'étoiles vides
45 aperonnet 188
		for(int i = 0 ; i < noteMax ; i++)
189
		{
190
			etoiles[i] = new Image("etoile_vide.jpg") ;
191
			this.add(etoiles[i]) ;
192
		}
193
	}
194
 
48 aperonnet 195
	/**
196
	 * Affiche la note d'une image sous la forme d'étoiles
197
	 */
46 aperonnet 198
	public void afficherNote()
45 aperonnet 199
	{
48 aperonnet 200
		// si l'image est notée
46 aperonnet 201
		if(estNote)
45 aperonnet 202
		{
48 aperonnet 203
			// on affiche autant d'étoiles que le chiffre de la note
46 aperonnet 204
			for(int i = 0 ; i <= noteEnCours ; i++)
205
			{
48 aperonnet 206
				etoiles[i].setUrl("etoile_notee.png") ;
46 aperonnet 207
			}
48 aperonnet 208
			// et si elle est inférieure à la note maximale, on remplit le reste par des étoiles vides
46 aperonnet 209
			for (int j = noteEnCours + 1 ; j < noteMax ; j++)
210
			{
48 aperonnet 211
				etoiles[j].setUrl("etoile_vide.png") ;
46 aperonnet 212
			}
45 aperonnet 213
		}
48 aperonnet 214
		// sinon
46 aperonnet 215
		else
216
		{
48 aperonnet 217
			// on remplit toute la barre avec des étoiles vides
46 aperonnet 218
			for(int i = 0 ; i < noteMax ; i++)
219
			{
48 aperonnet 220
				etoiles[i].setUrl("etoile_vide.png") ;
46 aperonnet 221
			}
222
		}
45 aperonnet 223
 
46 aperonnet 224
 
45 aperonnet 225
	}
46 aperonnet 226
 
48 aperonnet 227
	/**
228
	 * Accesseur pour la note en cours sous forme de string
229
	 * @return
230
	 */
46 aperonnet 231
	public String getNote()
232
	{
233
		return ""+noteEnCours ;
234
	}
45 aperonnet 235
 
236
}