Subversion Repositories eFlore/Applications.cel

Rev

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

package org.tela_botanica.client.vues;

import org.tela_botanica.client.CarnetEnLigneMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Utilisateur;

import com.google.gwt.user.client.Timer;
import com.gwtext.client.core.EventCallback;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.ListenerConfig;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
import com.gwtext.client.widgets.layout.HorizontalLayout;
import com.gwtext.client.widgets.layout.RowLayout;

public class ListeUtilisateurAdminVue extends Window implements Rafraichissable {

        private CarnetEnLigneMediateur cMediateur = null ;
        private ComboBox listeUtil = null ;
        private Store storeUtil = null ;
        private com.gwtext.client.widgets.Button OK = null;
        private com.gwtext.client.widgets.Button annuler = null;
        private boolean selectionUtilisateur =false;
        
        public String utilisateur = null;
        public String idUtilisateur = null; 
        
        private final int KEY_ALT = 18;
        private final int KEY_BACKSPACE = 8;
        private final int KEY_CTRL = 17;
        private final int KEY_DELETE = 46;
        private final int KEY_DOWN = 40;
        private final int KEY_END = 35;
        private final int KEY_ENTER = 13;
        private final int KEY_ESCAPE = 27;
        private final int KEY_HOME = 36;
        private final int KEY_LEFT = 37;
        private final int KEY_PAGEDOWN = 34;
        private final int KEY_PAGEUP = 33;
        private final int KEY_RIGHT = 39;
        private final int KEY_SHIFT = 16;
        private final int KEY_TAB = 9;
        private final int KEY_UP = 38;
        
        private Timer timerCompletion = null;
        
        public ListeUtilisateurAdminVue(CarnetEnLigneMediateur cMed) {
                super("Choisir un utilisateur") ;
                
                this.cMediateur = cMed;
                
                listeUtil=new ComboBox("Utilisateurs","courriel",280);  
                
                this.setLayout(new RowLayout());
                
                final String resultTplUtil = "<div class=\"search-item-utilisateur\">{courriel}</div>";  
                
                utilisateur = cMediateur.getUtilisateur().getLoginUtilisateurConsulte();
                idUtilisateur = Utilisateur.getInstance().getIdentifiantUtilisateurConsulte();

                listeUtil.setTpl(resultTplUtil);
                listeUtil.setMode(ComboBox.REMOTE);
                listeUtil.setItemSelector("div.search-item-utilisateur");
                listeUtil.setHideTrigger(true);
                
                listeUtil.setDisplayField("courriel");
                
                listeUtil.setLoadingText("Recherche..."); 
                listeUtil.setValue(utilisateur);
                
                OK= new com.gwtext.client.widgets.Button("OK");
                annuler = new com.gwtext.client.widgets.Button("Annuler");
                
                Panel boutonPanel = new Panel();
                boutonPanel.setLayout(new HorizontalLayout(0));
                        
                add(listeUtil);
                
                boutonPanel.add(OK);
                boutonPanel.add(annuler);
                
                add(boutonPanel);
                
                this.setSize(300, 75);
                
                OK.addListener(new ButtonListenerAdapter() {

                        @Override
                        public void onClick(com.gwtext.client.widgets.Button button,
                                        EventObject e) {
                        if(valider()) {
                                cMediateur.changerIdentite(idUtilisateur,utilisateur);
                                close();
                        }
                        }
                });
                
                annuler.addListener(new ButtonListenerAdapter() {

                        @Override
                        public void onClick(com.gwtext.client.widgets.Button button,
                                        EventObject e) {
                                close();
                        }
                });
                
            ListenerConfig listenerConfigAutocompletion=new ListenerConfig();
            listenerConfigAutocompletion.setDelay(200);
            listenerConfigAutocompletion.setStopPropagation(false);
            listenerConfigAutocompletion.setStopEvent(false);
                
                listeUtil.addKeyPressListener(new EventCallback() {

                        @Override
                        public void execute(EventObject e) {
                                
                                switch(e.getKey()) {
                      
                                        case KEY_ALT:
                        case KEY_CTRL:
                        case KEY_DOWN:
                        case KEY_END:
                        case KEY_ESCAPE:
                        case KEY_HOME:
                        case KEY_LEFT:
                        case KEY_PAGEDOWN:
                        case KEY_PAGEUP:
                        case KEY_RIGHT:
                        case KEY_SHIFT:
                        case KEY_TAB:
                        case KEY_UP:
                        
                        break;
                        
                        case KEY_ENTER:
                          
                                 if(selectionUtilisateur) {
                                         selectionUtilisateur=false;
                                 }
                                else {
                                        if(valider()) {
                                                cMediateur.changerIdentite(idUtilisateur,utilisateur);
                                        }
                                        close();
                                 }
                            break;  
                            
                            default:
                                if(timerCompletion != null) {
                                        timerCompletion.cancel();
                                }
                                timerCompletion = new Timer() {
                                                        public void run() {
                                                obtenirListeUtilisateur();
                                                        }       
                                };
                                timerCompletion.schedule(250);
                            break;
                                }
                        }
                }, listenerConfigAutocompletion);
                
                listeUtil.addListener(new ComboBoxListenerAdapter() {

                        @Override
                        public void onSelect(ComboBox comboBox, Record record, int index) {
                                
                                utilisateur = record.getAsString("courriel");
                                idUtilisateur = record.getAsString("id_utilisateur");
                                listeUtil.setValue(utilisateur);
                                
                        }
                });
        }
        
        @Override
        public void rafraichir(Object nouvelleDonnees,
                        boolean repandreRaffraichissement) {
                
                if(nouvelleDonnees instanceof String[][]) {
                
                        Object[][] utilData = (Object[][])nouvelleDonnees ;
                        
                        FieldDef defId = new StringFieldDef("id_utilisateur");
                        FieldDef defCourriel = new StringFieldDef("courriel");
                        FieldDef[] defTab = {defId,defCourriel};
                        
                        RecordDef rd = new RecordDef(defTab);
                        
                        final MemoryProxy dataProxy = new MemoryProxy(utilData);
                        final ArrayReader reader = new ArrayReader(rd);         
                        
                        storeUtil =new Store(dataProxy,reader);
                        storeUtil.load() ;
        
                        listeUtil.setStore(storeUtil);
                        
                        // Tentative de corriger un bug insupportable de la taille de la liste
                        // mais ça ne marche pas à tous les coups
                        listeUtil.collapse();
                        listeUtil.expand();
                }
                
        }
        
        private boolean valider() {
                if(listeUtil.getValue() != null) {
                        return true;
                }
                return false;
        }
        
        public void obtenirListeUtilisateur() {
                
                String valeur = listeUtil.getRawValue();
        cMediateur.obtenirListeUtilisateurs(valeur,this) ;
        }

        public void focusChampUtilisateur() {
                listeUtil.focus();
        }

}