Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 30 | Rev 35 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 aperonnet 1
package org.tela_botanica.client.image;
2
 
5 aperonnet 3
import org.tela_botanica.client.interfaces.Rafraichissable;
19 aperonnet 4
import org.tela_botanica.client.interfaces.VueListable;
25 aperonnet 5
import org.tela_botanica.client.vues.ArbreMotsClesVue;
20 aperonnet 6
import org.tela_botanica.client.vues.BarreOutilsVue;
4 aperonnet 7
import org.tela_botanica.client.vues.GalerieImageVue;
8
import org.tela_botanica.client.vues.ListeImageVue;
12 aperonnet 9
import org.tela_botanica.client.vues.MenuImageVue;
16 aperonnet 10
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
4 aperonnet 11
import org.tela_botanica.client.vues.ZoomImageVue;
20 aperonnet 12
 
5 aperonnet 13
import com.google.gwt.user.client.DOM;
14
import com.google.gwt.user.client.Element;
15
import com.google.gwt.user.client.Event;
16 aperonnet 16
import com.google.gwt.user.client.Window;
5 aperonnet 17
import com.gwtext.client.core.EventObject;
31 aperonnet 18
import com.gwtext.client.core.Ext;
19
import com.gwtext.client.core.ExtElement;
4 aperonnet 20
import com.gwtext.client.core.RegionPosition;
5 aperonnet 21
import com.gwtext.client.data.Record;
22
import com.gwtext.client.data.Store;
28 aperonnet 23
import com.gwtext.client.data.Tree;
5 aperonnet 24
import com.gwtext.client.widgets.DataView;
4 aperonnet 25
import com.gwtext.client.widgets.Panel;
26
import com.gwtext.client.widgets.TabPanel;
27
import com.gwtext.client.widgets.layout.BorderLayout;
28
import com.gwtext.client.widgets.layout.BorderLayoutData;
12 aperonnet 29
import com.gwtext.client.widgets.layout.FitLayout;
25 aperonnet 30
import com.gwtext.client.widgets.menu.BaseItem;
31
import com.gwtext.client.widgets.menu.Item;
32
import com.gwtext.client.widgets.menu.Menu;
33
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
34
import com.gwtext.client.widgets.tree.TreeEditor;
35
import com.gwtext.client.widgets.tree.TreeNode;
4 aperonnet 36
 
12 aperonnet 37
/**
38
 * Mediateur gérant les interactions entre vues et les echanges de données
39
 * C'est un singleton.
40
 * @author aurelien
41
 *
42
 */
