Subversion Repositories eFlore/Applications.cel

Rev

Rev 638 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 638 Rev 1292
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
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
				@Override
77
				public void onMouseEnter(Widget sender) {
78
				public void onMouseEnter(Widget sender) {
78
 
79
 
79
					Image enCours = (Image) sender;
80
					Image enCours = (Image) sender;
80
 
81
 
81
					// on met en surbrillance toutes les étoiles allant de la
82
					// on met en surbrillance toutes les étoiles allant de la
82
					// première jusqu'à
83
					// première jusqu'à
83
					// celle sous le curseur
84
					// celle sous le curseur
84
					for (int i = 0; etoiles[i] != enCours; i++) {
85
					for (int i = 0; etoiles[i] != enCours; i++) {
85
						etoiles[i].setUrl("note-hover.gif");
86
						etoiles[i].setUrl("note-hover.gif");
86
					}
87
					}
87
					enCours.setUrl("note-hover.gif");
88
					enCours.setUrl("note-hover.gif");
88
 
89
 
89
				}
90
				}
90
 
91
 
91
				// si la souris sort de la barre
92
				// si la souris sort de la barre
-
 
93
				@Override
92
				public void onMouseLeave(Widget sender) {
94
				public void onMouseLeave(Widget sender) {
93
 
95
 
94
					// on affiche la véritable note
96
					// on affiche la véritable note
95
					afficherNote();
97
					afficherNote();
96
				}
98
				}
97
 
99
 
98
			});
100
			});
99
 
101
 
100
			etoiles[i].addClickListener(new ClickListener() {
102
			etoiles[i].addClickListener(new ClickListener() {
101
				// si on clique sur une étoiles
103
				// si on clique sur une étoiles
-
 
104
				@Override
102
				public void onClick(Widget sender) {
105
				public void onClick(Widget sender) {
103
 
106
 
104
					int i = 0;
107
					int i = 0;
105
 
108
 
106
					// on récupère le numéro de l'étoile sur laquelle on a
109
					// on récupère le numéro de l'étoile sur laquelle on a
107
					// cliqué
110
					// cliqué
108
					while (etoiles[i] != (Image) sender) {
111
					while (etoiles[i] != (Image) sender) {
109
						i++;
112
						i++;
110
					}
113
					}
111
					// et on affecte la note
114
					// et on affecte la note
112
					noter(i);
115
					noter(i);
113
 
116
 
114
				}
117
				}
115
 
118
 
116
			});
119
			});
117
		}
120
		}
118
 
121
 
119
	}
122
	}
120
 
123
 
121
	/**
124
	/**
122
	 * Fonction héritée de l'interface rafraichissable
125
	 * Fonction héritée de l'interface rafraichissable
123
	 */
126
	 */
-
 
127
	@Override
124
	public void rafraichir(Object nouvelleDonnees,
128
	public void rafraichir(Object nouvelleDonnees,
125
			boolean repandreRaffraichissement) {
129
			boolean repandreRaffraichissement) {
126
 
130
 
127
		// si on recoit un tableau de string
131
		// si on recoit un tableau de string
128
		if (nouvelleDonnees instanceof String[]) {
132
		if (nouvelleDonnees instanceof String[]) {
129
			// on récupère le premier élément (un entier, qui contient la note)
133
			// on récupère le premier élément (un entier, qui contient la note)
130
			String[] note = (String[]) nouvelleDonnees;
134
			String[] note = (String[]) nouvelleDonnees;
131
			int noteInt = Integer.parseInt(note[0]);
135
			int noteInt = Integer.parseInt(note[0]);
132
 
136
 
133
			// si l'entier est une note valide
137
			// si l'entier est une note valide
134
			if (noteInt != -1 && noteInt >= 0) {
138
			if (noteInt != -1 && noteInt >= 0) {
135
 
139
 
136
				noter(noteInt);
140
				noter(noteInt);
137
			}
141
			}
138
			// sinon si l'entier vaut -1
142
			// sinon si l'entier vaut -1
139
			else {
143
			else {
140
				// alors on note avec 0
144
				// alors on note avec 0
141
				// et on met le booleen de notation a false (qui signifie que
145
				// et on met le booleen de notation a false (qui signifie que
142
				// l'image n'est pas encore notée)
146
				// l'image n'est pas encore notée)
143
				estNote = false;
147
				estNote = false;
144
				noteEnCours = 0;
148
				noteEnCours = 0;
145
				// et demande l'affichage
149
				// et demande l'affichage
146
				afficherNote();
150
				afficherNote();
147
			}
151
			}
148
 
152
 
149
		}
153
		}
150
 
154
 
151
	}
155
	}
152
 
