2,25 → 2,46 |
|
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.ClickEvent; |
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 { |
|
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("ObservationRechercheVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> { |
} |
|
@UiField |
VerticalPanel conteneurGlobal; |
|
@UiField |
HTMLPanel overlay, overlayContenu; |
28,6 → 49,14 |
@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; |
} |
51,10 → 80,18 |
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 |
97,4 → 134,68 |
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() { |
|
} |
} |