Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 18 | Rev 20 | 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;
4 aperonnet 5
import org.tela_botanica.client.vues.GalerieImageVue;
6
import org.tela_botanica.client.vues.ListeImageVue;
12 aperonnet 7
import org.tela_botanica.client.vues.MenuImageVue;
16 aperonnet 8
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
4 aperonnet 9
import org.tela_botanica.client.vues.ZoomImageVue;
5 aperonnet 10
import com.google.gwt.user.client.DOM;
11
import com.google.gwt.user.client.Element;
12
import com.google.gwt.user.client.Event;
16 aperonnet 13
import com.google.gwt.user.client.Window;
5 aperonnet 14
import com.gwtext.client.core.EventObject;
16 aperonnet 15
import com.gwtext.client.core.Function;
4 aperonnet 16
import com.gwtext.client.core.RegionPosition;
5 aperonnet 17
import com.gwtext.client.data.Record;
18
import com.gwtext.client.data.Store;
19
import com.gwtext.client.widgets.DataView;
4 aperonnet 20
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.TabPanel;
16 aperonnet 22
import com.gwtext.client.widgets.Tool;
23
import com.gwtext.client.widgets.Tool.ToolType;
4 aperonnet 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;
4 aperonnet 27
 
12 aperonnet 28
/**
29
 * Mediateur gérant les interactions entre vues et les echanges de données
30
 * C'est un singleton.
31
 * @author aurelien
32
 *
33
 */
