Subversion Repositories eFlore/Applications.cel

Rev

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

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