Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 19 | Rev 24 | 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;
20 aperonnet 5
import org.tela_botanica.client.vues.BarreOutilsVue;
4 aperonnet 6
import org.tela_botanica.client.vues.GalerieImageVue;
7
import org.tela_botanica.client.vues.ListeImageVue;
12 aperonnet 8
import org.tela_botanica.client.vues.MenuImageVue;
16 aperonnet 9
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
4 aperonnet 10
import org.tela_botanica.client.vues.ZoomImageVue;
20 aperonnet 11
 
5 aperonnet 12
import com.google.gwt.user.client.DOM;
13
import com.google.gwt.user.client.Element;
14
import com.google.gwt.user.client.Event;
16 aperonnet 15
import com.google.gwt.user.client.Window;
5 aperonnet 16
import com.gwtext.client.core.EventObject;
4 aperonnet 17
import com.gwtext.client.core.RegionPosition;
5 aperonnet 18
import com.gwtext.client.data.Record;
19
import com.gwtext.client.data.Store;
20
import com.gwtext.client.widgets.DataView;
4 aperonnet 21
import com.gwtext.client.widgets.Panel;
22
import com.gwtext.client.widgets.TabPanel;
23
import com.gwtext.client.widgets.layout.BorderLayout;
24
import com.gwtext.client.widgets.layout.BorderLayoutData;
12 aperonnet 25
import com.gwtext.client.widgets.layout.FitLayout;
4 aperonnet 26
 
12 aperonnet 27
/**
28
 * Mediateur gérant les interactions entre vues et les echanges de données
29
 * C'est un singleton.
30
 * @author aurelien
31
 *
32
 */