4 aperonnet 43
public class ImageMediateur {
44
 
24 aperonnet 45
	/**
31 aperonnet 46
	 * booleen qui verifie l'unicite de l'instance (donc static)
24 aperonnet 47
	 */
12 aperonnet 48
	private static boolean estInstancie = false ;
49
 
24 aperonnet 50
	/**
51
	 * modele de données
52
	 */
7 aperonnet 53
	private ImageModele iModele = null ;
4 aperonnet 54
 
31 aperonnet 55
 
24 aperonnet 56
	/**
57
	 * panneau principal des images (onglet "images")
58
	 */
4 aperonnet 59
	private final Panel panneauPrincipalImage = new Panel("Images");
60
 
24 aperonnet 61
	/**
30 aperonnet 62
	 * panneau a onglet pour la liste, la galerie et la vue en grand
24 aperonnet 63
	 */
4 aperonnet 64
	private TabPanel ongletsImage = null ;
24 aperonnet 65
 
66
	/**
30 aperonnet 67
	 * conteneur du panneau a onglets
24 aperonnet 68
	 */
16 aperonnet 69
	private Panel panneauMenuEtOngletsImage = null ;
4 aperonnet 70
 
24 aperonnet 71
	/**
72
	 * galerie de miniature
73
	 */
4 aperonnet 74
	private GalerieImageVue galerieImage = null ;
24 aperonnet 75
 
76
	/**
77
	 * liste détaillée des images
78
	 */
4 aperonnet 79
	private ListeImageVue listeImage = null ;
24 aperonnet 80
 
81
	/**
82
	 * vue agrandie de la l'image selectionnée
83
	 */
4 aperonnet 84
	private ZoomImageVue zoomImage = null ;
85
 
24 aperonnet 86
	/**
30 aperonnet 87
	 * panneau a onglets affichant les métadonnées et les mots clés
24 aperonnet 88
	 */
89
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
90
 
91
	/**
30 aperonnet 92
	 * panneau conteneur pour le panneau a onglet des metadonnées
24 aperonnet 93
	 */
4 aperonnet 94
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
95
 
24 aperonnet 96
	/**
97
	 * menu contextuel de manipulation des images
98
	 */
12 aperonnet 99
	private MenuImageVue menuImageVue = null ;
4 aperonnet 100
 
24 aperonnet 101
	/**
102
	 * barre d'outils
103
	 */
20 aperonnet 104
	private BarreOutilsVue barreOutilsVue = null ;
105
 
24 aperonnet 106
	/**
107
	 * l'indice du dernier onglet sélectionné
108
	 */
19 aperonnet 109
	private int dernierIndexOnglet = 0 ;
110
 
24 aperonnet 111
	/**
112
	 * booleen explicitant s'il y a une selection en cours
113
	 */
20 aperonnet 114
	private boolean selection = false ;
115
 
116
	/**
30 aperonnet 117
	 * constructeur privé (on accède a la classe par la méthode getInstance
20 aperonnet 118
	 */
12 aperonnet 119
	private ImageMediateur()
120
	{
31 aperonnet 121
		// quelques variables de position pour les borderlayouts
12 aperonnet 122
		final BorderLayoutData regionNord = new BorderLayoutData(
123
				RegionPosition.NORTH) ;
124
 
125
		final BorderLayoutData regionCentre = new BorderLayoutData(
126
				RegionPosition.CENTER) ;
4 aperonnet 127
 
128
		final BorderLayoutData regionEst = new BorderLayoutData(
129
				RegionPosition.EAST);
130
		regionEst.setSplit(true);
131
 
132
 
31 aperonnet 133
		// on crée un modèle
12 aperonnet 134
		iModele = ImageModele.Instance(this);
31 aperonnet 135
		// et on demande l'arbre des mots clés
30 aperonnet 136
		iModele.initialiserArbreMotsCles() ;
4 aperonnet 137
 
31 aperonnet 138
		// on gère la mise en page du panneau principal
4 aperonnet 139
		panneauPrincipalImage.setLayout(new BorderLayout());
31 aperonnet 140
 
141
		// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur
16 aperonnet 142
		panneauMenuEtOngletsImage = new Panel() ;
143
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
4 aperonnet 144
 
31 aperonnet 145
		// le panneau à onglet qui contient les trois vues
4 aperonnet 146
		ongletsImage = new TabPanel();
31 aperonnet 147
 
148
		// la galerie
4 aperonnet 149
		galerieImage = new GalerieImageVue(this) ;
150
 
31 aperonnet 151
		// la liste des images
4 aperonnet 152
		Panel panneauListeImage = new Panel("Liste");
153
		listeImage = new ListeImageVue(this);
12 aperonnet 154
		panneauListeImage.setLayout(new FitLayout());
4 aperonnet 155
		panneauListeImage.add(listeImage);
156
 
31 aperonnet 157
		// le panneau zoom
4 aperonnet 158
		zoomImage = new ZoomImageVue(this);
159
 
31 aperonnet 160
		// on ajoute les panneaux au panneau à onglets
4 aperonnet 161
		ongletsImage.add(galerieImage);
162
		ongletsImage.add(zoomImage);
163
		ongletsImage.add(panneauListeImage);
164
 
31 aperonnet 165
		// on crée les menu et la barre de vue
12 aperonnet 166
		menuImageVue = new MenuImageVue(this) ;
20 aperonnet 167
		barreOutilsVue = new BarreOutilsVue(this) ;
12 aperonnet 168
 
31 aperonnet 169
		// on initialise le volet qui contient les mots clés
25 aperonnet 170
		detailsEtMotsCles.setWidth("25%");
4 aperonnet 171
		detailsEtMotsCles.setAnimCollapse(true);
172
		detailsEtMotsCles.setTitleCollapse(true);
173
		detailsEtMotsCles.setCollapsible(true);
174
 
31 aperonnet 175
		// on crée le panneau conteneur des métadonnées et infos
16 aperonnet 176
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
31 aperonnet 177
		// et on l'inclut dans le volet approprié
16 aperonnet 178
		detailsEtMotsCles.add(metadonneesIptcExif) ;
179
 
31 aperonnet 180
		// on ajoute la barre de vue au nord du panneau qui contient menu et onglets d'images
20 aperonnet 181
		panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
31 aperonnet 182
		// les onglets au centre
16 aperonnet 183
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
184
 
31 aperonnet 185
		// on ajoute le panneau qui contient le menu et les onglets d'images au centre
16 aperonnet 186
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
31 aperonnet 187
		// et le panneau de métadonnées et d'info sur le coté droit
4 aperonnet 188
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
189
 
190
	}
191
 
24 aperonnet 192
	/**
31 aperonnet 193
	 * @param change la valeur du booleen de selection
24 aperonnet 194
	 */
195
	public void setSelection(boolean selection) {
196
		this.selection = selection;
197
	}
198
 
199
	/**
31 aperonnet 200
	 * @return la valeur du booleen de selection
24 aperonnet 201
	 */
202
	public boolean isSelection() {
203
		return selection;
204
	}
205
 
31 aperonnet 206
	/**
207
	 * Retourne une instance de manière unique
208
	 * @return l'instance du médiateur
209
	 */
24 aperonnet 210
	public static ImageMediateur Instance()
211
	{
212
			if(!estInstancie)
213
			{
214
				estInstancie = true ;
215
				return new ImageMediateur() ;
216
			}
217
			else
218
			{
219
				return null ;
220
			}
221
	}
222
 
31 aperonnet 223
	/**
224
	 * Renvoie l'identifiant de l'utilisateur en cours
225
	 * @return l'identifiant de l'utilisateur
226
	 */
18 aperonnet 227
	public String getIdentifiant()
228
	{
229
		return "0" ;
230
	}
4 aperonnet 231
 
31 aperonnet 232
	/**
233
	 * Accesseur pour le modèle associé au médiateur
234
	 * @return le modèle associé
235
	 */
7 aperonnet 236
	public ImageModele getIModele() {
237
		return iModele;
4 aperonnet 238
	}
239
 
31 aperonnet 240
	/**
241
	 * Accesseur pour le panneau principal
242
	 * @return le panneau principal
243
	 */
4 aperonnet 244
	public Panel getPanneauPrincipalImage() {
245
		return panneauPrincipalImage;
246
	}
247
 
31 aperonnet 248
	/**
249
	 * Accesseur pour le panneau à onglets
250
	 * @return le panneau à onglets
251
	 */
4 aperonnet 252
	public TabPanel getOngletsImage() {
253
		return ongletsImage;
254
	}
255
 
31 aperonnet 256
	/**
257
	 * Accesseur pour la galerie d'images
258
	 * @return la galerie d'image
259
	 */
4 aperonnet 260
	public GalerieImageVue getGalerieImage() {
261
		return galerieImage;
262
	}
263
 
264
	public ListeImageVue getListeImage() {
265
		return listeImage;
266
	}
267
 
31 aperonnet 268
	/**
269
	 * Accesseur pour le panneau "zoom"
270
	 * @return le panneau zoom
271
	 */
4 aperonnet 272
	public ZoomImageVue getZoomImage() {
273
		return zoomImage;
274
	}
275
 
31 aperonnet 276
	/**
277
	 * Accesseur pour le panneau détails et mot clés
278
	 * @return le panneau détails et mots clés
279
	 */
4 aperonnet 280
	public Panel getDetailsEtMotsCles() {
281
		return detailsEtMotsCles;
282
	}
283
 
20 aperonnet 284
	/**
31 aperonnet 285
	 * Accesseur pour le booleen d'instanciation
286
	 * @return le booleen d'instanciation
20 aperonnet 287
	 */
288
	public static boolean isEstInstancie() {
289
		return estInstancie;
290
	}
291
 
292
	/**
31 aperonnet 293
	 * Accesseur pour la panneaèu contenant le menu et les onglets images
294
	 * @return le panneauMenuEtOngletsImage
20 aperonnet 295
	 */
296
	public Panel getPanneauMenuEtOngletsImage() {
297
		return panneauMenuEtOngletsImage;
298
	}
299
 
300
	/**
31 aperonnet 301
	 * Accesseur pour le menu
20 aperonnet 302
	 * @return the menuImageVue
303
	 */
304
	public MenuImageVue getMenuImageVue() {
305
		return menuImageVue;
306
	}
307
 
308
	/**
31 aperonnet 309
	 * Accesseur pour la barre d'outils
20 aperonnet 310
	 * @return the barreOutilsVue
311
	 */
312
	public BarreOutilsVue getBarreOutilsVue() {
313
		return barreOutilsVue;
314
	}
315
 
316
	/**
31 aperonnet 317
	 * Accesseur pour le panneau infos et métadonnées
20 aperonnet 318
	 * @return the metadonneesIptcExif
319
	 */
320
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
321
		return metadonneesIptcExif;
322
	}
