Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.vues.pictoflora.moteur;

import java.util.List;

import org.tela_botanica.del.client.modeles.Protocole;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;

public class MoteurPictofloraVue extends Composite implements MoteurPictofloraPresenteur.Vue {

        private final Panel panneauChargement = new FlowPanel();

        interface MyUiBinder extends UiBinder<Widget, MoteurPictofloraVue> {
        }

        private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

        @UiField
        Panel panneauResultats, zoneRecherche;
        
        @UiField
        ListBox listeProtocoles;
        
        // Constructeur
        public MoteurPictofloraVue() {
                initWidget(uiBinder.createAndBindUi(this));
        }

        public Panel getPanneauChargement() {
                return panneauChargement;
        }

        // Cette méthode est public car appelé dans GestionnaireHistorique
        public Panel getZoneResultats() {
                return panneauResultats;
        }

        public void setPanneauResultats(Panel panneauResultats) {
                this.panneauResultats = panneauResultats;
        }

        public HasWidgets getZoneRecherche() {
                return zoneRecherche;
        }

        @Override
        public void ajouterVue(HasWidgets composite) {
                composite.add(this.asWidget());
        }
        
        public void setListeProtocoles(ListBox listeProtocoles) {
                this.listeProtocoles = listeProtocoles;
        }
        
        public HasChangeHandlers getListeProtocoles() {
                return listeProtocoles;
        }
        
        public void ajouterProtocole(String NomProtocole, String idProtocole) {
                listeProtocoles.addItem(NomProtocole, idProtocole);
        }

        public void selectionnerProtocole(int index) {
                listeProtocoles.setSelectedIndex(index);
        }
        
        @Override
        public String getNomProtocoleSelectionne() {
                return listeProtocoles.getItemText((listeProtocoles.getSelectedIndex()));
        }

        @Override
        public int getIdProtocoleSelectionne() {
                return Integer.parseInt(listeProtocoles.getValue((listeProtocoles.getSelectedIndex())));
        }
        @Override
        public void ajouterProtocoles(List<Protocole> protocoles) {
                SelectElement selectElement = SelectElement.as(listeProtocoles.getElement());
                NodeList<OptionElement> options = selectElement.getOptions();
                // Capitalisation d'images est toujours en premier. Il a l'id 3. Oui mais,
                // comme les chiens galeux qui ont codé cette appli ont placé les résultats
                // dans un List et non un Map, on a accès aux éléments par leur ordre...
                // qui n'est pas garanti puisque le service retourne un Objet et non un
                // Tableau... sur qui on tape ?
                // Du coup tant pis, on fait comme si l'ordre était garanti, on n'a pas
                // le choix :  Capitalisation d'Images est le 2e élément (index 1)
            listeProtocoles.addItem(protocoles.get(1).getNom(), protocoles.get(1).getId()+"");
                // on ajoute les autres meme si on les aime pas :P
            for (int i = 0; i < protocoles.size(); i++) {
                        if (i != 1) { // bouuu l'astuce cracra
                                listeProtocoles.addItem(protocoles.get(i).getNom(), protocoles.get(i).getId()+"");
                                options.getItem(i).setTitle(protocoles.get(i).getDescription());
                        }
            }
        }

        @Override
        public void mettreAJourDescriptionProtocoleCourant(
                        Protocole protocoleCourant) {
                listeProtocoles.setTitle(protocoleCourant.getDescription());
        }

        @Override
        public void selectionnerProtocoleParProtocole(Protocole protocole) {
                int index = 0;
                for (int i = 0; i < listeProtocoles.getItemCount(); i++) {
                        int id = Integer.parseInt(listeProtocoles.getValue(i));
                        if (id == protocole.getId()) {
                                index = i;
                        }
                }
                listeProtocoles.setSelectedIndex(index);
        }

}