Subversion Repositories eFlore/Applications.cel

Rev

Rev 2615 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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