Subversion Repositories eFlore/Archives.cel-v2

Rev

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

Rev 25 Rev 28
1
package org.tela_botanica.client.image;
1
package org.tela_botanica.client.image;
2
 
2
 
3
import org.tela_botanica.client.interfaces.Rafraichissable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.VueListable;
4
import org.tela_botanica.client.interfaces.VueListable;
5
import org.tela_botanica.client.vues.ArbreMotsClesVue;
5
import org.tela_botanica.client.vues.ArbreMotsClesVue;
6
import org.tela_botanica.client.vues.BarreOutilsVue;
6
import org.tela_botanica.client.vues.BarreOutilsVue;
7
import org.tela_botanica.client.vues.GalerieImageVue;
7
import org.tela_botanica.client.vues.GalerieImageVue;
8
import org.tela_botanica.client.vues.ListeImageVue;
8
import org.tela_botanica.client.vues.ListeImageVue;
9
import org.tela_botanica.client.vues.MenuImageVue;
9
import org.tela_botanica.client.vues.MenuImageVue;
10
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
10
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
11
import org.tela_botanica.client.vues.ZoomImageVue;
11
import org.tela_botanica.client.vues.ZoomImageVue;
12
 
12
 
13
import com.google.gwt.user.client.DOM;
13
import com.google.gwt.user.client.DOM;
14
import com.google.gwt.user.client.Element;
14
import com.google.gwt.user.client.Element;
15
import com.google.gwt.user.client.Event;
15
import com.google.gwt.user.client.Event;
16
import com.google.gwt.user.client.Window;
16
import com.google.gwt.user.client.Window;
17
import com.gwtext.client.core.EventObject;
17
import com.gwtext.client.core.EventObject;
18
import com.gwtext.client.core.RegionPosition;
18
import com.gwtext.client.core.RegionPosition;
19
import com.gwtext.client.data.Record;
19
import com.gwtext.client.data.Record;
20
import com.gwtext.client.data.Store;
20
import com.gwtext.client.data.Store;
-
 
21
import com.gwtext.client.data.Tree;
21
import com.gwtext.client.widgets.DataView;
22
import com.gwtext.client.widgets.DataView;
22
import com.gwtext.client.widgets.Panel;
23
import com.gwtext.client.widgets.Panel;
23
import com.gwtext.client.widgets.TabPanel;
24
import com.gwtext.client.widgets.TabPanel;
24
import com.gwtext.client.widgets.layout.BorderLayout;
25
import com.gwtext.client.widgets.layout.BorderLayout;
25
import com.gwtext.client.widgets.layout.BorderLayoutData;
26
import com.gwtext.client.widgets.layout.BorderLayoutData;
26
import com.gwtext.client.widgets.layout.FitLayout;
27
import com.gwtext.client.widgets.layout.FitLayout;
27
import com.gwtext.client.widgets.menu.BaseItem;
28
import com.gwtext.client.widgets.menu.BaseItem;
28
import com.gwtext.client.widgets.menu.Item;
29
import com.gwtext.client.widgets.menu.Item;
29
import com.gwtext.client.widgets.menu.Menu;
30
import com.gwtext.client.widgets.menu.Menu;
30
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
31
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
31
import com.gwtext.client.widgets.tree.TreeEditor;
32
import com.gwtext.client.widgets.tree.TreeEditor;
32
import com.gwtext.client.widgets.tree.TreeNode;
33
import com.gwtext.client.widgets.tree.TreeNode;
33
 
34
 
34
/**
35
/**
35
 * Mediateur gérant les interactions entre vues et les echanges de données
36
 * Mediateur gérant les interactions entre vues et les echanges de données
36
 * C'est un singleton. 
37
 * C'est un singleton. 
37
 * @author aurelien
38
 * @author aurelien
38
 *
39
 *
39
 */
40
 */
