Rev 414 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.composants.fenetreOverlayDefilante;
import org.tela_botanica.del.client.composants.fenetreOverlayDefilante.FenetreOverlayDefilantePresenteur.Vue;
import com.google.gwt.animation.client.Animation;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.ScrollEvent;
import com.google.gwt.user.client.Window.ScrollHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasVisibility;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class FenetreOverlayDefilanteVue extends Composite implements Vue {
interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> {
}
@UiField
VerticalPanel conteneurGlobal;
@UiField
HTMLPanel overlay, overlayContenu;
@UiField
Button boutonFermer, boutonSuivant, boutonPrecedent;
@UiField
HorizontalPanel conteneurOverlayContenu;
private int hauteurContenu = 0;
private int largeurContenu = 0;
private Timer timerPlacement = null;
public HTMLPanel getOverlay() {
return overlay;
}
public HTMLPanel getOverlayContenu() {
return overlayContenu;
}
public Button getBoutonFermer() {
return boutonFermer;
}
public Button getBoutonSuivant() {
return boutonSuivant;
}
public Button getBoutonPrecedent() {
return boutonPrecedent;
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
public FenetreOverlayDefilanteVue() {
initWidget(uiBinder.createAndBindUi(this));
boutonFermer.setStyleName("fermerOverlay");
boutonPrecedent.setStyleName("precedentOverlay");
boutonSuivant.setStyleName("suivantOverlay");
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
gererDimensions();
}
});
}
@Override
public HasVisibility getOverlayVisibility() {
return overlay;
}
@Override
public HasVisibility getOverlayContenuVisibility() {
return overlayContenu;
}
@Override
public HasWidgets getOverlayContenuHasWidgets() {
return overlayContenu;
}
@Override
public void setStyleOverlay(String style) {
overlay.setStyleName(style);
}
@Override
public void setStyleOverlayContenu(String style) {
overlayContenu.setStyleName(style);
}
@Override
public void setOverlayContenu(IsWidget w) {
overlayContenu.clear();
overlayContenu.add(w);
}
@Override
public void viderOverlay() {
overlay.clear();
}
@Override
public void viderOverlayContenu() {
overlayContenu.clear();
}
private void gererDimensions() {
UIObject overlayContenuUi = overlayContenu.getWidget(0);
int topBoutonsSuivantsPrecedent = (overlayContenuUi.getAbsoluteTop() + overlayContenuUi.getOffsetHeight())/2 + 20;
int topBoutonFermer = overlayContenuUi.getAbsoluteTop() - 10;
int left = overlayContenuUi.getAbsoluteLeft() - 20;
int right = overlayContenuUi.getAbsoluteLeft() + overlayContenuUi.getOffsetWidth() - 12;
DOM.setStyleAttribute(boutonPrecedent.getElement(), "left",left+"px");
DOM.setStyleAttribute(boutonPrecedent.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
DOM.setStyleAttribute(boutonSuivant.getElement(), "left",right+"px");
DOM.setStyleAttribute(boutonSuivant.getElement(), "top", topBoutonsSuivantsPrecedent+"px");
DOM.setStyleAttribute(boutonFermer.getElement(), "left",(right - 10)+"px");
DOM.setStyleAttribute(boutonFermer.getElement(), "top", topBoutonFermer+"px");
setDimensionsContenu(overlayContenuUi.getOffsetHeight(), overlayContenuUi.getOffsetWidth());
}
private void setDimensionsContenu(int hauteur, int largeur) {
largeurContenu = largeur;
hauteurContenu = hauteur;
}
@Override
public void surOuvertureFenetre() {
Window.enableScrolling(false);
// Pas trouvé mieux que le timer pour bien redimensionner
// à voir si l'existe une meilleure solution qui n'oblige pas
// par avance à connaitre le type d'objet contenu dans l'overlayContenu
// ou bien la taille de la fenetre
timerPlacement = new Timer() {
@Override
public void run() {
// on vérifie si la taille du contenu a changé
if(tailleDuContenuModifie()) {
// et on repositionne les boutons
gererDimensions();
}
}
};
timerPlacement.scheduleRepeating(30);
}
private boolean tailleDuContenuModifie() {
UIObject overlayContenuUi = overlayContenu.getWidget(0);
return overlayContenuUi != null
&& (overlayContenuUi.getOffsetHeight() != hauteurContenu
|| overlayContenuUi.getOffsetWidth() != largeurContenu);
}
@Override
public void surFermetureFenetre() {
Window.enableScrolling(true);
timerPlacement.cancel();
}
@Override
public void surSetContenuFenetre() {
}
}