Subversion Repositories eFlore/Archives.cel-v2

Rev

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