Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.composants;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.ListePaginable;

import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.KeyListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.event.dom.client.KeyCodes;

public class ChampFiltreRecherche {
        
        private ListePaginable listePaginable;
        private Mediateur mediateur;
        private ToolBar parent;
        private TextField<String> filtre;
        private Button annulerFiltre;
        private boolean filtreActive = false;
        private String termeRecherche = "";
        private Text labelFiltre;

        public ChampFiltreRecherche(Mediateur mediateur, ToolBar parent, ListePaginable listePaginable) {
                //Séparation
                this.mediateur = mediateur;
                this.parent = parent;
                this.listePaginable = listePaginable;
                parent.add(new SeparatorToolItem());
                                
                labelFiltre = new Text("Recherche : ");
                labelFiltre.setStyleAttribute("padding-right", "5px");
                parent.add(labelFiltre);
                
                filtre = new TextField<String>();
                filtre.setWidth(150);
                parent.add(filtre);
                
                annulerFiltre = new Button();
                annulerFiltre.setIcon(Images.ICONES.annuler());
                annulerFiltre.setVisible(false);
                parent.add(annulerFiltre);
                
                parent.add(new FillToolItem());
                ajouterListeners();
        }
        
        private void ajouterListeners() {
                annulerFiltre.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce)   {
                                filtre.setValue("");
                                termeRecherche = "";
                                filtreActive = false;
                                listePaginable.filtrerParNom("");
                                labelFiltre.setStyleAttribute("font-weight", "normal");
                                changerEtat();
                        }
                });
                
                filtre.addKeyListener(new KeyListener(){
                        public void componentKeyUp(ComponentEvent ce)   {
                                if (ce.getKeyCode() == KeyCodes.KEY_ENTER) {
                                        termeRecherche = filtre.getValue();
                                        if (termeRecherche == null || termeRecherche.equals(""))        {
                                                filtreActive = false;
                                                labelFiltre.setStyleAttribute("font-weight", "normal");
                                                termeRecherche= "";
                                                listePaginable.filtrerParNom("");
                                                changerEtat();
                                        } else  {
                                                listePaginable.filtrerParNom(termeRecherche);
                                                labelFiltre.setStyleAttribute("font-weight", "bold");
                                                filtreActive = true;
                                                changerEtat();
                                        }
                                }
                        }
                });
        }
        
        private void changerEtat() {
                if (filtreActive == true) {
                        annulerFiltre.setVisible(true);
                } else {
                        annulerFiltre.setVisible(false);
                }
        }
        
        public void setListePaginable(ListePaginable listePaginable) {
                this.listePaginable = listePaginable;
        }
}