4 aperonnet 33
public class ImageMediateur {
34
 
12 aperonnet 35
	// cette classe est un singleton
36
	private static boolean estInstancie = false ;
37
 
4 aperonnet 38
	// controleur
7 aperonnet 39
	private ImageModele iModele = null ;
4 aperonnet 40
 
41
	//widgets
42
 
43
	//Panneau principal des images (onglet "images")
44
	private final Panel panneauPrincipalImage = new Panel("Images");
45
 
46
	// Panneau à onglet pour la liste, la galerie et la vue en grand
47
	private TabPanel ongletsImage = null ;
16 aperonnet 48
	private Panel panneauMenuEtOngletsImage = null ;
4 aperonnet 49
 
50
	private GalerieImageVue galerieImage = null ;
51
	private ListeImageVue listeImage = null ;
52
	private ZoomImageVue zoomImage = null ;
53
 
54
	// panneau details et mots clés
55
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
56
 
12 aperonnet 57
	private MenuImageVue menuImageVue = null ;
4 aperonnet 58
 
20 aperonnet 59
	private BarreOutilsVue barreOutilsVue = null ;
60
 
16 aperonnet 61
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
62
 
19 aperonnet 63
	private int dernierIndexOnglet = 0 ;
64
 
20 aperonnet 65
	private boolean selection = false ;
66
 
67
	/**
68
	 * @param selection the selection to set
69
	 */
70
	public void setSelection(boolean selection) {
71
		this.selection = selection;
72
	}
73
 
74
	/**
75
	 * @return the selection
76
	 */
77
	public boolean isSelection() {
78
		return selection;
79
	}
80
 
12 aperonnet 81
	public static ImageMediateur Instance()
4 aperonnet 82
	{
12 aperonnet 83
			if(!estInstancie)
84
			{
85
				estInstancie = true ;
86
				return new ImageMediateur() ;
87
			}
88
			else
89
			{
90
				return null ;
91
			}
92
	}
93
 
94
	private ImageMediateur()
95
	{
96
		final BorderLayoutData regionNord = new BorderLayoutData(
97
				RegionPosition.NORTH) ;
98
 
99
		final BorderLayoutData regionCentre = new BorderLayoutData(
100
				RegionPosition.CENTER) ;
4 aperonnet 101
 
102
		final BorderLayoutData regionEst = new BorderLayoutData(
103
				RegionPosition.EAST);
104
		regionEst.setSplit(true);
105
 
106
 
12 aperonnet 107
		iModele = ImageModele.Instance(this);
4 aperonnet 108
 
109
		panneauPrincipalImage.setLayout(new BorderLayout());
16 aperonnet 110
		panneauMenuEtOngletsImage = new Panel() ;
111
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
4 aperonnet 112
 
113
		ongletsImage = new TabPanel();
114
		galerieImage = new GalerieImageVue(this) ;
115
 
116
		Panel panneauListeImage = new Panel("Liste");
117
		listeImage = new ListeImageVue(this);
12 aperonnet 118
		panneauListeImage.setLayout(new FitLayout());
4 aperonnet 119
		panneauListeImage.add(listeImage);
120
 
121
		zoomImage = new ZoomImageVue(this);
122
 
123
		ongletsImage.add(galerieImage);
124
		ongletsImage.add(zoomImage);
125
		ongletsImage.add(panneauListeImage);
126
 
12 aperonnet 127
		menuImageVue = new MenuImageVue(this) ;
20 aperonnet 128
		barreOutilsVue = new BarreOutilsVue(this) ;
12 aperonnet 129
 
4 aperonnet 130
		detailsEtMotsCles.setWidth("20%");
131
		detailsEtMotsCles.setAnimCollapse(true);
132
		detailsEtMotsCles.setTitleCollapse(true);
133
		detailsEtMotsCles.setCollapsible(true);
134
 
16 aperonnet 135
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
136
		detailsEtMotsCles.add(metadonneesIptcExif) ;
137
 
138
 
20 aperonnet 139
		panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
16 aperonnet 140
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
141
 
142
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
4 aperonnet 143
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
144
 
145
	}
146
 
18 aperonnet 147
	public String getIdentifiant()
148
	{
149
		return "0" ;
150
	}
4 aperonnet 151
 
7 aperonnet 152
	public ImageModele getIModele() {
153
		return iModele;
4 aperonnet 154
	}
155
 
156
	public Panel getPanneauPrincipalImage() {
157
		return panneauPrincipalImage;
158
	}
159
 
160
	public TabPanel getOngletsImage() {
161
		return ongletsImage;
162
	}
163
 
164
	public GalerieImageVue getGalerieImage() {
165
		return galerieImage;
166
	}
167
 
168
	public ListeImageVue getListeImage() {
169
		return listeImage;
170
	}
171
 
172
	public ZoomImageVue getZoomImage() {
173
		return zoomImage;
174
	}
175
 
176
	public Panel getDetailsEtMotsCles() {
177
		return detailsEtMotsCles;
178
	}
179
 
20 aperonnet 180
	/**
181
	 * @return the estInstancie
182
	 */
183
	public static boolean isEstInstancie() {
184
		return estInstancie;
185
	}
186
 
187
	/**
188
	 * @return the panneauMenuEtOngletsImage
189
	 */
190
	public Panel getPanneauMenuEtOngletsImage() {
191
		return panneauMenuEtOngletsImage;
192
	}
193
 
194
	/**
195
	 * @return the menuImageVue
196
	 */
197
	public MenuImageVue getMenuImageVue() {
198
		return menuImageVue;
199
	}
200
 
201
	/**
202
	 * @return the barreOutilsVue
203
	 */
204
	public BarreOutilsVue getBarreOutilsVue() {
205
		return barreOutilsVue;
206
	}
207
 
208
	/**
209
	 * @return the metadonneesIptcExif
210
	 */
211
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
212
		return metadonneesIptcExif;
213
	}
214
 
215
	/**
216
	 * @return the dernierIndexOnglet
217
	 */
218
	public int getDernierIndexOnglet() {
219
		return dernierIndexOnglet;
220
	}
221
 
19 aperonnet 222
	public VueListable getVueSelectionnee()
5 aperonnet 223
	{
19 aperonnet 224
		Panel active = ongletsImage.getActiveTab() ;
225
		if(active != zoomImage)
226
		{
227
			if(active == galerieImage)
228
			{
229
				return galerieImage ;
230
			}
231
			else
232
			{
233
				return listeImage ;
234
			}
235
 
236
		}
237
		else
238
		{
239
			if(dernierIndexOnglet == 0)
240
			{
241
				return galerieImage ;
242
			}
243
			else
244
			{
245
				return listeImage ;
246
			}
247
 
248
		}
16 aperonnet 249
 
19 aperonnet 250
	}
251
 
