Subversion Repositories eFlore/Applications.cel

Rev

Rev 408 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 408 Rev 1292
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.ListePaginable;
4
import org.tela_botanica.client.interfaces.ListePaginable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.VueListable;
6
import org.tela_botanica.client.interfaces.VueListable;
7
import org.tela_botanica.client.vues.BarrePaginationVue;
7
import org.tela_botanica.client.vues.BarrePaginationVue;
8
 
-
 
9
import com.google.gwt.core.client.GWT;
-
 
10
import com.google.gwt.user.client.Window;
8
 
11
import com.gwtext.client.core.EventObject;
9
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.data.FieldDef;
10
import com.gwtext.client.data.FieldDef;
13
import com.gwtext.client.data.IntegerFieldDef;
11
import com.gwtext.client.data.IntegerFieldDef;
14
import com.gwtext.client.data.Record;
12
import com.gwtext.client.data.Record;
15
import com.gwtext.client.data.RecordDef;
13
import com.gwtext.client.data.RecordDef;
16
import com.gwtext.client.data.Store;
14
import com.gwtext.client.data.Store;
17
import com.gwtext.client.data.StringFieldDef;
15
import com.gwtext.client.data.StringFieldDef;
18
import com.gwtext.client.dd.DragData;
16
import com.gwtext.client.dd.DragData;
19
import com.gwtext.client.dd.DragSource;
17
import com.gwtext.client.dd.DragSource;
20
import com.gwtext.client.dd.DropTarget;
18
import com.gwtext.client.dd.DropTarget;
21
import com.gwtext.client.dd.DropTargetConfig;
19
import com.gwtext.client.dd.DropTargetConfig;
22
import com.gwtext.client.widgets.Component;
20
import com.gwtext.client.widgets.Component;
23
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
21
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
24
import com.gwtext.client.widgets.grid.CellMetadata;
22
import com.gwtext.client.widgets.grid.CellMetadata;
25
import com.gwtext.client.widgets.grid.ColumnConfig;
23
import com.gwtext.client.widgets.grid.ColumnConfig;
26
import com.gwtext.client.widgets.grid.ColumnModel;
24
import com.gwtext.client.widgets.grid.ColumnModel;
27
import com.gwtext.client.widgets.grid.GridDragData;
25
import com.gwtext.client.widgets.grid.GridDragData;
28
import com.gwtext.client.widgets.grid.GridPanel;
26
import com.gwtext.client.widgets.grid.GridPanel;
29
import com.gwtext.client.widgets.grid.Renderer;
27
import com.gwtext.client.widgets.grid.Renderer;
30
import com.gwtext.client.widgets.grid.RowSelectionModel;
28
import com.gwtext.client.widgets.grid.RowSelectionModel;
31
import com.gwtext.client.widgets.grid.event.GridRowListener;
29
import com.gwtext.client.widgets.grid.event.GridRowListener;
32
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
30
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
33
 
31
 
34
/**
32
/**
35
 * Liste d'image composée de miniatures et d'information sur l'image, implémente
33
 * Liste d'image composée de miniatures et d'information sur l'image, implémente
36
 * l'interface rafraichissable et l'interface vueListable
34
 * l'interface rafraichissable et l'interface vueListable
37
 * 
35
 * 
38
 * @author aurelien
36
 * @author aurelien
39
 */
37
 */
