Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

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