40
public class ImageMediateur {
41
public class ImageMediateur {
41
	
42
	
42
	/**
43
	/**
43
	 * booleen qui verifie l'unicite de l'instance
44
	 * booleen qui verifie l'unicite de l'instance
44
	 */
45
	 */
45
	private static boolean estInstancie = false ;  
46
	private static boolean estInstancie = false ;  
46
	
47
	
47
	/**
48
	/**
48
	 * modele de données
49
	 * modele de données
49
	 */
50
	 */
50
	private ImageModele iModele = null ;
51
	private ImageModele iModele = null ;
51
	
52
	
52
	
53
	
53
	// Widget crées par le médiateur
54
	// Widget crées par le médiateur
54
	/**
55
	/**
55
	 * panneau principal des images (onglet "images")
56
	 * panneau principal des images (onglet "images")
56
	 */
57
	 */
57
	private final Panel panneauPrincipalImage = new Panel("Images");
58
	private final Panel panneauPrincipalImage = new Panel("Images");
58
	
59
	
59
	/**
60
	/**
60
	 * panneau à onglet pour la liste, la galerie et la vue en grand
61
	 * panneau à onglet pour la liste, la galerie et la vue en grand
61
	 */ 
62
	 */ 
62
	private TabPanel ongletsImage = null ;
63
	private TabPanel ongletsImage = null ;
63
	
64
	
64
	/**
65
	/**
65
	 * conteneur du panneau à onglets
66
	 * conteneur du panneau à onglets
66
	 */
67
	 */
67
	private Panel panneauMenuEtOngletsImage = null ;
68
	private Panel panneauMenuEtOngletsImage = null ;
68
	
69
	
69
	/**
70
	/**
70
	 * galerie de miniature
71
	 * galerie de miniature
71
	 */
72
	 */
72
	private GalerieImageVue galerieImage = null ;
73
	private GalerieImageVue galerieImage = null ;
73
	
74
	
74
	/**
75
	/**
75
	 * liste détaillée des images
76
	 * liste détaillée des images
76
	 */
77
	 */
77
	private ListeImageVue listeImage = null ;
78
	private ListeImageVue listeImage = null ;
78
	
79
	
79
	/**
80
	/**
80
	 * vue agrandie de la l'image selectionnée
81
	 * vue agrandie de la l'image selectionnée
81
	 */
82
	 */
82
	private ZoomImageVue zoomImage = null ;
83
	private ZoomImageVue zoomImage = null ;
83
	
84
	
84
	/**
85
	/**
85
	 * panneau à onglets affichant les métadonnées et les mots clés
86
	 * panneau à onglets affichant les métadonnées et les mots clés
86
	 */
87
	 */
87
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
88
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
88
	
89
	
89
	/**
90
	/**
90
	 * panneau conteneur pour le panneau à onglet des metadonnées
91
	 * panneau conteneur pour le panneau à onglet des metadonnées
91
	 */
92
	 */
92
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
93
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
93
	
94
	
94
	/**
95
	/**
95
	 * menu contextuel de manipulation des images
96
	 * menu contextuel de manipulation des images
96
	 */
97
	 */
97
	private MenuImageVue menuImageVue = null ;
98
	private MenuImageVue menuImageVue = null ;
98
	
99
	
99
	/**
100
	/**
100
	 * barre d'outils
101
	 * barre d'outils
101
	 */
102
	 */
102
	private BarreOutilsVue barreOutilsVue = null ;
103
	private BarreOutilsVue barreOutilsVue = null ;
103
	
104
	
104
	/**
105
	/**
105
	 * l'indice du dernier onglet sélectionné
106
	 * l'indice du dernier onglet sélectionné
106
	 */
107
	 */
107
	private int dernierIndexOnglet = 0 ; 
108
	private int dernierIndexOnglet = 0 ; 
108
	
109
	
109
	/**
110
	/**
110
	 * booleen explicitant s'il y a une selection en cours
111
	 * booleen explicitant s'il y a une selection en cours
111
	 */
112
	 */
112
	private boolean selection = false ;
113
	private boolean selection = false ;
113
	
114
	
114
	/**
115
	/**
115
	 * constructeur privé (on accède à la classe par la méthode getInstance
116
	 * constructeur privé (on accède à la classe par la méthode getInstance
116
	 */
117
	 */
117
	private ImageMediateur()
118
	private ImageMediateur()
118
	{
119
	{
119
		final BorderLayoutData regionNord = new BorderLayoutData(
120
		final BorderLayoutData regionNord = new BorderLayoutData(
120
				RegionPosition.NORTH) ;
121
				RegionPosition.NORTH) ;
121
		
122
		
122
		final BorderLayoutData regionCentre = new BorderLayoutData(
123
		final BorderLayoutData regionCentre = new BorderLayoutData(
123
				RegionPosition.CENTER) ;
124
				RegionPosition.CENTER) ;
124
 
125
 
125
		final BorderLayoutData regionEst = new BorderLayoutData(
126
		final BorderLayoutData regionEst = new BorderLayoutData(
126
				RegionPosition.EAST);
127
				RegionPosition.EAST);
127
		regionEst.setSplit(true);
128
		regionEst.setSplit(true);
128
 
129
 
129
		
130
		
130
		iModele = ImageModele.Instance(this);
131
		iModele = ImageModele.Instance(this);
131
		
132
		
132
		panneauPrincipalImage.setLayout(new BorderLayout());
133
		panneauPrincipalImage.setLayout(new BorderLayout());
133
		panneauMenuEtOngletsImage = new Panel() ;
134
		panneauMenuEtOngletsImage = new Panel() ;
134
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
135
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
135
		
136
		
136
		ongletsImage = new TabPanel();
137
		ongletsImage = new TabPanel();
137
		galerieImage = new GalerieImageVue(this) ;
138
		galerieImage = new GalerieImageVue(this) ;
138
		
139
		
139
		Panel panneauListeImage = new Panel("Liste");
140
		Panel panneauListeImage = new Panel("Liste");
140
		listeImage = new ListeImageVue(this);
141
		listeImage = new ListeImageVue(this);
141
		panneauListeImage.setLayout(new FitLayout());
142
		panneauListeImage.setLayout(new FitLayout());
142
		panneauListeImage.add(listeImage);
143
		panneauListeImage.add(listeImage);
143
		
144
		
144
		zoomImage = new ZoomImageVue(this);
145
		zoomImage = new ZoomImageVue(this);
145
		
146
		
146
		ongletsImage.add(galerieImage);
147
		ongletsImage.add(galerieImage);
147
		ongletsImage.add(zoomImage);
148
		ongletsImage.add(zoomImage);
148
		ongletsImage.add(panneauListeImage);
149
		ongletsImage.add(panneauListeImage);
149
		
150
		
150
		menuImageVue = new MenuImageVue(this) ;
151
		menuImageVue = new MenuImageVue(this) ;
151
		barreOutilsVue = new BarreOutilsVue(this) ;
152
		barreOutilsVue = new BarreOutilsVue(this) ;
152
		
153
		
153
		detailsEtMotsCles.setWidth("25%");
154
		detailsEtMotsCles.setWidth("25%");
154
		detailsEtMotsCles.setAnimCollapse(true);
155
		detailsEtMotsCles.setAnimCollapse(true);
155
		detailsEtMotsCles.setTitleCollapse(true);
156
		detailsEtMotsCles.setTitleCollapse(true);
156
		detailsEtMotsCles.setCollapsible(true);
157
		detailsEtMotsCles.setCollapsible(true);
157
		
158
		
158
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
159
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
159
		detailsEtMotsCles.add(metadonneesIptcExif) ;
160
		detailsEtMotsCles.add(metadonneesIptcExif) ;
160
			
161
			
161
		
162
		
162
		panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
163
		panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
163
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
164
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
164
		
165
		
165
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
166
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
166
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
167
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
167
		
168
		
168
	}
169
	}
169
	
170
	
170
	/**
171
	/**
171
	 * @param selection the selection to set
172
	 * @param selection the selection to set
172
	 */
173
	 */
173
	public void setSelection(boolean selection) {
174
	public void setSelection(boolean selection) {
174
		this.selection = selection;
175
		this.selection = selection;
175
	}
176
	}
176
 
177
 
177
	/**
178
	/**
178
	 * @return the selection
179
	 * @return the selection
179
	 */
180
	 */
180
	public boolean isSelection() {
181
	public boolean isSelection() {
181
		return selection;
182
		return selection;
182
	}
183
	}
183
 
184
 
184
	public static ImageMediateur Instance()
185
	public static ImageMediateur Instance()
185
	{
186
	{
186
			if(!estInstancie)
187
			if(!estInstancie)
187
			{
188
			{
188
				estInstancie = true ;
189
				estInstancie = true ;
189
				return new ImageMediateur() ;
190
				return new ImageMediateur() ;
190
			}
191
			}
191
			else
192
			else
192
			{
193
			{
193
				return null ;
194
				return null ;
194
			}
195
			}
195
	}
196
	}
196
	
197
	
197
	public String getIdentifiant()
198
	public String getIdentifiant()
198
	{
199
	{
199
		return "0" ;
200
		return "0" ;
200
	}
201
	}
201
 
202
 
202
	public ImageModele getIModele() {
203
	public ImageModele getIModele() {
203
		return iModele;
204
		return iModele;
204
	}
205
	}
205
 
206
 
206
	public Panel getPanneauPrincipalImage() {
207
	public Panel getPanneauPrincipalImage() {
207
		return panneauPrincipalImage;
208
		return panneauPrincipalImage;
208
	}
209
	}
209
 
210
 
210
	public TabPanel getOngletsImage() {
211
	public TabPanel getOngletsImage() {
211
		return ongletsImage;
212
		return ongletsImage;
212
	}
213
	}
213
 
214
 
214
	public GalerieImageVue getGalerieImage() {
215
	public GalerieImageVue getGalerieImage() {
215
		return galerieImage;
216
		return galerieImage;
216
	}
217
	}
217
 
218
 
218
	public ListeImageVue getListeImage() {
219
	public ListeImageVue getListeImage() {
219
		return listeImage;
220
		return listeImage;
220
	}
221
	}
221
 
222
 
222
	public ZoomImageVue getZoomImage() {
223
	public ZoomImageVue getZoomImage() {
223
		return zoomImage;
224
		return zoomImage;
224
	}
225
	}
225
 
226
 
226
	public Panel getDetailsEtMotsCles() {
227
	public Panel getDetailsEtMotsCles() {
227
		return detailsEtMotsCles;
228
		return detailsEtMotsCles;
228
	}
229
	}
229
	
230
	
230
	/**
231
	/**
231
	 * @return the estInstancie
232
	 * @return the estInstancie
232
	 */
233
	 */
233
	public static boolean isEstInstancie() {
234
	public static boolean isEstInstancie() {
234
		return estInstancie;
235
		return estInstancie;
235
	}
236
	}
236
 
237
 
237
	/**
238
	/**
238
	 * @return the panneauMenuEtOngletsImage
239
	 * @return the panneauMenuEtOngletsImage
239
	 */
240
	 */
240
	public Panel getPanneauMenuEtOngletsImage() {
241
	public Panel getPanneauMenuEtOngletsImage() {
241
		return panneauMenuEtOngletsImage;
242
		return panneauMenuEtOngletsImage;
242
	}
243
	}
243
 
244
 
244
	/**
245
	/**
245
	 * @return the menuImageVue
246
	 * @return the menuImageVue
246
	 */
247
	 */
247
	public MenuImageVue getMenuImageVue() {
248
	public MenuImageVue getMenuImageVue() {
248
		return menuImageVue;
249
		return menuImageVue;
249
	}
250
	}
250
 
251
 
251
	/**
252
	/**
252
	 * @return the barreOutilsVue
253
	 * @return the barreOutilsVue
253
	 */
254
	 */
254
	public BarreOutilsVue getBarreOutilsVue() {
255
	public BarreOutilsVue getBarreOutilsVue() {
255
		return barreOutilsVue;
256
		return barreOutilsVue;
256
	}
257
	}
257
 
258
 
258
	/**
259
	/**
259
	 * @return the metadonneesIptcExif
260
	 * @return the metadonneesIptcExif
260
	 */
261
	 */
261
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
262
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
262
		return metadonneesIptcExif;
263
		return metadonneesIptcExif;
263
	}
264
	}