323
 
324
	/**
31 aperonnet 325
	 * Renvoie l'index du dernier onglet sélectionné
326
	 * @return l'index du dernier onglet
20 aperonnet 327
	 */
328
	public int getDernierIndexOnglet() {
329
		return dernierIndexOnglet;
330
	}
331
 
24 aperonnet 332
	/**
31 aperonnet 333
	 * Renvoie la vue sélectionné par l'utilisateur
24 aperonnet 334
	 * @return la vue selectionnée par l'utilisateur
335
	 */
19 aperonnet 336
	public VueListable getVueSelectionnee()
5 aperonnet 337
	{
19 aperonnet 338
		Panel active = ongletsImage.getActiveTab() ;
339
		if(active != zoomImage)
340
		{
341
			if(active == galerieImage)
342
			{
343
				return galerieImage ;
344
			}
345
			else
346
			{
347
				return listeImage ;
348
			}
349
 
350
		}
351
		else
352
		{
353
			if(dernierIndexOnglet == 0)
354
			{
355
				return galerieImage ;
356
			}
357
			else
358
			{
359
				return listeImage ;
360
			}
361
 
362
		}
16 aperonnet 363
 
19 aperonnet 364
	}
365
 
24 aperonnet 366
	/**
31 aperonnet 367
	 * Renvoie l'identifiant de la vue en cours
368
	 * @return l'identifiant de la vue en cours de visualisation
369
	 */
