Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1288 Rev 1832
1
package org.tela_botanica.client.image;
1
package org.tela_botanica.client.image;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.CarnetEnLigneMediateur;
4
import org.tela_botanica.client.CarnetEnLigneMediateur;
5
import org.tela_botanica.client.interfaces.IdVue;
5
import org.tela_botanica.client.interfaces.IdVue;
6
import org.tela_botanica.client.interfaces.ListePaginable;
6
import org.tela_botanica.client.interfaces.ListePaginable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.interfaces.VueListable;
8
import org.tela_botanica.client.interfaces.VueListable;
9
import org.tela_botanica.client.modeles.objets.Configuration;
9
import org.tela_botanica.client.modeles.objets.Configuration;
10
import org.tela_botanica.client.modeles.objets.ListeObservation;
10
import org.tela_botanica.client.modeles.objets.ListeObservation;
11
import org.tela_botanica.client.vues.image.BarreOutilsVue;
11
import org.tela_botanica.client.vues.image.BarreOutilsVue;
12
import org.tela_botanica.client.vues.image.FenetreGestionMotsCles;
12
import org.tela_botanica.client.vues.image.FenetreGestionMotsCles;
13
import org.tela_botanica.client.vues.image.GalerieImageVue;
13
import org.tela_botanica.client.vues.image.GalerieImageVue;
14
import org.tela_botanica.client.vues.image.ListeImageVue;
14
import org.tela_botanica.client.vues.image.ListeImageVue;
15
import org.tela_botanica.client.vues.image.MenuImageVue;
15
import org.tela_botanica.client.vues.image.MenuImageVue;
16
import org.tela_botanica.client.vues.image.MiniListeObservationVue;
16
import org.tela_botanica.client.vues.image.MiniListeObservationVue;
17
import org.tela_botanica.client.vues.image.PanneauMetadonneesVue;
17
import org.tela_botanica.client.vues.image.PanneauMetadonneesVue;
18
import org.tela_botanica.client.vues.image.ZoomImageVue;
18
import org.tela_botanica.client.vues.image.ZoomImageVue;
19
import org.tela_botanica.client.vues.image.filtres.BarreRechercheFiltreVue;
19
import org.tela_botanica.client.vues.image.filtres.BarreRechercheFiltreVue;
20
import org.tela_botanica.client.vues.image.filtres.PanneauFiltresImagesVues;
20
import org.tela_botanica.client.vues.image.filtres.PanneauFiltresImagesVues;
21
 
21
 
22
import com.google.gwt.core.client.GWT;
22
import com.google.gwt.core.client.GWT;
23
import com.google.gwt.user.client.DOM;
23
import com.google.gwt.user.client.DOM;
24
import com.google.gwt.user.client.Element;
24
import com.google.gwt.user.client.Element;
25
import com.google.gwt.user.client.Event;
25
import com.google.gwt.user.client.Event;
26
import com.google.gwt.user.client.Window;
26
import com.google.gwt.user.client.Window;
27
import com.gwtext.client.core.EventObject;
27
import com.gwtext.client.core.EventObject;
28
import com.gwtext.client.core.Ext;
28
import com.gwtext.client.core.Ext;
29
import com.gwtext.client.core.ExtElement;
29
import com.gwtext.client.core.ExtElement;
30
import com.gwtext.client.core.RegionPosition;
30
import com.gwtext.client.core.RegionPosition;
31
import com.gwtext.client.data.Record;
31
import com.gwtext.client.data.Record;
32
import com.gwtext.client.data.Store;
32
import com.gwtext.client.data.Store;
33
import com.gwtext.client.data.Tree;
33
import com.gwtext.client.data.Tree;
34
import com.gwtext.client.dd.DragData;
34
import com.gwtext.client.dd.DragData;
35
import com.gwtext.client.dd.DragSource;
35
import com.gwtext.client.dd.DragSource;
36
import com.gwtext.client.widgets.BoxComponent;
36
import com.gwtext.client.widgets.BoxComponent;
37
import com.gwtext.client.widgets.Component;
37
import com.gwtext.client.widgets.Component;
38
import com.gwtext.client.widgets.DataView;
38
import com.gwtext.client.widgets.DataView;
39
import com.gwtext.client.widgets.Panel;
39
import com.gwtext.client.widgets.Panel;
40
import com.gwtext.client.widgets.TabPanel;
40
import com.gwtext.client.widgets.TabPanel;
41
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
41
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
42
import com.gwtext.client.widgets.event.PanelListenerAdapter;
42
import com.gwtext.client.widgets.event.PanelListenerAdapter;
43
import com.gwtext.client.widgets.event.WindowListenerAdapter;
43
import com.gwtext.client.widgets.event.WindowListenerAdapter;
44
import com.gwtext.client.widgets.grid.GridDragData;
44
import com.gwtext.client.widgets.grid.GridDragData;
45
import com.gwtext.client.widgets.layout.BorderLayout;
45
import com.gwtext.client.widgets.layout.BorderLayout;
46
import com.gwtext.client.widgets.layout.BorderLayoutData;
46
import com.gwtext.client.widgets.layout.BorderLayoutData;
47
import com.gwtext.client.widgets.menu.BaseItem;
47
import com.gwtext.client.widgets.menu.BaseItem;
48
import com.gwtext.client.widgets.menu.Item;
48
import com.gwtext.client.widgets.menu.Item;
49
import com.gwtext.client.widgets.menu.Menu;
49
import com.gwtext.client.widgets.menu.Menu;
50
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
50
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
51
import com.gwtext.client.widgets.tree.TreeEditor;
51
import com.gwtext.client.widgets.tree.TreeEditor;
52
import com.gwtext.client.widgets.tree.TreeNode;
52
import com.gwtext.client.widgets.tree.TreeNode;
53
 
53
 
54
/**
54
/**
55
 * Mediateur gérant les interactions entre vues et les echanges de données C'est
55
 * Mediateur gérant les interactions entre vues et les echanges de données C'est
56
 * un singleton.
56
 * un singleton.
57
 * 
57
 * 
58
 * @author aurelien
58
 * @author aurelien
59
 * 
59
 * 
60
 */
60
 */
61
 
61
 
62
// TODO : Deporter les methodes de ListePaginable dans la liste  d'images
62
// TODO : Deporter les methodes de ListePaginable dans la liste  d'images
63
 
63
 