264
 
265
 
265
	/**
266
	/**
266
	 * @return the dernierIndexOnglet
267
	 * @return the dernierIndexOnglet
267
	 */
268
	 */
268
	public int getDernierIndexOnglet() {
269
	public int getDernierIndexOnglet() {
269
		return dernierIndexOnglet;
270
		return dernierIndexOnglet;
270
	}
271
	}
271
	
272
	
272
	/**
273
	/**
273
	 * 
274
	 * 
274
	 * @return la vue selectionnée par l'utilisateur
275
	 * @return la vue selectionnée par l'utilisateur
275
	 */
276
	 */
276
	public VueListable getVueSelectionnee()
277
	public VueListable getVueSelectionnee()
277
	{
278
	{
278
		Panel active = ongletsImage.getActiveTab() ;
279
		Panel active = ongletsImage.getActiveTab() ;
279
		if(active != zoomImage)
280
		if(active != zoomImage)
280
		{
281
		{
281
			if(active == galerieImage)
282
			if(active == galerieImage)
282
			{
283
			{
283
				return galerieImage ;
284
				return galerieImage ;
284
			}
285
			}
285
			else
286
			else
286
			{
287
			{
287
				return listeImage ;
288
				return listeImage ;
288
			}
289
			}
289
			
290
			
290
		}
291
		}
291
		else
292
		else
292
		{
293
		{
293
			if(dernierIndexOnglet == 0)
294
			if(dernierIndexOnglet == 0)
294
			{
295
			{
295
				return galerieImage ;
296
				return galerieImage ;
296
			}
297
			}
297
			else
298
			else
298
			{
299
			{
299
				return listeImage ;
300
				return listeImage ;
300
			}
301
			}
301
 
302
 
302
		}
303
		}
303
		
304
		
304
	}
305
	}
