Subversion Repositories eFlore/Applications.cel

Rev

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

package org.tela_botanica.client.vues.image;

import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.vues.ArbreMotsClesFiltreVue;
import org.tela_botanica.client.vues.observation.filtres.ArbreDateObservationFiltreVue;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;
import com.gwtext.client.widgets.layout.VerticalLayout;

/**
 * Panneau contenant les filtres qu'on peut appliquer aux images
 * 
 * @author aurelien
 * 
 */
public class PanneauFiltresImagesVues extends Panel {

        /**
         * Le médiateur associé
         */
        private ImageMediateur iMediateur = null;

        /**
         * L'arbre pour la recherche par mots clés
         */
        private ArbreMotsClesFiltreVue motsClesFiltres = null;
        
        /**
         * L'arbre pour la recherche par mots clés
         */
        private ArbreDateImageFiltreVue arbreDateImageFiltreVue = null;
        
        /**
         * La barre de recherche par commentaires
         */
        private BarreRechercheFiltreVue rechercheLibreFiltreVue = null;

        /**
         * Recherche par date
         */
        private DateFiltreVue dateFiltreVues = null;

        /**
         * Recherche par contenu du tampon
         */
        private SelectionFiltreVue selectionFiltreVue = null;

        /**
         * Bouton de validation
         */
        private Button valider = null;

        /**
         * Construcuteur sans argument (privé car on ne doit pas l'utiliser)
         */
        @SuppressWarnings("unused")
        private PanneauFiltresImagesVues() {
                super();
        }

        /**
         * Constructeur avec arguments
         * 
         * @param im
         *            le médiateur à associer
         */
        public PanneauFiltresImagesVues(ImageMediateur im) {
                
                super("Filtres");
                iMediateur = im;
                
                this.setCollapsible(true);
                setLayout(new RowLayout());

                rechercheLibreFiltreVue = new BarreRechercheFiltreVue(im);
                rechercheLibreFiltreVue.setTitle("Recherche libre");
                rechercheLibreFiltreVue.setCollapsible(true);
                add(rechercheLibreFiltreVue, new RowLayoutData());
                
                if(Ext.isIE()) {
                        add(rechercheLibreFiltreVue);
                        rechercheLibreFiltreVue.setHeight(110);
                } else {
                        add(rechercheLibreFiltreVue,new RowLayoutData(100));
                }

                arbreDateImageFiltreVue = new ArbreDateImageFiltreVue(im) ;
                arbreDateImageFiltreVue.setWidth("100%") ;
                arbreDateImageFiltreVue.setBorder(false);
                add(arbreDateImageFiltreVue, new RowLayoutData());

                motsClesFiltres = new ArbreMotsClesFiltreVue(im);
                motsClesFiltres.setTitle("Mots clés");
                motsClesFiltres.setAutoScroll(true);
                add(motsClesFiltres, new RowLayoutData());

                selectionFiltreVue = new SelectionFiltreVue(im);
                
                addListener(new ContainerListenerAdapter() {

                        public void onRender(Component component) {
                                // TODO Auto-generated method stub

                                rechercheLibreFiltreVue.ajouterListeners();
                                arbreDateImageFiltreVue.ajouterListeners();
                        }
                });
        }

        /**
         * Accesseur pour le filtre des mots clés
         * 
         * @return le filtre des mots clés
         */
        public ArbreMotsClesFiltreVue getMotsClesFiltre() {
                return motsClesFiltres;
        }

        /**
         * Accesseur pour le filtre général
         * 
         * @return le filtre général
         */
        public BarreRechercheFiltreVue getBarreRecherche() {
                return rechercheLibreFiltreVue;
        }

        /**
         * Renvoie un booléen indiquant si un des filtres a été modifié
         * 
         * @return true sur un des filtres est modifié, false sinon
         */
        public boolean renvoyerEtatFiltre() {

                return (motsClesFiltres.renvoyerEtatFiltre()
                                || rechercheLibreFiltreVue.renvoyerEtatFiltre()
                                || arbreDateImageFiltreVue.renvoyerEtatFiltre() 
                                || selectionFiltreVue.renvoyerEtatFiltre());
        }

        /**
         * Renvoie un tableau à 2 niveaux contenant des paires "nom_de_filtre",
         * "valeur"
         * 
         * @return un tableau contenant les noms et les valeurs à filtrer
         */
        public String[][] renvoyerValeursAFiltrer() {
                
                String[] filtresDates = arbreDateImageFiltreVue.renvoyerValeursAFiltrer();
                
                int lgSup = 0;
                
                if(filtresDates.length > 0) {
                        String[] nomFiltresDates = filtresDates[0].split(",");
                        String[] valFiltresDates = filtresDates[1].split(",");
                        lgSup = Math.max(nomFiltresDates.length, valFiltresDates.length);
                }
                
                String[][] filtres = new String[3 + lgSup][2];
                
                for(int i=3; i < filtres.length; i++) {
                        filtres[i][0] = filtresDates[0].split(",")[i - 3];
                        filtres[i][1] = filtresDates[1].split(",")[i -3];
                }
                
                filtres[0] = motsClesFiltres.renvoyerValeursAFiltrer();
                filtres[1] = rechercheLibreFiltreVue.renvoyerValeursAFiltrer();
                filtres[2] = selectionFiltreVue.renvoyerValeursAFiltrer();
                
                return filtres;
        }

}