Subversion Repositories eFlore/Archives.cel-v2

Rev

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