Subversion Repositories eFlore/Archives.cel-v2

Rev

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