Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 27 | Rev 31 | 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
 
12 aperonnet 3
import java.util.Iterator;
4
 
4 aperonnet 5
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
19 aperonnet 7
import org.tela_botanica.client.interfaces.VueListable;
12 aperonnet 8
import org.tela_botanica.client.modeles.ImageCarnet;
19 aperonnet 9
import org.tela_botanica.client.modeles.ListeImageCarnet;
4 aperonnet 10
 
22 aperonnet 11
import com.google.gwt.core.client.JavaScriptObject;
6 aperonnet 12
import com.google.gwt.user.client.Window;
19 aperonnet 13
import com.gwtext.client.core.EventObject;
5 aperonnet 14
import com.gwtext.client.data.ArrayReader;
4 aperonnet 15
import com.gwtext.client.data.FieldDef;
12 aperonnet 16
import com.gwtext.client.data.IntegerFieldDef;
5 aperonnet 17
import com.gwtext.client.data.MemoryProxy;
4 aperonnet 18
import com.gwtext.client.data.Record;
19
import com.gwtext.client.data.RecordDef;
20
import com.gwtext.client.data.Store;
21
import com.gwtext.client.data.StoreMgr;
22
import com.gwtext.client.data.StringFieldDef;
22 aperonnet 23
import com.gwtext.client.widgets.BoxComponent;
5 aperonnet 24
import com.gwtext.client.widgets.Component;
22 aperonnet 25
import com.gwtext.client.widgets.Container;
26
import com.gwtext.client.widgets.Panel;
27
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
6 aperonnet 28
import com.gwtext.client.widgets.event.ContainerListener;
5 aperonnet 29
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
30
import com.gwtext.client.widgets.event.PanelListener;
31
import com.gwtext.client.widgets.event.PanelListenerAdapter;
4 aperonnet 32
import com.gwtext.client.widgets.grid.CellMetadata;
33
import com.gwtext.client.widgets.grid.ColumnConfig;
34
import com.gwtext.client.widgets.grid.ColumnModel;
35
import com.gwtext.client.widgets.grid.GridPanel;
6 aperonnet 36
import com.gwtext.client.widgets.grid.GridView;
4 aperonnet 37
import com.gwtext.client.widgets.grid.Renderer;
22 aperonnet 38
import com.gwtext.client.widgets.grid.RowSelectionModel;
19 aperonnet 39
import com.gwtext.client.widgets.grid.event.GridCellListener;
40
import com.gwtext.client.widgets.grid.event.GridListener;
41
import com.gwtext.client.widgets.grid.event.GridRowListener;
22 aperonnet 42
import com.gwtext.client.widgets.grid.event.RowSelectionListener;
43
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
12 aperonnet 44
import com.gwtext.client.widgets.layout.AnchorLayout;
45
import com.gwtext.client.widgets.layout.FitLayout;
4 aperonnet 46
import com.gwtextux.client.data.BufferedStore;
47
 
12 aperonnet 48
/**
49
 * Liste d'image composée de miniatures et d'information sur l'image
27 aperonnet 50
 *
12 aperonnet 51
 * @author aurelien
52
 */
