1,102 → 1,111 |
package org.tela_botanica.client.vues; |
|
import java.util.LinkedList; |
import java.util.List; |
|
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable; |
import org.tela_botanica.client.composants.pagination.ProxyProjets; |
import org.tela_botanica.client.i18n.Constantes; |
import org.tela_botanica.client.images.Images; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.projet.Projet; |
import org.tela_botanica.client.modeles.projet.ProjetListe; |
import org.tela_botanica.client.util.Debug; |
import org.tela_botanica.client.util.UtilString; |
|
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.data.ModelData; |
import com.extjs.gxt.ui.client.data.ModelType; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.KeyListener; |
import com.extjs.gxt.ui.client.event.SelectionChangedEvent; |
import com.extjs.gxt.ui.client.event.SelectionChangedListener; |
import com.extjs.gxt.ui.client.store.ListStore; |
import com.extjs.gxt.ui.client.widget.ContentPanel; |
import com.extjs.gxt.ui.client.widget.button.Button; |
import com.extjs.gxt.ui.client.widget.form.ComboBox; |
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; |
import com.extjs.gxt.ui.client.widget.layout.FitLayout; |
import com.google.gwt.core.client.GWT; |
import com.extjs.gxt.ui.client.widget.form.Field; |
import com.extjs.gxt.ui.client.widget.form.Validator; |
import com.extjs.gxt.ui.client.widget.layout.FormLayout; |
import com.google.gwt.event.dom.client.KeyCodes; |
|
public class FiltreVue extends ContentPanel implements Rafraichissable { |
private Mediateur mediateur = null; |
private Constantes i18nC = null; |
private ListStore<Projet> projets = null; |
private Projet tousProjets = null; |
|
private ComboBox<Projet> listeProjets; |
private ProjetListe projetsCache = null; |
private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null; |
|
public FiltreVue(Mediateur mediateurCourrant) { |
|
mediateur = mediateurCourrant; |
i18nC = Mediateur.i18nC; |
|
tousProjets = new Projet(); |
tousProjets.set("nom", i18nC.tousProjets()); |
|
setHeading(i18nC.titreFiltre()); |
setLayout(new FitLayout()); |
setLayout(new FormLayout()); |
setLayoutOnChange(true); |
|
chargerProjets(); |
initialiserListeProjets(); |
} |
/*********************************/ |
/** Champ Projets **/ |
/*********************************/ |
|
private void chargerProjets() { |
mediateur.selectionnerProjet(this, null); |
} |
ModelType modelTypeProjets = new ModelType(); |
modelTypeProjets.setRoot("projets"); |
modelTypeProjets.setTotalName("nbElements"); |
modelTypeProjets.addField("cpr_nom"); |
modelTypeProjets.addField("cpr_id_projet"); |
|
private void initialiserListeProjets() { |
String displayNameProjets = "cpr_nom"; |
ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(); |
|
projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets); |
projetsCombo.getCombo().setEmptyText("Tous les projets"); |
projetsCombo.getCombo().setAllowBlank(true); |
projetsCombo.getCombo().setForceSelection(false); |
projetsCombo.getCombo().setEditable(true); |
projetsCombo.getCombo().setValidator(new Validator() { |
public String validate(Field<?> field, String value) { |
String retour = null; |
if (field.getRawValue().equals("")) { |
field.setValue(null); |
} else if (projetsCombo.getStore().findModel("cpr_nom", field.getRawValue()) == null) { |
String contenuBrut = field.getRawValue(); |
field.setValue(null); |
field.setRawValue(contenuBrut); |
retour = "Veuillez sélectionner une valeur ou laisser le champ vide"; |
} |
return retour; |
} |
}); |
|
// Ajout de la sélection des projets |
listeProjets = new ComboBox<Projet>(); |
projets = new ListStore<Projet>(); |
listeProjets.setStore(projets); |
listeProjets.setEditable(false); |
listeProjets.setDisplayField("nom"); |
listeProjets.setEmptyText(i18nC.txtListeProjetDefaut()); |
listeProjets.setTypeAhead(true); |
listeProjets.setTriggerAction(TriggerAction.ALL); |
final Projet tousProjets = new Projet(); |
tousProjets.set("nom", i18nC.tousProjets()); |
|
|
// Ajout d'un écouteur pour le changement => enregistre la valeur courante du projet dans le registre |
listeProjets.addSelectionChangedListener(new SelectionChangedListener<Projet>() { |
|
public void selectionChanged(SelectionChangedEvent<Projet> se) { |
projetsCombo.getCombo().addSelectionChangedListener(new SelectionChangedListener<ModelData>() { |
public void selectionChanged(SelectionChangedEvent<ModelData> se) { |
if (se.getSelectedItem() != null) { |
mediateur.activerChargement(i18nC.chargement()); |
mediateur.selectionnerProjetCourant(se.getSelectedItem()); |
Projet projet = new Projet (se.getSelectedItem()); |
mediateur.selectionnerProjetCourant(projet); |
} |
} |
}); |
|
add(listeProjets); |
projetsCombo.getCombo().addKeyListener(new KeyListener() { |
public void componentKeyUp(ComponentEvent ce) { |
projetsCombo.getCombo().setRawValue("Tous les projets"); |
projetsCombo.getCombo().setValue(null); |
projetsCombo.getCombo().clearSelections(); |
if (ce.getKeyCode() == KeyCodes.KEY_ENTER) { |
mediateur.selectionnerProjetCourant(tousProjets); |
projetsCombo.getCombo().setValue(tousProjets); |
projetsCombo.getCombo().setVisible(false); |
projetsCombo.getCombo().collapse(); |
projetsCombo.getCombo().setVisible(true); |
} |
} |
}); |
|
private void afficherListeProjets(List projetsRecus) { |
projets.removeAll(); |
|
List<Projet> selection = new LinkedList<Projet>(); |
Projet tousProjets = new Projet(); |
tousProjets.set("nom", i18nC.tousProjets()); |
projetsRecus.add(0, tousProjets); |
selection.add(tousProjets); |
projets.add(projetsRecus); |
listeProjets.setStore(projets); |
listeProjets.setSelection(selection); |
layout(); |
add(projetsCombo); |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
if (nouvellesDonnees instanceof ProjetListe) { |
projetsCache = (ProjetListe) nouvellesDonnees; |
Registry.register(RegistreId.PROJETS, projetsCache); |
afficherListeProjets(projetsCache.toList()); |
} else if (nouvellesDonnees instanceof List) { |
List<Projet> projets = (List) nouvellesDonnees; |
Registry.register(RegistreId.PROJETS, projets); |
afficherListeProjets(projets); |
} else { |
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null); |
// empty ... |
} |
} |
} |