305
	
306
	
306
	/**
307
	/**
307
	 * met à jour les données provenant du modèle et synchronise les vues entre elles 
308
	 * met à jour les données provenant du modèle et synchronise les vues entre elles 
308
	 * @param o données de mises à jour pour les vues
309
	 * @param o données de mises à jour pour les vues
309
	 * @param r le refraichissable qui a demandé la mise à jour
310
	 * @param r le refraichissable qui a demandé la mise à jour
310
	 */
311
	 */
311
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r)
312
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r)
312
	{		
313
	{		
313
		
314
		
314
		if(o instanceof Store) {
315
		if(o instanceof Store) {
315
		
316
		
316
			Store li = (Store)o ;
317
			Store li = (Store)o ;
317
			
318
			
318
			if(li.getCount() <= 0)
319
			if(li.getCount() <= 0)
319
			{
320
			{
320
				aucuneSelection() ;
321
				aucuneSelection() ;
321
			}
322
			}
322
			else
323
			else
323
			{
324
			{
324
				selection() ;
325
				selection() ;
325
			}
326
			}
326
			
327
			
327
		}
328
		}
328
		
329
		
329
		if(r != getGalerieImage())
330
		if(r != getGalerieImage())
330
		{
331
		{
331
			getGalerieImage().rafraichir(o,false);
332
			getGalerieImage().rafraichir(o,false);
332
		}
333
		}
333
		if(r != getZoomImage())
334
		if(r != getZoomImage())
334
		{
335
		{
335
			getZoomImage().rafraichir(o,false);
336
			getZoomImage().rafraichir(o,false);
336
		}
337
		}
337
		if(r != getListeImage())
338
		if(r != getListeImage())
338
		{
339
		{
339
			getListeImage().rafraichir(o,false);
340
			getListeImage().rafraichir(o,false);
340
		}
341
		}
341
		
342
		
342
		aucuneSelection() ;
343
		aucuneSelection() ;
343
	}
344
	}
344
	
345
	
345
	/**
346
	/**
346
	 * envoie au modèle une demande de mise à jour
347
	 * envoie au modèle une demande de mise à jour
347
	 * @param r la vue demandeuse de mise à jour
348
	 * @param r la vue demandeuse de mise à jour
348
	 */
349
	 */
349
	public void obtenirPhotoGalerie(Rafraichissable r)
350
	public void obtenirPhotoGalerie(Rafraichissable r)
350
	{
351
	{
351
		getIModele().obtenirPhotoGalerie(r) ;
352
		getIModele().obtenirPhotoGalerie(r) ;
352
	}
353
	}
353
	
354
	
354
	/**
355
	/**
355
	 * demande au modèle les métadonnées associées à une image
356
	 * demande au modèle les métadonnées associées à une image
356
	 * @param r la vue demandeuse de mise à jour
357
	 * @param r la vue demandeuse de mise à jour
357
	 * @param id l'identifiant de l'image
358
	 * @param id l'identifiant de l'image
358
	 */
359
	 */
359
	public void obtenirMetadonnees(Rafraichissable r, String id)