370
	public String getIdVueSelectionnee()
371
	{
372
		Panel active = ongletsImage.getActiveTab() ;
373
		if(active != zoomImage)
374
		{
375
			if(active == galerieImage)
376
			{
377
				return galerieImage.getId() ;
378
			}
379
			else
380
			{
381
				return listeImage.getId() ;
382
			}
383
 
384
		}
385
		else
386
		{
387
			if(dernierIndexOnglet == 0)
388
			{
389
				return galerieImage.getId() ;
390
			}
391
			else
392
			{
393
				return listeImage.getId() ;
394
			}
395
 
396
		}
397
 
398
	}
399
 
400
	/**
401
	 * Met a jour les données provenant du modèle et synchronise les vues entre elles
30 aperonnet 402
	 * @param o données de mises a jour pour les vues
403
	 * @param r le refraichissable qui a demandé la mise a jour
24 aperonnet 404
	 */
20 aperonnet 405
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r)
19 aperonnet 406
	{
16 aperonnet 407
 
20 aperonnet 408
		if(o instanceof Store) {
409
 
410
			Store li = (Store)o ;
411
 
412
			if(li.getCount() <= 0)
413
			{
414
				aucuneSelection() ;
415
			}
416
			else
417
			{
418
				selection() ;
419
			}
420
 
421
		}
422
 
5 aperonnet 423
		if(r != getGalerieImage())
424
		{
16 aperonnet 425
			getGalerieImage().rafraichir(o,false);
5 aperonnet 426
		}
427
		if(r != getZoomImage())
428
		{
16 aperonnet 429
			getZoomImage().rafraichir(o,false);
5 aperonnet 430
		}
431
		if(r != getListeImage())
432
		{
16 aperonnet 433
			getListeImage().rafraichir(o,false);
20 aperonnet 434
		}
435
 
436
		aucuneSelection() ;
31 aperonnet 437
		demasquerChargement() ;
5 aperonnet 438
	}
439
 
24 aperonnet 440
	/**
30 aperonnet 441
	 * envoie au modèle une demande de mise a jour
442
	 * @param r la vue demandeuse de mise a jour
24 aperonnet 443
	 */
6 aperonnet 444
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 445
	{
7 aperonnet 446
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 447
	}
448
 
24 aperonnet 449
	/**
30 aperonnet 450
	 * demande au modèle les métadonnées associées a une image
451
	 * @param r la vue demandeuse de mise a jour
24 aperonnet 452
	 * @param id l'identifiant de l'image
453
	 */
16 aperonnet 454
	public void obtenirMetadonnees(Rafraichissable r, String id)
455
	{
456
		getIModele().obtenirMetadonnees(r, id) ;
457
	}
458
 
24 aperonnet 459
	/**
30 aperonnet 460
	 * demande au modèle les ids des mots clés associés a une image
461
	 * @param r la vue demandeuse de mise a jour
25 aperonnet 462
	 * @param id l'identifiant de l'image
463
	 */
