Subversion Repositories eFlore/Applications.del

Rev

Rev 414 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.composants.fenetreOverlayDefilante;

import org.tela_botanica.del.client.composants.presenteur.Presenteur;

import com.google.gwt.event.dom.client.ClickEvent;
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.HasVisibility;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootPanel;

public abstract class FenetreOverlayDefilantePresenteur {

        public interface Vue extends IsWidget {
                public IsWidget getOverlay();
                public HasVisibility getOverlayVisibility();
                public IsWidget getOverlayContenu();
                public HasVisibility getOverlayContenuVisibility();
                public HasWidgets getOverlayContenuHasWidgets();
                public HasClickHandlers getBoutonFermer();      
                public HasClickHandlers getBoutonSuivant();
                public HasClickHandlers getBoutonPrecedent();
                public void setStyleOverlay(String style);
                public void setStyleOverlayContenu(String style);
                public void setOverlayContenu(IsWidget w);
                public void viderOverlay();
                public void viderOverlayContenu();
                public void surOuvertureFenetre();
                public void surFermetureFenetre();
                void surSetContenuFenetre();
        }
        
        private Vue vue;
        
        private boolean fenetreModaleOuverte = false;
        private int indexElementAffiche = 0;

        // Constructeur
        public FenetreOverlayDefilantePresenteur(int indexElementAffiche, Vue vue) {
                this.indexElementAffiche = indexElementAffiche;
                this.vue = vue;
                gererEvenements();
        }
        
        // Afficheur
        public void go() {
                go(null);
        }

        public void go(HasWidgets composite) {
                
        }

        // Gestion des évènements
        protected void gererEvenements() {
                
                vue.getBoutonFermer().addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                fermerFenetreModale();
                        }
                });
                
                vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                surClicBoutonPrecedent(event);
                        }
                });
                
                vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                surClicBoutonSuivant(event);
                        }
                });
        }

        public void ouvrirFenetreModaleDefilante(int indexElementAffiche, Presenteur presenteurModal) {
                
                vue.setStyleOverlay("overlay");
                vue.setStyleOverlayContenu("overlayContenu");
                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) {
                this.indexElementAffiche = indexElementAffiche;
                vue.viderOverlayContenu();
                presenteurModal.go(vue.getOverlayContenuHasWidgets());
                vue.surSetContenuFenetre();
        }
        
        public abstract void surClicBoutonSuivant(ClickEvent evt);
        public abstract void surClicBoutonPrecedent(ClickEvent evt);
        
        public boolean fenetreModaleEstOuverte() {
                return fenetreModaleOuverte;
        }

        public void fermerFenetreModale() {
                vue.viderOverlay();
                vue.viderOverlayContenu();
                RootPanel.get().remove(vue.asWidget());
                fenetreModaleOuverte = false;
                vue.surFermetureFenetre();
        }
        
        public int getIndexElementAffiche() {
                return indexElementAffiche;
        }
}