64
public class ImageMediateur implements ListePaginable{
64
public class ImageMediateur implements ListePaginable{
65
 
65
 
66
	/**
66
	/**
67
	 * le mediateur des observations qui lie la partie images au carnet
67
	 * le mediateur des observations qui lie la partie images au carnet
68
	 */
68
	 */
69
	private CarnetEnLigneMediateur cMediateur = null;
69
	private CarnetEnLigneMediateur cMediateur = null;
70
 
70
 
71
	
71
	
72
	private static ImageMediateur thisMediateur = null ;
72
	private static ImageMediateur thisMediateur = null ;
73
	/**
73
	/**
74
	 * booleen qui verifie l'unicite de l'instance (donc static)
74
	 * booleen qui verifie l'unicite de l'instance (donc static)
75
	 */
75
	 */
76
	private static boolean estInstancie = false;
76
	private static boolean estInstancie = false;
77
 
77
 
78
	/**
78
	/**
79
	 * modele de données
79
	 * modele de données
80
	 */
80
	 */
81
	private ImageModele iModele = null;
81
	private ImageModele iModele = null;
82
 
82
 
83
	/**
83
	/**
84
	 * L'identifiant utilisateur. Par défaut, il vaut 0
84
	 * L'identifiant utilisateur. Par défaut, il vaut 0
85
	 */
85
	 */
86
	private String identifiant = "0";
86
	private String identifiant = "0";
87
 
87
 
88
	/**
88
	/**
89
	 * panneau principal des images (onglet "images")
89
	 * panneau principal des images (onglet "images")
90
	 */
90
	 */
91
	private Panel panneauPrincipalImage = null ;
91
	private Panel panneauPrincipalImage = null ;
92
 
92
 
93
	/**
93
	/**
94
	 * panneau a onglet pour la liste, la galerie et la vue en grand
94
	 * panneau a onglet pour la liste, la galerie et la vue en grand
95
	 */
95
	 */
96
	private TabPanel ongletsImage = null;
96
	private TabPanel ongletsImage = null;
97
 
97
 
98
	/**
98
	/**
99
	 * panneau de filtrage
99
	 * panneau de filtrage
100
	 */
100
	 */
101
	private PanneauFiltresImagesVues filtres = null;
101
	private PanneauFiltresImagesVues filtres = null;
102
 
102
 
103
	/**
103
	/**
104
	 * conteneur du panneau a onglets
104
	 * conteneur du panneau a onglets
105
	 */
105
	 */
106
	private Panel panneauMenuEtOngletsImage = null;
106
	private Panel panneauMenuEtOngletsImage = null;
107
 
107
 
108
	/**
108
	/**
109
	 * galerie de miniature
109
	 * galerie de miniature
110
	 */
110
	 */
111
	private GalerieImageVue galerieImage = null;
111
	private GalerieImageVue galerieImage = null;
112
 
112
 
113
	/**
113
	/**
114
	 * liste détaillée des images
114
	 * liste détaillée des images
115
	 */
115
	 */
116
	private ListeImageVue listeImage = null;
116
	private ListeImageVue listeImage = null;
117
 
117
 
118
	/**
118
	/**
119
	 * vue agrandie de la l'image selectionnée
119
	 * vue agrandie de la l'image selectionnée
120
	 */
120
	 */
121
	private ZoomImageVue zoomImage = null;
121
	private ZoomImageVue zoomImage = null;
122
 
122
 
123
	/**
123
	/**
124
	 * panneau a onglets affichant les métadonnées et les mots clés
124
	 * panneau a onglets affichant les métadonnées et les mots clés
125
	 */
125
	 */
126
	private PanneauMetadonneesVue metadonneesIptcExif = null;
126
	private PanneauMetadonneesVue metadonneesIptcExif = null;
127
 
127
 
128
	/**
128
	/**
129
	 * panneau conteneur pour le panneau a onglet des metadonnées
129
	 * panneau conteneur pour le panneau a onglet des metadonnées
130
	 */
130
	 */
131
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
131
	private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
132
 
132
 
133
	/**
133
	/**
134
	 * menu contextuel de manipulation des images
134
	 * menu contextuel de manipulation des images
135
	 */
135
	 */
136
	private MenuImageVue menuImageVue = null;
136
	private MenuImageVue menuImageVue = null;
137
 
137
 
138
	/**
138
	/**
139
	 * barre d'outils
139
	 * barre d'outils
140
	 */
140
	 */
141
	private BarreOutilsVue barreOutilsVue = null;
141
	private BarreOutilsVue barreOutilsVue = null;
142
 
142
 
143
	/**
143
	/**
144
	 * l'indice du dernier onglet sélectionné
144
	 * l'indice du dernier onglet sélectionné
145
	 */
145
	 */
146
	private int dernierIndexOnglet = 0;
146
	private int dernierIndexOnglet = 0;
147
 
147
 
148
	/**
148
	/**
149
	 * booleen explicitant s'il y a une selection en cours
149
	 * booleen explicitant s'il y a une selection en cours
150
	 */
150
	 */
151
	private boolean selection = false;
151
	private boolean selection = false;
152
 
152
 
153
 
153
 
154
	/**
154
	/**
155
	 * Filtre pour les commentaires
155
	 * Filtre pour les commentaires
156
	 */
156
	 */
157
	private BarreRechercheFiltreVue filtreCommentaires = null;
157
	private BarreRechercheFiltreVue filtreCommentaires = null;
158
	
158
	
159
	/**
159
	/**
160
	 * Fenetre modale de gestion des mots clés
160
	 * Fenetre modale de gestion des mots clés
161
	 */
161
	 */
162
	private FenetreGestionMotsCles fnMc = null;
162
	private FenetreGestionMotsCles fnMc = null;
163
	
163
	
164
	/**
164
	/**
165
	 * Boolean indiquand si le médiateur a seulement été crée ou bien si tous
165
	 * Boolean indiquand si le médiateur a seulement été crée ou bien si tous
166
	 * les composants ont été crées
166
	 * les composants ont été crées
167
	 */
167
	 */
168
	private boolean estInitialise = false;
168
	private boolean estInitialise = false;
169
 
169
 
170
	/**
170
	/**
171
	 * constructeur privé (on accède a la classe par la méthode getInstance)
171
	 * constructeur privé (on accède a la classe par la méthode getInstance)
172
	 */
172
	 */
173
	private ImageMediateur() {			
173
	private ImageMediateur() {			
174
				initialiser() ;
174
				initialiser() ;
175
	}
175
	}
176
 
176
 
177
	/**
177
	/**
178
	 * constructeur avec paramètres privé (on accède a la classe par la méthode
178
	 * constructeur avec paramètres privé (on accède a la classe par la méthode
179
	 * getInstance)
179
	 * getInstance)
180
	 * 
180
	 * 
181
	 * @param cm
181
	 * @param cm
182
	 *            le médiateur du carnet à associer à la partie image
182
	 *            le médiateur du carnet à associer à la partie image
183
	 */
183
	 */
184
	private ImageMediateur(CarnetEnLigneMediateur cm) {
184
	private ImageMediateur(CarnetEnLigneMediateur cm) {
185
		
185
		
186
		cMediateur = cm;
186
		cMediateur = cm;
187
		panneauPrincipalImage = new Panel("Images") ;
187
		panneauPrincipalImage = new Panel("Images") ;
188
		panneauPrincipalImage.addListener(new PanelListenerAdapter() {
188
		panneauPrincipalImage.addListener(new PanelListenerAdapter() {
189
			@Override
189
			@Override
190
			public boolean doBeforeRender(Component c) {
190
			public boolean doBeforeRender(Component c) {
191
				if(!estInitialise) {
191
				if(!estInitialise) {
192
					initialiser() ;
192
					initialiser() ;
193
				}
193
				}
194
				return true;
194
				return true;
195
			}
195
			}
196
		});
196
		});
197
	}
197
	}
198
 
198
 
199
	/**
199
	/**
200
	 * Change la valeur du booleen de selection
200
	 * Change la valeur du booleen de selection
201
	 * 
201
	 * 
202
	 * @param selection
202
	 * @param selection
203
	 *            la nouvelle valeur du booléen
203
	 *            la nouvelle valeur du booléen
204
	 */
204
	 */
205
	public void setSelection(boolean selection) {
205
	public void setSelection(boolean selection) {
206
		this.selection = selection;
206
		this.selection = selection;
207
	}
207
	}
208
 
208
 
209
	/**
209
	/**
210
	 * renvoie la valeur du booleen de selection
210
	 * renvoie la valeur du booleen de selection
211
	 * 
211
	 * 
212
	 * @return la valeur du booleen de selection
212
	 * @return la valeur du booleen de selection
213
	 */
213
	 */
214
	public boolean isSelection() {
214
	public boolean isSelection() {
215
		return selection;
215
		return selection;
216
	}
216
	}
217
 
217
 
218
	/**
218
	/**
219
	 * Retourne une instance de manière unique
219
	 * Retourne une instance de manière unique
220
	 * 
220
	 * 
221
	 * @return l'instance unique du médiateur
221
	 * @return l'instance unique du médiateur
222
	 */
222
	 */
223
	public static ImageMediateur Instance() {
223
	public static ImageMediateur Instance() {
224
		if (!estInstancie && thisMediateur == null) {
224
		if (!estInstancie && thisMediateur == null) {
225
			// on en crée un nouveau
225
			// on en crée un nouveau
226
			estInstancie = true;
226
			estInstancie = true;
227
			thisMediateur = new ImageMediateur();
227
			thisMediateur = new ImageMediateur();
228
		}
228
		}
229
		// sinon on retourne le "pointeur" vers le médiateur lui-même
229
		// sinon on retourne le "pointeur" vers le médiateur lui-même
230
		return thisMediateur;
230
		return thisMediateur;
231
	}
231
	}
232
 
232
 
233
	/**
233
	/**
234
	 * Retourne une instance de manière unique en lui associant un médiateur
234
	 * Retourne une instance de manière unique en lui associant un médiateur
235
	 * pour les observations
235
	 * pour les observations
236
	 * 
236
	 * 
237
	 * @param cm le médiateur de carnet à associer
237
	 * @param cm le médiateur de carnet à associer
238
	 * @return l'instance unique du médiateur
238
	 * @return l'instance unique du médiateur
239
	 */
239
	 */
240
	public static ImageMediateur Instance(CarnetEnLigneMediateur cm) {
240
	public static ImageMediateur Instance(CarnetEnLigneMediateur cm) {
241
		if (!estInstancie && thisMediateur == null) {
241
		if (!estInstancie && thisMediateur == null) {
242
			// on en crée un nouveau
242
			// on en crée un nouveau
243
			estInstancie = true;
243
			estInstancie = true;
244
			thisMediateur = new ImageMediateur(cm);
244
			thisMediateur = new ImageMediateur(cm);
245
		}
245
		}
246
		// sinon on retourne le "pointeur" vers le médiateur lui-même
246
		// sinon on retourne le "pointeur" vers le médiateur lui-même
247
		return thisMediateur;
247
		return thisMediateur;
248
	}
248
	}
249
	
249
	
250
	private void initialiser()
250
	private void initialiser()
251
	{
251
	{
252
		// quelques variables de position pour les borderlayouts
252
		// quelques variables de position pour les borderlayouts
253
		final BorderLayoutData regionNord = new BorderLayoutData(
253
		final BorderLayoutData regionNord = new BorderLayoutData(
254
				RegionPosition.NORTH);
254
				RegionPosition.NORTH);
255
 
255
 
256
		final BorderLayoutData regionCentre = new BorderLayoutData(
256
		final BorderLayoutData regionCentre = new BorderLayoutData(
257
				RegionPosition.CENTER);
257
				RegionPosition.CENTER);
258
 
258
 
259
		final BorderLayoutData regionEst = new BorderLayoutData(
259
		final BorderLayoutData regionEst = new BorderLayoutData(
260
				RegionPosition.EAST);
260
				RegionPosition.EAST);
261
		regionEst.setSplit(true);
261
		regionEst.setSplit(true);
262
 
262
 
263
		final BorderLayoutData regionOuest = new BorderLayoutData(
263
		final BorderLayoutData regionOuest = new BorderLayoutData(
264
				RegionPosition.WEST);
264
				RegionPosition.WEST);
265
		regionOuest.setSplit(true);
265
		regionOuest.setSplit(true);
266
		
266
		
267
		panneauPrincipalImage.setSize(cMediateur.getPanneauPrincipalCarnetEnLigne().getWidth(), cMediateur.getPanneauPrincipalCarnetEnLigne().getHeight()) ;
267
		panneauPrincipalImage.setSize(cMediateur.getPanneauPrincipalCarnetEnLigne().getWidth(), cMediateur.getPanneauPrincipalCarnetEnLigne().getHeight()) ;
268
		panneauPrincipalImage.setLayout(new BorderLayout()) ;
268
		panneauPrincipalImage.setLayout(new BorderLayout()) ;
269
 
269
 
270
		// on crée un modèle
270
		// on crée un modèle
271
		iModele = ImageModele.Instance(this);
271
		iModele = ImageModele.Instance(this);
272
 
272
 
273
		// on gère la mise en page du panneau principal
273
		// on gère la mise en page du panneau principal
274
 
274
 
275
		// on crée le panneau des filtres
275
		// on crée le panneau des filtres
276
		filtres = new PanneauFiltresImagesVues(this);
276
		filtres = new PanneauFiltresImagesVues(this);
277
		filtres.setWidth("15%");
277
		filtres.setWidth("15%");
278
 
278
 
279
		// le panneau à onglet qui contient les trois vues
279
		// le panneau à onglet qui contient les trois vues
280
		ongletsImage = new TabPanel();
280
		ongletsImage = new TabPanel();
281
 
281
 
282
		// la galerie
282
		// la galerie
283
		galerieImage = new GalerieImageVue(this);
283
		galerieImage = new GalerieImageVue(this);
284
 
284
 
285
		// la liste des images
285
		// la liste des images
286
		listeImage = new ListeImageVue(this);
286
		listeImage = new ListeImageVue(this);
287
		listeImage.setTitle("Liste") ;
287
		listeImage.setTitle("Liste") ;
288
 
288
 
289
		// le panneau zoom
289
		// le panneau zoom
290
		zoomImage = new ZoomImageVue(this);
290
		zoomImage = new ZoomImageVue(this);
291
 
291
 
292
		// on ajoute les panneaux au panneau à onglets
292
		// on ajoute les panneaux au panneau à onglets
293
		ongletsImage.add(galerieImage);
293
		ongletsImage.add(galerieImage);
294
		ongletsImage.add(listeImage);
294
		ongletsImage.add(listeImage);
295
		ongletsImage.add(zoomImage);
295
		ongletsImage.add(zoomImage);
296
 
296
 
297
		// on crée les menu et la barre de vue
297
		// on crée les menu et la barre de vue
298
		menuImageVue = new MenuImageVue(this);
298
		menuImageVue = new MenuImageVue(this);
299
		barreOutilsVue = new BarreOutilsVue(this);
299
		barreOutilsVue = new BarreOutilsVue(this);
300
 
300
 
301
		// on initialise le volet qui contient les mots clés
301
		// on initialise le volet qui contient les mots clés
302
		detailsEtMotsCles.setWidth("15%");
302
		detailsEtMotsCles.setWidth("15%");
303
		detailsEtMotsCles.setAnimCollapse(true);
303
		detailsEtMotsCles.setAnimCollapse(true);
304
		detailsEtMotsCles.setTitleCollapse(true);
304
		detailsEtMotsCles.setTitleCollapse(true);
305
		detailsEtMotsCles.setCollapsible(true);
305
		detailsEtMotsCles.setCollapsible(true);
306
 
306
 
307
		// on crée le panneau conteneur des métadonnées et infos
307
		// on crée le panneau conteneur des métadonnées et infos
308
		metadonneesIptcExif = new PanneauMetadonneesVue(this);
308
		metadonneesIptcExif = new PanneauMetadonneesVue(this);
309
		// et on l'inclut dans le volet approprié
309
		// et on l'inclut dans le volet approprié
310
		detailsEtMotsCles.add(metadonneesIptcExif);
310
		detailsEtMotsCles.add(metadonneesIptcExif);
311
		
311
		
312
		panneauMenuEtOngletsImage = new Panel() ;
312
		panneauMenuEtOngletsImage = new Panel() ;
313
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
313
		panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
314
		// on ajoute la barre de vue au nord du panneau qui contient menu et
314
		// on ajoute la barre de vue au nord du panneau qui contient menu et
315
		// onglets d'images
315
		// onglets d'images
316
		panneauMenuEtOngletsImage.add(barreOutilsVue, regionNord);
316
		panneauMenuEtOngletsImage.add(barreOutilsVue, regionNord);
317
		// les onglets au centre
317
		// les onglets au centre
318
		panneauMenuEtOngletsImage.add(ongletsImage, regionCentre);
318
		panneauMenuEtOngletsImage.add(ongletsImage, regionCentre);
319
		
319
		
320
		// et le panneau de métadonnées et d'info sur le coté droit
320
		// et le panneau de métadonnées et d'info sur le coté droit
321
		panneauPrincipalImage.add(detailsEtMotsCles, regionEst);
321
		panneauPrincipalImage.add(detailsEtMotsCles, regionEst);
322
		
322
		
323
		// on ajoute le panneau qui contient le menu et les onglets d'images au
323
		// on ajoute le panneau qui contient le menu et les onglets d'images au
324
		// centre
324
		// centre
325
		panneauPrincipalImage.add(panneauMenuEtOngletsImage, regionCentre);
325
		panneauPrincipalImage.add(panneauMenuEtOngletsImage, regionCentre);
326
		
326
		
327
		// on ajoute les filtres au panneau gauche
327
		// on ajoute les filtres au panneau gauche
328
		panneauPrincipalImage.add(filtres,regionOuest) ;
328
		panneauPrincipalImage.add(filtres,regionOuest) ;
329
		
329
		
330
		detailsEtMotsCles.addListener(new ContainerListenerAdapter() {
330
		detailsEtMotsCles.addListener(new ContainerListenerAdapter() {
331
 
331
 
332
			@Override
332
			@Override
333
			public void onResize(BoxComponent component,int adjWidth,int adjHeight,int rawWidth,int rawHeight)
333
			public void onResize(BoxComponent component,int adjWidth,int adjHeight,int rawWidth,int rawHeight)
334
			{
334
			{
335
				if(detailsEtMotsCles != null && detailsEtMotsCles.isRendered() && metadonneesIptcExif != null && metadonneesIptcExif.isRendered()) {
335
				if(detailsEtMotsCles != null && detailsEtMotsCles.isRendered() && metadonneesIptcExif != null && metadonneesIptcExif.isRendered()) {
336
					metadonneesIptcExif.doLayout();
336
					metadonneesIptcExif.doLayout();
337
				}
337
				}
338
			}
338
			}
339
		});
339
		});
340
		
340
		
341
		creerPanneauGestionMotsCles();
341
		creerPanneauGestionMotsCles();
342
		
342
		
343
		// filtres.setCollapsed(false) ;
343
		// filtres.setCollapsed(false) ;
344
		thisMediateur = this ;
344
		thisMediateur = this ;
345
		
345
		
346
		estInitialise = true ;
346
		estInitialise = true ;
347
		
347
		
348
		changerUtilisateur() ;
348
		changerUtilisateur() ;
349
	}
349
	}
350
 
350
 
351
	/**
351
	/**
352
	 * Renvoie l'identifiant de l'utilisateur en cours
352
	 * Renvoie l'identifiant de l'utilisateur en cours
353
	 * 
353
	 * 
354
	 * @return l'identifiant de l'utilisateur
354
	 * @return l'identifiant de l'utilisateur
355
	 */
355
	 */
356
	public String getIdentifiant() {		
356
	public String getIdentifiant() {		
357
		return cMediateur.getUtilisateur().getIdentifiantUtilisateurConsulte();	
357
		return cMediateur.getUtilisateur().getIdentifiantUtilisateurConsulte();	
358
	}
358
	}
359
 
359
 
360
	/**
360
	/**
361
	 * . Setteur pour l'identifiant de l'utilisateur en cours
361
	 * . Setteur pour l'identifiant de l'utilisateur en cours
362
	 * 
362
	 * 
363
	 * @param id
363
	 * @param id
364
	 *            le nouvel identifiant utilisateur
364
	 *            le nouvel identifiant utilisateur
365
	 */
365
	 */
366
	public void setIdentifiant(String id) {
366
	public void setIdentifiant(String id) {
367
		identifiant = id;
367
		identifiant = id;
368
	}
368
	}
369
 
369
 
370
	/**
370
	/**
371
	 * Appelle les fonctions de chargement de données, suit généralement un
371
	 * Appelle les fonctions de chargement de données, suit généralement un
372
	 * appel à setIdentifiant, pour obtenir l'arbre des mots clés et les images
372
	 * appel à setIdentifiant, pour obtenir l'arbre des mots clés et les images
373
	 * du nouvel utilisateur
373
	 * du nouvel utilisateur
374
	 */
374
	 */
375
	public void changerUtilisateur() {
375
	public void changerUtilisateur() {
376
		getIModele().initialiserArbreMotsCles();
376
		getIModele().initialiserArbreMotsCles();
377
		obtenirPhotoGalerie(getGalerieImage());
377
		obtenirPhotoGalerie(getGalerieImage());
378
	}
378
	}
379
 
379
 
380
	/**
380
	/**
381
	 * Accesseur pour le modèle associé au médiateur
381
	 * Accesseur pour le modèle associé au médiateur
382
	 * 
382
	 * 
383
	 * @return le modèle associé
383
	 * @return le modèle associé
384
	 */
384
	 */
385
	public ImageModele getIModele() {
385
	public ImageModele getIModele() {
386
		return iModele;
386
		return iModele;
387
	}
387
	}
388
 
388
 
389
	/**
389
	/**
390
	 * Accesseur pour le panneau principal
390
	 * Accesseur pour le panneau principal
391
	 * 
391
	 * 
392
	 * @return le panneau principal
392
	 * @return le panneau principal
393
	 */
393
	 */
394
	public Panel getPanneauPrincipalImage() {
394
	public Panel getPanneauPrincipalImage() {
395
		return panneauPrincipalImage;
395
		return panneauPrincipalImage;
396
	}
396
	}
397
 
397
 
398
	/**
398
	/**
399
	 * Accesseur pour le panneau à onglets
399
	 * Accesseur pour le panneau à onglets
400
	 * 
400
	 * 
401
	 * @return le panneau à onglets
401
	 * @return le panneau à onglets
402
	 */
402
	 */
403
	public TabPanel getOngletsImage() {
403
	public TabPanel getOngletsImage() {
404
		return ongletsImage;
404
		return ongletsImage;
405
	}
405
	}
406
 
406
 
407
	/**
407
	/**
408
	 * Accesseur pour la galerie d'images
408
	 * Accesseur pour la galerie d'images
409
	 * 
409
	 * 
410
	 * @return la galerie d'image
410
	 * @return la galerie d'image
411
	 */
411
	 */
412
	public GalerieImageVue getGalerieImage() {
412
	public GalerieImageVue getGalerieImage() {
413
		return galerieImage;
413
		return galerieImage;
414
	}
414
	}
415
 
415
 
416
	public ListeImageVue getListeImage() {
416
	public ListeImageVue getListeImage() {
417
		return listeImage;
417
		return listeImage;
418
	}
418
	}
419
 
419
 
420
	/**
420
	/**
421
	 * Accesseur pour le panneau "zoom"
421
	 * Accesseur pour le panneau "zoom"
422
	 * 
422
	 * 
423
	 * @return le panneau zoom
423
	 * @return le panneau zoom
424
	 */
424
	 */
425
	public ZoomImageVue getZoomImage() {
425
	public ZoomImageVue getZoomImage() {
426
		return zoomImage;
426
		return zoomImage;
427
	}
427
	}
428
 
428
 
429
	/**
429
	/**
430
	 * Accesseur pour le panneau détails et mot clés
430
	 * Accesseur pour le panneau détails et mot clés
431
	 * 
431
	 * 
432
	 * @return le panneau détails et mots clés
432
	 * @return le panneau détails et mots clés
433
	 */
433
	 */
434
	public Panel getDetailsEtMotsCles() {
434
	public Panel getDetailsEtMotsCles() {
435
		return detailsEtMotsCles;
435
		return detailsEtMotsCles;
436
	}
436
	}
437
 
437
 
438
	/**
438
	/**
439
	 * Accesseur pour le booleen d'instanciation
439
	 * Accesseur pour le booleen d'instanciation
440
	 * 
440
	 * 
441
	 * @return le booleen d'instanciation
441
	 * @return le booleen d'instanciation
442
	 */
442
	 */
443
	public static boolean isEstInstancie() {
443
	public static boolean isEstInstancie() {
444
		return estInstancie;
444
		return estInstancie;
445
	}
445
	}
446
 
446
 
447
	/**
447
	/**
448
	 * Accesseur pour la panneau contenant le menu et les onglets images
448
	 * Accesseur pour la panneau contenant le menu et les onglets images
449
	 * 
449
	 * 
450
	 * @return le panneauMenuEtOngletsImage
450
	 * @return le panneauMenuEtOngletsImage
451
	 */
451
	 */
452
	public Panel getPanneauMenuEtOngletsImage() {
452
	public Panel getPanneauMenuEtOngletsImage() {
453
		return panneauMenuEtOngletsImage;
453
		return panneauMenuEtOngletsImage;
454
	}
454
	}
455
 
455
 
456
	/**
456
	/**
457
	 * Accesseur pour le menu image
457
	 * Accesseur pour le menu image
458
	 * 
458
	 * 
459
	 * @return the menuImageVue
459
	 * @return the menuImageVue
460
	 */
460
	 */
461
	public MenuImageVue getMenuImageVue() {
461
	public MenuImageVue getMenuImageVue() {
462
		return menuImageVue;
462
		return menuImageVue;
463
	}
463
	}
464
 
464
 
465
	/**
465
	/**
466
	 * Accesseur pour la barre d'outils
466
	 * Accesseur pour la barre d'outils
467
	 * 
467
	 * 
468
	 * @return the barreOutilsVue
468
	 * @return the barreOutilsVue
469
	 */
469
	 */
470
	public BarreOutilsVue getBarreOutilsVue() {
470
	public BarreOutilsVue getBarreOutilsVue() {
471
		return barreOutilsVue;
471
		return barreOutilsVue;
472
	}
472
	}
473
 
473
 
474
	/**
474
	/**
475
	 * Accesseur pour le panneau infos et métadonnées
475
	 * Accesseur pour le panneau infos et métadonnées
476
	 * 
476
	 * 
477
	 * @return the metadonneesIptcExif
477
	 * @return the metadonneesIptcExif
478
	 */
478
	 */
479
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
479
	public PanneauMetadonneesVue getMetadonneesIptcExif() {
480
		return metadonneesIptcExif;
480
		return metadonneesIptcExif;
481
	}
481
	}
482
 
482
 
483
	/**
483
	/**
484
	 * Renvoie l'index du dernier onglet sélectionné
484
	 * Renvoie l'index du dernier onglet sélectionné
485
	 * 
485
	 * 
486
	 * @return l'index du dernier onglet
486
	 * @return l'index du dernier onglet
487
	 */
487
	 */
488
	public int getDernierIndexOnglet() {
488
	public int getDernierIndexOnglet() {
489
		return dernierIndexOnglet;
489
		return dernierIndexOnglet;
490
	}
490
	}
491
 
491
 
492
 
492
 
493
	/**
493
	/**
494
	 * Accesseur pour la barre de recherche
494
	 * Accesseur pour la barre de recherche
495
	 * 
495
	 * 
496
	 * @return la barre de recherche pour filtrer les commentaires
496
	 * @return la barre de recherche pour filtrer les commentaires
497
	 */
497
	 */
498
	public BarreRechercheFiltreVue getFiltreCommentaires() {
498
	public BarreRechercheFiltreVue getFiltreCommentaires() {
499
		return filtreCommentaires;
499
		return filtreCommentaires;
500
	}
500
	}
501
 
501
 
502
	/**
502
	/**
503
	 * Renvoie la vue sélectionné par l'utilisateur
503
	 * Renvoie la vue sélectionné par l'utilisateur
504
	 * 
504
	 * 
505
	 * @return la vue selectionnée par l'utilisateur
505
	 * @return la vue selectionnée par l'utilisateur
506
	 */
506
	 */
507
	public VueListable getVueSelectionnee() {
507
	public VueListable getVueSelectionnee() {
508
		Panel active = ongletsImage.getActiveTab();
508
		Panel active = ongletsImage.getActiveTab();
509
		if (active != zoomImage) {
509
		if (active != zoomImage) {
510
			if (active == galerieImage) {
510
			if (active == galerieImage) {
511
				return galerieImage;
511
				return galerieImage;
512
			} else {
512
			} else {
513
				return listeImage;
513
				return listeImage;
514
			}
514
			}
515
 
515
 
516
		} else {
516
		} else {
517
			if (dernierIndexOnglet == 0) {
517
			if (dernierIndexOnglet == 0) {
518
				return galerieImage;
518
				return galerieImage;
519
			} else {
519
			} else {
520
				return listeImage;
520
				return listeImage;
521
			}
521
			}
522
 
522
 
523
		}
523
		}
524
 
524
 
525
	}
525
	}
526
 
526
 
527
	/**
527
	/**
528
	 * Renvoie l'identifiant de la vue en cours
528
	 * Renvoie l'identifiant de la vue en cours
529
	 * 
529
	 * 
530
	 * @return l'identifiant de la vue en cours de visualisation
530
	 * @return l'identifiant de la vue en cours de visualisation
531
	 */
531
	 */
532
	public String getIdVueSelectionnee() {
532
	public String getIdVueSelectionnee() {
533
		Panel active = ongletsImage.getActiveTab();
533
		Panel active = ongletsImage.getActiveTab();
534
		if (active != zoomImage) {
534
		if (active != zoomImage) {
535
			if (active == galerieImage) {
535
			if (active == galerieImage) {
536
				return galerieImage.getId();
536
				return galerieImage.getId();
537
			} else {
537
			} else {
538
				return listeImage.getId();
538
				return listeImage.getId();
539
			}
539
			}
540
 
540
 
541
		} else {
541
		} else {
542
			if (dernierIndexOnglet == 0) {
542
			if (dernierIndexOnglet == 0) {
543
				return galerieImage.getId();
543
				return galerieImage.getId();
544
			} else {
544
			} else {
545
				return listeImage.getId();
545
				return listeImage.getId();
546
			}
546
			}
547
 
547
 
548
		}
548
		}
549
 
549
 
550
	}
550
	}
551
 
551
 
552
	/**
552
	/**
553
	 * Met a jour les données provenant du modèle et synchronise les vues entre
553
	 * Met a jour les données provenant du modèle et synchronise les vues entre
554
	 * elles
554
	 * elles
555
	 * 
555
	 * 
556
	 * @param o
556
	 * @param o
557
	 *            données de mises a jour pour les vues
557
	 *            données de mises a jour pour les vues
558
	 * @param r
558
	 * @param r
559
	 *            le refraichissable qui a demandé la mise a jour
559
	 *            le refraichissable qui a demandé la mise a jour
560
	 */
560
	 */
561
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r) {
561
	public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r) {
562
 
562
 
563
		if (o instanceof Store) {
563
		if (o instanceof Store) {
564
 
564
 
565
			Store li = (Store) o;
565
			Store li = (Store) o;
566
 
566
 
567
			if (li.getCount() <= 0) {
567
			if (li.getCount() <= 0) {
568
				aucuneSelection();
568
				aucuneSelection();
569
				if (ongletsImage.getActiveTab().getId() == getZoomImage().getId()) {
569
				if (ongletsImage.getActiveTab().getId() == getZoomImage().getId()) {
570
					ongletsImage.activate(0);
570
					ongletsImage.activate(0);
571
				}
571
				}
572
			} else {
572
			} else {
573
				selection();
573
				selection();
574
			}
574
			}
575
 
575
 
576
			if (r != getGalerieImage()) {
576
			if (r != getGalerieImage()) {
577
				getGalerieImage().rafraichir(o, false);
577
				getGalerieImage().rafraichir(o, false);
578
			}
578
			}
579
			if (r != getZoomImage()) {
579
			if (r != getZoomImage()) {
580
				getZoomImage().rafraichir(o, false);
580
				getZoomImage().rafraichir(o, false);
581
			}
581
			}
582
			if (r != getListeImage()) {
582
			if (r != getListeImage()) {
583
				getListeImage().rafraichir(o, false);
583
				getListeImage().rafraichir(o, false);
584
			}
584
			}
585
 
585
 
586
			demasquerChargement();
586
			demasquerChargement();
587
 
587
 
588
		}
588
		}
589
	}