40
public class ListeImageVue extends GridPanel implements Rafraichissable,
38
public class ListeImageVue extends GridPanel implements Rafraichissable,
41
		VueListable, ListePaginable {
39
		VueListable, ListePaginable {
42
 
40
 
43
	/**
41
	/**
44
	 * Le médiateur associé à la vue
42
	 * Le médiateur associé à la vue
45
	 */
43
	 */
46
	private ImageMediateur iMediateur = null;
44
	private ImageMediateur iMediateur = null;
47
 
45
 
48
	/**
46
	/**
49
	 * Config de colonne
47
	 * Config de colonne
50
	 */
48
	 */
51
	private ColumnConfig numImage;
49
	private ColumnConfig numImage;
52
	
50
	
53
	/**
51
	/**
54
	 * Config de colonne
52
	 * Config de colonne
55
	 */
53
	 */
56
	private ColumnConfig transmisImage;
54
	private ColumnConfig transmisImage;
57
	
55
	
58
	/**
56
	/**
59
	 * Config de colonne
57
	 * Config de colonne
60
	 */
58
	 */
61
	private ColumnConfig urlImage;
59
	private ColumnConfig urlImage;
62
	/**
60
	/**
63
	 * Config de colonne
61
	 * Config de colonne
64
	 */
62
	 */
65
	private ColumnConfig lieImage;
63
	private ColumnConfig lieImage;
66
	/**
64
	/**
67
	 * Config de colonne
65
	 * Config de colonne
68
	 */
66
	 */
69
	private ColumnConfig datImage;
67
	private ColumnConfig datImage;
70
	/**
68
	/**
71
	 * Config de colonne
69
	 * Config de colonne
72
	 */
70
	 */
73
	private ColumnConfig appImage;
71
	private ColumnConfig appImage;
74
	/**
72
	/**
75
	 * Config de colonne
73
	 * Config de colonne
76
	 */
74
	 */
77
	private ColumnConfig noteImage;
75
	private ColumnConfig noteImage;
78
	/**
76
	/**
79
	 * Config de colonne
77
	 * Config de colonne
80
	 */
78
	 */
81
	private ColumnConfig nomImage;
79
	private ColumnConfig nomImage;
82
	/**
80
	/**
83
	 * Config de colonne
81
	 * Config de colonne
84
	 */
82
	 */
85
	private ColumnConfig obsAssociees;
83
	private ColumnConfig obsAssociees;
86
	
84
	
87
	/**
85
	/**
88
	 * Modele de colonnes
86
	 * Modele de colonnes
89
	 */
87
	 */
90
	private ColumnModel modeleColonnes;
88
	private ColumnModel modeleColonnes;
91
 
89
 
92
	/**
90
	/**
93
	 * Booleen d'instanciation
91
	 * Booleen d'instanciation
94
	 */
92
	 */
95
	private boolean estInstancie = false;
93
	private boolean estInstancie = false;
96
 
94
 
97
	/**
95
	/**
98
	 * Store qui contient les données à afficher
96
	 * Store qui contient les données à afficher
99
	 */
97
	 */
100
	private Store st = null;
98
	private Store st = null;
101
	/**
99
	/**
102
	 * Configuration des colonnes du store
100
	 * Configuration des colonnes du store
103
	 */
101
	 */
104
	private ColumnConfig cl = null;
102
	private ColumnConfig cl = null;
105
 
103
 
106
	/**
104
	/**
107
	 * Barre de pagination
105
	 * Barre de pagination
108
	 */
106
	 */
109
	private BarrePaginationVue bt = null;
107
	private BarrePaginationVue bt = null;
110
	
108
	
111
	/**
109
	/**
112
	 * Taille max des images dans la liste
110
	 * Taille max des images dans la liste
113
	 */
111
	 */
114
	private int tailleOr = 50 ;
112
	private int tailleOr = 50 ;
115
 
113
 
116
	/**
114
	/**
117
	 * Garder ou non l'aspet original des images
115
	 * Garder ou non l'aspet original des images
118
	 */
116
	 */
119
	private boolean garderRatio = true;	
117
	private boolean garderRatio = true;	
120
	
118
	
121
	/**
119
	/**
122
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
120
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
123
	 */
121
	 */
124
	private ListeImageVue() {
122
	private ListeImageVue() {
125
		super();
123
		super();
126
	}
124
	}
127
	
125
	
128
 
126
 
129
	/**
127
	/**
130
	 * Constructeur avec argument
128
	 * Constructeur avec argument
131
	 * 
129
	 * 
132
	 * @param im
130
	 * @param im
133
	 *            le médiateur à associer
131
	 *            le médiateur à associer
134
	 */
132
	 */
135
	public ListeImageVue(ImageMediateur im) {
133
	public ListeImageVue(ImageMediateur im) {
136
 
134
 
137
		new ListeImageVue();
135
		new ListeImageVue();
138
 
136
 
139
		this.setId("listeImageGrid");
137
		this.setId("listeImageGrid");
140
		// on associe le médiateur
138
		// on associe le médiateur
141
		this.iMediateur = im;
139
		this.iMediateur = im;
142
 
140
 
143
		// on place la barre de pagination
141
		// on place la barre de pagination
144
		bt = new BarrePaginationVue(this);
142
		bt = new BarrePaginationVue(this);
145
		bt.setLabelElement("Images");
143
		bt.setLabelElement("Images");
146
		bt.setTaillePageParDefaut(50);
144
		bt.setTaillePageParDefaut(50);
147
		setBottomToolbar(bt);
145
		setBottomToolbar(bt);
148
 
146
 
149
		// on construit le modèle de colonnes
147
		// on construit le modèle de colonnes
150
		numImage = new ColumnConfig("Numéro", "num_image", 30, true,
148
		numImage = new ColumnConfig("Numéro", "num_image", 30, true,
151
				new Renderer() {
149
				new Renderer() {
-
 
150
 
152
 
151
					@Override
153
					public String render(Object value,
152
					public String render(Object value,
154
							CellMetadata cellMetadata, Record record,
153
							CellMetadata cellMetadata, Record record,
155
							int rowIndex, int colNum, Store store) {
154
							int rowIndex, int colNum, Store store) {
156
						
155
						
157
						cellMetadata.setCssClass("centered-list");
156
						cellMetadata.setCssClass("centered-list");
158
 
157
 
159
						String ImgNum = record.getAsString("num_image");
158
						String ImgNum = record.getAsString("num_image");
160
						return "<div class=\"centered-list\">" + ImgNum
159
						return "<div class=\"centered-list\">" + ImgNum
161
								+ "</div>";
160
								+ "</div>";
162
					}
161
					}
163
 
162
 
164
				});
163
				});
165
		
164
		
166
		transmisImage = new ColumnConfig("   ", "obs_associees", 10, true, new Renderer() {
165
		transmisImage = new ColumnConfig("   ", "obs_associees", 10, true, new Renderer() {
-
 
166
 
167
 
167
			@Override
168
			public String render(Object value, CellMetadata cellMetadata,
168
			public String render(Object value, CellMetadata cellMetadata,
169
					Record record, int rowIndex, int colNum, Store store) {
169
					Record record, int rowIndex, int colNum, Store store) {
170
				
170
				
171
				cellMetadata.setCssClass("centered-list");
171
				cellMetadata.setCssClass("centered-list");
172
				
172
				
173
				String nomObs = record.getAsString("obs_associees");
173
				String nomObs = record.getAsString("obs_associees");
174
				if(nomObs == null) {
174
				if(nomObs == null) {
175
					return "";
175
					return "";
176
				}
176
				}
177
				
177
				
178
				boolean transmise = estAssocieeTransmise(nomObs)[1];
178
				boolean transmise = estAssocieeTransmise(nomObs)[1];
179
				
179
				
180
				if(transmise)
180
				if(transmise)
181
				{
181
				{
182
					return "<img src=\"tela.png\"/></img>" ;
182
					return "<img src=\"tela.png\"/></img>" ;
183
				}
183
				}
184
				else
184
				else
185
				{
185
				{
186
					return "" ;
186
					return "" ;
187
				}
187
				}
188
			}
188
			}
189
			
189
			
190
		});		
190
		});		
191
 
191
 
192
		datImage = new ColumnConfig("Date", "dat_image", 80, true,
192
		datImage = new ColumnConfig("Date", "dat_image", 80, true,
193
				new Renderer() {
193
				new Renderer() {
-
 
194
 
194
 
195
					@Override
195
					public String render(Object value,
196
					public String render(Object value,
196
							CellMetadata cellMetadata, Record record,
197
							CellMetadata cellMetadata, Record record,
197
							int rowIndex, int colNum, Store store) {
198
							int rowIndex, int colNum, Store store) {
198
						
199
						
199
						cellMetadata.setCssClass("centered-list");
200
						cellMetadata.setCssClass("centered-list");
200
 
201
 
201
						String ImgDat = record.getAsString("dat_image");
202
						String ImgDat = record.getAsString("dat_image");
202
						if (ImgDat == null) {
203
						if (ImgDat == null) {
203
							ImgDat = " ";
204
							ImgDat = " ";
204
						}
205
						}
205
						return "<div class=\"centered-list\">" + ImgDat
206
						return "<div class=\"centered-list\">" + ImgDat
206
								+ "</div>";
207
								+ "</div>";
207
					}
208
					}
208
 
209
 
209
				});
210
				});
210
		lieImage = new ColumnConfig("Lieu", "lie_image", 120, true,
211
		lieImage = new ColumnConfig("Lieu", "lie_image", 120, true,
211
				new Renderer() {
212
				new Renderer() {
-
 
213
 
212
 
214
					@Override
213
					public String render(Object value,
215
					public String render(Object value,
214
							CellMetadata cellMetadata, Record record,
216
							CellMetadata cellMetadata, Record record,
215
							int rowIndex, int colNum, Store store) {
217
							int rowIndex, int colNum, Store store) {
216
						
218
						
217
						cellMetadata.setCssClass("centered-list");
219
						cellMetadata.setCssClass("centered-list");
218
 
220
 
219
						String ImgLie = record.getAsString("lie_image");
221
						String ImgLie = record.getAsString("lie_image");
220
						if (ImgLie == null) {
222
						if (ImgLie == null) {
221
							ImgLie = " ";
223
							ImgLie = " ";
222
						}
224
						}
223
						return "<div class=\"centered-list\">" + ImgLie
225
						return "<div class=\"centered-list\">" + ImgLie
224
								+ "</div>";
226
								+ "</div>";
225
					}
227
					}
226
 
228
 
227
				});
229
				});
228
		appImage = new ColumnConfig("Appareil", "app_image", 120, true,
230
		appImage = new ColumnConfig("Appareil", "app_image", 120, true,
229
				new Renderer() {
231
				new Renderer() {
-
 
232
 
230
 
233
					@Override
231
					public String render(Object value,
234
					public String render(Object value,
232
							CellMetadata cellMetadata, Record record,
235
							CellMetadata cellMetadata, Record record,
233
							int rowIndex, int colNum, Store store) {
236
							int rowIndex, int colNum, Store store) {
234
						
237
						
235
						cellMetadata.setCssClass("centered-list");
238
						cellMetadata.setCssClass("centered-list");
236
 
239
 
237
						String ImgApp = record.getAsString("app_image");
240
						String ImgApp = record.getAsString("app_image");
238
						if (ImgApp == null) {
241
						if (ImgApp == null) {
239
							ImgApp = " ";
242
							ImgApp = " ";
240
						}
243
						}
241
						return "<div class=\"centered-list\">" + ImgApp
244
						return "<div class=\"centered-list\">" + ImgApp
242
								+ "</div>";
245
								+ "</div>";
243
					}
246
					}
244
 
247
 
245
				});
248
				});
246
		
249
		
247
 
250
 
248
		// la colonne url possède une méthode de rendu spéciale
251
		// la colonne url possède une méthode de rendu spéciale
249
		urlImage = new ColumnConfig("Image", "url_image_S", 30, true,
252
		urlImage = new ColumnConfig("Image", "url_image_S", 30, true,
250
				new Renderer() {
253
				new Renderer() {
-
 
254
 
251
 
255
					@Override
252
					public String render(Object value,
256
					public String render(Object value,
253
							CellMetadata cellMetadata, Record record,
257
							CellMetadata cellMetadata, Record record,
254
							int rowIndex, int colNum, Store store) {
258
							int rowIndex, int colNum, Store store) {
255
						
259
						
256
						cellMetadata.setCssClass("centered-list");
260
						cellMetadata.setCssClass("centered-list");
257
						// on affiche une div contenant l'image pointée par
261
						// on affiche une div contenant l'image pointée par
258
						// l'url
262
						// l'url
259
						int[] XY = {record.getAsInteger("taille_x") ,record.getAsInteger("taille_y")} ;
263
						int[] XY = {record.getAsInteger("taille_x") ,record.getAsInteger("taille_y")} ;
260
						int[] XYresize = {tailleOr,tailleOr} ;
264
						int[] XYresize = {tailleOr,tailleOr} ;
261
						
265
						
262
						if(garderRatio) {
266
						if(garderRatio) {
263
							XYresize = calculerDimensions(XY);
267
							XYresize = calculerDimensions(XY);
264
						}
268
						}
265
						
269
						
266
						String ImgUrl = record.getAsString("url_image_S");
270
						String ImgUrl = record.getAsString("url_image_S");
267
						String ImgNum = record.getAsString("num_image");
271
						String ImgNum = record.getAsString("num_image");
268
						return "<div class=\"img-list centered-list\"> <img src=\""
272
						return "<div class=\"img-list centered-list\"> <img src=\""
269
								+ ImgUrl + "\" title='" + ImgNum + "' width=\""+XYresize[0]+" px\" height=\""+XYresize[1]+" px\"> </div>";
273
								+ ImgUrl + "\" title='" + ImgNum + "' width=\""+XYresize[0]+" px\" height=\""+XYresize[1]+" px\"> </div>";
270
					}
274
					}
271
 
275
 
272
				});
276
				});
273
 
277
 
274
		noteImage = new ColumnConfig("Note", "note_image", 80, true,
278
		noteImage = new ColumnConfig("Note", "note_image", 80, true,
275
				new Renderer() {
279
				new Renderer() {
-
 
280
					@Override
276
					public String render(Object value,
281
					public String render(Object value,
277
							CellMetadata cellMetadata, Record record,
282
							CellMetadata cellMetadata, Record record,
278
							int rowIndex, int colNum, Store store) {
283
							int rowIndex, int colNum, Store store) {
279
						
284
						
280
						cellMetadata.setCssClass("centered-list");
285
						cellMetadata.setCssClass("centered-list");
281
 
286
 
282
						String htmlImage = "";
287
						String htmlImage = "";
283
 
288
 
284
						int noteImg = record.getAsInteger("note_image");
289
						int noteImg = record.getAsInteger("note_image");
285
						if (noteImg >= 0) {
290
						if (noteImg >= 0) {
286
							htmlImage += "<div class=\"img-note centered-list\">";
291
							htmlImage += "<div class=\"img-note centered-list\">";
287
							for (int i = 0; i <= noteImg; i++) {
292
							for (int i = 0; i <= noteImg; i++) {
288
								htmlImage += "<img src=\"note-on.gif\">";
293
								htmlImage += "<img src=\"note-on.gif\">";
289
							}
294
							}
290
							htmlImage += "</div>";
295
							htmlImage += "</div>";
291
						}
296
						}
292
 
297
 
293
						return htmlImage;
298
						return htmlImage;
294
 
299
 
295
					}
300
					}
296
 
301
 
297
				});
302
				});
298
		
303
		
299
		nomImage = new ColumnConfig("Nom original", "nom_original", 120, true,
304
		nomImage = new ColumnConfig("Nom original", "nom_original", 120, true,
300
				new Renderer() {
305
				new Renderer() {
-
 
306
			@Override
301
			public String render(Object value,
307
			public String render(Object value,
302
					CellMetadata cellMetadata, Record record,
308
					CellMetadata cellMetadata, Record record,
303
					int rowIndex, int colNum, Store store) {
309
					int rowIndex, int colNum, Store store) {
304
				
310
				
305
				cellMetadata.setCssClass("centered-list");
311
				cellMetadata.setCssClass("centered-list");
306
 
312
 
307
				String imgNomOr = record.getAsString("nom_original");
313
				String imgNomOr = record.getAsString("nom_original");
308
				if (imgNomOr == null) {
314
				if (imgNomOr == null) {
309
					imgNomOr = " ";
315
					imgNomOr = " ";
310
				}
316
				}
311
				return "<div class=\"centered-list\">" + imgNomOr
317
				return "<div class=\"centered-list\">" + imgNomOr
312
						+ "</div>";
318
						+ "</div>";
313
			}
319
			}
314
 
320
 
315
		});
321
		});
316
		
322
		
317
		obsAssociees = new ColumnConfig("Nom associé", "obs_associees", 80, true,
323
		obsAssociees = new ColumnConfig("Nom associé", "obs_associees", 80, true,
318
				new Renderer() {
324
				new Renderer() {
-
 
325
			@Override
319
			public String render(Object value,
326
			public String render(Object value,
320
					CellMetadata cellMetadata, Record record,
327
					CellMetadata cellMetadata, Record record,
321
					int rowIndex, int colNum, Store store) {
328
					int rowIndex, int colNum, Store store) {
322
				
329
				
323
				cellMetadata.setCssClass("centered-list");
330
				cellMetadata.setCssClass("centered-list");
324
 
331
 
325
				String nomObs = record.getAsString("obs_associees");
332
				String nomObs = record.getAsString("obs_associees");
326
				if(nomObs == null) {
333
				if(nomObs == null) {
327
					return "";
334
					return "";
328
				}
335
				}
329
				
336
				
330
				String nomFormate = getNomsObservationsFormatees(nomObs);
337
				String nomFormate = getNomsObservationsFormatees(nomObs);
331
				
338
				
332
				return "<div class=\"centered-list\">" + nomFormate
339
				return "<div class=\"centered-list\">" + nomFormate
333
						+ "</div>";
340
						+ "</div>";
334
			}
341
			}
335
 
342
 
336
		});
343
		});
337
 
344
 
338
		// on associe le modèle de colonnes
345
		// on associe le modèle de colonnes
339
		ColumnConfig[] cm = { numImage, transmisImage, urlImage, obsAssociees, datImage, lieImage, appImage,
346
		ColumnConfig[] cm = { numImage, transmisImage, urlImage, obsAssociees, datImage, lieImage, appImage,
340
				noteImage,nomImage} ;
347
				noteImage,nomImage} ;
341
		modeleColonnes = new ColumnModel(cm);
348
		modeleColonnes = new ColumnModel(cm);
342
		this.setColumnModel(modeleColonnes);
349
		this.setColumnModel(modeleColonnes);
343
		this.setAutoScroll(true);
350
		this.setAutoScroll(true);
344
		this.setAutoWidth(true);
351
		this.setAutoWidth(true);
345
		this.setEnableColumnResize(true);
352
		this.setEnableColumnResize(true);
346
 
353
 
347
		// creation du store
354
		// creation du store
348
		FieldDef defNumImage = new IntegerFieldDef("num_image");
355
		FieldDef defNumImage = new IntegerFieldDef("num_image");
349
		FieldDef defTransmisImage = new IntegerFieldDef("obs_associees");
356
		FieldDef defTransmisImage = new IntegerFieldDef("obs_associees");
350
		FieldDef defNomImage = new StringFieldDef("nom_original");
357
		FieldDef defNomImage = new StringFieldDef("nom_original");
351
		FieldDef defDatImage = new StringFieldDef("dat_image");
358
		FieldDef defDatImage = new StringFieldDef("dat_image");
352
		FieldDef defLieImage = new StringFieldDef("lie_image");
359
		FieldDef defLieImage = new StringFieldDef("lie_image");
353
		FieldDef defAppImage = new StringFieldDef("app_image");
360
		FieldDef defAppImage = new StringFieldDef("app_image");
354
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
361
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
355
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
362
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
356
		FieldDef defUrlImage = new StringFieldDef("url_image");
363
		FieldDef defUrlImage = new StringFieldDef("url_image");
357
		FieldDef defNoteImage = new StringFieldDef("note_image");
364
		FieldDef defNoteImage = new StringFieldDef("note_image");
358
		FieldDef defTailleX = new IntegerFieldDef("taille_x");
365
		FieldDef defTailleX = new IntegerFieldDef("taille_x");
359
		FieldDef defTailleY = new IntegerFieldDef("taille_y");
366
		FieldDef defTailleY = new IntegerFieldDef("taille_y");
360
		FieldDef defObsAssociees = new StringFieldDef("obs_associees");
367
		FieldDef defObsAssociees = new StringFieldDef("obs_associees");
361
		FieldDef[] defTab = { defNumImage,defTransmisImage, defNomImage, defDatImage, defLieImage,
368
		FieldDef[] defTab = { defNumImage,defTransmisImage, defNomImage, defDatImage, defLieImage,
362
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
369
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
363
				defNoteImage, defTailleX, defTailleY, defObsAssociees};
370
				defNoteImage, defTailleX, defTailleY, defObsAssociees};
364
		RecordDef rd = new RecordDef(defTab);
371
		RecordDef rd = new RecordDef(defTab);
365
		st = new Store(rd);
372
		st = new Store(rd);
366
		// on associe le store
373
		// on associe le store
367
		this.setStore(st);
374
		this.setStore(st);
368
		this.getView().setAutoFill(true);
375
		this.getView().setAutoFill(true);
369
 
376
 
370
		// on crée un masque de chargement qui s'affichera lors des mises à jour
377
		// on crée un masque de chargement qui s'affichera lors des mises à jour
371
		this.setLoadMask("chargement");
378
		this.setLoadMask("chargement");
372
		
379
		
373
		//Enable drag and drop
380
		//Enable drag and drop
374
		this.setEnableDragDrop(true);
381
		this.setEnableDragDrop(true);
375
		//You need to set the same group for both grids
382
		//You need to set the same group for both grids
376
		this.setDdGroup("DragGroupName");
383
		this.setDdGroup("DragGroupName");
377
 
384
 
378
		// on ajoute les listeners
385
		// on ajoute les listeners
379
		ajouterListeners();
386
		ajouterListeners();
380
 
387
 
381
	}
388
	}
382
	
389
	
383
 
390
 
384
	/**
391
	/**
385
	 * Ajoute les listeners pour la gestion des évènements
392
	 * Ajoute les listeners pour la gestion des évènements
386
	 */
393
	 */
387
	private void ajouterListeners() {
394
	private void ajouterListeners() {
388
		this.addListener(new ContainerListenerAdapter() {
395
		this.addListener(new ContainerListenerAdapter() {
-
 
396
 
389
 
397
			@Override
390
			public void onHide(Component component) {
398
			public void onHide(Component component) {
391
 
399
 
392
			}
400
			}
393
 
401
 
394
			// lors du premier rendu on demande les données qui sont déjà
402
			// lors du premier rendu on demande les données qui sont déjà
395
			// contenues dans la galerie qui est le premier élément affiché
403
			// contenues dans la galerie qui est le premier élément affiché
-
 
404
 
396
 
405
			@Override
397
			public void onRender(Component component) {
406
			public void onRender(Component component) {
398
 
407
 
399
				if (!isEstInstancie()) {
408
				if (!isEstInstancie()) {
400
					setEstInstancie(true);
409
					setEstInstancie(true);
401
					setDragDropText("Glissez les images sur la liste d'observation pour les lier") ;
410
					setDragDropText("Glissez les images sur la liste d'observation pour les lier") ;
402
					getIMediateur().synchroniserSelection("galerie");
411
					getIMediateur().synchroniserSelection("galerie");
403
				}
412
				}
404
			}
413
			}
-
 
414
 
405
 
415
			@Override
406
			public void onShow(Component component) {
416
			public void onShow(Component component) {
407
 
417
 
408
			}
418
			}
409
 
419
 
410
		});
420
		});
411
 
421
 
412
		this.addGridRowListener(new GridRowListener() {
422
		this.addGridRowListener(new GridRowListener() {
413
 
423
 
414
			// gestion du clic sur une ligne
424
			// gestion du clic sur une ligne
-
 
425
			@Override
415
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
426
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
416
			
427
			
417
				// on notifie le médiateur et on lui passe le numéro de ligne
428
				// on notifie le médiateur et on lui passe le numéro de ligne
418
				getIMediateur().clicListeImage(rowIndex);
429
				getIMediateur().clicListeImage(rowIndex);
419
			}
430
			}
420
 
431
 
421
			// gestion du clic droit
432
			// gestion du clic droit
-
 
433
			@Override
422
			public void onRowContextMenu(GridPanel grid, int rowIndex,
434
			public void onRowContextMenu(GridPanel grid, int rowIndex,
423
					EventObject e) {
435
					EventObject e) {
424
				// on stoppe l'évenement pour empecher le navigateur d'afficher
436
				// on stoppe l'évenement pour empecher le navigateur d'afficher
425
				// son propre menu
437
				// son propre menu
426
				e.stopEvent();
438
				e.stopEvent();
427
				// on notifie le médiateur en lui passant l'évenement
439
				// on notifie le médiateur en lui passant l'évenement
428
				getIMediateur().montrerContextMenu(e);
440
				getIMediateur().montrerContextMenu(e);
429
			}
441
			}
430
 
442
 
431
			// gestion du double clic
443
			// gestion du double clic
-
 
444
			@Override
432
			public void onRowDblClick(GridPanel grid, int rowIndex,
445
			public void onRowDblClick(GridPanel grid, int rowIndex,
433
					EventObject e) {
446
					EventObject e) {
434
				// on notifie le médiateur en lui passant le numéro de ligne
447
				// on notifie le médiateur en lui passant le numéro de ligne
435
				getIMediateur().doubleClicListeImage(rowIndex);
448
				getIMediateur().doubleClicListeImage(rowIndex);
436
			}
449
			}
437
		});
450
		});
438
 
451
 
439
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
452
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
440
 
453
 
441
			// gestion de la sélection
454
			// gestion de la sélection
-
 
455
 
442
 
456
			@Override
443
			public void onSelectionChange(RowSelectionModel sm) {
457
			public void onSelectionChange(RowSelectionModel sm) {
444
 
458
 
445
				// si on a rien de sélectionné
459
				// si on a rien de sélectionné
446
				if (sm.getCount() <= 0) {
460
				if (sm.getCount() <= 0) {
447
					// on notifie le médiateur (qui désactive notamment l'accès
461
					// on notifie le médiateur (qui désactive notamment l'accès
448
					// à certaines infos)
462
					// à certaines infos)
449
					getIMediateur().aucuneSelection();
463
					getIMediateur().aucuneSelection();
450
				} else {
464
				} else {
451
					// sinon on notifie le médiateur
465
					// sinon on notifie le médiateur
452
					getIMediateur().selection();
466
					getIMediateur().selection();
453
					// et on lui demande de synchroniser la selection avec les
467
					// et on lui demande de synchroniser la selection avec les
454
					// autres vues
468
					// autres vues
455
					getIMediateur().synchroniserSelection("liste");
469
					getIMediateur().synchroniserSelection("liste");
456
				}
470
				}
457
			}
471
			}
458
		});