360
	public void obtenirMetadonnees(Rafraichissable r, String id)
360
	{
361
	{
361
		getIModele().obtenirMetadonnees(r, id) ;
362
		getIModele().obtenirMetadonnees(r, id) ;
362
	}
363
	}
363
	
364
	
364
	/**
365
	/**
365
	 * demande au modèle les ids des mots clés associés à une image
366
	 * demande au modèle les ids des mots clés associés à une image
366
	 * @param r la vue demandeuse de mise à jour
367
	 * @param r la vue demandeuse de mise à jour
367
	 * @param id l'identifiant de l'image
368
	 * @param id l'identifiant de l'image
368
	 */
369
	 */
369
	public void obtenirMotsClesId(Rafraichissable r, String id)
370
	public void obtenirMotsClesId(Rafraichissable r, String id)
370
	{
371
	{
371
		getIModele().obtenirMotsClesId(r, id) ;
372
		getIModele().obtenirMotsClesId(r, id) ;
372
	}
373
	}
373
	
374
	
374
	/**
375
	/**
375
	 * envoie au modèle une demande de mise à jour des informations modifiables
376
	 * envoie au modèle une demande de mise à jour des informations modifiables
376
	 * associées à une image
377
	 * associées à une image
377
	 * @param commentaires le commentaire de l'image
378
	 * @param commentaires le commentaire de l'image
378
	 * @param date la date modifiée par l'utilisateur
379
	 * @param date la date modifiée par l'utilisateur
379
	 */
380
	 */
380
	public void mettreAJourInfo(String commentaires, String date)
381
	public void mettreAJourInfo(String commentaires, String date)
381
	{
382
	{
382
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
383
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
383
		
384
		
384
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
385
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
385
	}
386
	}
386
	
387
	
387
	/**
388
	/**
388
	 * envoie au modèle une demande pour lancer le formulaire ou l'application d'upload
389
	 * envoie au modèle une demande pour lancer le formulaire ou l'application d'upload
389
	 */
390
	 */
390
	public void uploaderImages()
391
	public void uploaderImages()
391
	{
392
	{
392
		getIModele().uploaderImages() ;
393
		getIModele().uploaderImages() ;
393
	}
394
	}
394
	
395
	
395
	/**
396
	/**
396
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie
397
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie
397
	 * le médiateur gère alors les conséquences
398
	 * le médiateur gère alors les conséquences
398
	 * @param index l'index du noeud dans la galerie
399
	 * @param index l'index du noeud dans la galerie
399
	 * @param node le noeud selectionné
400
	 * @param node le noeud selectionné
400
	 * @param e l'object source de l'évenement
401
	 * @param e l'object source de l'évenement
401
	 */
402
	 */
402
	public void clicGalerieImage(int index, Element node,
403
	public void clicGalerieImage(int index, Element node,
403
			EventObject e)
404
			EventObject e)
404
	{
405
	{
405
		Record rd = getGalerieImage().getDView().getRecord(node) ;
406
		Record rd = getGalerieImage().getDView().getRecord(node) ;
406
		String imgUrl = rd.getAsString("url_image"); 
407
		String imgUrl = rd.getAsString("url_image"); 
407
		
408
		
408
		getZoomImage().rafraichir(imgUrl,false);
409
		getZoomImage().rafraichir(imgUrl,false);
409
		dernierIndexOnglet = 0 ;
410
		dernierIndexOnglet = 0 ;
410
		
411
		
411
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
412
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
412
		{
413
		{
413
 
414
 
414
			getOngletsImage().setActiveTab(1);
415
			getOngletsImage().setActiveTab(1);
415
		}
416
		}
416
		
417
		
417
		String imgNum = rd.getAsString("num_image");
418
		String imgNum = rd.getAsString("num_image");
418
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
419
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
419
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
420
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
420
		
421
		
421
	}
422
	}
422
	
423
	
423
	/**
424
	/**
424
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste
425
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste
425
	 * le médiateur gère alors les conséquences
426
	 * le médiateur gère alors les conséquences
426
	 * @param rowIndex le numéro de ligne selectionné
427
	 * @param rowIndex le numéro de ligne selectionné
427
	 */
428
	 */
428
	public void clicListeImage(int rowIndex)
429
	public void clicListeImage(int rowIndex)
429
	{
430
	{
430
		Record rd = getListeImage().getSelectionModel().getSelected() ;
431
		Record rd = getListeImage().getSelectionModel().getSelected() ;
431
		String imgUrl = rd.getAsString("url_image");
432
		String imgUrl = rd.getAsString("url_image");
432
		
433
		
433
		getZoomImage().rafraichir(imgUrl,false);
434
		getZoomImage().rafraichir(imgUrl,false);
434
		
435
		
435
		dernierIndexOnglet = 2 ;
436
		dernierIndexOnglet = 2 ;
436
		
437
		
437
		String imgNum = rd.getAsString("num_image");
438
		String imgNum = rd.getAsString("num_image");
438
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
439
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
439
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
440
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
440
	}
441
	}
441
	
442
	
442
	/**
443
	/**
443
	 * gestion du double clic dans la liste
444
	 * gestion du double clic dans la liste
444
	 * @param rowIndex
445
	 * @param rowIndex
445
	 */
446
	 */