4 aperonnet 34
public class ImageMediateur {
35
 
12 aperonnet 36
	// cette classe est un singleton
37
	private static boolean estInstancie = false ;
38
 
4 aperonnet 39
	// controleur
7 aperonnet 40
	private ImageModele iModele = null ;
4 aperonnet 41
 
42
	//widgets
43
 
44
	//Panneau principal des images (onglet "images")
45
	private final Panel panneauPrincipalImage = new Panel("Images");
46
 
47
	// Panneau à onglet pour la liste, la galerie et la vue en grand
48
	private TabPanel ongletsImage = null ;
16 aperonnet 49
	private Panel panneauMenuEtOngletsImage = null ;
4 aperonnet 50
 
51
	private GalerieImageVue galerieImage = null ;
52
	private ListeImageVue listeImage = null ;
53
	private ZoomImageVue zoomImage = null ;
54
 
55
	// panneau details et mots clés
56
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
57
 
12 aperonnet 58
	private MenuImageVue menuImageVue = null ;
4 aperonnet 59
 
16 aperonnet 60
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
61
 
19 aperonnet 62
	private int dernierIndexOnglet = 0 ;
63
 
12 aperonnet 64
	public static ImageMediateur Instance()
4 aperonnet 65
	{
12 aperonnet 66
			if(!estInstancie)
67
			{
68
				estInstancie = true ;
69
				return new ImageMediateur() ;
70
			}
71
			else
72
			{
73
				return null ;
74
			}
75
	}
76
 
77
	private ImageMediateur()
78
	{
79
		final BorderLayoutData regionNord = new BorderLayoutData(
80
				RegionPosition.NORTH) ;
81
 
82
		final BorderLayoutData regionCentre = new BorderLayoutData(
83
				RegionPosition.CENTER) ;
4 aperonnet 84
 
85
		final BorderLayoutData regionEst = new BorderLayoutData(
86
				RegionPosition.EAST);
87
		regionEst.setSplit(true);
88
 
89
 
12 aperonnet 90
		iModele = ImageModele.Instance(this);
4 aperonnet 91
 
92
		panneauPrincipalImage.setLayout(new BorderLayout());
16 aperonnet 93
		panneauMenuEtOngletsImage = new Panel() ;
94
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
4 aperonnet 95
 
96
		ongletsImage = new TabPanel();
97
		galerieImage = new GalerieImageVue(this) ;
98
 
99
		Panel panneauListeImage = new Panel("Liste");
100
		listeImage = new ListeImageVue(this);
12 aperonnet 101
		panneauListeImage.setLayout(new FitLayout());
4 aperonnet 102
		panneauListeImage.add(listeImage);
103
 
104
		zoomImage = new ZoomImageVue(this);
105
 
106
		ongletsImage.add(galerieImage);
107
		ongletsImage.add(zoomImage);
108
		ongletsImage.add(panneauListeImage);
109
 
12 aperonnet 110
		menuImageVue = new MenuImageVue(this) ;
111
 
4 aperonnet 112
		detailsEtMotsCles.setWidth("20%");
113
		detailsEtMotsCles.setAnimCollapse(true);
114
		detailsEtMotsCles.setTitleCollapse(true);
115
		detailsEtMotsCles.setCollapsible(true);
116
 
16 aperonnet 117
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
118
		detailsEtMotsCles.add(metadonneesIptcExif) ;
119
 
120
 
18 aperonnet 121
		//panneauMenuEtOngletsImage.add(menuImageVue,regionNord) ;
16 aperonnet 122
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
123
 
124
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
4 aperonnet 125
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
126
 
127
	}
128
 
18 aperonnet 129
	public String getIdentifiant()
130
	{
131
		return "0" ;
132
	}
4 aperonnet 133
 
7 aperonnet 134
	public ImageModele getIModele() {
135
		return iModele;
4 aperonnet 136
	}
137
 
138
	public Panel getPanneauPrincipalImage() {
139
		return panneauPrincipalImage;
140
	}
141
 
142
	public TabPanel getOngletsImage() {
143
		return ongletsImage;
144
	}
145
 
146
	public GalerieImageVue getGalerieImage() {
147
		return galerieImage;
148
	}
149
 
150
	public ListeImageVue getListeImage() {
151
		return listeImage;
152
	}
153
 
154
	public ZoomImageVue getZoomImage() {
155
		return zoomImage;
156
	}
157
 
158
	public Panel getDetailsEtMotsCles() {
159
		return detailsEtMotsCles;
160
	}
161
 
19 aperonnet 162
	public VueListable getVueSelectionnee()
5 aperonnet 163
	{
19 aperonnet 164
		Panel active = ongletsImage.getActiveTab() ;
165
		if(active != zoomImage)
166
		{
167
			if(active == galerieImage)
168
			{
169
				return galerieImage ;
170
			}
171
			else
172
			{
173
				return listeImage ;
174
			}
175
 
176
		}
177
		else
178
		{
179
			if(dernierIndexOnglet == 0)
180
			{
181
				return galerieImage ;
182
			}
183
			else
184
			{
185
				return listeImage ;
186
			}
187
 
188
		}
16 aperonnet 189
 
19 aperonnet 190
	}
191
 
192
	public void synchroniserZoomListeGalerie(Object o, Rafraichissable r)
193
	{
16 aperonnet 194
		getIModele().rafraichirListeImage(o) ;
195
 
5 aperonnet 196
		if(r != getGalerieImage())
197
		{
16 aperonnet 198
			getGalerieImage().rafraichir(o,false);
5 aperonnet 199
		}
200
		if(r != getZoomImage())
201
		{
16 aperonnet 202
			getZoomImage().rafraichir(o,false);
5 aperonnet 203
		}
204
		if(r != getListeImage())
205
		{
16 aperonnet 206
			getListeImage().rafraichir(o,false);
19 aperonnet 207
		}
5 aperonnet 208
	}
209
 
210
 
6 aperonnet 211
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 212
	{
7 aperonnet 213
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 214
	}
215
 
16 aperonnet 216
	public void obtenirMetadonnees(Rafraichissable r, String id)
217
	{
218
		getIModele().obtenirMetadonnees(r, id) ;
219
	}
220
 
18 aperonnet 221
	public void mettreAJourInfo(String commentaires, String date)
222
	{
19 aperonnet 223
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
18 aperonnet 224
 
225
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
226
	}
227
 
19 aperonnet 228
	public void uploaderImages()
12 aperonnet 229
	{
230
		getIModele().uploaderImages() ;
231
	}
232
 
233
	public void clicGalerieImage(int index, Element node,
5 aperonnet 234
			EventObject e)
235
	{
236
		Record rd = getGalerieImage().getDView().getRecord(node) ;
237
		String imgUrl = rd.getAsString("url_image");
238
 
16 aperonnet 239
		getZoomImage().rafraichir(imgUrl,false);
19 aperonnet 240
		dernierIndexOnglet = 0 ;
5 aperonnet 241
 
242
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
243
		{
19 aperonnet 244
 
5 aperonnet 245
			getOngletsImage().setActiveTab(1);
246
		}
16 aperonnet 247
 
248
		String imgNum = rd.getAsString("num_image");
249
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 250
	}
251
 
19 aperonnet 252
	public void clicListeImage(int rowIndex,
253
			EventObject e)
254
	{
255
		Record rd = getListeImage().getSelectionModel().getSelected() ;
256
		String imgUrl = rd.getAsString("url_image");
257
 
258
		getZoomImage().rafraichir(imgUrl,false);
259
 
260
		dernierIndexOnglet = 2 ;
261
 
262
		String imgNum = rd.getAsString("num_image");
263
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
264
	}
265
 
266
	public void doubleClicListeImage(int rowIndex,
267
			EventObject e)
268
	{
269
		clicListeImage(rowIndex, e) ;
270
		getOngletsImage().setActiveTab(1);
271
	}
272
 
18 aperonnet 273
	public void rafraichirToutesVues()
274
	{
275
		obtenirPhotoGalerie(getGalerieImage());
276
	}
16 aperonnet 277
 
12 aperonnet 278
	public void montrerContextMenu(EventObject e)
5 aperonnet 279
	{
12 aperonnet 280
		menuImageVue.showAt(e.getXY()) ;
281
	}
282
 
283
	public void doubleClicZoomImage()
284
	{
19 aperonnet 285
		getOngletsImage().setActiveTab(dernierIndexOnglet);
5 aperonnet 286
	}
287
 
12 aperonnet 288
	public void clicBoutonZoomImage(String arg)
5 aperonnet 289
	{
290
 
19 aperonnet 291
		Store st ;
292
		int selected ;
293
		int storeIndex ;
5 aperonnet 294
		Record nRec = null ;
295
 
19 aperonnet 296
		if(getVueSelectionnee() == galerieImage)
297
		{
298
			DataView dv = getGalerieImage().getDView();
299
			st = getGalerieImage().getSt();
300
 
301
			selected = st.indexOf(dv.getSelectedRecords()[0]);
302
			storeIndex = dv.indexOf(selected);
303
		}
304
		else
305
		{
306
			st = listeImage.getSt() ;
307
			selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
308
			storeIndex = selected ;
309
		}
5 aperonnet 310
 
311
		if(arg.equals("prev"))
312
		{
313
			// si la photo séléctionnée est la première, on passe à la
314
			// dernière
315
			if (selected == 0) {
316
				storeIndex = st.getCount() - 1 ;
317
				nRec = st.getAt(storeIndex);
318
 
319
			}
320
			else
321
			{
322
				storeIndex = storeIndex - 1 ;
323
				nRec = st.getAt(storeIndex);
324
			}
325
 
326
 
327
		}
328
 
329
		if(arg.equals("suiv"))
330
		{
331
			// si la photo selectionnée est la dernière on passe à la
332
			// première
333
			if (selected == st.getCount() - 1) {
334
 
335
				storeIndex = 0 ;
336
				nRec = st.getAt(0);
337
			}
338
			else
339
			{
340
				storeIndex = storeIndex + 1 ;
341
				nRec = st.getAt(storeIndex);
342
			}
343
		}
344
 
345
		if(nRec != null)
346
		{
19 aperonnet 347
 
16 aperonnet 348
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
19 aperonnet 349
			if(getGalerieImage().isRendered())
350
			{
351
				getGalerieImage().getDView().select(storeIndex);
352
			}
16 aperonnet 353
 
19 aperonnet 354
			if(getListeImage().isRendered())
355
			{
356
				getListeImage().getSelectionModel().selectRecords(nRec) ;
357
			}
358
 
16 aperonnet 359
			String imgNum = nRec.getAsString("num_image");
360
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 361
		}
362
	}
363
 
12 aperonnet 364
 
4 aperonnet 365
 
366
}