464
	public void obtenirMotsClesId(Rafraichissable r, String id)
465
	{
466
		getIModele().obtenirMotsClesId(r, id) ;
467
	}
468
 
31 aperonnet 469
	/**
470
	 * Envoie au modèle une demande pour obtenir l'arbre des mots clés
471
	 * @param r le raffraichissable qui a demandé la mise à jour
472
	 */
30 aperonnet 473
	public void obtenirArbreMotsCles(Rafraichissable r)
474
	{
475
		getIModele().obtenirArbreMotCle(r) ;
476
	}
477
 
25 aperonnet 478
	/**
30 aperonnet 479
	 * envoie au modèle une demande de mise a jour des informations modifiables
480
	 * associées a une image
24 aperonnet 481
	 * @param commentaires le commentaire de l'image
482
	 * @param date la date modifiée par l'utilisateur
483
	 */
18 aperonnet 484
	public void mettreAJourInfo(String commentaires, String date)
485
	{
19 aperonnet 486
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
18 aperonnet 487
 
488
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
489
	}
490
 
31 aperonnet 491
	/**
492
	 * Met à jour l'arbre des mots clés affichés dans le volet de droite à partir de l'arbre passé en paramètre
493
	 * @param arbreMC le nouvel arbre des mots clés
494
	 */
30 aperonnet 495
	public void rafraichirArbreMotsCles(Tree arbreMC)
496
	{
497
		metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false) ;
498
	}
499
 
24 aperonnet 500
	/**
501
	 * envoie au modèle une demande pour lancer le formulaire ou l'application d'upload
502
	 */
19 aperonnet 503
	public void uploaderImages()
12 aperonnet 504
	{
505
		getIModele().uploaderImages() ;
506
	}
507
 
24 aperonnet 508
	/**
509
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie
510
	 * le médiateur gère alors les conséquences
511
	 * @param index l'index du noeud dans la galerie
512
	 * @param node le noeud selectionné
513
	 * @param e l'object source de l'évenement
514
	 */
12 aperonnet 515
	public void clicGalerieImage(int index, Element node,
5 aperonnet 516
			EventObject e)
517
	{
518
		Record rd = getGalerieImage().getDView().getRecord(node) ;
519
		String imgUrl = rd.getAsString("url_image");
520
 
16 aperonnet 521
		getZoomImage().rafraichir(imgUrl,false);
19 aperonnet 522
		dernierIndexOnglet = 0 ;
5 aperonnet 523
 
524
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
525
		{
19 aperonnet 526
 
5 aperonnet 527
			getOngletsImage().setActiveTab(1);
528
		}
16 aperonnet 529
 
530
		String imgNum = rd.getAsString("num_image");
531
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
25 aperonnet 532
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
533
 
5 aperonnet 534
	}
535
 
24 aperonnet 536
	/**
537
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste
538
	 * le médiateur gère alors les conséquences
539
	 * @param rowIndex le numéro de ligne selectionné
540
	 */
20 aperonnet 541
	public void clicListeImage(int rowIndex)
19 aperonnet 542
	{
543
		Record rd = getListeImage().getSelectionModel().getSelected() ;
544
		String imgUrl = rd.getAsString("url_image");
545
 
546
		getZoomImage().rafraichir(imgUrl,false);
547
 
548
		dernierIndexOnglet = 2 ;
549
 
550
		String imgNum = rd.getAsString("num_image");
551
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
25 aperonnet 552
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
19 aperonnet 553
	}
554
 
24 aperonnet 555
	/**
556
	 * gestion du double clic dans la liste
557
	 * @param rowIndex
558
	 */
20 aperonnet 559
	public void doubleClicListeImage(int rowIndex)
19 aperonnet 560
	{
20 aperonnet 561
		clicListeImage(rowIndex) ;
19 aperonnet 562
		getOngletsImage().setActiveTab(1);
563
	}
564
 
24 aperonnet 565
	/**
30 aperonnet 566
	 * envoie une demande de mise a jour des données au modèle
24 aperonnet 567
	 */
18 aperonnet 568
	public void rafraichirToutesVues()
569
	{
24 aperonnet 570
		obtenirPhotoGalerie(getIModele());
18 aperonnet 571
	}
16 aperonnet 572
 
24 aperonnet 573
	/**
574
	 * montre le menu au coordonnées indiquées
575
	 * @param e l'objet source de l'évenement
576
	 */
12 aperonnet 577
	public void montrerContextMenu(EventObject e)
