Subversion Repositories eFlore/Applications.del

Rev

Rev 1563 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1563 Rev 1704
1
package org.tela_botanica.del.client.composants.fenetreoverlay;
1
package org.tela_botanica.del.client.composants.fenetreoverlay;
2
 
2
 
3
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur.Vue;
3
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur.Vue;
4
 
4
 
5
import com.google.gwt.core.client.GWT;
5
import com.google.gwt.core.client.GWT;
6
import com.google.gwt.dom.client.Element;
6
import com.google.gwt.dom.client.Element;
7
import com.google.gwt.event.dom.client.ClickEvent;
7
import com.google.gwt.event.dom.client.ClickEvent;
8
import com.google.gwt.event.dom.client.HasClickHandlers;
8
import com.google.gwt.event.dom.client.HasClickHandlers;
9
import com.google.gwt.event.dom.client.HasKeyDownHandlers;
9
import com.google.gwt.event.dom.client.HasKeyDownHandlers;
10
import com.google.gwt.event.logical.shared.ResizeEvent;
10
import com.google.gwt.event.logical.shared.ResizeEvent;
11
import com.google.gwt.event.logical.shared.ResizeHandler;
11
import com.google.gwt.event.logical.shared.ResizeHandler;
12
import com.google.gwt.uibinder.client.UiBinder;
12
import com.google.gwt.uibinder.client.UiBinder;
13
import com.google.gwt.uibinder.client.UiField;
13
import com.google.gwt.uibinder.client.UiField;
14
import com.google.gwt.user.client.DOM;
14
import com.google.gwt.user.client.DOM;
15
import com.google.gwt.user.client.Event;
15
import com.google.gwt.user.client.Event;
16
import com.google.gwt.user.client.Timer;
16
import com.google.gwt.user.client.Timer;
17
import com.google.gwt.user.client.Window;
17
import com.google.gwt.user.client.Window;
18
import com.google.gwt.user.client.ui.Button;
18
import com.google.gwt.user.client.ui.Button;
19
import com.google.gwt.user.client.ui.Composite;
19
import com.google.gwt.user.client.ui.Composite;
20
import com.google.gwt.user.client.ui.FocusPanel;
20
import com.google.gwt.user.client.ui.FocusPanel;
21
import com.google.gwt.user.client.ui.HasVisibility;
21
import com.google.gwt.user.client.ui.HasVisibility;
22
import com.google.gwt.user.client.ui.HasWidgets;
22
import com.google.gwt.user.client.ui.HasWidgets;
23
import com.google.gwt.user.client.ui.HorizontalPanel;
23
import com.google.gwt.user.client.ui.HorizontalPanel;
24
import com.google.gwt.user.client.ui.IsWidget;
24
import com.google.gwt.user.client.ui.IsWidget;
25
import com.google.gwt.user.client.ui.UIObject;
25
import com.google.gwt.user.client.ui.UIObject;
26
import com.google.gwt.user.client.ui.VerticalPanel;
26
import com.google.gwt.user.client.ui.VerticalPanel;
27
import com.google.gwt.user.client.ui.Widget;
27
import com.google.gwt.user.client.ui.Widget;
28
 
28
 