472
		});
459
		
473
		
460
		//Enable drag and drop
474
		//Enable drag and drop
461
		this.setEnableDragDrop(true);
475
		this.setEnableDragDrop(true);
462
 
476
 
463
		//Same name in destination
477
		//Same name in destination
464
		this.setDdGroup("DragGroupName");
478
		this.setDdGroup("DragGroupName");
465
		DropTargetConfig dtc = new DropTargetConfig();
479
		DropTargetConfig dtc = new DropTargetConfig();
466
		dtc.setdDdGroup("DragGroupName");
480
		dtc.setdDdGroup("DragGroupName");
467
 
481
 
468
		//Now this is the important part, you need a drop target
482
		//Now this is the important part, you need a drop target
469
		@SuppressWarnings("unused")
483
		@SuppressWarnings("unused")
470
		DropTarget tg = new DropTarget(this, dtc)
484
		DropTarget tg = new DropTarget(this, dtc)
471
		{
485
		{
-
 
486
			@Override
472
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
487
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
473
			
488
			
474
				if(data instanceof GridDragData)
489
				if(data instanceof GridDragData)
475
				{
490
				{
476
					GridDragData gdd = (GridDragData)data ;
491
					GridDragData gdd = (GridDragData)data ;
477
	    		  	if(gdd.getGrid().getId().equals("listeImageGrid"))
492
	    		  	if(gdd.getGrid().getId().equals("listeImageGrid"))
478
	    		  	{
493
	    		  	{
479
	    		  		return false ;
494
	    		  		return false ;
480
	    		  	}
495
	    		  	}
481
	    		  	else
496
	    		  	else
482
	    		  	{
497
	    		  	{
483
	    		  		return iMediateur.lierObsDD(source, e, data, getId()) ;   
498
	    		  		return iMediateur.lierObsDD(source, e, data, getId()) ;   
484
	    		  	}
499
	    		  	}
485
				}
500
				}
486
				else
501
				else
487
				{
502
				{
488
					return false ;
503
					return false ;
489
				}
504
				}
490
				
505
				
491
				
506
				
492
			}
507
			}