446
	public void doubleClicListeImage(int rowIndex)
447
	public void doubleClicListeImage(int rowIndex)
447
	{
448
	{
448
		clicListeImage(rowIndex) ;
449
		clicListeImage(rowIndex) ;
449
		getOngletsImage().setActiveTab(1);
450
		getOngletsImage().setActiveTab(1);
450
	}
451
	}
451
	
452
	
452
	/**
453
	/**
453
	 * envoie une demande de mise à jour des données au modèle
454
	 * envoie une demande de mise à jour des données au modèle
454
	 */
455
	 */
455
	public void rafraichirToutesVues()
456
	public void rafraichirToutesVues()
456
	{
457
	{
457
		obtenirPhotoGalerie(getIModele());
458
		obtenirPhotoGalerie(getIModele());
458
	}
459
	}
459
	
460
	
460
	/**
461
	/**
461
	 * montre le menu au coordonnées indiquées
462
	 * montre le menu au coordonnées indiquées
462
	 * @param e l'objet source de l'évenement
463
	 * @param e l'objet source de l'évenement
463
	 */
464
	 */
464
	public void montrerContextMenu(EventObject e)
465
	public void montrerContextMenu(EventObject e)
465
	{
466
	{
466
		menuImageVue.showAt(e.getXY()) ;
467
		menuImageVue.showAt(e.getXY()) ;
467
	}
468
	}
468
	
469
	
469
	/**
470
	/**
470
	 * appelé lors du double clic sur l'image agrandie
471
	 * appelé lors du double clic sur l'image agrandie
471
	 */
472
	 */
472
	public void doubleClicZoomImage()
473
	public void doubleClicZoomImage()
473
	{
474
	{
474
		getOngletsImage().setActiveTab(dernierIndexOnglet);
475
		getOngletsImage().setActiveTab(dernierIndexOnglet);
475
	}
476
	}
476
	
477
	
477
	/**
478
	/**
478
	 * appelé lors du clic sur un des boutons de la zone zoom
479
	 * appelé lors du clic sur un des boutons de la zone zoom
479
	 * @param arg le nom du bouton qui a cliqué 
480
	 * @param arg le nom du bouton qui a cliqué 
480
	 */
481
	 */
481
	public void clicBoutonZoomImage(String arg)
482
	public void clicBoutonZoomImage(String arg)
482
	{
483
	{
483
		
484
		
484
		Store st ;
485
		Store st ;
485
		int selected ;
486
		int selected ;
486
		int storeIndex ;
487
		int storeIndex ;
487
		Record nRec = null ;
488
		Record nRec = null ;
488
		
489
		
489
		if(getVueSelectionnee() == galerieImage)
490
		if(getVueSelectionnee() == galerieImage)
490
		{
491
		{
491
			DataView dv = getGalerieImage().getDView();
492
			DataView dv = getGalerieImage().getDView();
492
			st = getGalerieImage().getSt();
493
			st = getGalerieImage().getSt();
493
			
494
			
494
			if(st.getCount() <= 0)
495
			if(st.getCount() <= 0)
495
			{
496
			{
496
				return ;
497
				return ;
497
			}
498
			}
498
			
499
			
499
			selected = st.indexOf(dv.getSelectedRecords()[0]);
500
			selected = st.indexOf(dv.getSelectedRecords()[0]);
500
			storeIndex = dv.indexOf(selected);
501
			storeIndex = dv.indexOf(selected);
501
		}
502
		}
502
		else
503
		else
503
		{
504
		{
504
			st = listeImage.getSt() ;
505
			st = listeImage.getSt() ;
505
			
506
			
506
			if(st.getCount() <= 0)
507
			if(st.getCount() <= 0)
507
			{
508
			{
508
				return ;
509
				return ;
509
			}
510
			}
510
			
511
			
511
			selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
512
			selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
512
			storeIndex = selected ;
513
			storeIndex = selected ;
513
		}
514
		}
514
		
515
		
515
		if(arg.equals("prev"))
516
		if(arg.equals("prev"))
516
		{
517
		{
517
			// si la photo séléctionnée est la première, on passe à la
518
			// si la photo séléctionnée est la première, on passe à la
518
			// dernière
519
			// dernière
519
			if (selected == 0) {
520
			if (selected == 0) {
520
				storeIndex = st.getCount() - 1 ;
521
				storeIndex = st.getCount() - 1 ;
521
				nRec = st.getAt(storeIndex);
522
				nRec = st.getAt(storeIndex);
522
	
523
	
523
			} 
524
			} 
524
			else 
525
			else 
525
			{
526
			{
526
				storeIndex = storeIndex - 1 ;
527
				storeIndex = storeIndex - 1 ;
527
				nRec = st.getAt(storeIndex);
528
				nRec = st.getAt(storeIndex);
528
			}
529
			}
529
			
530
			
530
			
531
			
531
		}
532
		}
532
		
533
		
533
		if(arg.equals("suiv"))
534
		if(arg.equals("suiv"))
534
		{
535
		{
535
			// si la photo selectionnée est la dernière on passe à la
536
			// si la photo selectionnée est la dernière on passe à la
536
			// première
537
			// première
537
			if (selected == st.getCount() - 1) {
538
			if (selected == st.getCount() - 1) {
538
				
539
				
539
				storeIndex = 0 ;
540
				storeIndex = 0 ;
540
				nRec = st.getAt(0);
541
				nRec = st.getAt(0);
541
			} 
542
			} 
542
			else 
543
			else 
543
			{
544
			{
544
				storeIndex = storeIndex + 1 ;
545
				storeIndex = storeIndex + 1 ;
545
				nRec = st.getAt(storeIndex);
546
				nRec = st.getAt(storeIndex);
546
			}
547
			}
547
		}
548
		}
548
		
549
		
549
		if(nRec != null)
550
		if(nRec != null)
550
		{
551
		{
551
			
552
			
552
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
553
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
553
			if(getGalerieImage().isRendered())
554
			if(getGalerieImage().isRendered())
554
			{
555
			{
555
				getGalerieImage().getDView().select(storeIndex);
556
				getGalerieImage().getDView().select(storeIndex);
556
			}
557
			}
557
			
558
			
558
			if(getListeImage().isRendered())
559
			if(getListeImage().isRendered())
559
			{
560
			{
560
				getListeImage().getSelectionModel().selectRecords(nRec) ;
561
				getListeImage().getSelectionModel().selectRecords(nRec) ;
561
			}
562
			}
562
			
563
			
563
			String imgNum = nRec.getAsString("num_image");
564
			String imgNum = nRec.getAsString("num_image");
564
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
565
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
565
			obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
566
			obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
566
		}
567
		}
567
	}
568
	}