20 aperonnet 252
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r)
19 aperonnet 253
	{
16 aperonnet 254
 
20 aperonnet 255
		if(o instanceof Store) {
256
 
257
			Store li = (Store)o ;
258
 
259
			if(li.getCount() <= 0)
260
			{
261
				aucuneSelection() ;
262
			}
263
			else
264
			{
265
				selection() ;
266
			}
267
 
268
		}
269
 
5 aperonnet 270
		if(r != getGalerieImage())
271
		{
16 aperonnet 272
			getGalerieImage().rafraichir(o,false);
5 aperonnet 273
		}
274
		if(r != getZoomImage())
275
		{
16 aperonnet 276
			getZoomImage().rafraichir(o,false);
5 aperonnet 277
		}
278
		if(r != getListeImage())
279
		{
16 aperonnet 280
			getListeImage().rafraichir(o,false);
20 aperonnet 281
		}
282
 
283
		aucuneSelection() ;
5 aperonnet 284
	}
285
 
286
 
6 aperonnet 287
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 288
	{
7 aperonnet 289
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 290
	}
291
 
16 aperonnet 292
	public void obtenirMetadonnees(Rafraichissable r, String id)
293
	{
294
		getIModele().obtenirMetadonnees(r, id) ;
295
	}
296
 
18 aperonnet 297
	public void mettreAJourInfo(String commentaires, String date)
298
	{
19 aperonnet 299
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
18 aperonnet 300
 
301
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
302
	}
303
 
19 aperonnet 304
	public void uploaderImages()
12 aperonnet 305
	{
306
		getIModele().uploaderImages() ;
307
	}
308
 
309
	public void clicGalerieImage(int index, Element node,
5 aperonnet 310
			EventObject e)
311
	{
312
		Record rd = getGalerieImage().getDView().getRecord(node) ;
313
		String imgUrl = rd.getAsString("url_image");
314
 
16 aperonnet 315
		getZoomImage().rafraichir(imgUrl,false);
19 aperonnet 316
		dernierIndexOnglet = 0 ;
5 aperonnet 317
 
318
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
319
		{
19 aperonnet 320
 
5 aperonnet 321
			getOngletsImage().setActiveTab(1);
322
		}
16 aperonnet 323
 
324
		String imgNum = rd.getAsString("num_image");
325
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 326
	}
327
 
20 aperonnet 328
	public void clicListeImage(int rowIndex)
19 aperonnet 329
	{
330
		Record rd = getListeImage().getSelectionModel().getSelected() ;
331
		String imgUrl = rd.getAsString("url_image");
332
 
333
		getZoomImage().rafraichir(imgUrl,false);
334
 
335
		dernierIndexOnglet = 2 ;
336
 
337
		String imgNum = rd.getAsString("num_image");
338
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
339
	}
340
 
20 aperonnet 341
	public void doubleClicListeImage(int rowIndex)
19 aperonnet 342
	{
20 aperonnet 343
		clicListeImage(rowIndex) ;
19 aperonnet 344
		getOngletsImage().setActiveTab(1);
345
	}
346
 
18 aperonnet 347
	public void rafraichirToutesVues()
348
	{
349
		obtenirPhotoGalerie(getGalerieImage());
350
	}
16 aperonnet 351
 
12 aperonnet 352
	public void montrerContextMenu(EventObject e)
5 aperonnet 353
	{
12 aperonnet 354
		menuImageVue.showAt(e.getXY()) ;
355
	}
356
 
357
	public void doubleClicZoomImage()
358
	{
19 aperonnet 359
		getOngletsImage().setActiveTab(dernierIndexOnglet);
5 aperonnet 360
	}
361
 
12 aperonnet 362
	public void clicBoutonZoomImage(String arg)
