Subversion Repositories eFlore/Applications.cel

Rev

Rev 7 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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