589
	}
590
	
590
	
591
 
591
 
592
	public void obtenirPhotoGalerie() {
592
	public void obtenirPhotoGalerie() {
593
		
593
		
594
		obtenirPhotoGalerie(getGalerieImage());
594
		obtenirPhotoGalerie(getGalerieImage());
595
	}
595
	}
596
 
596
 
597
	/**
597
	/**
598
	 * envoie au modèle une demande de mise a jour
598
	 * envoie au modèle une demande de mise a jour
599
	 * 
599
	 * 
600
	 * @param r
600
	 * @param r
601
	 *            la vue demandeuse de mise a jour
601
	 *            la vue demandeuse de mise a jour
602
	 */
602
	 */
603
	public void obtenirPhotoGalerie(Rafraichissable r) {
603
	public void obtenirPhotoGalerie(Rafraichissable r) {
604
		masquerChargement();
604
		masquerChargement();
605
		getIModele().obtenirNombrePhotoGalerie(r);
605
		getIModele().obtenirNombrePhotoGalerie(r);
606
	}
606
	}
607
 
607
 
608
	/**
608
	/**
609
	 * demande au modèle les métadonnées associées a une image
609
	 * demande au modèle les métadonnées associées a une image
610
	 * 
610
	 * 
611
	 * @param r
611
	 * @param r
612
	 *            la vue demandeuse de mise a jour
612
	 *            la vue demandeuse de mise a jour
613
	 * @param id
613
	 * @param id
614
	 *            l'identifiant de l'image
614
	 *            l'identifiant de l'image
615
	 */
615
	 */
616
	public void obtenirMetadonnees(Rafraichissable r, String id) {
616
	public void obtenirMetadonnees(Rafraichissable r, String id) {
617
		getIModele().obtenirMetadonnees(r, id);
617
		getIModele().obtenirMetadonnees(r, id);
618
	}
618
	}
619
 
619
 
620
	/**
620
	/**
621
	 * demande au modèle les ids des mots clés associés a une image
621
	 * demande au modèle les ids des mots clés associés a une image
622
	 * 
622
	 * 
623
	 * @param r
623
	 * @param r
624
	 *            la vue demandeuse de mise a jour
624
	 *            la vue demandeuse de mise a jour
625
	 * @param id
625
	 * @param id
626
	 *            l'identifiant de l'image
626
	 *            l'identifiant de l'image
627
	 */
627
	 */
628
	public void obtenirMotsClesId(Rafraichissable r, String id) {
628
	public void obtenirMotsClesId(Rafraichissable r, String id) {
629
		getIModele().obtenirMotsClesId(r, id);
629
		getIModele().obtenirMotsClesId(r, id);
630
	}
630
	}
631
 
631
 
632
	public void obtenirMotsClesTexte(Rafraichissable r, String id) {
632
	public void obtenirMotsClesTexte(Rafraichissable r, String id) {
633
		String[] texteMotsCles = getTexteMotsCles(getIModele().getMotsClesId(id));
633
		String[] texteMotsCles = getTexteMotsCles(getIModele().getMotsClesId(id));
634
		r.rafraichir(texteMotsCles, false);
634
		r.rafraichir(texteMotsCles, false);
635
	}
635
	}
636
	
636
	
637
	//TODO: devrait être dans le modèle
637
	//TODO: devrait être dans le modèle
638
	public String[] getTexteMotsCles(String idsMotsCles[]) {
638
	public String[] getTexteMotsCles(String idsMotsCles[]) {
639
		
639
		
640
		String[] tableauMotsClesTexte = new String[idsMotsCles.length];
640
		String[] tableauMotsClesTexte = new String[idsMotsCles.length];
641
		
641
		
642
		for(int i=0; i< idsMotsCles.length; i++) {
642
		for(int i=0; i< idsMotsCles.length; i++) {
643
			tableauMotsClesTexte[i] = iModele.obtenirTexteMotCle(idsMotsCles[i]);
643
			tableauMotsClesTexte[i] = iModele.obtenirTexteMotCle(idsMotsCles[i]);
644
		}
644
		}
645
		
645
		
646
		return tableauMotsClesTexte;
646
		return tableauMotsClesTexte;
647
	}
647
	}
648
 
648
 
649
	/**
649
	/**
650
	 * Envoie au modèle une demande pour obtenir l'arbre des mots clés
650
	 * Envoie au modèle une demande pour obtenir l'arbre des mots clés
651
	 * 
651
	 * 
652
	 * @param r
652
	 * @param r
653
	 *            le raffraichissable qui a demandé la mise à jour
653
	 *            le raffraichissable qui a demandé la mise à jour
654
	 */
654
	 */
655
	public void obtenirArbreMotsCles(Rafraichissable r) {
655
	public void obtenirArbreMotsCles(Rafraichissable r) {
656
		getIModele().initialiserArbreMotsCles();
656
		getIModele().initialiserArbreMotsCles();
657
	}
657
	}
658
 
658
 
659
	/**
659
	/**
660
	 * envoie au modèle une demande de mise a jour des informations modifiables
660
	 * envoie au modèle une demande de mise a jour des informations modifiables
661
	 * associées a une image
661
	 * associées a une image
662
	 * 
662
	 * 
663
	 * @param commentaires
663
	 * @param commentaires
664
	 *            le commentaire de l'image
664
	 *            le commentaire de l'image
665
	 * @param date
665
	 * @param date
666
	 *            la date modifiée par l'utilisateur
666
	 *            la date modifiée par l'utilisateur
667
	 */
667
	 */
668
	public void mettreAJourInfo(String commentaires, String date, String note) {
668
	public void mettreAJourInfo(String commentaires, String date, String note) {
669
		String ids[] = getVueSelectionnee().getIdSelectionnees();
669
		String ids[] = getVueSelectionnee().getIdSelectionnees();
670
 
670
 
671
		getIModele().mettreAJourCacheImage(commentaires, date, note, ids);
671
		getIModele().mettreAJourCacheImage(commentaires, date, note, ids);
672
		getListeImage().mettreAjourInfos(commentaires, date, note);
672
		getListeImage().mettreAjourInfos(commentaires, date, note);
673
	}
673
	}
674
 
674
 
675
	/**
675
	/**
676
	 * Met à jour l'arbre des mots clés affichés dans le volet de droite à
676
	 * Met à jour l'arbre des mots clés affichés dans le volet de droite à
677
	 * partir de l'arbre passé en paramètre
677
	 * partir de l'arbre passé en paramètre
678
	 * 
678
	 * 
679
	 * @param arbreMC
679
	 * @param arbreMC
680
	 *            le nouvel arbre des mots clés
680
	 *            le nouvel arbre des mots clés
681
	 */
681
	 */
682
	public void rafraichirArbreMotsCles(Tree arbreMC) {
682
	public void rafraichirArbreMotsCles(Tree arbreMC) {
683
		metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false);
683
		metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false);
684
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
684
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
685
		if(fnMc != null) {
685
		if(fnMc != null) {
686
			fnMc.rafraichir(arbreMC, false);
686
			fnMc.rafraichir(arbreMC, false);
687
		}
687
		}
688
	}
688
	}
689
 
689
 
690
	/**
690
	/**
691
	 * envoie au modèle une demande pour lancer le formulaire ou l'application
691
	 * envoie au modèle une demande pour lancer le formulaire ou l'application
692
	 * d'upload
692
	 * d'upload
693
	 */
693
	 */
694
	public void uploaderImages(boolean multiple) {
694
	public void uploaderImages(boolean multiple) {
695
		if(cMediateur.getUtilisateur().isIdentifie()) {
695
		if(cMediateur.getUtilisateur().isIdentifie()) {
696
			getIModele().uploaderImages(multiple);
696
			getIModele().uploaderImages(multiple);
697
		}
697
		}
698
		else
698
		else
699
		{
699
		{
700
			if(Window.confirm("L'envoi d'images nécéssite d'être identifié. Voulez-vous vous identifier maintenant ?")) {
700
			if(Window.confirm("L'envoi d'images nécéssite d'être identifié. Voulez-vous vous identifier maintenant ?")) {
701
				cMediateur.afficherDialogueConnexion();
701
				cMediateur.afficherDialogueConnexion();
702
			}
702
			}
703
			else
703
			else
704
			{
704
			{
705
				
705
				
706
			}
706
			}
707
		}
707
		}
708
	}
708
	}