-
 
508
			
493
			
509
			@Override
494
			public String notifyOver(DragSource source, EventObject e, DragData data){
510
			public String notifyOver(DragSource source, EventObject e, DragData data){
495
			    return "x-dd-drop-ok";
511
			    return "x-dd-drop-ok";
496
			}
512
			}
497
		};
513
		};
498
	}
514
	}
499
 
515
 
500
	/**
516
	/**
501
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
517
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
502
	 * galerie suivant les identifiants donnés en paramètres
518
	 * galerie suivant les identifiants donnés en paramètres
503
	 */
519
	 */
-
 
520
	@Override
504
	public String[] getIdSelectionnees() {
521
	public String[] getIdSelectionnees() {
505
		Record[] selection = this.getSelectionModel().getSelections();
522
		Record[] selection = this.getSelectionModel().getSelections();
506
		int taille = selection.length;
523
		int taille = selection.length;
507
		String id_selection[] = new String[taille];
524
		String id_selection[] = new String[taille];
508
 
525
 
509
		for (int i = 0; i < selection.length; i++) {
526
		for (int i = 0; i < selection.length; i++) {
510
 
527
 
511
			id_selection[i] = selection[i].getAsString("num_image");
528
			id_selection[i] = selection[i].getAsString("num_image");
512
		}
529
		}
513
 
530
 
514
		return id_selection;
531
		return id_selection;
515
	}
532
	}
