New file |
0,0 → 1,381 |
package org.tela_botanica.client.vues; |
|
import java.util.ArrayList; |
import java.util.List; |
|
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.images.Images; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Information; |
import org.tela_botanica.client.modeles.Personne; |
import org.tela_botanica.client.modeles.PersonneListe; |
import org.tela_botanica.client.modeles.ValeurListe; |
|
import com.extjs.gxt.ui.client.event.ButtonEvent; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.Events; |
import com.extjs.gxt.ui.client.event.GridEvent; |
import com.extjs.gxt.ui.client.event.KeyListener; |
import com.extjs.gxt.ui.client.event.Listener; |
import com.extjs.gxt.ui.client.event.SelectionListener; |
import com.extjs.gxt.ui.client.store.ListStore; |
import com.extjs.gxt.ui.client.store.Store; |
import com.extjs.gxt.ui.client.store.StoreEvent; |
import com.extjs.gxt.ui.client.widget.ContentPanel; |
import com.extjs.gxt.ui.client.widget.Info; |
import com.extjs.gxt.ui.client.widget.MessageBox; |
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.grid.ColumnConfig; |
import com.extjs.gxt.ui.client.widget.grid.ColumnModel; |
import com.extjs.gxt.ui.client.widget.grid.Grid; |
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel; |
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig; |
import com.extjs.gxt.ui.client.widget.grid.RowNumberer; |
import com.extjs.gxt.ui.client.widget.layout.FitLayout; |
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; |
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; |
import com.google.gwt.core.client.GWT; |
|
public class CollectionFormAuteur extends FormulaireOnglet implements Rafraichissable { |
|
private ContentPanel panneauPrincipal = null; |
private ToolBar barreOutils = null; |
private Grid<Personne> grille; |
|
private PersonneListe auteurs = null; |
private PersonneListe auteursAjoutes = null; |
private PersonneListe auteursSupprimes = null; |
private ComboBox<Personne> auteursSaisisComboBox = null; |
private Button auteursBoutonSupprimer = null; |
private Button auteursBoutonModifier = null; |
|
private static final String ETAT_AJOUTE = "A"; |
private static final String ETAT_SUPPRIME = "S"; |
|
public CollectionFormAuteur(Formulaire formulaireCourrant) { |
initialiserOnglet(formulaireCourrant); |
setId("auteur"); |
setText(Mediateur.i18nC.collectionAuteur()); |
setStyleAttribute("padding", "0"); |
|
panneauPrincipal = creerPanneauContenantGrille(); |
barreOutils = creerBarreOutilsGrille(); |
panneauPrincipal.setTopComponent(barreOutils); |
grille = creerGrille(); |
panneauPrincipal.add(grille); |
add(panneauPrincipal); |
|
initialiser(); |
} |
|
private void initialiser() { |
// Remise à zéro des modification dans la liste des auteurs |
auteursAjoutes = new PersonneListe(); |
auteursSupprimes = new PersonneListe(); |
|
// Actualisation de l'état des boutons de la barre d'outils |
actualiserEtatBoutonsBarreOutils(); |
} |
|
private ContentPanel creerPanneauContenantGrille() { |
ContentPanel panneau = new ContentPanel(); |
|
panneau.setHeading(i18nC.collectionAuteurTitre()); |
panneau.setIcon(Images.ICONES.table()); |
panneau.setLayout(new FitLayout()); |
panneau.setFrame(true); |
|
return panneau; |
} |
|
private ToolBar creerBarreOutilsGrille() { |
ToolBar barreOutils = new ToolBar(); |
|
Button ajouterPersonneBouton = creerBoutonAjouter(); |
barreOutils.add(ajouterPersonneBouton); |
|
barreOutils.add(new SeparatorToolItem()); |
|
auteursBoutonModifier = creerBoutonModifier(); |
barreOutils.add(auteursBoutonModifier); |
|
barreOutils.add(new SeparatorToolItem()); |
|
auteursBoutonSupprimer = creerBoutonSupprimer(); |
barreOutils.add(auteursBoutonSupprimer); |
|
barreOutils.add(new SeparatorToolItem()); |
|
Button rafraichirPersonneBouton = creerBoutonRafraichir(); |
barreOutils.add(rafraichirPersonneBouton); |
|
barreOutils.add(new SeparatorToolItem()); |
|
auteursSaisisComboBox = creerComboBoxAuteursSaisis(); |
barreOutils.add(auteursSaisisComboBox); |
|
Button ajouterAuteurSaisiBouton = creerBoutonAjouterAuteurSaisi(); |
barreOutils.add(ajouterAuteurSaisiBouton); |
|
return barreOutils; |
} |
|
private Button creerBoutonAjouter() { |
Button bouton = new Button(i18nC.ajouter()); |
bouton.setIcon(Images.ICONES.vcardAjouter()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
PersonneForm formulairePersonne = new PersonneForm(Formulaire.MODE_AJOUTER); |
formulairePersonne.setHeaderVisible(false); |
formulairePersonne.setTopComponent(null); |
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale |
//formulairePersonne.setBottomComponent(null); |
|
final FenetreForm fenetre = new FenetreForm(i18nC.personneModeAjout()); |
fenetre.add(formulairePersonne); |
fenetre.show(); |
} |
}); |
return bouton; |
} |
|
private Button creerBoutonModifier() { |
Button bouton = new Button(i18nC.modifier()); |
bouton.setIcon(Images.ICONES.vcardModifier()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem(); |
|
if (auteurSaisiSelectionne == null) { |
Info.display("Info", "Veuillez selectionner un auteur"); |
} else { |
PersonneForm formulairePersonne = new PersonneForm(Formulaire.MODE_MODIFIER); |
formulairePersonne.setHeaderVisible(false); |
formulairePersonne.setTopComponent(null); |
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale |
//formulairePersonne.setBottomComponent(null); |
// TODO : simplifier la gestion de l'ajout des données d'une Personne au form pour la modification... (pas besoin de passer par une liste). |
Information info = new Information("liste_personne"); |
PersonneListe personnes = new PersonneListe(); |
personnes.put(auteurSaisiSelectionne.getId(), auteurSaisiSelectionne); |
info.setDonnee(0, personnes); |
formulairePersonne.rafraichir(info); |
|
final FenetreForm fenetre = new FenetreForm(i18nC.personneModeModifier()); |
fenetre.add(formulairePersonne); |
fenetre.show(); |
} |
} |
}); |
return bouton; |
} |
|
private Button creerBoutonSupprimer() { |
Button bouton = new Button(i18nC.supprimer()); |
bouton.setIcon(Images.ICONES.vcardSupprimer()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem(); |
if (auteurSaisiSelectionne == null) { |
Info.display("Info", "Veuillez selectionner un auteur"); |
} else { |
supprimerAuteurDansGrille(auteurSaisiSelectionne); |
} |
} |
}); |
return bouton; |
} |
|
private Button creerBoutonRafraichir() { |
Button bouton = new Button(i18nC.rafraichir()); |
bouton.setIcon(Images.ICONES.rafraichir()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
// TODO : mettre en place le rafraichissement de la liste |
} |
}); |
return bouton; |
} |
|
private ComboBox<Personne> creerComboBoxAuteursSaisis() { |
ListStore<Personne> personneExistanteStore = new ListStore<Personne>(); |
personneExistanteStore.add(new ArrayList<Personne>()); |
|
ComboBox<Personne> comboBox = new ComboBox<Personne>(); |
comboBox.setWidth(200); |
comboBox.setEmptyText("Chercher une personne existante..."); |
comboBox.setTriggerAction(TriggerAction.ALL); |
comboBox.setEditable(true); |
comboBox.setDisplayField("fmt_nom_complet"); |
comboBox.setStore(personneExistanteStore); |
comboBox.addKeyListener(new KeyListener() { |
public void componentKeyUp(ComponentEvent ce) { |
ComboBox<Personne> comboBox = (ComboBox<Personne>) ce.getComponent(); |
if (!ce.isNavKeyPress() && comboBox.getRawValue() != null && comboBox.getRawValue().length() > 0) { |
obtenirAuteursSaisis(comboBox.getRawValue()); |
} |
} |
|
}); |
return comboBox; |
} |
|
private Button creerBoutonAjouterAuteurSaisi() { |
Button bouton = new Button("Ajouter"); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
Personne auteurSaisiSelectionne = auteursSaisisComboBox.getValue(); |
ajouterAuteurDansGrille(auteurSaisiSelectionne); |
} |
}); |
return bouton; |
} |
|
private void ajouterAuteurDansGrille(Personne auteur) { |
if (auteur != null) { |
// Ajout de la personne ajoutée à la liste |
if (auteur.getId() != null && !auteur.getId().equals("")) { |
auteursAjoutes.put(auteur.getId(), auteur); |
} |
|
// Définition de l'état |
auteur.set("etat", ETAT_AJOUTE); |
|
// Ajout à la grille |
grille.getStore().insert(auteur, 0); |
} |
} |
|
private void supprimerAuteurDansGrille(Personne auteur) { |
if (auteur != null) { |
// Ajout de la personne supprimée à la liste |
if ((auteur.get("etat") == null || !auteur.get("etat").equals(ETAT_AJOUTE)) && auteur.getId() != null && !auteur.getId().equals("")) { |
auteursSupprimes.put(auteur.getId(), auteur); |
} |
|
// Suppression de l'enregistrement de la grille |
grille.getStore().remove(auteur); |
} |
} |
|
private Grid<Personne> creerGrille() { |
ListStore<Personne> storeGrille = new ListStore<Personne>(); |
storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() { |
public void handleEvent(StoreEvent<Personne> ce) { |
actualiserEtatBoutonsBarreOutils(); |
} |
}); |
storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Personne>>() { |
public void handleEvent(StoreEvent<Personne> ce) { |
actualiserEtatBoutonsBarreOutils(); |
} |
}); |
|
RowNumberer pluginLigneNumero = new RowNumberer(); |
|
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>(); |
colonnes.add(pluginLigneNumero); |
colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150)); |
colonnes.add(new ColumnConfig("nom", i18nC.personneNom(), 75)); |
colonnes.add(new ColumnConfig("prenom", i18nC.personnePrenom(), 75)); |
colonnes.add(new ColumnConfig("prefixe", i18nC.personnePrefixe(), 50)); |
//colonnes.add(new ColumnConfig("truk_nom_autre", i18nC.personneNomAutre(), 200)); |
colonnes.add(new ColumnConfig("naissance_date", i18nC.date(), 75)); |
colonnes.add(new ColumnConfig("naissance_lieu", i18nC.lieu(), 100)); |
colonnes.add(new ColumnConfig("ce_deces", i18nC.personneDecedeeInterogation(), 50)); |
colonnes.add(new ColumnConfig("deces_date", i18nC.date(), 75)); |
colonnes.add(new ColumnConfig("deces_lieu", i18nC.lieu(), 100)); |
|
GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>(); |
|
ColumnModel modeleDeColonnes = new ColumnModel(colonnes); |
modeleDeColonnes.addHeaderGroup(0, 1, new HeaderGroupConfig(i18nC.personneIdentite(), 1, 4)); |
modeleDeColonnes.addHeaderGroup(0, 5, new HeaderGroupConfig(i18nC.personneNaissance(), 1, 2)); |
modeleDeColonnes.addHeaderGroup(0, 7, new HeaderGroupConfig(i18nC.personneDeces(), 1, 3)); |
|
Grid<Personne> grillePersonne = new Grid<Personne>(storeGrille, modeleDeColonnes); |
grillePersonne.setHeight("100%"); |
grillePersonne.setBorders(true); |
grillePersonne.setSelectionModel(modeleDeSelection); |
grillePersonne.addPlugin(pluginLigneNumero); |
grillePersonne.getView().setForceFit(true); |
grillePersonne.setAutoExpandColumn("fmt_nom_complet"); |
grillePersonne.setStripeRows(true); |
grillePersonne.setTrackMouseOver(true); |
|
return grillePersonne; |
} |
|
public void actualiserEtatBoutonsBarreOutils() { |
// Activation des boutons si la grille contient un élément |
if (grille.getStore().getCount() > 0) { |
auteursBoutonSupprimer.enable(); |
auteursBoutonModifier.enable(); |
} |
// Désactivation des boutons si la grille ne contient plus d'élément |
if (grille.getStore().getCount() == 0) { |
auteursBoutonSupprimer.disable(); |
auteursBoutonModifier.disable(); |
} |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
if (nouvellesDonnees instanceof Information) { |
Information info = (Information) nouvellesDonnees; |
rafraichirInformation(info); |
} else if (nouvellesDonnees instanceof ValeurListe) { |
ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees; |
rafraichirValeurListe(listeValeurs); |
} else { |
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null); |
} |
} |
|
private void rafraichirValeurListe(ValeurListe listeValeurs) { |
if (listeValeurs.getId().equals(config.getListeId(""))) { |
Formulaire.rafraichirComboBox(listeValeurs, null, null); |
} else { |
GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null); |
} |
} |
|
public void rafraichirInformation(Information info) { |
if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) { |
GWT.log("MESSAGES:\n"+info.getMessages().toString(), null); |
} |
String type = info.getType(); |
if (type.equals("liste_personne")) { |
if (info.getDonnee(0) != null) { |
PersonneListe personnes = (PersonneListe) info.getDonnee(0); |
List<Personne> liste = personnes.toList(); |
|
auteursSaisisComboBox.getStore().removeAll(); |
auteursSaisisComboBox.getStore().add(liste); |
auteursSaisisComboBox.expand(); |
} |
} else if (type.equals("liste_collection_a_personne")) { |
if (info.getDonnee(0) != null) { |
initialiser(); |
// TODO : passer à la méthode peupler un objet CollectionAPersonneListe et modifier le type de auteurs |
//auteurs = (CollectionAPersonneListe) info.getDonnee(0); |
peupler(); |
} |
} |
} |
|
private void peupler() { |
layout(); |
Info.display("Chargement des Auteurs", "ok"); |
} |
|
private void obtenirAuteursSaisis(String nom) { |
mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%"); |
} |
} |