709
 
709
 
710
	/**
710
	/**
711
	 * Envoie une demande au modèle pour obtenir toutes les données annexes de
711
	 * Envoie une demande au modèle pour obtenir toutes les données annexes de
712
	 * l'image (métadonnées, note, etc ...), on y centralise tous les appels a
712
	 * l'image (métadonnées, note, etc ...), on y centralise tous les appels a
713
	 * obtenirQuelqueChose
713
	 * obtenirQuelqueChose
714
	 * 
714
	 * 
715
	 * @param imgNum
715
	 * @param imgNum
716
	 *            l'identifiant de l'image
716
	 *            l'identifiant de l'image
717
	 */
717
	 */
718
	public void obtenirDonnes(String imgNum) {
718
	public void obtenirDonnes(String imgNum) {
719
		
719
		
720
		if(metadonneesIptcExif.isVisible()) {
720
		if(metadonneesIptcExif.isVisible()) {
721
			if(imgNum == null) {
721
			if(imgNum == null) {
722
				return;
722
				return;
723
			}
723
			}
724
			
724
			
725
			// si on est en mode liaison, on demande la liste des obs
725
			// si on est en mode liaison, on demande la liste des obs
726
			if(getMetadonneesIptcExif().getMiniListeObservation().getMode())
726
			if(getMetadonneesIptcExif().getMiniListeObservation().getMode())
727
			{
727
			{
728
				obtenirObservationsAssociees() ;
728
				obtenirObservationsAssociees() ;
729
			}
729
			}
730
			obtenirMetadonnees(metadonneesIptcExif, imgNum);
730
			obtenirMetadonnees(metadonneesIptcExif, imgNum);
731
			obtenirMotsClesId(fnMc, imgNum);
731
			obtenirMotsClesId(fnMc, imgNum);
732
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), imgNum);
732
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), imgNum);
733
			obtenirNote(metadonneesIptcExif.getNoteVue(), imgNum);
733
			obtenirNote(metadonneesIptcExif.getNoteVue(), imgNum);
734
		}
734
		}
735
 
735
 
736
	}
736
	}
737
	
737
	
738
	public void changerModeLiaison(boolean mode) {
738
	public void changerModeLiaison(boolean mode) {
739
		
739
		
740
		if(mode) {
740
		if(mode) {
741
			obtenirObservationsAssociees() ;
741
			obtenirObservationsAssociees() ;
742
			metadonneesIptcExif.getRechercheFiltreTaxonVue().disable();
742
			metadonneesIptcExif.getRechercheFiltreTaxonVue().disable();
743
		}
743
		}
744
		else {
744
		else {
745
			obtenirNombreMiniListeObservations() ;
745
			obtenirNombreMiniListeObservations() ;
746
			metadonneesIptcExif.getRechercheFiltreTaxonVue().enable();
746
			metadonneesIptcExif.getRechercheFiltreTaxonVue().enable();
747
		}
747
		}
748
	}
748
	}
749
 
749
 
750
	/**
750
	/**
751
	 * Envoie une demande au modèle pour obtenir la note associée à une image
751
	 * Envoie une demande au modèle pour obtenir la note associée à une image
752
	 * 
752
	 * 
753
	 * @param noteVue
753
	 * @param noteVue
754
	 *            le rafraichissable à qui est destiné cette information
754
	 *            le rafraichissable à qui est destiné cette information
755
	 * @param imgNum
755
	 * @param imgNum
756
	 *            l'identifiant de l'image
756
	 *            l'identifiant de l'image
757
	 */
757
	 */
758
	private void obtenirNote(Rafraichissable r, String imgNum) {
758
	private void obtenirNote(Rafraichissable r, String imgNum) {
759
 
759
 
760
		getIModele().obtenirNote(r, imgNum);
760
		getIModele().obtenirNote(r, imgNum);
761
	}
761
	}
762
 
762
 
763
	/**
763
	/**
764
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie le
764
	 * est appelé lors d'un clic de souris sur une vignette dans la galerie le
765
	 * médiateur gère alors les conséquences
765
	 * médiateur gère alors les conséquences
766
	 * 
766
	 * 
767
	 * @param index
767
	 * @param index
768
	 *            l'index du noeud dans la galerie
768
	 *            l'index du noeud dans la galerie
769
	 * @param node
769
	 * @param node
770
	 *            le noeud selectionné
770
	 *            le noeud selectionné
771
	 * @param e
771
	 * @param e
772
	 *            l'object source de l'évenement
772
	 *            l'object source de l'évenement
773
	 */
773
	 */
774
	public void clicGalerieImage(int index, Element node, EventObject e) {
774
	public void clicGalerieImage(int index, Element node, EventObject e) {
775
		Record rd = getGalerieImage().getDView().getRecord(node);
775
		Record rd = getGalerieImage().getDView().getRecord(node);
776
		String imgUrl = rd.getAsString("url_image");
776
		String imgUrl = rd.getAsString("url_image");
777
		String imgNum = rd.getAsString("num_image");
777
		String imgNum = rd.getAsString("num_image");
778
		String imgTaxon = rd.getAsString("obs_associees");
778
		String imgTaxon = rd.getAsString("obs_associees");
779
		String[] imgXY = getIModele().obtenirTailleImage(
779
		String[] imgXY = getIModele().obtenirTailleImage(
780
				rd.getAsString("num_image"));
780
				rd.getAsString("num_image"));
781
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon};
781
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon};
782
 
782
 
783
		getZoomImage().rafraichir(infosImage, false);
783
		getZoomImage().rafraichir(infosImage, false);
784
		dernierIndexOnglet = 0;
784
		dernierIndexOnglet = 0;
785
 
785
 
786
		if (DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK) {
786
		if (DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK) {
787
 
787
 
788
			getOngletsImage().setActiveTab(2);
788
			getOngletsImage().setActiveTab(2);
789
		}
789
		}
790
 
790
 
791
		obtenirDonnes(imgNum);
791
		obtenirDonnes(imgNum);
792
 
792
 
793
	}
793
	}
794
 
794
 
795
	/**
795
	/**
796
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
796
	 * est appelé lors d'un clic de souris sur un enregistrement de la liste le
797
	 * médiateur gère alors les conséquences
797
	 * médiateur gère alors les conséquences
798
	 * 
798
	 * 
799
	 * @param rowIndex
799
	 * @param rowIndex
800
	 *            le numéro de ligne selectionné
800
	 *            le numéro de ligne selectionné
801
	 */
801
	 */
802
	public void clicListeImage(int rowIndex) {
802
	public void clicListeImage(int rowIndex) {
803
		Record rd = getListeImage().getSelectionModel().getSelected();
803
		Record rd = getListeImage().getSelectionModel().getSelected();
804
		String imgUrl = rd.getAsString("url_image");
804
		String imgUrl = rd.getAsString("url_image");
805
		String imgNum = rd.getAsString("num_image");
805
		String imgNum = rd.getAsString("num_image");
806
		String imgTaxon = rd.getAsString("obs_associees");
806
		String imgTaxon = rd.getAsString("obs_associees");
807
		String[] imgXY = getIModele().obtenirTailleImage(
807
		String[] imgXY = getIModele().obtenirTailleImage(
808
				rd.getAsString("num_image"));
808
				rd.getAsString("num_image"));
809
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
809
		String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
810
 
810
 
811
		getZoomImage().rafraichir(infosImage, false);
811
		getZoomImage().rafraichir(infosImage, false);
812
		dernierIndexOnglet = 1;
812
		dernierIndexOnglet = 1;
813
 
813
 
814
		obtenirDonnes(imgNum);
814
		obtenirDonnes(imgNum);
815
	}
815
	}
816
 
816
 
817
	/**
817
	/**
818
	 * gestion du double clic dans la liste
818
	 * gestion du double clic dans la liste
819
	 * 
819
	 * 
820
	 * @param rowIndex
820
	 * @param rowIndex
821
	 */
821
	 */
822
	public void doubleClicListeImage(int rowIndex) {
822
	public void doubleClicListeImage(int rowIndex) {
823
		getOngletsImage().setActiveTab(2);
823
		getOngletsImage().setActiveTab(2);
824
	}
824
	}
825
 
825
 
826
	/**
826
	/**
827
	 * envoie une demande de mise a jour des données au modèle
827
	 * envoie une demande de mise a jour des données au modèle
828
	 */
828
	 */
829
	public void rafraichirToutesVues() {
829
	public void rafraichirToutesVues() {
830
		obtenirPhotoGalerie(getIModele());
830
		obtenirPhotoGalerie(getIModele());
831
	}
831
	}
832
 
832
 
833
	/**
833
	/**
834
	 * montre le menu au coordonnées indiquées
834
	 * montre le menu au coordonnées indiquées
835
	 * 
835
	 * 
836
	 * @param e
836
	 * @param e
837
	 *            l'objet source de l'évenement
837
	 *            l'objet source de l'évenement
838
	 */
838
	 */
839
	public void montrerContextMenu(EventObject e) {
839
	public void montrerContextMenu(EventObject e) {
840
		menuImageVue.showAt(e.getXY());
840
		menuImageVue.showAt(e.getXY());
841
	}
841
	}
842
	
842
	
843
	/**
843
	/**
844
	 * montre le menu au coordonnées indiquées
844
	 * montre le menu au coordonnées indiquées
845
	 * 
845
	 * 
846
	 * @param e
846
	 * @param e
847
	 *            l'objet source de l'évenement
847
	 *            l'objet source de l'évenement
848
	 */
848
	 */
849
	public void montrerContextMenu(int[] XY) {
849
	public void montrerContextMenu(int[] XY) {
850
		menuImageVue.showAt(XY);
850
		menuImageVue.showAt(XY);
851
	}
851
	}
852
	
852
	
853
	/**
853
	/**
854
	 * appelé lors du double clic sur l'image agrandie
854
	 * appelé lors du double clic sur l'image agrandie
855
	 */
855
	 */
856
	public void doubleClicZoomImage() {
856
	public void doubleClicZoomImage() {
857
		getOngletsImage().setActiveTab(dernierIndexOnglet);
857
		getOngletsImage().setActiveTab(dernierIndexOnglet);
858
	}
858
	}
859
 
859
 
860
	/**
860
	/**
861
	 * appelé lors du clic sur un des boutons de la zone zoom
861
	 * appelé lors du clic sur un des boutons de la zone zoom
862
	 * 
862
	 * 
863
	 * @param arg
863
	 * @param arg
864
	 *            le nom du bouton qui a cliqué
864
	 *            le nom du bouton qui a cliqué
865
	 */
865
	 */
866
	public void clicBoutonZoomImage(String arg) {
866
	public void clicBoutonZoomImage(String arg) {
867
 
867
 
868
		Store st;
868
		Store st;
869
		int selected;
869
		int selected;
870
		int storeIndex;
870
		int storeIndex;
871
		Record nRec = null;
871
		Record nRec = null;
872
 
872
 
873
		// tout d'abord on obtient les index selectionnés suivant la vue
873
		// tout d'abord on obtient les index selectionnés suivant la vue
874
		if (getVueSelectionnee() == galerieImage) {
874
		if (getVueSelectionnee() == galerieImage) {
875
			DataView dv = getGalerieImage().getDView();
875
			DataView dv = getGalerieImage().getDView();
876
			st = getGalerieImage().getSt();
876
			st = getGalerieImage().getSt();
877
 
877
 
878
			if (st.getCount() <= 0) {
878
			if (st.getCount() <= 0) {
879
				return;
879
				return;
880
			}
880
			}
881
 
881
 
882
			selected = st.indexOf(dv.getSelectedRecords()[0]);
882
			selected = st.indexOf(dv.getSelectedRecords()[0]);
883
			storeIndex = dv.indexOf(selected);
883
			storeIndex = dv.indexOf(selected);
884
		} else {
884
		} else {
885
			st = listeImage.getSt();
885
			st = listeImage.getSt();
886
 
886
 
887
			if (st.getCount() <= 0) {
887
			if (st.getCount() <= 0) {
888
				return;
888
				return;
889
			}
889
			}
890
 
890
 
891
			selected = st.indexOf(listeImage.getSelectionModel().getSelected());
891
			selected = st.indexOf(listeImage.getSelectionModel().getSelected());
892
			storeIndex = selected;
892
			storeIndex = selected;
893
		}
893
		}
894
 
894
 
895
		if (arg.equals("prev")) {
895
		if (arg.equals("prev")) {
896
			// si la photo séléctionnée est la première, on passe a la
896
			// si la photo séléctionnée est la première, on passe a la
897
			// dernière
897
			// dernière
898
			if (selected == 0) {
898
			if (selected == 0) {
899
				storeIndex = st.getCount() - 1;
899
				storeIndex = st.getCount() - 1;
900
				nRec = st.getAt(storeIndex);
900
				nRec = st.getAt(storeIndex);
901
 
901
 
902
			} else {
902
			} else {
903
				storeIndex = storeIndex - 1;
903
				storeIndex = storeIndex - 1;
904
				nRec = st.getAt(storeIndex);
904
				nRec = st.getAt(storeIndex);
905
			}
905
			}
906
 
906
 
907
		}
907
		}
908
 
908
 
909
		if (arg.equals("suiv")) {
909
		if (arg.equals("suiv")) {
910
			// si la photo selectionnée est la dernière on passe a la
910
			// si la photo selectionnée est la dernière on passe a la
911
			// première
911
			// première
912
			if (selected == st.getCount() - 1) {
912
			if (selected == st.getCount() - 1) {
913
 
913
 
914
				storeIndex = 0;
914
				storeIndex = 0;
915
				nRec = st.getAt(0);
915
				nRec = st.getAt(0);
916
			} else {
916
			} else {
917
				storeIndex = storeIndex + 1;
917
				storeIndex = storeIndex + 1;
918
				nRec = st.getAt(storeIndex);
918
				nRec = st.getAt(storeIndex);
919
			}
919
			}
920
		}
920
		}
921
 
921
 
922
		if (nRec != null) {
922
		if (nRec != null) {
923
						
923
						
924
			String imgUrl = nRec.getAsString("url_image");
924
			String imgUrl = nRec.getAsString("url_image");
925
			String imgNum = nRec.getAsString("num_image");
925
			String imgNum = nRec.getAsString("num_image");
926
			String[] imgXY = getIModele().obtenirTailleImage(
926
			String[] imgXY = getIModele().obtenirTailleImage(
927
					nRec.getAsString("num_image"));
927
					nRec.getAsString("num_image"));
928
			String imgTaxon = nRec.getAsString("obs_associees");
928
			String imgTaxon = nRec.getAsString("obs_associees");
929
			String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
929
			String[] infosImage = { imgUrl, imgXY[0], imgXY[1], imgNum, imgTaxon };
930
			getZoomImage().rafraichir(infosImage, false);
930
			getZoomImage().rafraichir(infosImage, false);
931
 
931
 
932
			if (getGalerieImage().isRendered()) {
932
			if (getGalerieImage().isRendered()) {
933
				getGalerieImage().getDView().select(storeIndex);
933
				getGalerieImage().getDView().select(storeIndex);
934
			}
934
			}
935
 
935
 
936
			if (getListeImage().isRendered()) {
936
			if (getListeImage().isRendered()) {
937
				getListeImage().getSelectionModel().selectRecords(nRec);
937
				getListeImage().getSelectionModel().selectRecords(nRec);
938
			}
938
			}
939
 
939
 
940
			obtenirDonnes(imgNum);
940
			obtenirDonnes(imgNum);
941
		}
941
		}
942
	}
942
	}