516
 
533
 
517
	/**
534
	/**
518
	 * Accesseur pour la config de colonnes
535
	 * Accesseur pour la config de colonnes
519
	 * 
536
	 * 
520
	 * @return la config de colonnes
537
	 * @return la config de colonnes
521
	 */
538
	 */
522
	public ColumnConfig getCl() {
539
	public ColumnConfig getCl() {
523
		return cl;
540
		return cl;
524
	}
541
	}
525
 
542
 
526
	/**
543
	/**
527
	 * Accesseur pour le médiateur
544
	 * Accesseur pour le médiateur
528
	 * 
545
	 * 
529
	 * @return le médiateur associé
546
	 * @return le médiateur associé
530
	 */
547
	 */
531
	public ImageMediateur getIMediateur() {
548
	public ImageMediateur getIMediateur() {
532
		return iMediateur;
549
		return iMediateur;
533
	}
550
	}
534
 
551
 
535
	/**
552
	/**
536
	 * Accesseur pour le modèle de colonnes
553
	 * Accesseur pour le modèle de colonnes
537
	 * 
554
	 * 
538
	 * @return le modèle de colonnes
555
	 * @return le modèle de colonnes
539
	 */
556
	 */
540
	public ColumnModel getModeleColonnes() {
557
	public ColumnModel getModeleColonnes() {
541
		return modeleColonnes;
558
		return modeleColonnes;
542
	}
559
	}
