Subversion Repositories eFlore/Applications.coel

Rev

Rev 1774 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import org.tela_botanica.client.ComposantId;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.InfoLogger;
import org.tela_botanica.client.i18n.Constantes;
import org.tela_botanica.client.i18n.ErrorMessages;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.Utilisateur;
import org.tela_botanica.client.util.Debug;

import com.extjs.gxt.ui.client.Style;
import com.extjs.gxt.ui.client.Style.Orientation;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.Format;
import com.extjs.gxt.ui.client.util.Params;
import com.extjs.gxt.ui.client.widget.HtmlContainer;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.button.SplitButton;
import com.extjs.gxt.ui.client.widget.layout.RowData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.user.client.Window;

public class EnteteVue extends LayoutContainer implements Rafraichissable {

        private Mediateur mediateur = null;
        private Constantes i18nC = null;
        private ErrorMessages i18nM = null;

        private String identificationInfoTpl = null;
        private String titreTpl = null;
        
        private HtmlContainer conteneurHtml = null;
        private SelectionListener<ButtonEvent> boutonEcouteur = null;
        private ButtonBar barreBoutons = null;
        private Button identificationBouton = null;
        //private SplitButton feedbackBouton = null;
        private Button contactBouton = null;
        private SplitButton aideBouton = null;
        private SplitButton applisBouton = null;

        public EnteteVue(Mediateur mediateurCourant) {
                mediateur = mediateurCourant;
                i18nC = Mediateur.i18nC;
                i18nM = Mediateur.i18nM;
                
                setId(ComposantId.PANNEAU_ENTETE);
                setLayout(new RowLayout(Orientation.HORIZONTAL));
                initialiserSquelettes();
                boutonEcouteur = getEcouteurDesBoutons();
                conteneurHtml = getIdentification();
                identificationBouton = getBoutonIdentification();
                //feedbackBouton = getBoutonAFeedback();
                contactBouton = getBoutonContact();
                aideBouton = getBoutonAide();
                applisBouton = getBoutonApplications();
                
                barreBoutons = new ButtonBar();
                barreBoutons.setAlignment(Style.HorizontalAlignment.RIGHT);
                barreBoutons.add(conteneurHtml);
                barreBoutons.add(identificationBouton);
                barreBoutons.add(aideBouton);
                //barreBoutons.add(feedbackBouton);
                barreBoutons.add(contactBouton);
                barreBoutons.add(applisBouton);
                
                add(getTitre(), new RowData(.20, 1));
                add(barreBoutons, new RowData(.8, 1));
                
        }
        
        private void initialiserSquelettes() {
                identificationInfoTpl = "<div id='"+ComposantId.DIV_IDENTIFICATION+"'>{0}</div>";
                titreTpl = "<div id='"+ComposantId.DIV_TITRE+"'>{0}</div>";
        }
        
        private HtmlContainer getTitre() {
                HtmlContainer titreConteneurHtml = new HtmlContainer();
                titreConteneurHtml.setHtml(Format.substitute(titreTpl, Images.ICONES.logoCoel().getHTML()));//Registry.get(RegistreId.APPLI_NOM)));
                return titreConteneurHtml;
        }
        
