Subversion Repositories eFlore/Applications.cel

Rev

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