543
 
560
 
544
	/**
561
	/**
545
	 * Accesseur pour le store
562
	 * Accesseur pour le store
546
	 * 
563
	 * 
547
	 * @return le store contenant les données
564
	 * @return le store contenant les données
548
	 */
565
	 */
549
	public Store getSt() {
566
	public Store getSt() {
550
		return st;
567
		return st;
551
	}
568
	}
552
 
569
 
553
	/**
570
	/**
554
	 * Accesseur pour le booleen d'instanciation
571
	 * Accesseur pour le booleen d'instanciation
555
	 * 
572
	 * 
556
	 * @return le booleen d'instanciation
573
	 * @return le booleen d'instanciation
557
	 */
574
	 */
558
	public boolean isEstInstancie() {
575
	public boolean isEstInstancie() {
559
		return estInstancie;
576
		return estInstancie;
560
	}
577
	}
561
 
578
 
562
	/**
579
	/**
563
	 * Méthode héritée de l'interface rafraichissable
580
	 * Méthode héritée de l'interface rafraichissable
564
	 * 
581
	 * 
565
	 * @param nouvelleDonnees
582
	 * @param nouvelleDonnees
566
	 *            les nouvelles données
583
	 *            les nouvelles données
567
	 * @param repandreRafraichissement
584
	 * @param repandreRafraichissement
568
	 *            le booleen de notification du rafraichissement
585
	 *            le booleen de notification du rafraichissement
569
	 */
