Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 16 | Rev 19 | 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;
4 aperonnet 4
import org.tela_botanica.client.vues.GalerieImageVue;
5
import org.tela_botanica.client.vues.ListeImageVue;
12 aperonnet 6
import org.tela_botanica.client.vues.MenuImageVue;
16 aperonnet 7
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
4 aperonnet 8
import org.tela_botanica.client.vues.ZoomImageVue;
5 aperonnet 9
import com.google.gwt.user.client.DOM;
10
import com.google.gwt.user.client.Element;
11
import com.google.gwt.user.client.Event;
16 aperonnet 12
import com.google.gwt.user.client.Window;
5 aperonnet 13
import com.gwtext.client.core.EventObject;
16 aperonnet 14
import com.gwtext.client.core.Function;
4 aperonnet 15
import com.gwtext.client.core.RegionPosition;
5 aperonnet 16
import com.gwtext.client.data.Record;
17
import com.gwtext.client.data.Store;
18
import com.gwtext.client.widgets.DataView;
4 aperonnet 19
import com.gwtext.client.widgets.Panel;
20
import com.gwtext.client.widgets.TabPanel;
16 aperonnet 21
import com.gwtext.client.widgets.Tool;
22
import com.gwtext.client.widgets.Tool.ToolType;
4 aperonnet 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
 
16 aperonnet 59
	private PanneauMetadonneesVue metadonneesIptcExif = null ;
60
 
12 aperonnet 61
	public static ImageMediateur Instance()
4 aperonnet 62
	{
12 aperonnet 63
			if(!estInstancie)
64
			{
65
				estInstancie = true ;
66
				return new ImageMediateur() ;
67
			}
68
			else
69
			{
70
				return null ;
71
			}
72
	}
73
 
74
	private ImageMediateur()
75
	{
76
		final BorderLayoutData regionNord = new BorderLayoutData(
77
				RegionPosition.NORTH) ;
78
 
79
		final BorderLayoutData regionCentre = new BorderLayoutData(
80
				RegionPosition.CENTER) ;
4 aperonnet 81
 
82
		final BorderLayoutData regionEst = new BorderLayoutData(
83
				RegionPosition.EAST);
84
		regionEst.setSplit(true);
85
 
86
 
12 aperonnet 87
		iModele = ImageModele.Instance(this);
4 aperonnet 88
 
89
		panneauPrincipalImage.setLayout(new BorderLayout());
16 aperonnet 90
		panneauMenuEtOngletsImage = new Panel() ;
91
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
4 aperonnet 92
 
93
		ongletsImage = new TabPanel();
94
		galerieImage = new GalerieImageVue(this) ;
95
 
96
		Panel panneauListeImage = new Panel("Liste");
97
		listeImage = new ListeImageVue(this);
12 aperonnet 98
		panneauListeImage.setLayout(new FitLayout());
4 aperonnet 99
		panneauListeImage.add(listeImage);
100
 
101
		zoomImage = new ZoomImageVue(this);
102
 
103
		ongletsImage.add(galerieImage);
104
		ongletsImage.add(zoomImage);
105
		ongletsImage.add(panneauListeImage);
106
 
12 aperonnet 107
		menuImageVue = new MenuImageVue(this) ;
108
 
4 aperonnet 109
		detailsEtMotsCles.setWidth("20%");
110
		detailsEtMotsCles.setAnimCollapse(true);
111
		detailsEtMotsCles.setTitleCollapse(true);
112
		detailsEtMotsCles.setCollapsible(true);
113
 
16 aperonnet 114
		metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
115
		detailsEtMotsCles.add(metadonneesIptcExif) ;
116
 
117
 
18 aperonnet 118
		//panneauMenuEtOngletsImage.add(menuImageVue,regionNord) ;
16 aperonnet 119
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
120
 
121
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
4 aperonnet 122
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
123
 
124
	}
125
 
18 aperonnet 126
	public String getIdentifiant()
127
	{
128
		return "0" ;
129
	}
4 aperonnet 130
 
7 aperonnet 131
	public ImageModele getIModele() {
132
		return iModele;
4 aperonnet 133
	}
134
 
135
	public Panel getPanneauPrincipalImage() {
136
		return panneauPrincipalImage;
137
	}
138
 
139
	public TabPanel getOngletsImage() {
140
		return ongletsImage;
141
	}
142
 
143
	public GalerieImageVue getGalerieImage() {
144
		return galerieImage;
145
	}
146
 
147
	public ListeImageVue getListeImage() {
148
		return listeImage;
149
	}
