Subversion Repositories eFlore/Applications.del

Rev

Rev 608 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

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.event.dom.client.HasKeyDownHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
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 HasKeyDownHandlers getConteneurGlobal();
                public IsWidget getOverlay();
                public void afficherBoutonsSuivantsPrecedents(boolean afficher);
                public HasClickHandlers getOverlayHasClickHandlers();
                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();
                public void surSetContenuFenetre();
                public boolean testerFermetureClicExterieur(ClickEvent event);
        }
        
        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();
                        }
                });
                
                vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
                        public void onClick(ClickEvent event) {
                                surClicBoutonSuivant();
                        }
                });
                
                vue.getConteneurGlobal().addKeyDownHandler(new KeyDownHandler() {
                        @Override
                        public void onKeyDown(KeyDownEvent event) {
                                if(event.getNativeKeyCode() == KeyCodes.KEY_LEFT) {
                                        surClicBoutonPrecedent();
                                }
                                
                                if(event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) {
                                        surClicBoutonSuivant();
                                }
                        }
                });
                
                vue.getOverlayHasClickHandlers().addClickHandler(new ClickHandler() {           
                        @Override
                        public void onClick(ClickEvent event) {
                                if(vue.testerFermetureClicExterieur(event)) {
                                        fermerFenetreModale();
                                }
                        }
                });
        }

        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();
        public abstract void surClicBoutonPrecedent();
        
        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;
        }

        public void afficherBoutonsSuivantsPrecedents(boolean afficher) {
                vue.afficherBoutonsSuivantsPrecedents(afficher);
        }
}