27 aperonnet 53
public class ListeImageVue extends GridPanel implements Rafraichissable,
54
		VueListable {
55
 
4 aperonnet 56
	// instance du médiateur
27 aperonnet 57
	private ImageMediateur	iMediateur		= null;
58
 
59
	private ColumnConfig	numImage;
60
	private ColumnConfig	urlImage;
61
	private ColumnConfig	lieImage;
62
	private ColumnConfig	datImage;
63
	private ColumnConfig	appImage;
64
	private ColumnModel		modeleColonnes;
65
 
66
	private boolean			estInstancie	= false;
67
 
4 aperonnet 68
	// données locales
69
	// store qui gère les données de la liste d'images
27 aperonnet 70
	private Store			st				= null;
71
	private ColumnConfig	cl				= null;
72
 
4 aperonnet 73
	public ListeImageVue(ImageMediateur im) {
74
 
27 aperonnet 75
		super();
4 aperonnet 76
 
27 aperonnet 77
		this.setId("listeImageGrid");
4 aperonnet 78
 
27 aperonnet 79
		this.iMediateur = im;
80
 
81
		numImage = new ColumnConfig("numéro", "num_image", 100, true);
82
		datImage = new ColumnConfig("date", "dat_image", 120, true);
83
		lieImage = new ColumnConfig("lieu", "lie_image", 120, true);
84
		appImage = new ColumnConfig("appareil", "app_image", 200, true);
85
		urlImage = new ColumnConfig("Image", "url_image_S", 200, true,
86
				new Renderer() {
87
 
88
					public String render(Object value,
89
							CellMetadata cellMetadata, Record record,
90
							int rowIndex, int colNum, Store store) {
91
 
92
						String ImgUrl = record.getAsString("url_image_S");
93
						String ImgNum = record.getAsString("num_image");
94
						return "<div class=\"img-list\"> <img src=\"" + ImgUrl
95
								+ "\" title='" + ImgNum + "'> </div>";
96
					}
97
 
98
				});
99
 
100
		ColumnConfig[] cm = { numImage, datImage, lieImage, appImage, urlImage };
4 aperonnet 101
		modeleColonnes = new ColumnModel(cm);
102
		this.setColumnModel(modeleColonnes);
6 aperonnet 103
		this.setAutoScroll(true);
7 aperonnet 104
		this.setAutoWidth(true);
27 aperonnet 105
 
22 aperonnet 106
		// creation du store
107
		FieldDef defNumImage = new IntegerFieldDef("num_image");
12 aperonnet 108
		FieldDef defDatImage = new StringFieldDef("dat_image");
109
		FieldDef defLieImage = new StringFieldDef("lie_image");
110
		FieldDef defAppImage = new StringFieldDef("app_image");
19 aperonnet 111
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
22 aperonnet 112
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
113
		FieldDef defUrlImage = new StringFieldDef("url_image");
27 aperonnet 114
		FieldDef[] defTab = { defNumImage, defDatImage, defLieImage,
115
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage };
116
		RecordDef rd = new RecordDef(defTab);
117
		st = new Store(rd);
4 aperonnet 118
		this.setStore(st);
27 aperonnet 119
		this.getView().setAutoFill(true);
120
 
121
		// this.setLoadMask(true) ;
122
		this.setLoadMask("chargement");
123
 
124
		ajouterListeners();
125
 
4 aperonnet 126
	}
27 aperonnet 127
 
128
	public void ajouterListeners() {
5 aperonnet 129
		this.addListener(new ContainerListenerAdapter() {
4 aperonnet 130
 
5 aperonnet 131
			public void onHide(Component component) {
27 aperonnet 132
 
5 aperonnet 133
			}
134
 
22 aperonnet 135
			public void onRender(Component component) {
5 aperonnet 136
 
27 aperonnet 137
				if (!isEstInstancie()) {
138
					setEstInstancie(true);
139
					getIMediateur().synchroniserSelection("galerie");
22 aperonnet 140
				}
5 aperonnet 141
			}
142
 
143
			public void onShow(Component component) {
27 aperonnet 144
 
5 aperonnet 145
			}
22 aperonnet 146
 
5 aperonnet 147
		});
27 aperonnet 148
 
19 aperonnet 149
		this.addGridRowListener(new GridRowListener() {
150
 
27 aperonnet 151
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
19 aperonnet 152
 
27 aperonnet 153
				getIMediateur().clicListeImage(rowIndex);
19 aperonnet 154
			}
155
 
156
			public void onRowContextMenu(GridPanel grid, int rowIndex,
157
					EventObject e) {
27 aperonnet 158
 
28 aperonnet 159
				e.stopEvent() ;
27 aperonnet 160
				getIMediateur().montrerContextMenu(e);
19 aperonnet 161
			}
162
 
163
			public void onRowDblClick(GridPanel grid, int rowIndex,
164
					EventObject e) {
22 aperonnet 165
 
27 aperonnet 166
				getIMediateur().doubleClicListeImage(rowIndex);
19 aperonnet 167
			}
22 aperonnet 168
		});
27 aperonnet 169
 
22 aperonnet 170
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
19 aperonnet 171
 
22 aperonnet 172
			public void onSelectionChange(RowSelectionModel sm) {
27 aperonnet 173
 
174
				if (sm.getCount() <= 0) {
175
					getIMediateur().aucuneSelection();
176
				} else {
177
					getIMediateur().selection();
22 aperonnet 178
					getIMediateur().synchroniserSelection("liste");
179
				}
180
			}
19 aperonnet 181
		});