586
	 */
-
 
587
	@Override
570
	public void rafraichir(Object nouvelleDonnees,
588
	public void rafraichir(Object nouvelleDonnees,
571
			boolean repandreRafraichissement) {
589
			boolean repandreRafraichissement) {
572
 
590
 
573
		// si on reçoit un store
591
		// si on reçoit un store
574
		if (nouvelleDonnees instanceof Store) {
592
		if (nouvelleDonnees instanceof Store) {
575
 
593
 
576
			// on affecte celui-ci comme gestionnaire de données
594
			// on affecte celui-ci comme gestionnaire de données
577
			st = (Store) nouvelleDonnees;
595
			st = (Store) nouvelleDonnees;
578
			st.load();
596
			st.load();
579
			// et on reconfigure et rafraichit la vue
597
			// et on reconfigure et rafraichit la vue
580
			this.reconfigure(st, this.getColumnModel());
598
			this.reconfigure(st, this.getColumnModel());
581
 
599
 
582
		}
600
		}
583
		
601
		
584
 
602
 
585
		// si on doit répandre l'évenement
603
		// si on doit répandre l'évenement
586
		if (repandreRafraichissement) {
604
		if (repandreRafraichissement) {
587
			// on notifie le médiateur avec une copie des données
605
			// on notifie le médiateur avec une copie des données
588
			getIMediateur().synchroniserDonneesZoomListeGalerie(
606
			getIMediateur().synchroniserDonneesZoomListeGalerie(
589
					nouvelleDonnees, this);
607
					nouvelleDonnees, this);
590
		}
608
		}
591
	}
609
	}
592
 
610
 
593
	/**
611
	/**
594
	 * Sélectionne des enregistrements donné
612
	 * Sélectionne des enregistrements donné
595
	 * 
613
	 * 
596
	 * @param sel
614
	 * @param sel
597
	 *            un tableau d'enregistrement à selectionner
615
	 *            un tableau d'enregistrement à selectionner
598
	 */
616
	 */
599
	public void selectionnerEnregistrements(Record[] sel) {
617
	public void selectionnerEnregistrements(Record[] sel) {
600
 
618
 
601
		if (isEstInstancie()) {
619
		if (isEstInstancie()) {
602
			getSelectionModel().clearSelections();
620
			getSelectionModel().clearSelections();
603
			getSelectionModel().selectRecords(sel);
621
			getSelectionModel().selectRecords(sel);
604
		}
622
		}
605
	}
623
	}
606
 
624
 
607
	/**
625
	/**
608
	 * Accesseur pour la toolbar de pagination
626
	 * Accesseur pour la toolbar de pagination
609
	 * 
627
	 * 
610
	 * @return la toolbar de pagination
628
	 * @return la toolbar de pagination
611
	 */
629
	 */
612
	public BarrePaginationVue getToolBarVue() {
630
	public BarrePaginationVue getToolBarVue() {
613
		return bt;
631
		return bt;
614
	}
632
	}
615
 
633
 
616
	/**
634
	/**
617
	 * Setteur pour le booleen d'instanciation
635
	 * Setteur pour le booleen d'instanciation
618
	 * 
636
	 * 
619
	 * @param estInstancie
637
	 * @param estInstancie
620
	 *            la nouvelle valeur du booleen
638
	 *            la nouvelle valeur du booleen
621
	 */
639
	 */
622
	public void setEstInstancie(boolean estInstancie) {
640
	public void setEstInstancie(boolean estInstancie) {
623
		this.estInstancie = estInstancie;
641
		this.estInstancie = estInstancie;
624
	}
642
	}
625
 
643
 