5 aperonnet 578
	{
12 aperonnet 579
		menuImageVue.showAt(e.getXY()) ;
580
	}
581
 
24 aperonnet 582
	/**
583
	 * appelé lors du double clic sur l'image agrandie
584
	 */
12 aperonnet 585
	public void doubleClicZoomImage()
586
	{
19 aperonnet 587
		getOngletsImage().setActiveTab(dernierIndexOnglet);
5 aperonnet 588
	}
589
 
24 aperonnet 590
	/**
591
	 * appelé lors du clic sur un des boutons de la zone zoom
592
	 * @param arg le nom du bouton qui a cliqué
593
	 */
12 aperonnet 594
	public void clicBoutonZoomImage(String arg)
5 aperonnet 595
	{
596
 
19 aperonnet 597
		Store st ;
598
		int selected ;
599
		int storeIndex ;
5 aperonnet 600
		Record nRec = null ;
601
 
31 aperonnet 602
		// tout d'abord on obtient les index selectionnés suivant la vue
19 aperonnet 603
		if(getVueSelectionnee() == galerieImage)
604
		{
605
			DataView dv = getGalerieImage().getDView();
606
			st = getGalerieImage().getSt();
607
 
20 aperonnet 608
			if(st.getCount() <= 0)
609
			{
610
				return ;
611
			}
612
 
19 aperonnet 613
			selected = st.indexOf(dv.getSelectedRecords()[0]);
614
			storeIndex = dv.indexOf(selected);
615
		}
616
		else
617
		{
618
			st = listeImage.getSt() ;
20 aperonnet 619
 
620
			if(st.getCount() <= 0)
621
			{
622
				return ;
623
			}
624
 
19 aperonnet 625
			selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
626
			storeIndex = selected ;
627
		}
5 aperonnet 628
 
629
		if(arg.equals("prev"))
630
		{
30 aperonnet 631
			// si la photo séléctionnée est la première, on passe a la
5 aperonnet 632
			// dernière
633
			if (selected == 0) {
634
				storeIndex = st.getCount() - 1 ;
635
				nRec = st.getAt(storeIndex);
636
 
637
			}
638
			else
639
			{
640
				storeIndex = storeIndex - 1 ;
641
				nRec = st.getAt(storeIndex);
642
			}
643
 
644
 
645
		}
646
 
647
		if(arg.equals("suiv"))
648
		{
30 aperonnet 649
			// si la photo selectionnée est la dernière on passe a la
5 aperonnet 650
			// première
651
			if (selected == st.getCount() - 1) {
652
 
653
				storeIndex = 0 ;
654
				nRec = st.getAt(0);
655
			}
656
			else
657
			{
658
				storeIndex = storeIndex + 1 ;
659
				nRec = st.getAt(storeIndex);
660
			}
661
		}
662
 
663
		if(nRec != null)
664
		{
19 aperonnet 665
 
16 aperonnet 666
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
19 aperonnet 667
			if(getGalerieImage().isRendered())
668
			{
669
				getGalerieImage().getDView().select(storeIndex);
670
			}
16 aperonnet 671
 
19 aperonnet 672
			if(getListeImage().isRendered())
673
			{
674
				getListeImage().getSelectionModel().selectRecords(nRec) ;
675
			}
676
 
16 aperonnet 677
			String imgNum = nRec.getAsString("num_image");
678
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
25 aperonnet 679
			obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
5 aperonnet 680
		}
681
	}
682
 
20 aperonnet 683
 
24 aperonnet 684
	/**
685
	 * synchronise la selection entre la galerie et la liste
30 aperonnet 686
	 * @param string le nom de la vue qui doit être synchronisee
24 aperonnet 687
	 */
20 aperonnet 688
	public void synchroniserSelection(String string) {
689
 
690
		if(string.equals("galerie") && getDernierIndexOnglet() != 2)
691
		{
692
				Record[] sel = getGalerieImage().getDView().getSelectedRecords() ;
693
				getListeImage().selectionnerEnregistrements(sel) ;
694
		}
695
 
696
		if(string.equals("liste") && getDernierIndexOnglet() != 0)
697
		{
698
 
699
				Record[] sel = getListeImage().getSelectionModel().getSelections() ;
700
				int[] ids = new int[sel.length] ;
701
 
702
				for (int i = 0; i < sel.length; i++) {
703
 
704
					ids[i] = getGalerieImage().getSt().indexOf(sel[i]) ;
705
				}
706
 
707
				getGalerieImage().selectionnerImages(ids) ;
708
		}
709
 
710
	}