5 aperonnet 182
	}
27 aperonnet 183
 
184
	public ColumnConfig getCl() {
185
		return cl;
19 aperonnet 186
	}
5 aperonnet 187
 
27 aperonnet 188
	public String[] getIdSelectionnees() {
189
		Record[] selection = this.getSelectionModel().getSelections();
190
		int taille = selection.length;
191
		String id_selection[] = new String[taille];
5 aperonnet 192
 
27 aperonnet 193
		for (int i = 0; i < selection.length; i++) {
194
 
195
			id_selection[i] = selection[i].getAsString("num_image");
12 aperonnet 196
		}
27 aperonnet 197
 
198
		return id_selection;
4 aperonnet 199
	}
5 aperonnet 200
 
201
	public ImageMediateur getIMediateur() {
202
		return iMediateur;
203
	}
204
 
27 aperonnet 205
	public ColumnModel getModeleColonnes() {
206
		return modeleColonnes;
207
	}
5 aperonnet 208
 
209
	public ColumnConfig getNumImage() {
210
		return numImage;
211
	}
212
 
27 aperonnet 213
	public Store getSt() {
214
		return st;
215
	}
5 aperonnet 216
 
217
	public ColumnConfig getUrlImage() {
218
		return urlImage;
219
	}
220
 
27 aperonnet 221
	/**
222
	 * @return the estInstancie
223
	 */
224
	public boolean isEstInstancie() {
225
		return estInstancie;
5 aperonnet 226
	}
227
 
27 aperonnet 228
	public void rafraichir(Object nouvelleDonnees,
229
			boolean repandreRafraichissement) {
5 aperonnet 230
 
27 aperonnet 231
		if (nouvelleDonnees instanceof Store) {
5 aperonnet 232
 
27 aperonnet 233
			st = (Store) nouvelleDonnees;
234
			st.load();
235
			this.reconfigure(st, this.getColumnModel());
236
		}
5 aperonnet 237
 
27 aperonnet 238
		if (repandreRafraichissement) {
239
			getIMediateur().synchroniserDonneesZoomListeGalerie(
240
					nouvelleDonnees, this);
241
		}
5 aperonnet 242
	}
22 aperonnet 243
 
27 aperonnet 244
	public void selectionnerEnregistrements(Record[] sel) {
22 aperonnet 245
 
27 aperonnet 246
		if (isEstInstancie()) {
247
			getSelectionModel().clearSelections();
248
			getSelectionModel().selectRecords(sel);
249
		}
22 aperonnet 250
	}
251
 
252
	/**
27 aperonnet 253
	 * @param estInstancie
254
	 *            the estInstancie to set
22 aperonnet 255
	 */
256
	public void setEstInstancie(boolean estInstancie) {
257
		this.estInstancie = estInstancie;
258
	}
259
 
260
	/**
27 aperonnet 261
	 * @param mediateur
262
	 *            the iMediateur to set
22 aperonnet 263
	 */
264
	public void setIMediateur(ImageMediateur mediateur) {
265
		iMediateur = mediateur;
266
	}
267
 
4 aperonnet 268
}