Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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