711
 
24 aperonnet 712
	/**
713
	 * fait une demande de suppression des images (en local et en distant)
30 aperonnet 714
	 * des images selectionnees
24 aperonnet 715
	 */
20 aperonnet 716
	public void supprimerImages() {
717
 
718
		String[] ids = null ;
719
 
720
 
721
			if(dernierIndexOnglet == 0)
722
			{
723
				ids = getGalerieImage().getIdSelectionnees() ;
724
			}
725
			else
726
			{
727
				ids = getListeImage().getIdSelectionnees() ;
728
			}
729
 
730
		if(ids.length > 0)
731
		{
732
 
733
			if(com.google.gwt.user.client.Window
30 aperonnet 734
					.confirm("Supprimer les images selectionnees ?"))
20 aperonnet 735
			{
31 aperonnet 736
				masquerChargement() ;
20 aperonnet 737
				getIModele().supprimerImages(ids) ;
738
				aucuneSelection() ;
739
			}
740
		}
741
		else
742
		{
30 aperonnet 743
			Window.alert("Impossible de supprimer : aucune image selectionnee") ;
20 aperonnet 744
		}
745
 
746
	}
747
 
24 aperonnet 748
	/**
30 aperonnet 749
	 * desactive les onglets de metadonnees et de zoom (dans le cas ou rien n'est selectionne)
24 aperonnet 750
	 */
20 aperonnet 751
	public void aucuneSelection() {
752
 
753
		if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
754
		{
755
			getMetadonneesIptcExif().desactiverPanneau() ;
756
			getZoomImage().desactiverPanneau() ;
757
			setSelection(false) ;
758
		}
759
 
760
	}
12 aperonnet 761
 
24 aperonnet 762
	/**
31 aperonnet 763
	 * reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il n'y en avait pas)
24 aperonnet 764
	 */
20 aperonnet 765
	public void selection() {
766
 
767
		if(!isSelection())
768
		{
769
			getMetadonneesIptcExif().activerPanneau() ;
770
			getZoomImage().activerPanneau() ;
771
			setSelection(true);
772
		}
773
	}
25 aperonnet 774
 
31 aperonnet 775
	/**
776
	 * Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau d'un noeud donné
777
	 * @param n le noeud ou le menu doit apparaitre
778
	 * @param ev l'objet contenant les données sur l'évenement
779
	 * @param te l'éditeur associé à l'arbre qui permet de modifier les libellés des noeuds
780
	 */
25 aperonnet 781
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev, final TreeEditor te)
782
	{
783
		Menu mn = new Menu() ;
30 aperonnet 784
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item("Ajouter mot cle");
785
		final com.gwtext.client.widgets.menu.Item suppN = new Item("Supprimer mot cle");
25 aperonnet 786
 
787
		mn.addItem(ajoutN);
788
		mn.addItem(suppN);
789
 
790
		mn.addListener(new MenuListenerAdapter() {
791
 
792
			public void onItemClick(BaseItem item, EventObject e)
30 aperonnet 793
			{
25 aperonnet 794
				if(item.equals(suppN))
795
				{
796
					getMetadonneesIptcExif().getPanneauMotsCles().supprimerNoeud(n) ;
797
				}
798
				if(item.equals(ajoutN))
799
				{
800
					getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(n) ;
801
				}
802
			}
803
		});
804
 
805
		mn.showAt(ev.getXY());
806
 
807
	}
30 aperonnet 808
 
31 aperonnet 809
	/**
810
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du mot clé
811
	 * @param text le texte du mot clé
812
	 * @param id l'identifiant du mot clé
813
	 */
25 aperonnet 814
	public void mettreAjourMotsClesId(String text, String id) {
815
 
816
		getIModele().mettreAjourMotsClesId(text, id) ;
817
 
818
	}
819
 
31 aperonnet 820
	/**
821
	 * Récupère les identifiants des images selectionnés
822
	 * et appelle le modèle pour qu'il mette à jour les associations mots clés/images
823
	 * @param motsClesEnCours les mots clés à associer aux images selectionnés séparés par une ','
824
	 * @param arbreMC l'arbre des mots clés à mettre à jour
825
	 */
28 aperonnet 826
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
25 aperonnet 827
 
828
		String[] ids = getGalerieImage().getIdSelectionnees() ;
28 aperonnet 829
		getIModele().mettreAjourMotsCles(ids,motsClesEnCours,arbreMC) ;
