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