156
 
153
	/**
157
	/**
154
	 * Affecte une note à la barre et rafraichit l'affichage
158
	 * Affecte une note à la barre et rafraichit l'affichage
155
	 * 
159
	 * 
156
	 * @param note
160
	 * @param note
157
	 *            la nouvelle note
161
	 *            la nouvelle note
158
	 */
162
	 */
159
	public void noter(int note) {
163
	public void noter(int note) {
160
		// on affecte la note
164
		// on affecte la note
161
		noteEnCours = note;
165
		noteEnCours = note;
162
		// on met le boolean de notation à true (l'image est notée)
166
		// on met le boolean de notation à true (l'image est notée)
163
		estNote = true;
167
		estNote = true;
164
		// et on demande l'affichage
168
		// et on demande l'affichage
165
		afficherNote();
169
		afficherNote();
166
	}
170
	}
167
 
171
 
168
	/**
172
	/**
169
	 * Setteur pour la note maximale
173
	 * Setteur pour la note maximale
170
	 * 
174
	 * 
171
	 * @param nMax
175
	 * @param nMax
172
	 *            la nouvelle note maximale
176
	 *            la nouvelle note maximale
173
	 */
177
	 */
174
	public void setNoteMax(int nMax) {
178
	public void setNoteMax(int nMax) {
175
		// on affecte la note
179
		// on affecte la note
176
		noteMax = nMax;
180
		noteMax = nMax;
177
		// on prépare le tableau d'image
181
		// on prépare le tableau d'image
178
		etoiles = new Image[noteMax];
182
		etoiles = new Image[noteMax];
179
 
183
 
180
		// qu'on remplit par defaut avec des images d'étoiles vides
184
		// qu'on remplit par defaut avec des images d'étoiles vides
181
		for (int i = 0; i < noteMax; i++) {
185
		for (int i = 0; i < noteMax; i++) {
182
			etoiles[i] = new Image("note-off.gif");
186
			etoiles[i] = new Image("note-off.gif");
183
			etoiles[i].setStylePrimaryName("x-view-notation-bar");
187
			etoiles[i].setStylePrimaryName("x-view-notation-bar");
184
			this.add(etoiles[i]);
188
			this.add(etoiles[i]);
185
		}
189
		}
186
	}
190
	}
187
 
191
 
188
	/**
192
	/**
189
	 * Affiche la note d'une image sous la forme d'étoiles
193
	 * Affiche la note d'une image sous la forme d'étoiles
190
	 */
194
	 */
191
	public void afficherNote() {
195
	public void afficherNote() {
192
		// si l'image est notée
196
		// si l'image est notée
193
		if (estNote) {
197
		if (estNote) {
194
			// on affiche autant d'étoiles que le chiffre de la note
198
			// on affiche autant d'étoiles que le chiffre de la note
195
			for (int i = 0; i <= noteEnCours; i++) {
199
			for (int i = 0; i <= noteEnCours; i++) {
196
				etoiles[i].setUrl("note-on.gif");
200
				etoiles[i].setUrl("note-on.gif");
197
			}
201
			}
198
			// et si elle est inférieure à la note maximale, on remplit le reste
202
			// et si elle est inférieure à la note maximale, on remplit le reste
199
			// par des étoiles vides
203
			// par des étoiles vides
200
			for (int j = noteEnCours + 1; j < noteMax; j++) {
204
			for (int j = noteEnCours + 1; j < noteMax; j++) {
201
				etoiles[j].setUrl("note-off.gif");
205
				etoiles[j].setUrl("note-off.gif");
202
			}
206
			}
203
		}
207
		}
204
		// sinon
208
		// sinon
205
		else {
209
		else {
206
			// on remplit toute la barre avec des étoiles vides
210
			// on remplit toute la barre avec des étoiles vides
207
			for (int i = 0; i < noteMax; i++) {
211
			for (int i = 0; i < noteMax; i++) {
208
				etoiles[i].setUrl("note-off.gif");
212
				etoiles[i].setUrl("note-off.gif");
209
			}
213
			}
210
		}
214
		}
211
 
215
 
212
	}
216
	}
213
 
217
 
214
	/**
218
	/**
215
	 * Accesseur pour la note en cours sous forme de string
219
	 * Accesseur pour la note en cours sous forme de string
216
	 * 
220
	 * 
217
	 * @return la note en cours sous forme d'une chaine de charactères
221
	 * @return la note en cours sous forme d'une chaine de charactères
218
	 */
222
	 */
219
	public String getNote() {
223
	public String getNote() {
220
		return "" + noteEnCours;
224
		return "" + noteEnCours;
221
	}
225
	}
222
 
226
 
223
}
227
}