568
	
569
	
569
 
570
 
570
	/**
571
	/**
571
	 * synchronise la selection entre la galerie et la liste
572
	 * synchronise la selection entre la galerie et la liste
572
	 * @param string le nom de la vue qui doit être synchronisée
573
	 * @param string le nom de la vue qui doit être synchronisée
573
	 */
574
	 */
574
	public void synchroniserSelection(String string) {
575
	public void synchroniserSelection(String string) {
575
		
576
		
576
		if(string.equals("galerie") && getDernierIndexOnglet() != 2)
577
		if(string.equals("galerie") && getDernierIndexOnglet() != 2)
577
		{
578
		{
578
				Record[] sel = getGalerieImage().getDView().getSelectedRecords() ;
579
				Record[] sel = getGalerieImage().getDView().getSelectedRecords() ;
579
				getListeImage().selectionnerEnregistrements(sel) ;
580
				getListeImage().selectionnerEnregistrements(sel) ;
580
		}
581
		}
581
		
582
		
582
		if(string.equals("liste") && getDernierIndexOnglet() != 0)
583
		if(string.equals("liste") && getDernierIndexOnglet() != 0)
583
		{
584
		{
584
		
585
		
585
				Record[] sel = getListeImage().getSelectionModel().getSelections() ;
586
				Record[] sel = getListeImage().getSelectionModel().getSelections() ;
586
				int[] ids = new int[sel.length] ;
587
				int[] ids = new int[sel.length] ;
587
				
588
				
588
				for (int i = 0; i < sel.length; i++) {
589
				for (int i = 0; i < sel.length; i++) {
589
					
590
					
590
					ids[i] = getGalerieImage().getSt().indexOf(sel[i]) ;
591
					ids[i] = getGalerieImage().getSt().indexOf(sel[i]) ;
591
				}
592
				}
592
				
593
				
593
				getGalerieImage().selectionnerImages(ids) ;
594
				getGalerieImage().selectionnerImages(ids) ;
594
		}
595
		}
595
		
596
		
596
	}
597
	}
597
 
598
 
598
	/**
599
	/**
599
	 * fait une demande de suppression des images (en local et en distant)
600
	 * fait une demande de suppression des images (en local et en distant)
600
	 * des images selectionnées
601
	 * des images selectionnées
601
	 */
602
	 */
602
	public void supprimerImages() {
603
	public void supprimerImages() {
603
		
604
		
604
		String[] ids = null ;
605
		String[] ids = null ;
605
		
606
		
606
		
607
		
607
			if(dernierIndexOnglet == 0)
608
			if(dernierIndexOnglet == 0)
608
			{
609
			{
609
				ids = getGalerieImage().getIdSelectionnees() ;
610
				ids = getGalerieImage().getIdSelectionnees() ;
610
			}
611
			}
611
			else
612
			else
612
			{
613
			{
613
				ids = getListeImage().getIdSelectionnees() ;
614
				ids = getListeImage().getIdSelectionnees() ;
614
			}
615
			}
615
			
616
			
616
		if(ids.length > 0)
617
		if(ids.length > 0)
617
		{
618
		{
618
			
619
			
619
			if(com.google.gwt.user.client.Window
620
			if(com.google.gwt.user.client.Window
620
					.confirm("Supprimer les images sélectionnées ?"))
621
					.confirm("Supprimer les images sélectionnées ?"))
621
			{
622
			{
622
				getIModele().supprimerImages(ids) ;
623
				getIModele().supprimerImages(ids) ;
623
				aucuneSelection() ;
624
				aucuneSelection() ;
624
			}
625
			}
625
		}
626
		}
626
		else
627
		else
627
		{
628
		{
628
			Window.alert("Impossible de supprimer : aucune image selectionnée") ;
629
			Window.alert("Impossible de supprimer : aucune image selectionnée") ;
629
		}
630
		}
630
		
631
		
631
	}
632
	}