626
	public void mettreAjourInfos(String commentaires, String date, String note) {
644
	public void mettreAjourInfos(String commentaires, String date, String note) {
627
 
645
 
628
		for (int i = 0; i < getSelectionModel().getCount(); i++) {
646
		for (int i = 0; i < getSelectionModel().getCount(); i++) {
629
 
647
 
630
			getSelectionModel().getSelections()[i].set("note_image", note);
648
			getSelectionModel().getSelections()[i].set("note_image", note);
631
			getSelectionModel().getSelections()[i].set("dat_image", date);
649
			getSelectionModel().getSelections()[i].set("dat_image", date);
632
 
650
 
633
		}
651
		}
634
 
652
 
635
	}
653
	}
-
 
654
	
636
	
655
	@Override
637
	public void changerNumeroPage(int pageCourante) {
656
	public void changerNumeroPage(int pageCourante) {
638
		
657
		
639
		iMediateur.changerNumeroPage(pageCourante) ;
658
		iMediateur.changerNumeroPage(pageCourante) ;
640
		
659
		
641
	}
660
	}
-
 
661
 
642
 
662
	@Override
643
	public void changerTaillePage(int nouvelleTaillePage) {
663
	public void changerTaillePage(int nouvelleTaillePage) {
644
		
664
		
645
		iMediateur.changerTaillePage(nouvelleTaillePage) ;
665
		iMediateur.changerTaillePage(nouvelleTaillePage) ;
646
	}
666
	}
647
	
667
	
648
	public int[] calculerDimensions(int[] tailleXY) {
668
	public int[] calculerDimensions(int[] tailleXY) {
649
	    
669
	    
650
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
670
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
651
        float tailleOr = this.tailleOr ;
671
        float tailleOr = this.tailleOr ;
652
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
672
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
653
        float[] XYresize = new float[2];
673
        float[] XYresize = new float[2];
654
        
674
        
655
        if(maxTaille == tailleXY[0]) {
675
        if(maxTaille == tailleXY[0]) {
656
            float rapport = tailleXYf[1]/tailleXYf[0] ;
676
            float rapport = tailleXYf[1]/tailleXYf[0] ;
657
            XYresize[0] = tailleOr ;
677
            XYresize[0] = tailleOr ;
658
            XYresize[1] = tailleOr*rapport ;
678
            XYresize[1] = tailleOr*rapport ;
659
        }else {
679
        }else {
660
            float rapport = tailleXYf[0]/tailleXYf[1] ;
680
            float rapport = tailleXYf[0]/tailleXYf[1] ;
661
            XYresize[1] = tailleOr ;
681
            XYresize[1] = tailleOr ;
662
            XYresize[0] = tailleOr*rapport ;
682
            XYresize[0] = tailleOr*rapport ;
663
        }
683
        }
664
        
684
        
665
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
685
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
666
        
686
        
667
        return res;
687
        return res;
668
    }
688
    }
669
	
689
	
670
	private String getNomsObservationsFormatees(String nomObs) {
690
	private String getNomsObservationsFormatees(String nomObs) {
671
		
691
		
672
		String htmlInfobulle = "";
692
		String htmlInfobulle = "";
673
		
693
		
674
		String[][] obs = getObservationsAssociees(nomObs);
694
		String[][] obs = getObservationsAssociees(nomObs);
675
		
695
		
676
		for(int i = 0; i < obs.length; i++) {
696
		for(int i = 0; i < obs.length; i++) {
677
						
697
						
678
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
698
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
679
				htmlInfobulle += ", "+obs[i][1];
699
				htmlInfobulle += ", "+obs[i][1];
680
			}
700
			}
681
		}
701
		}
682
		
702
		
683
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
703
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
684
		
704
		
685
		return htmlInfobulle;
705
		return htmlInfobulle;
686
	}
706
	}
687
	
707
	
688
	private String[][] getObservationsAssociees(String nomObs) {
708
	private String[][] getObservationsAssociees(String nomObs) {
689
		
709
		
690
		if(nomObs.trim().equals("")) {
710
		if(nomObs.trim().equals("")) {
691
			return new String[0][0];
711
			return new String[0][0];
692
		}
712
		}
693
		
713
		
694
		String[] obsTab = nomObs.split(";;");
714
		String[] obsTab = nomObs.split(";;");
695
		String[][] obsAnalysees = new String[obsTab.length][3];
715
		String[][] obsAnalysees = new String[obsTab.length][3];
696
		
716
		
697
		for(int i = 0; i < obsTab.length; i++) {
717
		for(int i = 0; i < obsTab.length; i++) {
698
			
718
			
699
			obsAnalysees[i] = obsTab[i].split("#");
719
			obsAnalysees[i] = obsTab[i].split("#");
700
			
720
			
701
		}
721
		}
702
		
722
		
703
		return obsAnalysees;
723
		return obsAnalysees;
704
	}
724
	}
705
	
725
	
706
	private boolean[] estAssocieeTransmise(String nomObs) {
726
	private boolean[] estAssocieeTransmise(String nomObs) {
707
		
727
		
708
		String[][] obs = getObservationsAssociees(nomObs);
728
		String[][] obs = getObservationsAssociees(nomObs);
709
		boolean[] associeesTranmises = {false, false};
729
		boolean[] associeesTranmises = {false, false};
710
		
730
		
711
		if(obs.length > 0) {
731
		if(obs.length > 0) {
712
			associeesTranmises[0] = true;
732
			associeesTranmises[0] = true;
713
		}
733
		}
714
		
734
		
715
		for(int i = 0; i < obs.length; i++) {
735
		for(int i = 0; i < obs.length; i++) {
716
			
736
			
717
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
737
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
718
				associeesTranmises[1] = true;
738
				associeesTranmises[1] = true;
719
			}
739
			}
720
		}
740
		}
721
		
741
		
722
		return associeesTranmises;
742
		return associeesTranmises;
723
	}
743
	}
724
 
744
 
725
}
745
}