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.vues;
2
 
3
 
18 aperonnet 4
import java.util.Iterator;
5
 
4 aperonnet 6
import org.tela_botanica.client.image.ImageMediateur;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
12 aperonnet 8
import org.tela_botanica.client.modeles.ImageCarnet;
9
import org.tela_botanica.client.modeles.ListeImage;
4 aperonnet 10
 
11
 
12
import com.google.gwt.core.client.JavaScriptObject;
13
import com.google.gwt.user.client.Element;
5 aperonnet 14
import com.google.gwt.user.client.Event;
12 aperonnet 15
import com.google.gwt.user.client.Window;
4 aperonnet 16
import com.gwtext.client.core.EventObject;
17
import com.gwtext.client.core.XTemplate;
5 aperonnet 18
import com.gwtext.client.data.ArrayReader;
4 aperonnet 19
import com.gwtext.client.data.FieldDef;
5 aperonnet 20
import com.gwtext.client.data.MemoryProxy;
18 aperonnet 21
import com.gwtext.client.data.Record;
4 aperonnet 22
import com.gwtext.client.data.RecordDef;
23
import com.gwtext.client.data.Store;
24
import com.gwtext.client.data.StringFieldDef;
25
import com.gwtext.client.util.Format;
26
import com.gwtext.client.widgets.BoxComponent;
27
import com.gwtext.client.widgets.Component;
5 aperonnet 28
import com.gwtext.client.widgets.Container;
4 aperonnet 29
import com.gwtext.client.widgets.DataView;
5 aperonnet 30
import com.gwtext.client.widgets.Observable;
4 aperonnet 31
import com.gwtext.client.widgets.Panel;
32
import com.gwtext.client.widgets.DataView.Data;
5 aperonnet 33
import com.gwtext.client.widgets.event.ContainerListener;
34
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
4 aperonnet 35
import com.gwtext.client.widgets.event.DataViewListener;
36
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
37
 
12 aperonnet 38
/**
39
 * Galerie d'images miniatures
40
 * @author aurelien
41
 *
42
 */
