Subversion Repositories eFlore/Archives.cel-v2

Rev

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