5 aperonnet 363
	{
364
 
19 aperonnet 365
		Store st ;
366
		int selected ;
367
		int storeIndex ;
5 aperonnet 368
		Record nRec = null ;
369
 
19 aperonnet 370
		if(getVueSelectionnee() == galerieImage)
371
		{
372
			DataView dv = getGalerieImage().getDView();
373
			st = getGalerieImage().getSt();
374
 
20 aperonnet 375
			if(st.getCount() <= 0)
376
			{
377
				return ;
378
			}
379
 
19 aperonnet 380
			selected = st.indexOf(dv.getSelectedRecords()[0]);
381
			storeIndex = dv.indexOf(selected);
382
		}
383
		else
384
		{
385
			st = listeImage.getSt() ;
20 aperonnet 386
 
387
			if(st.getCount() <= 0)
388
			{
389
				return ;
390
			}
391
 
19 aperonnet 392
			selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
393
			storeIndex = selected ;
394
		}
5 aperonnet 395
 
396
		if(arg.equals("prev"))
397
		{
398
			// si la photo séléctionnée est la première, on passe à la
399
			// dernière
400
			if (selected == 0) {
401
				storeIndex = st.getCount() - 1 ;
402
				nRec = st.getAt(storeIndex);
403
 
404
			}
405
			else
406
			{
407
				storeIndex = storeIndex - 1 ;
408
				nRec = st.getAt(storeIndex);
409
			}
410
 
411
 
412
		}
413
 
414
		if(arg.equals("suiv"))
415
		{
416
			// si la photo selectionnée est la dernière on passe à la
417
			// première
418
			if (selected == st.getCount() - 1) {
419
 
420
				storeIndex = 0 ;
421
				nRec = st.getAt(0);
422
			}
423
			else
424
			{
425
				storeIndex = storeIndex + 1 ;
426
				nRec = st.getAt(storeIndex);
427
			}
428
		}
429
 
430
		if(nRec != null)
431
		{
19 aperonnet 432
 
16 aperonnet 433
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
19 aperonnet 434
			if(getGalerieImage().isRendered())
435
			{
436
				getGalerieImage().getDView().select(storeIndex);
437
			}
16 aperonnet 438
 
19 aperonnet 439
			if(getListeImage().isRendered())
440
			{
441
				getListeImage().getSelectionModel().selectRecords(nRec) ;
442
			}
443
 
16 aperonnet 444
			String imgNum = nRec.getAsString("num_image");
445
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 446
		}
447
	}
448
 
20 aperonnet 449
	public void obtenirSelection(String nomVue)
450
	{
451
 
452
	}
453
 
454
 
455
	public void synchroniserSelection(String string) {
456
 
457
		if(string.equals("galerie") && getDernierIndexOnglet() != 2)
458
		{
459
				Record[] sel = getGalerieImage().getDView().getSelectedRecords() ;
460
				getListeImage().selectionnerEnregistrements(sel) ;
461
		}
462
 
463
		if(string.equals("liste") && getDernierIndexOnglet() != 0)
464
		{
465
 
466
				Record[] sel = getListeImage().getSelectionModel().getSelections() ;
467
				int[] ids = new int[sel.length] ;
468
 
469
				for (int i = 0; i < sel.length; i++) {
470
 
471
					ids[i] = getGalerieImage().getSt().indexOf(sel[i]) ;
472
				}
473
 
474
				getGalerieImage().selectionnerImages(ids) ;
475
		}
476
 
477
	}
478
 
479
	public void supprimerImages() {
480
 
481
		String[] ids = null ;
482
 
483
 
484
			if(dernierIndexOnglet == 0)
485
			{
486
				ids = getGalerieImage().getIdSelectionnees() ;
487
			}
488
			else
489
			{
490
				ids = getListeImage().getIdSelectionnees() ;
491
			}
492
 
493
		if(ids.length > 0)
494
		{
495
 
496
			if(com.google.gwt.user.client.Window
497
					.confirm("Supprimer les images sélectionnées ?"))
498
			{
499
				getIModele().supprimerImages(ids) ;
500
				aucuneSelection() ;
501
			}
502
		}
503
		else
504
		{
505
			Window.alert("Impossible de supprimer : aucune image selectionnée") ;
506
		}
507
 
508
	}
509
 
510
	public void aucuneSelection() {
511
 
512
		if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
513
		{
514
			getMetadonneesIptcExif().desactiverPanneau() ;
515
			getZoomImage().desactiverPanneau() ;
516
			setSelection(false) ;
517
		}
518
 
519
	}
12 aperonnet 520
 
20 aperonnet 521
	public void selection() {
522
 
523
		if(!isSelection())
524
		{
525
			getMetadonneesIptcExif().activerPanneau() ;
526
			getZoomImage().activerPanneau() ;
527
			setSelection(true);
528
		}
529
	}
530
 
531
 
4 aperonnet 532
 
533
}