Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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