Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 12 | Rev 18 | 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
 
118
		panneauMenuEtOngletsImage.add(menuImageVue,regionNord) ;
119
		panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
120
 
121
		panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
4 aperonnet 122
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
123
 
124
	}
125
 
126
 
127
 
7 aperonnet 128
	public ImageModele getIModele() {
129
		return iModele;
4 aperonnet 130
	}
131
 
132
	public Panel getPanneauPrincipalImage() {
133
		return panneauPrincipalImage;
134
	}
135
 
136
	public TabPanel getOngletsImage() {
137
		return ongletsImage;
138
	}
139
 
140
	public GalerieImageVue getGalerieImage() {
141
		return galerieImage;
142
	}
143
 
144
	public ListeImageVue getListeImage() {
145
		return listeImage;
146
	}
147
 
148
	public ZoomImageVue getZoomImage() {
149
		return zoomImage;
150
	}
151
 
152
	public Panel getDetailsEtMotsCles() {
153
		return detailsEtMotsCles;
154
	}
155
 
5 aperonnet 156
	public void synchroniserZoomListeGalerie(Object o, Rafraichissable r)
157
	{
16 aperonnet 158
 
159
 
160
		getIModele().rafraichirListeImage(o) ;
161
 
5 aperonnet 162
		if(r != getGalerieImage())
163
		{
16 aperonnet 164
			getGalerieImage().rafraichir(o,false);
5 aperonnet 165
		}
166
		if(r != getZoomImage())
167
		{
16 aperonnet 168
			getZoomImage().rafraichir(o,false);
5 aperonnet 169
		}
170
		if(r != getListeImage())
171
		{
16 aperonnet 172
			getListeImage().rafraichir(o,false);
5 aperonnet 173
		}
16 aperonnet 174
 
5 aperonnet 175
	}
176
 
177
 
6 aperonnet 178
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 179
	{
7 aperonnet 180
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 181
	}
182
 
16 aperonnet 183
	public void obtenirMetadonnees(Rafraichissable r, String id)
184
	{
185
		getIModele().obtenirMetadonnees(r, id) ;
186
	}
187
 
12 aperonnet 188
	public void uploaderImage()
189
	{
190
		getIModele().uploaderImages() ;
191
	}
192
 
193
	public void clicGalerieImage(int index, Element node,
5 aperonnet 194
			EventObject e)
195
	{
196
		Record rd = getGalerieImage().getDView().getRecord(node) ;
197
		String imgUrl = rd.getAsString("url_image");
198
 
16 aperonnet 199
		getZoomImage().rafraichir(imgUrl,false);
5 aperonnet 200
 
201
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
202
		{
203
			getOngletsImage().setActiveTab(1);
204
		}
16 aperonnet 205
 
206
		String imgNum = rd.getAsString("num_image");
207
		obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 208
	}
209
 
16 aperonnet 210
 
12 aperonnet 211
	public void montrerContextMenu(EventObject e)
5 aperonnet 212
	{
12 aperonnet 213
		menuImageVue.showAt(e.getXY()) ;
214
	}
215
 
216
	public void doubleClicZoomImage()
217
	{
5 aperonnet 218
		getOngletsImage().setActiveTab(0);
219
	}
220
 
12 aperonnet 221
	public void clicBoutonZoomImage(String arg)
5 aperonnet 222
	{
223
 
224
		DataView dv = getGalerieImage().getDView();
225
		Store st = getGalerieImage().getSt();
226
		Record nRec = null ;
227
 
228
		final int selected = st.indexOf(dv.getSelectedRecords()[0]);
229
		int storeIndex = dv.indexOf(selected);
230
 
231
 
232
		if(arg.equals("prev"))
233
		{
234
			// si la photo séléctionnée est la première, on passe à la
235
			// dernière
236
			if (selected == 0) {
237
				storeIndex = st.getCount() - 1 ;
238
				nRec = st.getAt(storeIndex);
239
 
240
			}
241
			else
242
			{
243
				storeIndex = storeIndex - 1 ;
244
				nRec = st.getAt(storeIndex);
245
			}
246
 
247
 
248
		}
249
 
250
		if(arg.equals("suiv"))
251
		{
252
			// si la photo selectionnée est la dernière on passe à la
253
			// première
254
			if (selected == st.getCount() - 1) {
255
 
256
				storeIndex = 0 ;
257
				nRec = st.getAt(0);
258
			}
259
			else
260
			{
261
				storeIndex = storeIndex + 1 ;
262
				nRec = st.getAt(storeIndex);
263
			}
264
		}
265
 
266
		if(nRec != null)
267
		{
16 aperonnet 268
			getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
5 aperonnet 269
			dv.select(storeIndex);
16 aperonnet 270
 
271
			String imgNum = nRec.getAsString("num_image");
272
			obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
5 aperonnet 273
		}
274
	}
275
 
12 aperonnet 276
 
4 aperonnet 277
 
278
}