150
 
151
	public ZoomImageVue getZoomImage() {
152
		return zoomImage;
153
	}
154
 
155
	public Panel getDetailsEtMotsCles() {
156
		return detailsEtMotsCles;
157
	}
158
 
5 aperonnet 159
	public void synchroniserZoomListeGalerie(Object o, Rafraichissable r)
160
	{
16 aperonnet 161
 
162
 
163
		getIModele().rafraichirListeImage(o) ;
164
 
5 aperonnet 165
		if(r != getGalerieImage())
166
		{
16 aperonnet 167
			getGalerieImage().rafraichir(o,false);
5 aperonnet 168
		}
169
		if(r != getZoomImage())
170
		{
16 aperonnet 171
			getZoomImage().rafraichir(o,false);
5 aperonnet 172
		}
173
		if(r != getListeImage())
174
		{
16 aperonnet 175
			getListeImage().rafraichir(o,false);
5 aperonnet 176
		}
16 aperonnet 177
 
5 aperonnet 178
	}
179
 
180
 
6 aperonnet 181
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 182
	{
7 aperonnet 183
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 184
	}
185
 
16 aperonnet 186
	public void obtenirMetadonnees(Rafraichissable r, String id)
187
	{
188
		getIModele().obtenirMetadonnees(r, id) ;
189
	}
190
 
18 aperonnet 191
	public void mettreAJourInfo(String commentaires, String date)
192
	{
193
		String ids[] = getGalerieImage().getIdSelectionnee() ;
194
 
195
			getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
196
	}
197
 
12 aperonnet 198
	public void uploaderImage()
199
	{
200
		getIModele().uploaderImages() ;
201
	}
202
 
203
	public void clicGalerieImage(int index, Element node,
5 aperonnet 204
			EventObject e)
205
	{
206
		Record rd = getGalerieImage().getDView().getRecord(node) ;
207
		String imgUrl = rd.getAsString("url_image");
208
 
16 aperonnet 209
		getZoomImage().rafraichir(imgUrl,false);
5 aperonnet 210
 
211
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
212
		{
213
			getOngletsImage().setActiveTab(1);
214
		}
16 aperonnet 215
 
216
		String imgNum = rd.getAsString("num_image");
217
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 218
	}
219
 
18 aperonnet 220
	public void rafraichirToutesVues()
221
	{
222
		obtenirPhotoGalerie(getGalerieImage());
223
	}
16 aperonnet 224
 
12 aperonnet 225
	public void montrerContextMenu(EventObject e)
5 aperonnet 226
	{
12 aperonnet 227
		menuImageVue.showAt(e.getXY()) ;
228
	}
229
 
230
	public void doubleClicZoomImage()
231
	{
5 aperonnet 232
		getOngletsImage().setActiveTab(0);
233
	}
234
 
12 aperonnet 235
	public void clicBoutonZoomImage(String arg)
5 aperonnet 236
	{
237
 
238
		DataView dv = getGalerieImage().getDView();
239
		Store st = getGalerieImage().getSt();
240
		Record nRec = null ;
241
 
242
		final int selected = st.indexOf(dv.getSelectedRecords()[0]);
243
		int storeIndex = dv.indexOf(selected);
244
 
245
 
246
		if(arg.equals("prev"))
247
		{
248
			// si la photo séléctionnée est la première, on passe à la
249
			// dernière
250
			if (selected == 0) {
251
				storeIndex = st.getCount() - 1 ;
252
				nRec = st.getAt(storeIndex);
253
 
254
			}
255
			else
256
			{
257
				storeIndex = storeIndex - 1 ;
258
				nRec = st.getAt(storeIndex);
259
			}
260
 
261
 
262
		}
263
 
264
		if(arg.equals("suiv"))
265
		{
266
			// si la photo selectionnée est la dernière on passe à la
267
			// première
268
			if (selected == st.getCount() - 1) {
269
 
270
				storeIndex = 0 ;
271
				nRec = st.getAt(0);
272
			}
273
			else
274
			{
275
				storeIndex = storeIndex + 1 ;
276
				nRec = st.getAt(storeIndex);
277
			}
278
		}
279
 
280
		if(nRec != null)
281
		{
16 aperonnet 282
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
5 aperonnet 283
			dv.select(storeIndex);
16 aperonnet 284
 
285
			String imgNum = nRec.getAsString("num_image");
286
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 287
		}
288
	}
289
 
12 aperonnet 290
 
4 aperonnet 291
 
292
}