Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 426 → Rev 427

/trunk/src/org/tela_botanica/del/client/composants/fenetreOverlayDefilante/FenetreOverlayDefilanteVue.java
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() {
 
}
}
/trunk/src/org/tela_botanica/del/client/composants/fenetreOverlayDefilante/FenetreOverlayDefilanteVue.ui.xml
4,11 → 4,13
ui:generateLocales="default">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<g:VerticalPanel>
<g:VerticalPanel styleName="fenetreDefilante" ui:field="conteneurGlobal">
<g:HTMLPanel ui:field="overlay" />
<g:Button ui:field="boutonSuivant" text="" />
<g:HTMLPanel ui:field="overlayContenu" />
<g:Button ui:field="boutonPrecedent" text="" />
<g:Button ui:field="boutonFermer" text="{constants.fermer}" />
<g:HorizontalPanel ui:field="conteneurOverlayContenu" styleName="">
<g:Button ui:field="boutonPrecedent" text="" />
<g:HTMLPanel ui:field="overlayContenu" />
<g:Button ui:field="boutonSuivant" text="" />
<g:Button ui:field="boutonFermer" text="{constants.fermer}" />
</g:HorizontalPanel>
</g:VerticalPanel>
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/composants/fenetreOverlayDefilante/FenetreOverlayDefilantePresenteur.java
6,18 → 6,13
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
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.IsWidget;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
 
public abstract class FenetreOverlayDefilantePresenteur {
 
private IsWidget overlay;
private IsWidget overlayContenu;
public interface Vue extends IsWidget {
public IsWidget getOverlay();
public HasVisibility getOverlayVisibility();
32,6 → 27,9
public void setOverlayContenu(IsWidget w);
public void viderOverlay();
public void viderOverlayContenu();
public void surOuvertureFenetre();
public void surFermetureFenetre();
void surSetContenuFenetre();
}
private Vue vue;
78,20 → 76,16
}
 
public void ouvrirFenetreModaleDefilante(int indexElementAffiche, Presenteur presenteurModal) {
this.indexElementAffiche = indexElementAffiche;
overlay = vue.getOverlay();
vue.setStyleOverlay("overlay");
vue.getOverlayVisibility().setVisible(false);
overlayContenu = vue.getOverlayContenu();
vue.setStyleOverlayContenu("overlayContenu");
 
presenteurModal.go(vue.getOverlayContenuHasWidgets());
 
vue.getOverlayContenuVisibility().setVisible(true);
vue.getOverlayVisibility().setVisible(true);
RootPanel.get().add(vue.asWidget());
fenetreModaleOuverte = true;
setContenuFenetreModale(indexElementAffiche, presenteurModal);
vue.surOuvertureFenetre();
}
public void setContenuFenetreModale(int indexElementAffiche, Presenteur presenteurModal) {
98,6 → 92,7
this.indexElementAffiche = indexElementAffiche;
vue.viderOverlayContenu();
presenteurModal.go(vue.getOverlayContenuHasWidgets());
vue.surSetContenuFenetre();
}
public abstract void surClicBoutonSuivant(ClickEvent evt);
112,6 → 107,7
vue.viderOverlayContenu();
RootPanel.get().remove(vue.asWidget());
fenetreModaleOuverte = false;
vue.surFermetureFenetre();
}
public int getIndexElementAffiche() {