Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 7 | Rev 16 | 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;
4 aperonnet 7
import org.tela_botanica.client.vues.ZoomImageVue;
5 aperonnet 8
import com.google.gwt.user.client.DOM;
9
import com.google.gwt.user.client.Element;
10
import com.google.gwt.user.client.Event;
11
import com.gwtext.client.core.EventObject;
4 aperonnet 12
import com.gwtext.client.core.RegionPosition;
5 aperonnet 13
import com.gwtext.client.data.Record;
14
import com.gwtext.client.data.Store;
15
import com.gwtext.client.widgets.DataView;
4 aperonnet 16
import com.gwtext.client.widgets.Panel;
17
import com.gwtext.client.widgets.TabPanel;
18
import com.gwtext.client.widgets.layout.BorderLayout;
19
import com.gwtext.client.widgets.layout.BorderLayoutData;
12 aperonnet 20
import com.gwtext.client.widgets.layout.FitLayout;
4 aperonnet 21
 
12 aperonnet 22
/**
23
 * Mediateur gérant les interactions entre vues et les echanges de données
24
 * C'est un singleton.
25
 * @author aurelien
26
 *
27
 */
4 aperonnet 28
public class ImageMediateur {
29
 
12 aperonnet 30
	// cette classe est un singleton
31
	private static boolean estInstancie = false ;
32
 
4 aperonnet 33
	// controleur
7 aperonnet 34
	private ImageModele iModele = null ;
4 aperonnet 35
 
36
	//widgets
37
 
38
	//Panneau principal des images (onglet "images")
39
	private final Panel panneauPrincipalImage = new Panel("Images");
40
 
41
	// Panneau à onglet pour la liste, la galerie et la vue en grand
42
	private TabPanel ongletsImage = null ;
43
 
44
	private GalerieImageVue galerieImage = null ;
45
	private ListeImageVue listeImage = null ;
46
	private ZoomImageVue zoomImage = null ;
47
 
48
	// panneau details et mots clés
49
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
50
 
12 aperonnet 51
	private MenuImageVue menuImageVue = null ;
4 aperonnet 52
 
12 aperonnet 53
	public static ImageMediateur Instance()
4 aperonnet 54
	{
12 aperonnet 55
			if(!estInstancie)
56
			{
57
				estInstancie = true ;
58
				return new ImageMediateur() ;
59
			}
60
			else
61
			{
62
				return null ;
63
			}
64
	}
65
 
66
	private ImageMediateur()
67
	{
68
		final BorderLayoutData regionNord = new BorderLayoutData(
69
				RegionPosition.NORTH) ;
70
 
71
		final BorderLayoutData regionCentre = new BorderLayoutData(
72
				RegionPosition.CENTER) ;
4 aperonnet 73
 
74
		final BorderLayoutData regionEst = new BorderLayoutData(
75
				RegionPosition.EAST);
76
		regionEst.setSplit(true);
77
 
78
 
12 aperonnet 79
		iModele = ImageModele.Instance(this);
4 aperonnet 80
 
81
		panneauPrincipalImage.setLayout(new BorderLayout());
82
 
83
		ongletsImage = new TabPanel();
84
		galerieImage = new GalerieImageVue(this) ;
85
 
86
		Panel panneauListeImage = new Panel("Liste");
87
		listeImage = new ListeImageVue(this);
12 aperonnet 88
		panneauListeImage.setLayout(new FitLayout());
4 aperonnet 89
		panneauListeImage.add(listeImage);
90
 
91
		zoomImage = new ZoomImageVue(this);
92
 
93
		ongletsImage.add(galerieImage);
94
		ongletsImage.add(zoomImage);
95
		ongletsImage.add(panneauListeImage);
96
 
12 aperonnet 97
		menuImageVue = new MenuImageVue(this) ;
98
 
4 aperonnet 99
		detailsEtMotsCles.setWidth("20%");
100
		detailsEtMotsCles.setAnimCollapse(true);
101
		detailsEtMotsCles.setTitleCollapse(true);
102
		detailsEtMotsCles.setCollapsible(true);
103
 
12 aperonnet 104
		panneauPrincipalImage.add(ongletsImage,regionCentre);
4 aperonnet 105
		panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
106
 
107
	}
108
 
109
 
110
 
7 aperonnet 111
	public ImageModele getIModele() {
112
		return iModele;
4 aperonnet 113
	}
114
 
115
	public Panel getPanneauPrincipalImage() {
116
		return panneauPrincipalImage;
117
	}
118
 
119
	public TabPanel getOngletsImage() {
120
		return ongletsImage;
121
	}
122
 
123
	public GalerieImageVue getGalerieImage() {
124
		return galerieImage;
125
	}
126
 
127
	public ListeImageVue getListeImage() {
128
		return listeImage;
129
	}
130
 
131
	public ZoomImageVue getZoomImage() {
132
		return zoomImage;
133
	}
134
 
135
	public Panel getDetailsEtMotsCles() {
136
		return detailsEtMotsCles;
137
	}
138
 
5 aperonnet 139
	public void synchroniserZoomListeGalerie(Object o, Rafraichissable r)
140
	{
141
		if(r != getGalerieImage())
142
		{
143
			getGalerieImage().rafraichir(o);
144
		}
145
		if(r != getZoomImage())
146
		{
147
			getZoomImage().rafraichir(o);
148
		}
149
		if(r != getListeImage())
150
		{
151
			getListeImage().rafraichir(o);
152
		}
153
	}
154
 
155
 
6 aperonnet 156
	public void obtenirPhotoGalerie(Rafraichissable r)
5 aperonnet 157
	{
7 aperonnet 158
		getIModele().obtenirPhotoGalerie(r) ;
5 aperonnet 159
	}
160
 
12 aperonnet 161
	public void uploaderImage()
162
	{
163
		getIModele().uploaderImages() ;
164
	}
165
 
166
	public void clicGalerieImage(int index, Element node,
5 aperonnet 167
			EventObject e)
168
	{
169
		Record rd = getGalerieImage().getDView().getRecord(node) ;
170
		String imgUrl = rd.getAsString("url_image");
171
 
172
		getZoomImage().rafraichir(imgUrl);
173
 
174
		if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
175
		{
176
			getOngletsImage().setActiveTab(1);
177
		}
178
	}
179
 
12 aperonnet 180
	public void montrerContextMenu(EventObject e)
5 aperonnet 181
	{
12 aperonnet 182
		menuImageVue.showAt(e.getXY()) ;
183
	}
184
 
185
	public void doubleClicZoomImage()
186
	{
5 aperonnet 187
		getOngletsImage().setActiveTab(0);
188
	}
189
 
12 aperonnet 190
	public void clicBoutonZoomImage(String arg)
5 aperonnet 191
	{
192
 
193
		DataView dv = getGalerieImage().getDView();
194
		Store st = getGalerieImage().getSt();
195
		Record nRec = null ;
196
 
197
		final int selected = st.indexOf(dv.getSelectedRecords()[0]);
198
		int storeIndex = dv.indexOf(selected);
199
 
200
 
201
		if(arg.equals("prev"))
202
		{
203
			// si la photo séléctionnée est la première, on passe à la
204
			// dernière
205
			if (selected == 0) {
206
				storeIndex = st.getCount() - 1 ;
207
				nRec = st.getAt(storeIndex);
208
 
209
			}
210
			else
211
			{
212
				storeIndex = storeIndex - 1 ;
213
				nRec = st.getAt(storeIndex);
214
			}
215
 
216
 
217
		}
218
 
219
		if(arg.equals("suiv"))
220
		{
221
			// si la photo selectionnée est la dernière on passe à la
222
			// première
223
			if (selected == st.getCount() - 1) {
224
 
225
				storeIndex = 0 ;
226
				nRec = st.getAt(0);
227
			}
228
			else
229
			{
230
				storeIndex = storeIndex + 1 ;
231
				nRec = st.getAt(storeIndex);
232
			}
233
		}
234
 
235
		if(nRec != null)
236
		{
237
			getZoomImage().rafraichir(nRec.getAsString("url_image"));
238
			dv.select(storeIndex);
239
		}
240
	}
241
 
12 aperonnet 242
 
4 aperonnet 243
 
244
}