943
 
943
 
944
	/**
944
	/**
945
	 * synchronise la selection entre la galerie et la liste
945
	 * synchronise la selection entre la galerie et la liste
946
	 * 
946
	 * 
947
	 * @param string
947
	 * @param string
948
	 *            le nom de la vue qui doit être synchronisee
948
	 *            le nom de la vue qui doit être synchronisee
949
	 */
949
	 */
950
	public void synchroniserSelection(String string) {
950
	public void synchroniserSelection(String string) {
951
 
951
 
952
		if (string.equals("galerie") && getDernierIndexOnglet() != 2) {
952
		if (string.equals("galerie") && getDernierIndexOnglet() != 2) {
953
			Record[] sel = getGalerieImage().getDView().getSelectedRecords();
953
			Record[] sel = getGalerieImage().getDView().getSelectedRecords();
954
			getListeImage().selectionnerEnregistrements(sel);
954
			getListeImage().selectionnerEnregistrements(sel);
955
		}
955
		}
956
 
956
 
957
		if (string.equals("liste") && getDernierIndexOnglet() != 0) {
957
		if (string.equals("liste") && getDernierIndexOnglet() != 0) {
958
 
958
 
959
			Record[] sel = getListeImage().getSelectionModel().getSelections();
959
			Record[] sel = getListeImage().getSelectionModel().getSelections();
960
			int[] ids = new int[sel.length];
960
			int[] ids = new int[sel.length];
961
 
961
 
962
			for (int i = 0; i < sel.length; i++) {
962
			for (int i = 0; i < sel.length; i++) {
963
 
963
 
964
				ids[i] = getGalerieImage().getSt().indexOf(sel[i]);
964
				ids[i] = getGalerieImage().getSt().indexOf(sel[i]);
965
			}
965
			}
966
 
966
 
967
			getGalerieImage().selectionnerImages(ids);
967
			getGalerieImage().selectionnerImages(ids);
968
		}
968
		}
969
 
969
 
970
	}
970
	}
971
 
971
 
972
	/**
972
	/**
973
	 * fait une demande de suppression des images (en local et en distant) des
973
	 * fait une demande de suppression des images (en local et en distant) des
974
	 * images selectionnees
974
	 * images selectionnees
975
	 */
975
	 */
976
	public void supprimerImages() {
976
	public void supprimerImages() {
977
 
977
 
978
		String[] ids = null;
978
		String[] ids = null;
979
 
979
 
980
		if (dernierIndexOnglet == 0) {
980
		if (dernierIndexOnglet == 0) {
981
			ids = getGalerieImage().getIdSelectionnees();
981
			ids = getGalerieImage().getIdSelectionnees();
982
		} else {
982
		} else {
983
			ids = getListeImage().getIdSelectionnees();
983
			ids = getListeImage().getIdSelectionnees();
984
		}
984
		}
985
 
985
 
986
		if (ids.length > 0) {
986
		if (ids.length > 0) {
987
 
987
 
988
			if (com.google.gwt.user.client.Window
988
			if (com.google.gwt.user.client.Window
989
					.confirm("Supprimer les images selectionnees ?")) {
989
					.confirm("Supprimer les images selectionnees ?")) {
990
				masquerChargement();
990
				masquerChargement();
991
				getIModele().supprimerImages(ids);
991
				getIModele().supprimerImages(ids);
992
				aucuneSelection();
992
				aucuneSelection();
993
			}
993
			}
994
		} else {
994
		} else {
995
			Window.alert("Impossible de supprimer : aucune image selectionnee");
995
			Window.alert("Impossible de supprimer : aucune image selectionnee");
996
		}
996
		}
997
 
997
 
998
	}
998
	}
999
 
999
 
1000
	/**
1000
	/**
1001
	 * desactive les onglets de metadonnees et de zoom (dans le cas ou rien
1001
	 * desactive les onglets de metadonnees et de zoom (dans le cas ou rien
1002
	 * n'est selectionne)
1002
	 * n'est selectionne)
1003
	 */
1003
	 */
1004
	public void aucuneSelection() {
1004
	public void aucuneSelection() {
1005
 
1005
 
1006
		if (getListeImage().getSelectionModel().getCount() <= 0
1006
		if (getListeImage().getSelectionModel().getCount() <= 0
1007
				&& getGalerieImage().getDView().getSelectionCount() <= 0) {
1007
				&& getGalerieImage().getDView().getSelectionCount() <= 0) {
1008
			getZoomImage().disable();
1008
			getZoomImage().disable();
1009
			getMetadonneesIptcExif().desactiverPanneau();
1009
			getMetadonneesIptcExif().desactiverPanneau();
1010
			getZoomImage().desactiverPanneau();
1010
			getZoomImage().desactiverPanneau();
1011
			setSelection(false);
1011
			setSelection(false);
1012
		}
1012
		}
1013
	}
1013
	}
1014
 
1014
 
1015
	/**
1015
	/**
1016
	 * reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il
1016
	 * reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il
1017
	 * n'y en avait pas)
1017
	 * n'y en avait pas)
1018
	 */
1018
	 */
1019
	public void selection() {
1019
	public void selection() {
1020
 
1020
 
1021
		if (!isSelection()) {
1021
		if (!isSelection()) {
1022
			getMetadonneesIptcExif().activerPanneau();
1022
			getMetadonneesIptcExif().activerPanneau();
1023
			getZoomImage().activerPanneau();
1023
			getZoomImage().activerPanneau();
1024
			getZoomImage().enable();
1024
			getZoomImage().enable();
1025
			setSelection(true);
1025
			setSelection(true);
1026
		}
1026
		}
1027
	}
1027
	}
1028
 
1028
 
1029
	/**
1029
	/**
1030
	 * Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau
1030
	 * Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau
1031
	 * d'un noeud donné
1031
	 * d'un noeud donné
1032
	 * 
1032
	 * 
1033
	 * @param n
1033
	 * @param n
1034
	 *            le noeud ou le menu doit apparaitre
1034
	 *            le noeud ou le menu doit apparaitre
1035
	 * @param ev
1035
	 * @param ev
1036
	 *            l'objet contenant les données sur l'évenement
1036
	 *            l'objet contenant les données sur l'évenement
1037
	 * @param te
1037
	 * @param te
1038
	 *            l'éditeur associé à l'arbre qui permet de modifier les
1038
	 *            l'éditeur associé à l'arbre qui permet de modifier les
1039
	 *            libellés des noeuds
1039
	 *            libellés des noeuds
1040
	 */
1040
	 */
1041
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev,
1041
	public void montrerContextMenuArbre(final TreeNode n, EventObject ev,
1042
			final TreeEditor te) {
1042
			final TreeEditor te) {
1043
		Menu mn = new Menu();
1043
		Menu mn = new Menu();
1044
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
1044
		final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
1045
				"Ajouter mot cle");
1045
				"Ajouter mot cle");
1046
		final com.gwtext.client.widgets.menu.Item renommerN = new Item(
1046
		final com.gwtext.client.widgets.menu.Item renommerN = new Item(
1047
				"Renommer mot cle");
1047
				"Renommer mot cle");
1048
		final com.gwtext.client.widgets.menu.Item suppN = new Item(
1048
		final com.gwtext.client.widgets.menu.Item suppN = new Item(
1049
				"Supprimer mot cle");
1049
				"Supprimer mot cle");
1050
 
1050
 
1051
		mn.addItem(ajoutN);
1051
		mn.addItem(ajoutN);
1052
		mn.addItem(renommerN);
1052
		mn.addItem(renommerN);
1053
		mn.addItem(suppN);
1053
		mn.addItem(suppN);
1054
 
1054
 
1055
		mn.addListener(new MenuListenerAdapter() {
1055
		mn.addListener(new MenuListenerAdapter() {
1056
 
1056
 
1057
			@Override
1057
			@Override
1058
			public void onItemClick(BaseItem item, EventObject e) {
1058
			public void onItemClick(BaseItem item, EventObject e) {
1059
				if (item.equals(suppN)) {
1059
				if (item.equals(suppN)) {
1060
					fnMc.supprimerNoeud(n);
1060
					fnMc.supprimerNoeud(n);
1061
				}
1061
				}
1062
				if (item.equals(renommerN)) {
1062
				if (item.equals(renommerN)) {
1063
					fnMc.renommerNoeud(n);
1063
					fnMc.renommerNoeud(n);
1064
				}
1064
				}
1065
				if (item.equals(ajoutN)) {
1065
				if (item.equals(ajoutN)) {
1066
					fnMc.ajouterNoeud(
1066
					fnMc.ajouterNoeud(
1067
							n);
1067
							n);
1068
				}
1068
				}
1069
			}
1069
			}
1070
		});
1070
		});
1071
 
1071
 
1072
		mn.showAt(ev.getXY());
1072
		mn.showAt(ev.getXY());
1073
 
1073
 
1074
	}
1074
	}
1075
 
1075
 
1076
	/**
1076
	/**
1077
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
1077
	 * Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du
1078
	 * mot clé
1078
	 * mot clé
1079
	 * 
1079
	 * 
1080
	 * @param text
1080
	 * @param text
1081
	 *            le texte du mot clé
1081
	 *            le texte du mot clé
1082
	 * @param id
1082
	 * @param id
1083
	 *            l'identifiant du mot clé
1083
	 *            l'identifiant du mot clé
1084
	 */
1084
	 */
1085
	public void mettreAjourMotsClesId(String text, String id) {
1085
	public void mettreAjourMotsClesId(String text, String id) {
1086
 
1086
 
1087
		getIModele().mettreAjourMotsClesId(text, id);
1087
		getIModele().mettreAjourMotsClesId(text, id);
1088
 
1088
 
1089
	}
1089
	}
1090
	
1090
	
1091
	/**
1091
	/**
1092
	 * Récupère les identifiants des images selectionnés et appelle le modèle
1092
	 * Récupère les identifiants des images selectionnés et appelle le modèle
1093
	 * pour qu'il mette à jour les associations mots clés/images
1093
	 * pour qu'il mette à jour les associations mots clés/images
1094
	 * 
1094
	 * 
1095
	 * @param motsClesEnCours
1095
	 * @param motsClesEnCours
1096
	 *            les mots clés à associer aux images selectionnés séparés par
1096
	 *            les mots clés à associer aux images selectionnés séparés par
1097
	 *            une ','
1097
	 *            une ','
1098
	 * @param arbreMC
1098
	 * @param arbreMC
1099
	 *            l'arbre des mots clés à mettre à jour
1099
	 *            l'arbre des mots clés à mettre à jour
1100
	 */
1100
	 */
1101
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
1101
	public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
1102
 
1102
 
1103
		String[] ids = getGalerieImage().getIdSelectionnees();
1103
		String[] ids = getGalerieImage().getIdSelectionnees();
1104
		if(ids.length > 0) {
1104
		if(ids.length > 0) {
1105
			getIModele().mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
1105
			getIModele().mettreAjourMotsCles(ids, motsClesEnCours, arbreMC);
1106
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), ids[ids.length - 1]);
1106
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), ids[ids.length - 1]);
1107
		}
1107
		}
1108
 
1108
 
1109
	}
1109
	}
1110
 
1110
 
1111
	/**
1111
	/**
1112
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
1112
	 * Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots
1113
	 * clés
1113
	 * clés
1114
	 * 
1114
	 * 
1115
	 * @param n
1115
	 * @param n
1116
	 *            le noeud à ajouter à l'arbre
1116
	 *            le noeud à ajouter à l'arbre
1117
	 * @param arbreMC
1117
	 * @param arbreMC
1118
	 *            le nouvel arbre de mots clés à mettre à jour
1118
	 *            le nouvel arbre de mots clés à mettre à jour
1119
	 */
1119
	 */
1120
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
1120
	public void ajouterMotCleDansArbre(TreeNode n, Tree arbreMC) {
1121
		getIModele().ajouterMotCleDansArbre(n, arbreMC);
1121
		getIModele().ajouterMotCleDansArbre(n, arbreMC);
1122
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);	
1122
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);	
1123
		mettreAJourListeMotsClesAffiches();
1123
		mettreAJourListeMotsClesAffiches();
1124
	}
1124
	}
1125
 
1125
 
1126
	/**
1126
	/**
1127
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
1127
	 * Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre
1128
	 * dans l'arbre des mots clés
1128
	 * dans l'arbre des mots clés
1129
	 * 
1129
	 * 
1130
	 * @param n
1130
	 * @param n
1131
	 *            le noeud à supprimer
1131
	 *            le noeud à supprimer
1132
	 * @param arbreMC
1132
	 * @param arbreMC
1133
	 *            le nouvel arbre de mots clés à mettre à jour
1133
	 *            le nouvel arbre de mots clés à mettre à jour
1134
	 */
1134
	 */
1135
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1135
	public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1136
		getIModele().supprimerMotCleDansArbre(n, arbreMC);
1136
		getIModele().supprimerMotCleDansArbre(n, arbreMC);
1137
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1137
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1138
		mettreAJourListeMotsClesAffiches();
1138
		mettreAJourListeMotsClesAffiches();
1139
	}
1139
	}
1140
 
1140
 
1141
	/**
1141
	/**
1142
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1142
	 * Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots
1143
	 * clés
1143
	 * clés
1144
	 * 
1144
	 * 
1145
	 * @param n
1145
	 * @param n
1146
	 *            le noeud à modifier
1146
	 *            le noeud à modifier
1147
	 * @param arbreMC
1147
	 * @param arbreMC
1148
	 *            le nouvel arbre de mots clés à mettre à jour
1148
	 *            le nouvel arbre de mots clés à mettre à jour
1149
	 */
1149
	 */
1150
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1150
	public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) {
1151
		getIModele().modifierMotCleDansArbre(n, arbreMC);
1151
		getIModele().modifierMotCleDansArbre(n, arbreMC);
1152
		getIModele().mettreAjourMotsClesId(n.getText(), n.getId());
1152
		getIModele().mettreAjourMotsClesId(n.getText(), n.getId());
1153
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1153
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1154
		mettreAJourListeMotsClesAffiches();
1154
		mettreAJourListeMotsClesAffiches();
1155
	}
1155
	}
1156
 
1156
 
1157
	/**
1157
	/**
1158
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1158
	 * Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans
1159
	 * l'arbre des mots clés
1159
	 * l'arbre des mots clés
1160
	 * 
1160
	 * 
1161
	 * @param n
1161
	 * @param n
1162
	 *            le noeud à déplacer
1162
	 *            le noeud à déplacer
1163
	 * @param arbreMC
1163
	 * @param arbreMC
1164
	 *            le nouvel arbre de mots clés à mettre à jour
1164
	 *            le nouvel arbre de mots clés à mettre à jour
1165
	 */
1165
	 */
1166
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1166
	public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) {
1167
		getIModele().deplacerMotCleDansArbre(n, arbreMC);
1167
		getIModele().deplacerMotCleDansArbre(n, arbreMC);
1168
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1168
		filtres.getMotsClesFiltre().rafraichir(arbreMC, false);
1169
		mettreAJourListeMotsClesAffiches();
1169
		mettreAJourListeMotsClesAffiches();
1170
	}
1170
	}
1171
	
1171
	