        private HtmlContainer getIdentification() {
                HtmlContainer conteneurHtml = new HtmlContainer();
                
                conteneurHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add(i18nC.modeAnonyme())));
                return conteneurHtml;
        }

        private SelectionListener<ButtonEvent> getEcouteurDesBoutons() {
                SelectionListener<ButtonEvent> boutonEcouteur = new SelectionListener<ButtonEvent>() {  
                        public void componentSelected(ButtonEvent be) {  
                                Button btn = (Button) be.getComponent();
                                String id = btn.getId();
                                String message = "";
                                
                                if (id.equals(ComposantId.BTN_AIDE)
                                                || id.equals(ComposantId.BTN_FEEDBACK)
                                                || id.equals(ComposantId.BTN_APPLIS)) {
                                        btn.showMenu();
                                } else if (id.equals(ComposantId.BTN_CONNEXION)) {
                                        mediateur.ouvrirIdentification();
                                        message = i18nM.chargementFenetre(btn.getHtml());
                                } else if (id.equals(ComposantId.BTN_DECONNEXION)) {
                                        mediateur.deconnecterUtilisateur();
                                        Utilisateur utilisateurCourant = mediateur.getUtilisateur();
                                        message = i18nM.deconnexion(utilisateurCourant.getNomComplet());
                                } else if (id.equals(ComposantId.BTN_APPLIS)) {
                                        btn.getMenu().show(btn);
                                }
                                
                                if (!message.equals("")) {
                                        InfoLogger.display(i18nC.chargement(), message);
                                }
                        }  
                };
                return boutonEcouteur;
        }

        private Button getBoutonIdentification() {
                Button bouton = new Button(i18nC.identification(), boutonEcouteur);
                bouton.setId(ComposantId.BTN_CONNEXION);
                return bouton;
        }

        private SplitButton getBoutonAide() {
                MenuItem menuDoc = new MenuItem(i18nC.doc());
                menuDoc.addSelectionListener(new SelectionListener<MenuEvent>() {  
                        @Override
                        public void componentSelected(MenuEvent mEvent) {  
                                mediateur.ouvrirAide();
                        }  
                });
                menuDoc.setId(ComposantId.MENU_DOC);

                MenuItem menuApropos = new MenuItem(i18nC.apropos());
                menuApropos.addSelectionListener(new SelectionListener<MenuEvent>() {  
                        @Override
                        public void componentSelected(MenuEvent mEvent) {  
                                mediateur.ouvrirParametres();
                        }  
                });
                menuApropos.setId(ComposantId.MENU_APROPOS);

                MenuItem fenetreJournal = new MenuItem("Journal de l'application");
                fenetreJournal.addSelectionListener(new SelectionListener<MenuEvent>() {  
                        @Override
                        public void componentSelected(MenuEvent mEvent) {  
                                //Menu me = (Menu) mEvent.getComponent();
                                //MenuItem mi = (MenuItem) me.getItemByItemId(ComposantId.MENU_COMMENTAIRE);
                                //InfoLogger.display(Mediateur.i18nC.chargement(), i18nM.ouvertureLienExterne(mi.getHtml()));
                                mediateur.ouvrirFenetreJournal();
                        }
                });

                Menu menuAide = new Menu();
                menuAide.add(menuDoc);
                menuAide.add(menuApropos);
                menuAide.add(fenetreJournal);

                SplitButton boutonAvecMenus = new SplitButton(i18nC.aide());
                boutonAvecMenus.setId(ComposantId.BTN_AIDE);
                boutonAvecMenus.setIcon(Images.ICONES.aide());
                boutonAvecMenus.addSelectionListener(boutonEcouteur);
                boutonAvecMenus.setMenu(menuAide);
                return boutonAvecMenus;
        }

        private Button getBoutonContact() {
                Button menuContact = new Button(i18nC.contact());
                menuContact.setId(ComposantId.MENU_CONTACT);
                menuContact.addListener(Events.OnClick, new Listener<ButtonEvent>() {  
                        @Override
                        public void handleEvent(ButtonEvent mEvent) {
                                mediateur.ouvrirUrlExterne(ComposantId.MENU_CONTACT);
                        }  
                });
                menuContact.setId(ComposantId.MENU_CONTACT);
                menuContact.setIcon(Images.ICONES.flecheDedansDehors());

                return menuContact;
        }

        private SplitButton getBoutonApplications() {
                MenuItem menuCel = new MenuItem(i18nC.cel());
                menuCel.addSelectionListener(new SelectionListener<MenuEvent>() {  
                        @Override
                        public void componentSelected(MenuEvent mEvent) {  
                                Menu me = (Menu) mEvent.getComponent();
                                MenuItem mi = (MenuItem) me.getItemByItemId(ComposantId.MENU_CEL);
                                InfoLogger.display(i18nC.chargement(), i18nM.ouvertureAppliExterne(mi.getHtml()));
                                mediateur.ouvrirUrlExterne(ComposantId.MENU_CEL);
                        }  
                });
                menuCel.setId(ComposantId.MENU_CEL);

                Menu menu = new Menu();
                menu.add(menuCel);

                SplitButton boutonAvecMenus = new SplitButton(i18nC.applicationExterne());
                boutonAvecMenus.setId(ComposantId.BTN_APPLIS);
                boutonAvecMenus.addSelectionListener(boutonEcouteur);
                boutonAvecMenus.setMenu(menu);
                boutonAvecMenus.setIcon(Images.ICONES.flecheBascule());

                return boutonAvecMenus;
        }

        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof Information) {
                        Information info = (Information) nouvellesDonnees;
                        if (info.getType().equals("maj_utilisateur")) {
                                Utilisateur utilisateur = mediateur.getUtilisateur();
                                if (utilisateur.isIdentifie()) {
                                        conteneurHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add(i18nC.bienvenue()+utilisateur.getNomComplet())));
                                        identificationBouton.setText(i18nC.deconnexion());
                                        identificationBouton.setIcon(Images.ICONES.deconnexion());
                                        identificationBouton.setId(ComposantId.BTN_DECONNEXION);
                                } else {
                                        conteneurHtml.setHtml(Format.substitute(identificationInfoTpl, (new Params()).add(i18nC.modeAnonyme())));
                                        identificationBouton.setText(i18nC.identification());
                                        identificationBouton.setIcon(Images.ICONES.connexion());
                                        identificationBouton.setId(ComposantId.BTN_CONNEXION);
                                }
                        }
                } else  {       
                        Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
                }
                layout();
        }
}