29
public class FenetreOverlayDefilanteVue extends Composite implements Vue {
29
public class FenetreOverlayDefilanteVue extends Composite implements Vue {
30
 
30
 
31
	interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> {
-
 
32
	}
31
	interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> {}
33
	
32
	
34
	@UiField
33
	@UiField
35
	VerticalPanel conteneurGlobal;
34
	VerticalPanel conteneurGlobal;
36
 
35
 
37
	@UiField
36
	@UiField
38
	FocusPanel overlay;
37
	FocusPanel overlay;
39
	
38
	
40
	@UiField
39
	@UiField
41
	FocusPanel overlayContenu;
40
	FocusPanel overlayContenu;
42
 
41
 
43
	@UiField
42
	@UiField
44
	Button boutonFermer, boutonSuivant, boutonPrecedent;
43
	Button boutonFermer, boutonSuivant, boutonPrecedent;
45
	
44
	
46
	@UiField 
45
	@UiField 
47
	HorizontalPanel conteneurOverlayContenu;
46
	HorizontalPanel conteneurOverlayContenu;
48
	
47
	
49
	private int hauteurContenu = 0;
48
	private int hauteurContenu = 0;
50
	private int largeurContenu = 0;
49
	private int largeurContenu = 0;
51
	
50
	
52
	// contiennent les coordonnées actuelles du scroll 
51
	// contiennent les coordonnées actuelles du scroll 
53
	// pour le rétablir une fois la fenêtre fermée
52
	// pour le rétablir une fois la fenêtre fermée
54
	private int topFenetre = 0;
53
	private int topFenetre = 0;
55
	private int gaucheFenetre = 0;
54
	private int gaucheFenetre = 0;
56
	
55
	
57
	private Timer timerPlacement = null;
56
	private Timer timerPlacement = null;
58
	
57
	
59
	public FocusPanel getOverlay() {
58
	public FocusPanel getOverlay() {
60
		return overlay;
59
		return overlay;
61
	}
60
	}
62
 
61
 
63
	public FocusPanel getOverlayContenu() {
62
	public FocusPanel getOverlayContenu() {
64
		return overlayContenu;
63
		return overlayContenu;
65
	}
64
	}
66
	
65
	
67
	@Override
66
	@Override
68
	public HasClickHandlers getOverlayHasClickHandlers() {
67
	public HasClickHandlers getOverlayHasClickHandlers() {
69
		return overlayContenu;
68
		return overlayContenu;
70
	}
69
	}
71
 
70
 
72
	public Button getBoutonFermer() {
71
	public Button getBoutonFermer() {
73
		return boutonFermer;
72
		return boutonFermer;
74
	}
73
	}
75
 
74
 
76
	public Button getBoutonSuivant() {
75
	public Button getBoutonSuivant() {
77
		return boutonSuivant;
76
		return boutonSuivant;
78
	}
77
	}
79
 
78
 
80
	public Button getBoutonPrecedent() {
79
	public Button getBoutonPrecedent() {
81
		return boutonPrecedent;
80
		return boutonPrecedent;
82
	}
81
	}
83
 
82
 
84
	private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
83
	private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
85
 
84
 
86
	public FenetreOverlayDefilanteVue() {
85
	public FenetreOverlayDefilanteVue() {
87
		
-
 
88
		initWidget(uiBinder.createAndBindUi(this));
86
		initWidget(uiBinder.createAndBindUi(this));
89
		boutonFermer.setStyleName("fermerOverlay");
87
		boutonFermer.setStyleName("fermerOverlay");
90
		boutonPrecedent.setStyleName("precedentOverlay");
88
		boutonPrecedent.setStyleName("precedentOverlay");
91
		boutonSuivant.setStyleName("suivantOverlay");
89
		boutonSuivant.setStyleName("suivantOverlay");
92
				
90
				
93
		Window.addResizeHandler(new ResizeHandler() {
91
		Window.addResizeHandler(new ResizeHandler() {
94
			@Override
92
			@Override
95
			public void onResize(ResizeEvent event) {
93
			public void onResize(ResizeEvent event) {
96
				gererDimensionsEtPositionnerBoutons();
94
				gererDimensionsEtPositionnerBoutons();
97
			}
95
			}
98
		});
96
		});
99
	}
97
	}
100
	
98
	
101
	@Override
99
	@Override
102
	public HasKeyDownHandlers getConteneurGlobal() {
100
	public HasKeyDownHandlers getConteneurGlobal() {
103
		return overlayContenu;
101
		return overlayContenu;
104
	}
102
	}
105
 
103
 
106
	@Override
104
	@Override
107
	public HasVisibility getOverlayVisibility() {
105
	public HasVisibility getOverlayVisibility() {
108
		return overlay;
106
		return overlay;
109
	}
107
	}
110
 
108
 
111
	@Override
109
	@Override
112
	public HasVisibility getOverlayContenuVisibility() {
110
	public HasVisibility getOverlayContenuVisibility() {
113
		return overlayContenu;
111
		return overlayContenu;
114
	}
112
	}
115
 
113
 
116
	@Override
114
	@Override
117
	public HasWidgets getOverlayContenuHasWidgets() {
115
	public HasWidgets getOverlayContenuHasWidgets() {
118
		return overlayContenu;
116
		return overlayContenu;
119
	}
117
	}
120
 
118
 
121
	@Override
119
	@Override
122
	public void setStyleOverlay(String style) {
120
	public void setStyleOverlay(String style) {
123
		overlay.setStyleName(style);
121
		overlay.setStyleName(style);
124
	}
122
	}
125
 
123
 
126
	@Override
124
	@Override
127
	public void setStyleOverlayContenu(String style) {
125
	public void setStyleOverlayContenu(String style) {
128
		overlayContenu.setStyleName(style);
126
		overlayContenu.setStyleName(style);
129
	}
127
	}
130
 
128
 
131
	@Override
129
	@Override
132
	public void setOverlayContenu(IsWidget w) {
130
	public void setOverlayContenu(IsWidget w) {
133
		overlayContenu.clear();
131
		overlayContenu.clear();
134
		overlayContenu.add(w);
132
		overlayContenu.add(w);
135
	}
133
	}
136
 
134
 
137
	@Override
135
	@Override
138
	public void viderOverlay() {
136
	public void viderOverlay() {
139
		overlay.clear();
137
		overlay.clear();
140
	}
138
	}
141
 
139
 
142
	@Override
140
	@Override
143
	public void viderOverlayContenu() {
141
	public void viderOverlayContenu() {
144
		overlayContenu.clear();
142
		overlayContenu.clear();
145
	}
143
	}
146
	
144
	
147
	private void gererDimensionsEtPositionnerBoutons() {
145
	private void gererDimensionsEtPositionnerBoutons() {
148
				
-
 
149
		UIObject overlayContenuUi = overlayContenu.getWidget();
146
		UIObject overlayContenuUi = overlayContenu.getWidget();
150
				
147
				
151
		if(overlayContenuUi == null) {
148
		if (overlayContenuUi == null) {
152
			return;
149
			return;
153
		}
150
		}
154
		
151
		
155
		int topBoutonFermer = 65;
152
		int topBoutonFermer = 65;
156
		int topBoutonsSuivantsPrecedent = (topBoutonFermer + overlayContenuUi.getOffsetHeight())/2 + 20;
153
		int topBoutonsSuivantsPrecedent = (topBoutonFermer + overlayContenuUi.getOffsetHeight())/2 + 20;
157
		
154
		
158
		
155
		
159
		int left = overlayContenuUi.getAbsoluteLeft() - 20;
156
		int left = overlayContenuUi.getAbsoluteLeft() - 20;
160
		int right = overlayContenuUi.getAbsoluteLeft() + overlayContenuUi.getOffsetWidth() - 12;
157
		int right = overlayContenuUi.getAbsoluteLeft() + overlayContenuUi.getOffsetWidth() - 12;
161
		
158
		
162
		DOM.setStyleAttribute(boutonPrecedent.getElement(), "left",left+"px");
159
		DOM.setStyleAttribute(boutonPrecedent.getElement(), "left",left+"px");
163
		DOM.setStyleAttribute(boutonPrecedent.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
160
		DOM.setStyleAttribute(boutonPrecedent.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
164
		
161
		
165
		DOM.setStyleAttribute(boutonSuivant.getElement(), "left",right+"px");
162
		DOM.setStyleAttribute(boutonSuivant.getElement(), "left",right+"px");
166
		DOM.setStyleAttribute(boutonSuivant.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
163
		DOM.setStyleAttribute(boutonSuivant.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
167
		
164
		
168
		DOM.setStyleAttribute(boutonFermer.getElement(), "left",(right - 10)+"px");
165
		DOM.setStyleAttribute(boutonFermer.getElement(), "left",(right - 10)+"px");
169
		DOM.setStyleAttribute(boutonFermer.getElement(), "top", topBoutonFermer+"px");	
166
		DOM.setStyleAttribute(boutonFermer.getElement(), "top", topBoutonFermer+"px");	
170
		
167
		
171
		setDimensionsContenu(overlayContenuUi.getOffsetHeight(), overlayContenuUi.getOffsetWidth());
168
		setDimensionsContenu(overlayContenuUi.getOffsetHeight(), overlayContenuUi.getOffsetWidth());
172
	}
169
	}
173
	
170
	
174
	private void setDimensionsContenu(int hauteur, int largeur) {
171
	private void setDimensionsContenu(int hauteur, int largeur) {
175
		largeurContenu = largeur;
172
		largeurContenu = largeur;
176
		hauteurContenu = hauteur;
173
		hauteurContenu = hauteur;
177
	}
174
	}
178
 
175
 
179
	@Override
176
	@Override
180
	public void surOuvertureFenetre() {
177
	public void surOuvertureFenetre() {
181
		
-
 
182
		// enregistrement des coordonnées des scrool
178
		// enregistrement des coordonnées des scrool
183
		topFenetre = Window.getScrollTop();
179
		topFenetre = Window.getScrollTop();
184
		gaucheFenetre = Window.getScrollLeft();
180
		gaucheFenetre = Window.getScrollLeft();
185
		
181
		
186
		// scroll désactivé pour ne pas fausser le positionnement des boutons
182
		// scroll désactivé pour ne pas fausser le positionnement des boutons
187
		Window.enableScrolling(false);
183
		Window.enableScrolling(false);
188
		// Pas trouvé mieux que le timer pour bien redimensionner
184
		// Pas trouvé mieux que le timer pour bien redimensionner
189
		// à voir s il existe une meilleure solution qui n'oblige pas 
185
		// à voir s il existe une meilleure solution qui n'oblige pas 
190
		// par avance à connaitre le type d'objet contenu dans l'overlayContenu
186
		// par avance à connaitre le type d'objet contenu dans l'overlayContenu
191
		// ou bien la taille de la fenetre
187
		// ou bien la taille de la fenetre
192
		timerPlacement = new Timer() {
188
		timerPlacement = new Timer() {
193
			@Override
189
			@Override
194
			public void run() {
190
			public void run() {
195
				if(tailleDuContenuEstModifiee()) {
191
				if(tailleDuContenuEstModifiee()) {
196
					// On repositionne les boutons
192
					// On repositionne les boutons
197
					gererDimensionsEtPositionnerBoutons();
193
					gererDimensionsEtPositionnerBoutons();
198
				}
194
				}
199
			}
195
			}
200
		};
196
		};
201
		timerPlacement.scheduleRepeating(30);
197
		timerPlacement.scheduleRepeating(30);
202
	}
198
	}
203
	
199
	
204
	private boolean tailleDuContenuEstModifiee() {
200
	private boolean tailleDuContenuEstModifiee() {
205
		UIObject overlayContenuUi = overlayContenu.getWidget();
201
		UIObject overlayContenuUi = overlayContenu.getWidget();
206
		return overlayContenuUi != null 
202
		return overlayContenuUi != null 
207
				&& (overlayContenuUi.getOffsetHeight() != hauteurContenu 
203
				&& (overlayContenuUi.getOffsetHeight() != hauteurContenu 
208
				|| overlayContenuUi.getOffsetWidth() != largeurContenu);
204
				|| overlayContenuUi.getOffsetWidth() != largeurContenu);
209
	}
205
	}
210
 
206
 
211
	@Override
207
	@Override
212
	public void surFermetureFenetre() {
208
	public void surFermetureFenetre() {
213
		Window.enableScrolling(true);
209
		Window.enableScrolling(true);
214
		// replacement de la fenêtre à la position de scroll d'origine
210
		// replacement de la fenêtre à la position de scroll d'origine
215
		Window.scrollTo(gaucheFenetre, topFenetre);
211
		Window.scrollTo(gaucheFenetre, topFenetre);
216
		timerPlacement.cancel();
212
		timerPlacement.cancel();
217
	}
213
	}
218
	
214
	
219
	@Override
215
	@Override
220
	public void surSetContenuFenetre() {
216
	public void surSetContenuFenetre() {
221
		// nécessaire pour le défilement avec les touches du clavier
217
		// nécessaire pour le défilement avec les touches du clavier
222
		overlayContenu.setFocus(true);
218
		overlayContenu.setFocus(true);
223
	}
219
	}
224
 
220
 
225
	@Override
221
	@Override
226
	public void afficherBoutonsSuivantsPrecedents(boolean afficher) {
222
	public void afficherBoutonsSuivantsPrecedents(boolean afficher) {
227
		boutonPrecedent.setVisible(afficher);
223
		boutonPrecedent.setVisible(afficher);
228
		boutonSuivant.setVisible(afficher);
224
		boutonSuivant.setVisible(afficher);
229
	}
225
	}
230
 
226
 
231
	@Override
227
	@Override
232
	public boolean testerFermetureClicExterieur(ClickEvent event) {
228
	public boolean testerFermetureClicExterieur(ClickEvent event) {
233
		Element e = DOM.eventGetTarget(Event.as(event.getNativeEvent()));
229
		Element e = DOM.eventGetTarget(Event.as(event.getNativeEvent()));
234
		return event.getRelativeElement() != null && (e == overlayContenu.getElement());
230
		return event.getRelativeElement() != null && (e == overlayContenu.getElement());
235
	}
231
	}
236
}
232
}