25 aperonnet 830
 
831
	}
20 aperonnet 832
 
31 aperonnet 833
	/**
834
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots clés
835
	 * @param n le noeud parent pour l'ajout
836
	 * @param arbreMC le nouvel arbre de mots clés à mettre à jour
837
	 */
28 aperonnet 838
	public void ajouterMotCleDansArbre(TreeNode n,Tree arbreMC)
839
	{
840
		getIModele().ajouterMotCleDansArbre(n, arbreMC) ;
841
	}
842
 
31 aperonnet 843
	/**
844
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre dans l'arbre des mots clés
845
	 * @param n le noeud à supprimer
846
	 * @param arbreMC le nouvel arbre de mots clés à mettre à jour
847
	 */
28 aperonnet 848
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
849
 
850
		getIModele().supprimerMotCleDansArbre(n,arbreMC) ;
851
 
852
	}
853
 
31 aperonnet 854
	/**
855
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots clés
856
	 * @param n le noeud à modifier
857
	 * @param arbreMC le nouvel arbre de mots clés à mettre à jour
858
	 */
28 aperonnet 859
	public void modifierMotCleDansArbre(TreeNode n , Tree arbreMC) {
860
 
861
		getIModele().modifierMotCleDansArbre(n,arbreMC) ;
862
 
863
	}
20 aperonnet 864
 
31 aperonnet 865
	/**
866
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans l'arbre des mots clés
867
	 * @param n le noeud à déplacer
868
	 * @param arbreMC le nouvel arbre de mots clés à mettre à jour
869
	 */
28 aperonnet 870
	public void deplacerMotCleDansArbre(TreeNode n , Tree arbreMC) {
871
 
872
		getIModele().deplacerMotCleDansArbre(n, arbreMC) ;
873
	}
30 aperonnet 874
 
31 aperonnet 875
	/**
876
	 * initialise les mots clés cochés par rapport aux images sélectionnées
877
	 */
30 aperonnet 878
	public void initialiserMotsCleCoches() {
879
 
880
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), getGalerieImage().getIdSelectionnees()[0]) ;
881
	}
31 aperonnet 882
 
883
	/**
884
	 * Appelle le modèle pour lui demander les données d'une page à afficher
885
	 * @param pageCourante le numéro de page à affciher
886
	 */
887
	public void changerNumeroPage(int pageCourante) {
888
 
889
		// on met le mesage d'attente
890
		masquerChargement() ;
891
 
892
		// on appelle le modèle
893
		getIModele().changerNumeroPage(pageCourante) ;
894
 
895
		// et met à jour les numéros de page dans les barre d'outils
896
		getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
897
		getListeImage().getToolBarVue().changerPageCourante(pageCourante);
898
	}
28 aperonnet 899
 
31 aperonnet 900
	/**
901
	 * Appelle le modèle pour qu'il change la taille de page utilisée
902
	 * @param nouvelleTaillePage la nouvelle taille de page
903
	 */
904
	public void changerTaillePage(int nouvelleTaillePage)
905
	{
906
		// on met le message d'attente
907
		masquerChargement() ;
908
 
909
		// on appelle le modèle
910
		getIModele().changerTaillePage(nouvelleTaillePage) ;
911
 
912
		// et on met à jour la taille de page dans les barres d'outils
913
		getGalerieImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
914
		getListeImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
915
	}
916
 
917
	/**
918
	 * Met à jour les barre d'outils avec des nouvelles valeurs
919
	 * @param pageMax le nombre de pages
920
	 * @param pageEncours la page en cours
921
	 * @param taillePage la taille de page
922
	 * @param nbElement le nombre d'élements par page
923
	 */
924
	public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement)
925
	{
926
 
927
		int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
928
		getGalerieImage().getToolBarVue().rafraichir(pages, false) ;
929
		getListeImage().getToolBarVue().rafraichir(pages, false) ;
930
 
931
	}
28 aperonnet 932
 
31 aperonnet 933
	/**
934
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
935
	 */
936
	public void masquerChargement()
937
	{
938
			ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
4 aperonnet 939
 
31 aperonnet 940
				masked.mask("Chargement") ;
941
 
942
	}
943
 
944
	/**
945
	 * Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
946
	 */
947
	public void demasquerChargement()
948
	{
949
				ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
950
				if(masked.isMasked())
951
				{
952
					masked.unmask() ;
953
				}
954
	}
955
 
956
 
957
 
4 aperonnet 958
}