1172
	public void mettreAJourListeMotsClesAffiches() {
1172
	public void mettreAJourListeMotsClesAffiches() {
1173
		String[] ids = getGalerieImage().getIdSelectionnees();
1173
		String[] ids = getGalerieImage().getIdSelectionnees();
1174
		if(ids.length > 0) {
1174
		if(ids.length > 0) {
1175
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), ids[ids.length - 1]);
1175
			obtenirMotsClesTexte(metadonneesIptcExif.getPanneauMotsCles(), ids[ids.length - 1]);
1176
		}
1176
		}
1177
	}
1177
	}
1178
 
1178
 
1179
	/**
1179
	/**
1180
	 * initialise les mots clés cochés par rapport aux images sélectionnées
1180
	 * initialise les mots clés cochés par rapport aux images sélectionnées
1181
	 */
1181
	 */
1182
	public void initialiserMotsCleCoches() {
1182
	public void initialiserMotsCleCoches() {
1183
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(),getGalerieImage().getIdSelectionnees()[0]);
1183
		obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(),getGalerieImage().getIdSelectionnees()[0]);
1184
	}
1184
	}
1185
 
1185
 
1186
	/**
1186
	/**
1187
	 * Appelle le modèle pour lui demander les données d'une page à afficher
1187
	 * Appelle le modèle pour lui demander les données d'une page à afficher
1188
	 * 
1188
	 * 
1189
	 * @param pageCourante
1189
	 * @param pageCourante
1190
	 *            le numéro de page à affciher
1190
	 *            le numéro de page à affciher
1191
	 */
1191
	 */
1192
	@Override
1192
	@Override
1193
	public void changerNumeroPage(int pageCourante) {
1193
	public void changerNumeroPage(int pageCourante) {
1194
 
1194
 
1195
		// on met le mesage d'attente
1195
		// on met le mesage d'attente
1196
		masquerChargement();
1196
		masquerChargement();
1197
 
1197
 
1198
		// on appelle le modèle
1198
		// on appelle le modèle
1199
		getIModele().changerNumeroPage(pageCourante);
1199
		getIModele().changerNumeroPage(pageCourante);
1200
 
1200
 
1201
		// et met à jour les numéros de page dans les barre d'outils
1201
		// et met à jour les numéros de page dans les barre d'outils
1202
		getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
1202
		getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
1203
		getListeImage().getToolBarVue().changerPageCourante(pageCourante);
1203
		getListeImage().getToolBarVue().changerPageCourante(pageCourante);
1204
	}
1204
	}
1205
 
1205
 
1206
	/**
1206
	/**
1207
	 * Appelle le modèle pour qu'il change la taille de page utilisée
1207
	 * Appelle le modèle pour qu'il change la taille de page utilisée
1208
	 * 
1208
	 * 
1209
	 * @param nouvelleTaillePage
1209
	 * @param nouvelleTaillePage
1210
	 *            la nouvelle taille de page
1210
	 *            la nouvelle taille de page
1211
	 */
1211
	 */
1212
	@Override
1212
	@Override
1213
	public void changerTaillePage(int nouvelleTaillePage) {
1213
	public void changerTaillePage(int nouvelleTaillePage) {
1214
		// on met le message d'attente
1214
		// on met le message d'attente
1215
		masquerChargement();
1215
		masquerChargement();
1216
 
1216
 
1217
		// on appelle le modèle
1217
		// on appelle le modèle
1218
		getIModele().changerTaillePage(nouvelleTaillePage);
1218
		getIModele().changerTaillePage(nouvelleTaillePage);
1219
 
1219
 
1220
		// et on met à jour la taille de page dans les barres d'outils
1220
		// et on met à jour la taille de page dans les barres d'outils
1221
		getGalerieImage().getToolBarVue().selectionnerTaillePage(
1221
		getGalerieImage().getToolBarVue().selectionnerTaillePage(
1222
				nouvelleTaillePage);
1222
				nouvelleTaillePage);
1223
		getListeImage().getToolBarVue().selectionnerTaillePage(
1223
		getListeImage().getToolBarVue().selectionnerTaillePage(
1224
				nouvelleTaillePage);
1224
				nouvelleTaillePage);
1225
	}
1225
	}
1226
 
1226
 
1227
	/**
1227
	/**
1228
	 * Met à jour les barre d'outils avec des nouvelles valeurs
1228
	 * Met à jour les barre d'outils avec des nouvelles valeurs
1229
	 * 
1229
	 * 
1230
	 * @param pageMax
1230
	 * @param pageMax
1231
	 *            le nombre de pages
1231
	 *            le nombre de pages
1232
	 * @param pageEncours
1232
	 * @param pageEncours
1233
	 *            la page en cours
1233
	 *            la page en cours
1234
	 * @param taillePage
1234
	 * @param taillePage
1235
	 *            la taille de page
1235
	 *            la taille de page
1236
	 * @param nbElement
1236
	 * @param nbElement
1237
	 *            le nombre d'élements par page
1237
	 *            le nombre d'élements par page
1238
	 */
1238
	 */
1239
	public void changerPageMaxEtCourante(int pageMax, int pageEncours,
1239
	public void changerPageMaxEtCourante(int pageMax, int pageEncours,
1240
			int taillePage, int nbElement) {
1240
			int taillePage, int nbElement) {
1241
 
1241
 
1242
		int[] pages = { pageMax, pageEncours, taillePage, nbElement };
1242
		int[] pages = { pageMax, pageEncours, taillePage, nbElement };
1243
		getGalerieImage().getToolBarVue().rafraichir(pages, false);
1243
		getGalerieImage().getToolBarVue().rafraichir(pages, false);
1244
		getListeImage().getToolBarVue().rafraichir(pages, false);
1244
		getListeImage().getToolBarVue().rafraichir(pages, false);
1245
 
1245
 
1246
	}
1246
	}
1247
 
1247
 
1248
	/**
1248
	/**
1249
	 * Recherche l'élement actuellement affiché et affiche son message de
1249
	 * Recherche l'élement actuellement affiché et affiche son message de
1250
	 * chargement
1250
	 * chargement
1251
	 */
1251
	 */
1252
	public void masquerChargement() {
1252
	public void masquerChargement() {
1253
		
1253
		
1254
		if(GWT.isScript()) {
1254
		if(GWT.isScript()) {
1255
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1255
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1256
	
1256
	
1257
			if (masked != null && !masked.isMasked()) {
1257
			if (masked != null && !masked.isMasked()) {
1258
				masked.mask("Chargement", true);
1258
				masked.mask("Chargement", true);
1259
			}
1259
			}
1260
		}
1260
		}
1261
	}
1261
	}
1262
 
1262
 
1263
	/**
1263
	/**
1264
	 * Recherche l'élement actuellement affiché et retire son message de
1264
	 * Recherche l'élement actuellement affiché et retire son message de
1265
	 * chargement si l'était affiché
1265
	 * chargement si l'était affiché
1266
	 */
1266
	 */
1267
	public void demasquerChargement() {
1267
	public void demasquerChargement() {
1268
		
1268
		
1269
		if(GWT.isScript()) {
1269
		if(GWT.isScript()) {
1270
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1270
			ExtElement masked = Ext.get(getIdVueSelectionnee());
1271
			if (masked != null && masked.isMasked()) {
1271
			if (masked != null && masked.isMasked()) {
1272
				masked.unmask();
1272
				masked.unmask();
1273
			}
1273
			}
1274
		}
1274
		}
1275
	}
1275
	}
1276
 
1276
 
1277
	public void afficherMenuId() {
1277
	public void afficherMenuId() {
1278
		IdVue i = new IdVue(this);
1278
		IdVue i = new IdVue(this);
1279
		i.show();
1279
		i.show();
1280
	}
1280
	}
1281
 
1281
 
1282
	/**
1282
	/**
1283
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des
1283
	 * C'est dans cette fonction que doivent être renvoyé les valeurs des
1284
	 * filtres sous forme de tableau [nom, valeur]
1284
	 * filtres sous forme de tableau [nom, valeur]
1285
	 * 
1285
	 * 
1286
	 * @return Les noms et valeurs des filtres
1286
	 * @return Les noms et valeurs des filtres
1287
	 */
1287
	 */
1288
	public String[][] renvoyerFiltres() {
1288
	public String[][] renvoyerFiltres() {
1289
		String[][] valeursFiltres = filtres.renvoyerValeursAFiltrer();
1289
		String[][] valeursFiltres = filtres.renvoyerValeursAFiltrer();
1290
		
1290
		
1291
		barreOutilsVue.setFiltresEnCours(valeursFiltres);
1291
		barreOutilsVue.setFiltresEnCours(valeursFiltres);
1292
 
1292
 
1293
		return valeursFiltres;
1293
		return valeursFiltres;
1294
	}
1294
	}
1295
 
1295
 
1296
	/**
1296
	/**
1297
	 * Indique si les filtres ont changés depuis la dernière requête (il faut
1297
	 * Indique si les filtres ont changés depuis la dernière requête (il faut
1298
	 * faire un OR sur le résultat de toutes les fonctions renvoyerEtatFiltre
1298
	 * faire un OR sur le résultat de toutes les fonctions renvoyerEtatFiltre
1299
	 * s'il y a plus d'un filtre)
1299
	 * s'il y a plus d'un filtre)
1300
	 * 
1300
	 * 
1301
	 * @return true si au moins un des filtres a changé, false sinon
1301
	 * @return true si au moins un des filtres a changé, false sinon
1302
	 */
1302
	 */
1303
	public boolean getEtatFiltres() {
1303
	public boolean getEtatFiltres() {
1304
		return (filtres.renvoyerEtatFiltre());
1304
		return (filtres.renvoyerEtatFiltre());
1305
	}
1305
	}
1306
 
1306
 
1307
	/**
1307
	/**
1308
	 * Accesseur pour le panneau de droite contenant les filtres
1308
	 * Accesseur pour le panneau de droite contenant les filtres
1309
	 * 
1309
	 * 
1310
	 * @return le panneau contenant les filtres
1310
	 * @return le panneau contenant les filtres
1311
	 */
1311
	 */
1312
	public PanneauFiltresImagesVues getPanneauFiltres() {
1312
	public PanneauFiltresImagesVues getPanneauFiltres() {
1313
		return filtres;
1313
		return filtres;
1314
	}
1314
	}
1315
	
1315
	
1316
	/**
1316
	/**
1317
	 * Réinitialise tous les filtres en cours
1317
	 * Réinitialise tous les filtres en cours
1318
	 * 
1318
	 * 
1319
	*/
1319
	*/
1320
	public void viderFiltres() {
1320
	public void viderFiltres() {
1321
		filtres.viderFiltres();
1321
		filtres.viderFiltres();
1322
		obtenirPhotoGalerie();
1322
		obtenirPhotoGalerie();
1323
	}
1323
	}
1324
	
1324
	
1325
	/**
1325
	/**
1326
	 * Réinitialise un filtre en cours suivant le nom donné
1326
	 * Réinitialise un filtre en cours suivant le nom donné
1327
	 * 
1327
	 * 
1328
	 * @param String le nom du filtre
1328
	 * @param String le nom du filtre
1329
	 */
1329
	 */
1330
	public void viderFiltre(String nom) {
1330
	public void viderFiltre(String nom) {
1331
		filtres.viderFiltre(nom);
1331
		filtres.viderFiltre(nom);
1332
		obtenirPhotoGalerie();
1332
		obtenirPhotoGalerie();
1333
	}
1333
	}
1334
 
1334
 
1335
	/**
1335
	/**
1336
	 * ajoute les images séléctionnées dans la vue courante au tampon
1336
	 * ajoute les images séléctionnées dans la vue courante au tampon
1337
	 */
1337
	 */
1338
	public void ajouterImagesSelection() {
1338
	public void ajouterImagesSelection() {
1339
		String[] ids = getVueSelectionnee().getIdSelectionnees();
1339
		String[] ids = getVueSelectionnee().getIdSelectionnees();
1340
		String id = "";
1340
		String id = "";
1341
		for (int i = 0; i < ids.length; i++) {
1341
		for (int i = 0; i < ids.length; i++) {
1342
			id += " - " + ids[i];
1342
			id += " - " + ids[i];
1343
		}
1343
		}
1344
		getIModele().ajouterImagesSelection(ids);
1344
		getIModele().ajouterImagesSelection(ids);
1345
 
1345
 
1346
		Window.alert(ids.length + " image(s) ajoutées au tampon ");
1346
		Window.alert(ids.length + " image(s) ajoutées au tampon ");
1347
 
1347
 
1348
	}
1348
	}
1349
	
1349
	
1350
	/**
1350
	/**
1351
	 * Affiche les ids des images contenues dans le tampon
1351
	 * Affiche les ids des images contenues dans le tampon
1352
	 */
1352
	 */
1353
	public void afficherIdSelectionImages() {
1353
	public void afficherIdSelectionImages() {
1354
 
1354
 
1355
		Window.alert("Contenu du tampon : " + getIModele().renvoyerSelection());
1355
		Window.alert("Contenu du tampon : " + getIModele().renvoyerSelection());
1356
 
1356
 
1357
	}
1357
	}
1358
	
1358
	
1359
	/**
1359
	/**
1360
	 * Renvoie les ids des images contenues dans le tampon en une seule string
1360
	 * Renvoie les ids des images contenues dans le tampon en une seule string
1361
	 * @return une string de la forme id1, id2, id3
1361
	 * @return une string de la forme id1, id2, id3
1362
	 */
1362
	 */
1363
	public String renvoyerSelection() {
1363
	public String renvoyerSelection() {
1364
		return getIModele().renvoyerSelection();
1364
		return getIModele().renvoyerSelection();
1365
	}
1365
	}
1366
	
1366
	
1367
	/**
1367
	/**
1368
	 * Vide le tampon d'images
1368
	 * Vide le tampon d'images
1369
	 */
1369
	 */
1370
	public void viderSelection() {
1370
	public void viderSelection() {
1371
 
1371
 
1372
		getIModele().viderSelection();
1372
		getIModele().viderSelection();
1373
		Window.alert("Le tampon a été vidé ");
1373
		Window.alert("Le tampon a été vidé ");
1374
 
1374
 
1375
	}
1375
	}
1376
	
1376
	
1377
	public int getCompteSelection() {
1377
	public int getCompteSelection() {
1378
		return getIModele().getCompteSelection();
1378
		return getIModele().getCompteSelection();
1379
	}
1379
	}
1380
 
1380
 
1381
	/**
1381
	/**
1382
	 * Fonction appelée lors du drag 'n drop d'une image sur une observation
1382
	 * Fonction appelée lors du drag 'n drop d'une image sur une observation
1383
	 * @param source la source du drag
1383
	 * @param source la source du drag
1384
	 * @param e l'objet sur lequel on a fait le drop
1384
	 * @param e l'objet sur lequel on a fait le drop
1385
	 * @param data les données
1385
	 * @param data les données
1386
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1386
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1387
	 */
1387
	 */