5 aperonnet 43
public class GalerieImageVue extends Panel implements Rafraichissable, Observable {
4 aperonnet 44
 
45
	// instance du médiateur
46
	private ImageMediateur iMediateur = null;
47
	private DataView dView = null ;
48
	private Store st = null ;
49
 
50
	public GalerieImageVue(ImageMediateur im)
51
	{
52
		super("Galerie");
53
		iMediateur = im ;
54
 
5 aperonnet 55
		this.addListener(new ContainerListenerAdapter() {
4 aperonnet 56
 
5 aperonnet 57
 
58
			public void onHide(Component component) {
59
				// TODO Auto-generated method stub
60
 
4 aperonnet 61
			}
5 aperonnet 62
 
63
 
64
			public void onRender(Component component) {
65
				// TODO Auto-generated method stub
66
 
67
			}
68
 
69
 
70
			public void onShow(Component component) {
71
 
72
 
73
				if(dView == null)
74
				{
75
					initialiser();
76
				}
77
			}
78
 
79
		});
4 aperonnet 80
 
81
	}
82
 
83
 
5 aperonnet 84
	public void ajouterListenersDataView()
4 aperonnet 85
	{
5 aperonnet 86
 
4 aperonnet 87
		// ajout de listeners pour la gestion de la selection
88
		// dans la galerie
89
		dView.addListener(new DataViewListenerAdapter() {
90
 
91
 
92
 
93
			public void onClick(DataView source, int index, Element node,
94
					EventObject e) {
95
 
12 aperonnet 96
				getIMediateur().clicGalerieImage(index, node, e);
5 aperonnet 97
 
4 aperonnet 98
			}
99
 
100
 
101
			public void onContainerClick(DataView source, EventObject e) {
102
				//TODO: appeler le mediateur
103
 
104
			}
105
 
106
 
107
			public void onContextMenu(DataView source, int index, Element node,
108
					EventObject e) {
109
 
12 aperonnet 110
				e.stopEvent() ;
111
				getIMediateur().montrerContextMenu(e) ;
112
 
4 aperonnet 113
			}
114
 
115
 
116
			public void onDblClick(DataView source, int index, Element node,
117
					EventObject e) {
5 aperonnet 118
 
4 aperonnet 119
				//TODO: appeler le mediateur
12 aperonnet 120
				getIMediateur().clicGalerieImage(index, node, e);
4 aperonnet 121
 
122
			}
123
 
124
 
125
			public void onSelectionChange(DataView view, Element[] selections) {
126
				//TODO: appeler le mediateur
127
 
128
			}
129
 
130
		});
131
	}
132
 
133
 
5 aperonnet 134
	// instantiation paresseuse
135
	public void initialiser()
136
	{
137
		// Preparation de la dataview et du template
138
		// le template va créer une div contenant une image
139
		// pour chacune des photos
140
		final XTemplate template = new XTemplate(
141
				new String[]{
142
						"<tpl for='.'>",
143
						"<div class='thumb-wrap' id='{num_image}'>",
12 aperonnet 144
						"<div class='thumb'><img src='{url_image_S}' title='{num_image}'></div>",
5 aperonnet 145
						"<span>{nom}</span></div>", "</tpl>",
146
						"<div class='x-clear'></div>"});
147
		template.compile();
148
 
149
		// la dataview affichera les images en accord avec le template
150
		// cree precedemment
151
		dView = new DataView("div.thumb-wrap") {
152
			public void prepareData(Data data) {
153
				data.setProperty("shortName", Format.ellipsis(data
154
						.getProperty("num_image"), 15));
155
			}
156
		};
157
		dView.setTpl(template);
158
 
159
		// parametre d'affichage de la dataview
12 aperonnet 160
		this.setAutoScroll(true);
5 aperonnet 161
		dView.setAutoHeight(true);
162
		dView.setMultiSelect(true);
163
		dView.setOverCls("x-view-over");
164
		dView.setEmptyText("Aucune image à afficher");
165
 
166
 
167
		// creation du store
168
		FieldDef defNumImage = new StringFieldDef("num_image");
169
		FieldDef defUrlImage = new StringFieldDef("url_image");
12 aperonnet 170
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
171
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
172
		FieldDef[] defTab = {defNumImage,defUrlImage,defUrlImageM,defUrlImageS};
5 aperonnet 173
		RecordDef rd = new RecordDef(defTab) ;
174
		st = new Store(rd) ;
175
		dView.setStore(st);
176
 
177
		// ajouts de la gestion des evenements pour la dataview
178
		ajouterListenersDataView();
179
 
180
		this.add(dView);
181
 
6 aperonnet 182
		getIMediateur().obtenirPhotoGalerie(this);
5 aperonnet 183
	}
4 aperonnet 184
 
5 aperonnet 185
 
186
 
16 aperonnet 187
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
4 aperonnet 188
 
12 aperonnet 189
		if(nouvelleDonnees instanceof ListeImage)
190
		{
191
			ListeImage data = (ListeImage) nouvelleDonnees ;
192
			Object[][] photoData = new Object[data.size()][4];
18 aperonnet 193
			int i = 0 ;
194
 
195
			for (Iterator it = data.keySet().iterator(); it.hasNext();)
12 aperonnet 196
			{
18 aperonnet 197
				ImageCarnet im = (ImageCarnet) data.get(it.next());
12 aperonnet 198
				photoData[i][0] = im.getOrdre() ;
199
				photoData[i][1] = im.getUrl() ;
200
				photoData[i][2] = im.getSUrl() ;
201
				photoData[i][3] = im.getMUrl() ;
18 aperonnet 202
				i++ ;
12 aperonnet 203
			}
204
 
5 aperonnet 205
			final MemoryProxy dataProxy = new MemoryProxy(photoData);
206
			final ArrayReader reader = new ArrayReader(new RecordDef(
207
					new FieldDef[]{new StringFieldDef("num_image"),
12 aperonnet 208
							new StringFieldDef("url_image"),
209
							new StringFieldDef("url_image_S"),
210
							new StringFieldDef("url_image_M")}));
5 aperonnet 211
 
212
			final Store photoStore = new Store(dataProxy, reader);
213
			photoStore.load();
214
 
215
			st = photoStore;
216
			dView.setStore(st);
217
			dView.refresh();
16 aperonnet 218
 
219
			if(repandreRafraichissement)
220
			{
221
				getIMediateur().synchroniserZoomListeGalerie(nouvelleDonnees, this) ;
222
			}
12 aperonnet 223
		}
16 aperonnet 224
 
4 aperonnet 225
	}
5 aperonnet 226
 
227
 
228
	public ImageMediateur getIMediateur() {
229
		return iMediateur;
230
	}
231
 
232
 
233
	public DataView getDView() {
234
		return dView;
235
	}
236
 
237
 
238
	public Store getSt() {
239
		return st;
240
	}
18 aperonnet 241
 
242
	public String[] getIdSelectionnee()
243
	{
244
		Record[] selection = getDView().getSelectedRecords() ;
245
		int taille = selection.length ;
246
		String id_selection[] = new String[taille] ;
247
 
248
		for (int i = 0; i < selection.length; i++) {
249
 
250
			id_selection[i] = selection[i].getAsString("num_image") ;
251
		}
252
 
253
		return id_selection ;
254
	}
4 aperonnet 255
}