632
 
633
 
633
	/**
634
	/**
634
	 * désactive les onglets de métadonnées et de zoom (dans le cas ou rien n'est selectionné)
635
	 * désactive les onglets de métadonnées et de zoom (dans le cas ou rien n'est selectionné)
635
	 */
636
	 */
636
	public void aucuneSelection() {
637
	public void aucuneSelection() {
637
		
638
		
638
		if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
639
		if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
639
		{
640
		{
640
			getMetadonneesIptcExif().desactiverPanneau() ;
641
			getMetadonneesIptcExif().desactiverPanneau() ;
641
			getZoomImage().desactiverPanneau() ;
642
			getZoomImage().desactiverPanneau() ;
642
			setSelection(false) ;
643
			setSelection(false) ;
643
		}
644
		}
644
		
645
		
645
	}
646
	}
646
	
647
	
647
	/**
648
	/**
648
	 * réacative les onglet métadonnées et zoom (lors d'une sélection alors qu'il n'y en avait pas)
649
	 * réacative les onglet métadonnées et zoom (lors d'une sélection alors qu'il n'y en avait pas)
649
	 */
650
	 */
650
	public void selection() {
651
	public void selection() {
651
		
652
		
652
		if(!isSelection())
653
		if(!isSelection())
653
		{
654
		{
654
			getMetadonneesIptcExif().activerPanneau() ;
655
			getMetadonneesIptcExif().activerPanneau() ;
655
			getZoomImage().activerPanneau() ;
656
			getZoomImage().activerPanneau() ;
656
			setSelection(true);
657
			setSelection(true);
657
		}
658
		}
658
	}
659
	}
659
 
660
 
660
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev, final TreeEditor te)
661
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev, final TreeEditor te)
661
	{
662
	{
662
		Menu mn = new Menu() ;
663
		Menu mn = new Menu() ;
663
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item("Ajouter mot clé");
664
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item("Ajouter mot clé");
664
		final com.gwtext.client.widgets.menu.Item suppN = new Item("Supprimer mot clé");
665
		final com.gwtext.client.widgets.menu.Item suppN = new Item("Supprimer mot clé");
665
		
666
		
666
		mn.addItem(ajoutN);
667
		mn.addItem(ajoutN);
667
		mn.addItem(suppN);
668
		mn.addItem(suppN);
668
		
669
		
669
		mn.addListener(new MenuListenerAdapter() {
670
		mn.addListener(new MenuListenerAdapter() {
670
			
671
			
671
			public void onItemClick(BaseItem item, EventObject e)
672
			public void onItemClick(BaseItem item, EventObject e)
672
			{
673
			{
673
				
674
				
674
				if(item.equals(suppN))
675
				if(item.equals(suppN))
675
				{
676
				{
676
					getMetadonneesIptcExif().getPanneauMotsCles().supprimerNoeud(n) ;
677
					getMetadonneesIptcExif().getPanneauMotsCles().supprimerNoeud(n) ;
677
				}
678
				}
678
				if(item.equals(ajoutN))
679
				if(item.equals(ajoutN))
679
				{
680
				{
680
					getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(n) ;
681
					getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(n) ;
681
				}
682
				}
682
			}
683
			}
683
		});
684
		});
684
		
685
		
685
		mn.showAt(ev.getXY());
686
		mn.showAt(ev.getXY());
686
		
687
		
687
	}
688
	}
688
 
689
 
689
	public void mettreAjourMotsClesId(String text, String id) {
690
	public void mettreAjourMotsClesId(String text, String id) {
690
		
691
		
691
		getIModele().mettreAjourMotsClesId(text, id) ;
692
		getIModele().mettreAjourMotsClesId(text, id) ;
692
		
693
		
693
	}
694
	}
694
 
695
 
695
	public void mettreAjourMotsCles(String motsClesEnCours) {
696
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
696
		
697
		
697
		String[] ids = getGalerieImage().getIdSelectionnees() ;
698
		String[] ids = getGalerieImage().getIdSelectionnees() ;
-
 
699
		getIModele().mettreAjourMotsCles(ids,motsClesEnCours,arbreMC) ;
-
 
700
		
-
 
701
	}
-
 
702
	
-
 
703
	public void ajouterMotCleDansArbre(TreeNode n,Tree arbreMC)
-
 
704
	{
-
 
705
		getIModele().ajouterMotCleDansArbre(n, arbreMC) ;
-
 
706
	}
-
 
707
 
-
 
708
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
-
 
709
		
-
 
710
		getIModele().supprimerMotCleDansArbre(n,arbreMC) ;
-
 
711
		
-
 
712
	}
-
 
713
 
-
 
714
	public void modifierMotCleDansArbre(TreeNode n , Tree arbreMC) {
-
 
715
		
-
 
716
		getIModele().modifierMotCleDansArbre(n,arbreMC) ;
-
 
717
		
-
 
718
	}
-
 
719
	
-
 
720
	public void deplacerMotCleDansArbre(TreeNode n , Tree arbreMC) {
698
		getIModele().mettreAjourMotsCles(ids,motsClesEnCours) ;
721
		
699
		
722
		getIModele().deplacerMotCleDansArbre(n, arbreMC) ;
700
	}
723
	}
701
	
724
	
702
	
725
	
703
 
726
 
704
}
727
}