1388
	public boolean lierImagesDD(DragSource source, EventObject e, DragData data) {
1388
	public boolean lierImagesDD(DragSource source, EventObject e, DragData data) {
1389
		
1389
		
1390
		// on peut convertir directement les données car on a testé avant le type de données
1390
		// on peut convertir directement les données car on a testé avant le type de données
1391
		GridDragData gdd = (GridDragData)data ;
1391
		GridDragData gdd = (GridDragData)data ;
1392
		// les ids des images sont initialisées 
1392
		// les ids des images sont initialisées 
1393
  		String idsImg = "" ;
1393
  		String idsImg = "" ;
1394
  		
1394
  		
1395
  		// on obtient la liste des selections dans la source
1395
  		// on obtient la liste des selections dans la source
1396
  		Record[] aLier =  gdd.getSelections() ;
1396
  		Record[] aLier =  gdd.getSelections() ;
1397
  		for (int i = 0; i < aLier.length; i++) 
1397
  		for (int i = 0; i < aLier.length; i++) 
1398
  		{
1398
  		{
1399
			// on les concatènes en une seule chaine	
1399
			// on les concatènes en une seule chaine	
1400
  			idsImg += aLier[i].getAsString("id_image")+"," ;
1400
  			idsImg += aLier[i].getAsString("id_image")+"," ;
1401
		}
1401
		}
1402
  		
1402
  		
1403
  		MiniListeObservationVue mv = getMetadonneesIptcExif().getMiniListeObservation() ;
1403
  		MiniListeObservationVue mv = getMetadonneesIptcExif().getMiniListeObservation() ;
1404
  		// on cherche quel est la ligne sur laquelle on a fait le drop dans la la liste des observations
1404
  		// on cherche quel est la ligne sur laquelle on a fait le drop dans la la liste des observations
1405
  		int index = mv.getView().findRowIndex(e) ;
1405
  		int index = mv.getView().findRowIndex(e) ;
1406
  		Record rddrop = mv.getStore().getRecordAt(index) ;
1406
  		Record rddrop = mv.getStore().getRecordAt(index) ;
1407
  		
1407
  		
1408
  		// SI l'enregistrement existe bel et bien
1408
  		// SI l'enregistrement existe bel et bien
1409
  		if(rddrop != null)
1409
  		if(rddrop != null)
1410
  		{
1410
  		{
1411
	  		String idObss = "";
1411
	  		String idObss = "";
1412
			Record[] selection = mv.getSelectionModel().getSelections();
1412
			Record[] selection = mv.getSelectionModel().getSelections();
1413
			boolean lierSelection = false;
1413
			boolean lierSelection = false;
1414
			// on itère sur toutes les observations selectionnées
1414
			// on itère sur toutes les observations selectionnées
1415
			for(int i=0; i<selection.length && lierSelection == false; i++) {
1415
			for(int i=0; i<selection.length && lierSelection == false; i++) {
1416
				// si l'element sur lequel on a fait le drop fait partie
1416
				// si l'element sur lequel on a fait le drop fait partie
1417
				// de la selection alors on lie tout à la selection
1417
				// de la selection alors on lie tout à la selection
1418
				if(selection[i].getId() == rddrop.getId()) {
1418
				if(selection[i].getId() == rddrop.getId()) {
1419
					lierSelection = true;
1419
					lierSelection = true;
1420
				}
1420
				}
1421
				// si l'élement ne fait pas partie de la selection 
1421
				// si l'élement ne fait pas partie de la selection 
1422
				//alors on ne lit qu'à celui sur lequel on a fait le drop
1422
				//alors on ne lit qu'à celui sur lequel on a fait le drop
1423
				idObss += selection[i].getAsString("id_obs")+"," ;
1423
				idObss += selection[i].getAsString("id_obs")+"," ;
1424
			}  			
1424
			}  			
1425
			String message = "";
1425
			String message = "";
1426
	  		
1426
	  		
1427
	  		if(!lierSelection) {
1427
	  		if(!lierSelection) {
1428
	  			idObss = rddrop.getAsString("id_obs")+","; 
1428
	  			idObss = rddrop.getAsString("id_obs")+","; 
1429
				message = "Lier la selection d'images à l'observation pointée ?";
1429
				message = "Lier la selection d'images à l'observation pointée ?";
1430
			} else {
1430
			} else {
1431
				message = "Lier la selection d'images aux observations selectionnées ?";
1431
				message = "Lier la selection d'images aux observations selectionnées ?";
1432
			}
1432
			}
1433
			if(Window.confirm(message)) {
1433
			if(Window.confirm(message)) {
1434
				lierImagesObservation(idObss, idsImg) ;
1434
				lierImagesObservation(idObss, idsImg) ;
1435
			}
1435
			}
1436
  		}
1436
  		}
1437
  		return true ;	  
1437
  		return true ;	  
1438
	}
1438
	}
1439
	
1439
	
1440
	/**
1440
	/**
1441
	 * Fonction appelée lors du drag 'n drop d'une observation sur une image
1441
	 * Fonction appelée lors du drag 'n drop d'une observation sur une image
1442
	 * @param source la source du drag
1442
	 * @param source la source du drag
1443
	 * @param e l'objet sur lequel on a fait le drop
1443
	 * @param e l'objet sur lequel on a fait le drop
1444
	 * @param data les données
1444
	 * @param data les données
1445
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1445
	 * @return une booleen indiquant le succès ou l'échec de l'opération
1446
	 */
1446
	 */
1447
	public boolean lierObsDD(DragSource source, EventObject e, DragData data, String idDest) {
1447
	public boolean lierObsDD(DragSource source, EventObject e, DragData data, String idDest) {
1448
		
1448
		
1449
		// on peut convertir directement les données car on a testé avant le type de données
1449
		// on peut convertir directement les données car on a testé avant le type de données
1450
		GridDragData gdd = (GridDragData)data ;
1450
		GridDragData gdd = (GridDragData)data ;
1451
		// les ids des images sont initialisées 
1451
		// les ids des images sont initialisées 
1452
  		String idsObs = "" ;
1452
  		String idsObs = "" ;
1453
  		
1453
  		
1454
  		// on obtient la liste des selections dans la source
1454
  		// on obtient la liste des selections dans la source
1455
  		Record[] aLier =  gdd.getSelections() ;
1455
  		Record[] aLier =  gdd.getSelections() ;
1456
  		for (int i = 0; i < aLier.length; i++) 
1456
  		for (int i = 0; i < aLier.length; i++) 
1457
  		{
1457
  		{
1458
  			// on les concatènes en une seule chaine		
1458
  			// on les concatènes en une seule chaine		
1459
  			idsObs += aLier[i].getAsString("id_obs")+"," ;
1459
  			idsObs += aLier[i].getAsString("id_obs")+"," ;
1460
		}
1460
		}
1461
  		
1461
  		
1462
  		Record rddrop = null ;
1462
  		Record rddrop = null ;
1463
  		int index = -1;
1463
  		int index = -1;
1464
  		
1464
  		
1465
  		// si la destination est la galerie d'images
1465
  		// si la destination est la galerie d'images
1466
  		if(idDest.equals(getGalerieImage().getId()))
1466
  		if(idDest.equals(getGalerieImage().getId()))
1467
  		{
1467
  		{
1468
  			GalerieImageVue gv = getGalerieImage() ;
1468
  			GalerieImageVue gv = getGalerieImage() ;
1469
  			
1469
  			
1470
  			// alors l'élément sur lequel on a fait le drop n'est pas le bon
1470
  			// alors l'élément sur lequel on a fait le drop n'est pas le bon
1471
  			index = gv.getDView().indexOf(e.getTarget()) ;
1471
  			index = gv.getDView().indexOf(e.getTarget()) ;
1472
  			Element el = e.getTarget() ;
1472
  			Element el = e.getTarget() ;
1473
  			
1473
  			
1474
  			// alors on cherche son parent tant que celui-ci n'est pas présent dans la dataview
1474
  			// alors on cherche son parent tant que celui-ci n'est pas présent dans la dataview
1475
  			while(index == -1 && el != null)
1475
  			while(index == -1 && el != null)
1476
  			{
1476
  			{
1477
  				index = gv.getDView().indexOf(el) ;
1477
  				index = gv.getDView().indexOf(el) ;
1478
  				el = (Element) el.getParentElement() ;
1478
  				el = (Element) el.getParentElement() ;
1479
  			}
1479
  			}
1480
  			
1480
  			
1481
  			// si on l'a trouvé, on obtient l'enregistrement qui correspond
1481
  			// si on l'a trouvé, on obtient l'enregistrement qui correspond
1482
  			if(index != -1)
1482
  			if(index != -1)
1483
  			{
1483
  			{
1484
  				rddrop = gv.getSt().getAt(index) ;
1484
  				rddrop = gv.getSt().getAt(index) ;
1485
  			}
1485
  			}
1486
				
1486
				
1487
  		}
1487
  		}
1488
  		
1488
  		
1489
  		// si la destination est la liste d'images
1489
  		// si la destination est la liste d'images
1490
  		if(idDest.equals(getListeImage().getId()))
1490
  		if(idDest.equals(getListeImage().getId()))
1491
  		{
1491
  		{
1492
  			// on obtient directement l'enregistrement correspondant à l'élément sur lequel on a fait le drop
1492
  			// on obtient directement l'enregistrement correspondant à l'élément sur lequel on a fait le drop
1493
  			ListeImageVue lv = getListeImage() ;
1493
  			ListeImageVue lv = getListeImage() ;
1494
  			index = lv.getView().findRowIndex(e) ;
1494
  			index = lv.getView().findRowIndex(e) ;
1495
  			rddrop = lv.getSt().getAt(index) ;
1495
  			rddrop = lv.getSt().getAt(index) ;
1496
  		}
1496
  		}
1497
  		
1497
  		
1498
  		// si on a bien obtenu un enregistrement 
1498
  		// si on a bien obtenu un enregistrement 
1499
  		if(rddrop != null)
1499
  		if(rddrop != null)
1500
  		{
1500
  		{
1501
  			String idImgs = "";
1501
  			String idImgs = "";
1502
  			Record[] selection = galerieImage.getDView().getSelectedRecords();
1502
  			Record[] selection = galerieImage.getDView().getSelectedRecords();
1503
  			
1503
  			
1504
  			boolean lierSelection = false;
1504
  			boolean lierSelection = false;
1505
	  		String message = "";
1505
	  		String message = "";
1506
	  		
1506
	  		
1507
			// si l'element sur lequel on a fait le drop fait partie
1507
			// si l'element sur lequel on a fait le drop fait partie
1508
			// de la selection alors on lie tout à la selection
1508
			// de la selection alors on lie tout à la selection
1509
  			if(galerieImage.getDView().isSelected(index)) {
1509
  			if(galerieImage.getDView().isSelected(index)) {
1510
				lierSelection = true;
1510
				lierSelection = true;
1511
				// on itère sur toutes les images selectionnées
1511
				// on itère sur toutes les images selectionnées
1512
  	  			for(int i=0; i<selection.length; i++) {
1512
  	  			for(int i=0; i<selection.length; i++) {
1513
  					// et on récupère leur ids
1513
  					// et on récupère leur ids
1514
  					idImgs += selection[i].getAsString("id_image")+"," ;
1514
  					idImgs += selection[i].getAsString("id_image")+"," ;
1515
  	  			}
1515
  	  			}
1516
  			}
1516
  			}
1517
  			
1517
  			
1518
  			if(!lierSelection) {
1518
  			if(!lierSelection) {
1519
  				idImgs = rddrop.getAsString("id_image")+","; 
1519
  				idImgs = rddrop.getAsString("id_image")+","; 
1520
  				message = "Lier la selection d'observations à l'image pointée ?";
1520
  				message = "Lier la selection d'observations à l'image pointée ?";
1521
  			} else {
1521
  			} else {
1522
  				message = "Lier la selection d'observations aux images selectionnées ?";
1522
  				message = "Lier la selection d'observations aux images selectionnées ?";
1523
  			}
1523
  			}
1524
  			
1524
  			
1525
  			if(Window.confirm(message)) {
1525
  			if(Window.confirm(message)) {
1526
  				lierImagesObservation(idsObs, idImgs) ;
1526
  				lierImagesObservation(idsObs, idImgs) ;
1527
  			}
1527
  			}
1528
  			return true ;
1528
  			return true ;
1529
  		}
1529
  		}
1530
	
1530
	
1531
  		
1531
  		
1532
  		// si la destination est l'image zoomée
1532
  		// si la destination est l'image zoomée
1533
  		if(idDest.equals(getZoomImage().getId()))
1533
  		if(idDest.equals(getZoomImage().getId()))
1534
  		{
1534
  		{
1535
  			// on obtient directement l'id correspondant
1535
  			// on obtient directement l'id correspondant
1536
  			ZoomImageVue zv = getZoomImage() ;
1536
  			ZoomImageVue zv = getZoomImage() ;
1537
  			String idImg = zv.getIdImage() ;
1537
  			String idImg = zv.getIdImage() ;
1538
  			lierImagesObservation(idsObs, idImg) ;
1538
  			lierImagesObservation(idsObs, idImg) ;
1539
  			
1539
  			
1540
  			return true ; 			
1540
  			return true ; 			
1541
  		}
1541
  		}
1542
  		
1542
  		
1543
  		return false ;
1543
  		return false ;
1544
  		  
1544
  		  
1545
	}
1545
	}
1546
	
1546
	
1547
	public void LierTamponObservations() {
1547
	public void LierTamponObservations() {
1548
		
1548
		
1549
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1549
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1550
		String idsObs = "" ;
1550
		String idsObs = "" ;
1551
		
1551
		
1552
		for(int i =0 ; i< obsRec.length ; i++)
1552
		for(int i =0 ; i< obsRec.length ; i++)
1553
		{
1553
		{
1554
			idsObs += obsRec[i].getAsString("id_obs")+"," ;
1554
			idsObs += obsRec[i].getAsString("id_obs")+"," ;
1555
		}
1555
		}
1556
		
1556
		
1557
		if(getIModele().renvoyerSelection().equals("-255"))
1557
		if(getIModele().renvoyerSelection().equals("-255"))
1558
		{
1558
		{
1559
			Window.alert("Le tampon est vide") ;
1559
			Window.alert("Le tampon est vide") ;
1560
			return ;
1560
			return ;
1561
		}
1561
		}
1562
		
1562
		
1563
		if(obsRec.length == 0)
1563
		if(obsRec.length == 0)
1564
		{
1564
		{
1565
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1565
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1566
			return ;
1566
			return ;
1567
		}
1567
		}
1568
		
1568
		
1569
		else
1569
		else
1570
		{
1570
		{
1571
			lierImagesObservation(idsObs, getIModele().renvoyerSelection()) ;
1571
			lierImagesObservation(idsObs, getIModele().renvoyerSelection()) ;
1572
		}
1572
		}
1573
		
1573
		
1574
	}
1574
	}
1575
	
1575
	
1576
	public void LierObservations() {
1576
	public void LierObservations() {
1577
		
1577
		
1578
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1578
		Record[] obsRec = getMetadonneesIptcExif().getMiniListeObservation().getSelectionModel().getSelections() ;
1579
		String idsObs = "" ;
1579
		String idsObs = "" ;
1580
	
1580
	
1581
		String[] idsImg = getGalerieImage().getIdSelectionnees();
1581
		String[] idsImg = getGalerieImage().getIdSelectionnees();
1582
		String selectionImages = "";
1582
		String selectionImages = "";
1583
		
1583
		
1584
		if(idsImg.length <= 0)
1584
		if(idsImg.length <= 0)
1585
		{
1585
		{
1586
			Window.alert("Aucune image selectionnée") ;
1586
			Window.alert("Aucune image selectionnée") ;
1587
			return ;
1587
			return ;
1588
		} else {
1588
		} else {
1589
			for (int i = 0; i < idsImg.length; i++) {
1589
			for (int i = 0; i < idsImg.length; i++) {	
1590
	
-
 
1591
				String idEncours = idsImg[i];
1590
				String idEncours = iModele.obtenirIdPourOrdre(idsImg[i]);
1592
				selectionImages += idEncours + ",";
1591
				selectionImages += idEncours + ",";
1593
			}
1592
			}
1594
		}
1593
		}
1595
		
1594
		
1596
		if(obsRec.length == 0)
1595
		if(obsRec.length == 0)
1597
		{
1596
		{
1598
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1597
			Window.alert("Aucune(s) observation(s) selectionnée(s)") ;
1599
			return ;
1598
			return ;
1600
		} else  {
1599
		} else  {
1601
			
1600
			
1602
			for(int i =0 ; i< obsRec.length ; i++)
1601
			for(int i =0 ; i< obsRec.length ; i++)
1603
			{
1602
			{
1604
				idsObs += obsRec[i].getAsString("id_obs")+"," ;
1603
				idsObs += obsRec[i].getAsString("id_obs")+"," ;
1605
			}
1604
			}
1606
		}
1605
		}
1607
		
1606
		
1608
		String message = "Lier la selection d'images aux observations selectionnées ?";
1607
		String message = "Lier la selection d'images aux observations selectionnées ?";
1609
		if(Window.confirm(message)) {
1608
		if(Window.confirm(message)) {
1610
			lierImagesObservation(idsObs, selectionImages) ;
1609
			lierImagesObservation(idsObs, selectionImages) ;
1611
		}
1610
		}
1612
	}
1611
	}
1613
	
1612
	
1614
	/**
1613
	/**
1615
	 * Lie une ou plusieurs images à une ou plusieurs observations
1614
	 * Lie une ou plusieurs images à une ou plusieurs observations
1616
	 * @param idsObs les identifiants des observations séparés par des ","
1615
	 * @param idsObs les identifiants des observations séparés par des ","
1617
	 * @param idsImg les identifiants des images séparés par des ","
1616
	 * @param idsImg les identifiants des images séparés par des ","
1618
	 */
1617
	 */
1619
	public void lierImagesObservation(String idsObs, String idsImg)
1618
	public void lierImagesObservation(String idsObs, String idsImg)
1620
	{
1619
	{
1621
		getIModele().lierImagesObervations(idsObs,idsImg) ;
1620
		getIModele().lierImagesObervations(idsObs,idsImg) ;
1622
	}
1621
	}
1623
 
1622
 
1624
	public void deconnecterUtilisateur() {
1623
	public void deconnecterUtilisateur() {
1625
		
1624
		
1626
		if(panneauPrincipalImage.isVisible())
1625
		if(panneauPrincipalImage.isVisible())
1627
		{
1626
		{
1628
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte()) ;
1627
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte()) ;
1629
			changerUtilisateur() ;
1628
			changerUtilisateur() ;
1630
		}
1629
		}
1631
		else
1630
		else
1632
		{
1631
		{
1633
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1632
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1634
			{
1633
			{
1635
				@Override
1634
				@Override
1636
				public void onRender(Component component)
1635
				public void onRender(Component component)
1637
				{
1636
				{
1638
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte()) ;
1637
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte()) ;
1639
					changerUtilisateur() ;
1638
					changerUtilisateur() ;
1640
					panneauPrincipalImage.purgeListeners() ;
1639
					panneauPrincipalImage.purgeListeners() ;
1641
				}
1640
				}
1642
				
1641
				
1643
			}) ;
1642
			}) ;
1644
		}
1643
		}
1645
		
1644
		
1646
	}
1645
	}
1647
	
1646
	
1648
	
1647
	
1649
	public void connecterUtilisateur() {
1648
	public void connecterUtilisateur() {
1650
		
1649
		
1651
		if(panneauPrincipalImage.isVisible()) {
1650
		if(panneauPrincipalImage.isVisible()) {
1652
			
1651
			
1653
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte());
1652
			setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte());
1654
			getIModele().initialiserArbreMotsCles();
1653
			getIModele().initialiserArbreMotsCles();
1655
			filtres.getArbreDateRecherche().initialiser();
1654
			filtres.getArbreDateRecherche().initialiser();
1656
			obtenirPhotoGalerie(getGalerieImage());
1655
			obtenirPhotoGalerie(getGalerieImage());
1657
		}	
1656
		}	
1658
		else
1657
		else
1659
		{
1658
		{
1660
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1659
			panneauPrincipalImage.addListener(new ContainerListenerAdapter()
1661
			{
1660
			{
1662
				@Override
1661
				@Override
1663
				public void onRender(Component c)
1662
				public void onRender(Component c)
1664
				{
1663
				{
1665
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte());
1664
					setIdentifiant(cMediateur.getUtilisateur().getIdentifiantUtilisateurConnecte());
1666
					getIModele().initialiserArbreMotsCles();
1665
					getIModele().initialiserArbreMotsCles();
1667
					filtres.getArbreDateRecherche().initialiser();
1666
					filtres.getArbreDateRecherche().initialiser();
1668
					obtenirPhotoGalerie(getGalerieImage());
1667
					obtenirPhotoGalerie(getGalerieImage());
1669
					panneauPrincipalImage.purgeListeners() ;
1668
					panneauPrincipalImage.purgeListeners() ;
1670
				}
1669
				}
1671
				
1670
				
1672
			}) ;
1671
			}) ;
1673
		}
1672
		}
1674
	}
1673
	}
1675
	
1674
	
1676
	public String[] renvoyerFiltresObservation() {
1675
	public String[] renvoyerFiltresObservation() {
1677
		String[] rien = {"nom_taxon",""};
1676
		String[] rien = {"nom_taxon",""};
1678
		if(getMetadonneesIptcExif() != null) {
1677
		if(getMetadonneesIptcExif() != null) {
1679
			return getMetadonneesIptcExif().getRechercheFiltreTaxonVue().renvoyerValeursAFiltrer();
1678
			return getMetadonneesIptcExif().getRechercheFiltreTaxonVue().renvoyerValeursAFiltrer();
1680
		} else {
1679
		} else {
1681
			return rien;
1680
			return rien;
1682
		}
1681
		}
1683
	
1682
	
1684
	}
1683
	}
1685
	
1684
	
1686
	public void obtenirNombreMiniListeObservations(
1685
	public void obtenirNombreMiniListeObservations(
1687
			Rafraichissable r) {
1686
			Rafraichissable r) {
1688
		iModele.obtenirNombreMiniListeObservations(r, renvoyerFiltresObservation()); 
1687
		iModele.obtenirNombreMiniListeObservations(r, renvoyerFiltresObservation()); 
1689
	}
1688
	}
1690
	
1689
	
1691
 
1690
 
1692
	public void obtenirNombreMiniListeObservations() {
1691
	public void obtenirNombreMiniListeObservations() {
1693
		iModele.obtenirNombreMiniListeObservations(getMetadonneesIptcExif().getMiniListeObservation(), renvoyerFiltresObservation()); 
1692
		iModele.obtenirNombreMiniListeObservations(getMetadonneesIptcExif().getMiniListeObservation(), renvoyerFiltresObservation()); 
1694
	}
1693
	}
1695
 
1694
 
1696
	public void obtenirMiniListeObservations(
1695
	public void obtenirMiniListeObservations(
1697
			Rafraichissable r, int taillePage, int numeroPage) {
1696
			Rafraichissable r, int taillePage, int numeroPage) {
1698
		
1697
		
1699
		iModele.obtenirMiniListeObservations(r, renvoyerFiltresObservation(), taillePage, numeroPage) ;
1698
		iModele.obtenirMiniListeObservations(r, renvoyerFiltresObservation(), taillePage, numeroPage) ;
1700
		
1699
		
1701
	}
1700
	}
1702
 
1701
 
1703
	public void afficherAide() {
1702
	public void afficherAide() {
1704
		
1703
		
1705
		String aideUrl = Configuration.getAideBaseUrl() ;
1704
		String aideUrl = Configuration.getAideBaseUrl() ;
1706
		Window.open(aideUrl, "", "") ;
1705
		Window.open(aideUrl, "", "") ;
1707
	}
1706
	}
1708
 
1707
 
1709
	public void soumettreBugRemarque() {
1708
	public void soumettreBugRemarque() {
1710
	
1709
	
1711
		String suiviUrl = Configuration.getSuiviBugUrl() ;
1710
		String suiviUrl = Configuration.getSuiviBugUrl() ;
1712
		Window.open(suiviUrl, "", "") ;
1711
		Window.open(suiviUrl, "", "") ;
1713
		
1712
		
1714
	}
1713
	}
1715
 
1714
 
1716
	public void obtenirObservationsAssociees() {
1715
	public void obtenirObservationsAssociees() {
1717
	
1716
	
1718
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
1717
		String ids[] = getVueSelectionnee().getIdSelectionnees() ;
1719
		if(ids.length > 0) {
1718
		if(ids.length > 0) {
1720
			getMetadonneesIptcExif().getMiniListeObservation().masquerChargement() ;
1719
			getMetadonneesIptcExif().getMiniListeObservation().masquerChargement() ;
1721
			getIModele().obtenirLiaisonObservations(this,ids[0]);
1720
			getIModele().obtenirLiaisonObservations(this,ids[0]);
1722
		}
1721
		}
1723
	}
1722
	}
1724
	
1723
	
1725
	public void rafraichirMiniListeObservations(ListeObservation listeObs) {
1724
	public void rafraichirMiniListeObservations(ListeObservation listeObs) {
1726
		
1725
		
1727
		if(getMetadonneesIptcExif() != null && getMetadonneesIptcExif().isCreated()) {
1726
		if(getMetadonneesIptcExif() != null && getMetadonneesIptcExif().isCreated()) {
1728
			if(getMetadonneesIptcExif().getMiniListeObservation().isCreated())
1727
			if(getMetadonneesIptcExif().getMiniListeObservation().isCreated())
1729
			{
1728
			{
1730
				getMetadonneesIptcExif().getMiniListeObservation().rafraichir(listeObs, false) ;
1729
				getMetadonneesIptcExif().getMiniListeObservation().rafraichir(listeObs, false) ;
1731
			}
1730
			}
1732
		}
1731
		}
1733
	}
1732
	}
1734
 
1733
 
1735
	public void supprimerLiaisonObsImage() {
1734
	public void supprimerLiaisonObsImage() {
1736
		
1735
		
1737
 
1736
 
1738
		String idsImg[] = getVueSelectionnee().getIdSelectionnees() ;
1737
		String idsImg[] = getVueSelectionnee().getIdSelectionnees() ;
1739
		
1738
		
1740
		String idObs = getMetadonneesIptcExif().getMiniListeObservation().getIdSelectionnees() ;
1739
		String idObs = getMetadonneesIptcExif().getMiniListeObservation().getIdSelectionnees() ;
1741
		
1740
		
1742
		if(Window.confirm("Supprimer le lien entre image(s) et observation(s) ?"))
1741
		if(Window.confirm("Supprimer le lien entre image(s) et observation(s) ?"))
1743
		{
1742
		{
1744
			getMetadonneesIptcExif().getMiniListeObservation().supprimerLiaison() ;
1743
			getMetadonneesIptcExif().getMiniListeObservation().supprimerLiaison() ;
1745
			iModele.supprimerLiaisonImages(idsImg,idObs) ;
1744
			iModele.supprimerLiaisonImages(idsImg,idObs) ;
1746
		}
1745
		}
1747
		
1746
		
1748
	}
1747
	}
1749
	
1748
	
1750
	public boolean estInstancie() {
1749
	public boolean estInstancie() {
1751
		return estInstancie ;
1750
		return estInstancie ;
1752
	}
1751
	}
1753
 
1752
 
1754
	public void donneesExterieures(Object o) {
1753
	public void donneesExterieures(Object o) {
1755
		
1754
		
1756
		if(estInitialise) { 
1755
		if(estInitialise) { 
1757
			iModele.rafraichir(o, true);
1756
			iModele.rafraichir(o, true);
1758
		}
1757
		}
1759
	}
1758
	}
1760
 
1759
 
1761
	public void obtenirDatesImages(Rafraichissable r) {
1760
	public void obtenirDatesImages(Rafraichissable r) {
1762
		iModele.obtenirDatesImages(r);	
1761
		iModele.obtenirDatesImages(r);	
1763
	}
1762
	}
1764
	
1763
	
1765
	public void creerPanneauGestionMotsCles() {
1764
	public void creerPanneauGestionMotsCles() {
1766
		fnMc = new FenetreGestionMotsCles() {
1765
		fnMc = new FenetreGestionMotsCles() {
1767
			
1766
			
1768
			@Override
1767
			@Override
1769
			protected void surSuppressionMotCle(TreeNode node, Tree arbre) {
1768
			protected void surSuppressionMotCle(TreeNode node, Tree arbre) {
1770
				supprimerMotCleDansArbre(node, arbre);
1769
				supprimerMotCleDansArbre(node, arbre);
1771
			}
1770
			}
1772
			
1771
			
1773
			@Override
1772
			@Override
1774
			protected void surDeplacementMotCle(TreeNode node, Tree arbre) {
1773
			protected void surDeplacementMotCle(TreeNode node, Tree arbre) {
1775
				deplacerMotCleDansArbre(node, arbre);
1774
				deplacerMotCleDansArbre(node, arbre);
1776
			}
1775
			}
1777
			
1776
			
1778
			@Override
1777
			@Override
1779
			protected void surClicValider(String chaineMotsCles, Tree arbre) {
1778
			protected void surClicValider(String chaineMotsCles, Tree arbre) {
1780
				mettreAjourMotsCles(chaineMotsCles, arbre);
1779
				mettreAjourMotsCles(chaineMotsCles, arbre);
1781
			}
1780
			}
1782
			
1781
			
1783
			@Override
1782
			@Override
1784
			protected void surChangementTexte(TreeNode node, Tree arbre) {
1783
			protected void surChangementTexte(TreeNode node, Tree arbre) {
1785
				modifierMotCleDansArbre(node, arbre);
1784
				modifierMotCleDansArbre(node, arbre);
1786
			}
1785
			}
1787
			
1786
			
1788
			@Override
1787
			@Override
1789
			protected void surAjoutMotCle(TreeNode node, Tree arbre) {
1788
			protected void surAjoutMotCle(TreeNode node, Tree arbre) {
1790
				ajouterMotCleDansArbre(node, arbre);
1789
				ajouterMotCleDansArbre(node, arbre);
1791
			}
1790
			}
1792
			
1791
			
1793
			@Override
1792
			@Override
1794
			protected void surAffichageMenuContextuel(TreeNode node, EventObject e,
1793
			protected void surAffichageMenuContextuel(TreeNode node, EventObject e,
1795
					TreeEditor te) {
1794
					TreeEditor te) {
1796
				montrerContextMenuArbre(node, e, te);
1795
				montrerContextMenuArbre(node, e, te);
1797
			}
1796
			}
1798
			
1797
			
1799
			@Override
1798
			@Override
1800
			protected void demanderArbreMotsCles(Rafraichissable r) {
1799
			protected void demanderArbreMotsCles(Rafraichissable r) {
1801
				ImageMediateur.this.obtenirArbreMotsCles(r);
1800
				ImageMediateur.this.obtenirArbreMotsCles(r);
1802
			}
1801
			}
1803
		};
1802
		};
1804
		
1803
		
1805
		fnMc.setModal(true);
1804
		fnMc.setModal(true);
1806
		fnMc.setHeight(420);
1805
		fnMc.setHeight(420);
1807
		fnMc.setWidth(285);
1806
		fnMc.setWidth(285);
1808
		fnMc.addListener(new WindowListenerAdapter() {
1807
		fnMc.addListener(new WindowListenerAdapter() {
1809
 
1808
 
1810
			@Override
1809
			@Override
1811
			public void onClose(Panel panel) {
1810
			public void onClose(Panel panel) {
1812
				
1811
				
1813
			}
1812
			}
1814
 
1813
 
1815
		});
1814
		});
1816
		
1815
		
1817
		//fnMc.activerBoutonValider(selection);
1816
		//fnMc.activerBoutonValider(selection);
1818
	}
1817
	}
1819
 
1818
 
1820
	public void afficherFenetreGestionMotsCles() {
1819
	public void afficherFenetreGestionMotsCles() {
1821
		fnMc.show();
1820
		fnMc.show();
1822
	}
1821
	}
1823
 
1822
 
1824
}
1823
}