Rev 832 | Rev 854 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampCaseACocher;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.InterneValeur;
import org.tela_botanica.client.modeles.UniteBase;
import org.tela_botanica.client.modeles.UniteRangement;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.event.SliderEvent;
import com.extjs.gxt.ui.client.store.ListStore;
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.Slider;
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.ComboBox;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.SliderField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.grid.AggregationRowConfig;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
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.EditorGrid;
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.SummaryType;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
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;
import com.google.gwt.i18n.client.NumberFormat;
public class CollectionFormDescription extends FormulaireOnglet implements Rafraichissable {
private Grid<UniteRangement> uniteRangementGrille = null;
private ComboBox<Valeur> etatUniteRangementCombo = null;
private Grid<UniteBase> uniteBaseGrille = null;
private ChampCaseACocher typePapierConservationChp = null;
private ChampCaseACocher methodeConservationChp = null;
private SliderField specimenFixationPourcentChp = null;
private SliderField etiquetteFixationPourcentChp = null;
public CollectionFormDescription(Formulaire formulaireCourrant) {
initialiserOnglet(formulaireCourrant);
setId("description");
setText(Mediateur.i18nC.collectionDescription());
FormLayout formulaireLayout = (FormLayout) this.getLayout();
formulaireLayout.setLabelAlign(LabelAlign.LEFT);
formulaireLayout.setLabelWidth(300);
creerUniteRangement();
creerUniteBase();
typePapierConservationChp = new ChampCaseACocher(i18nC.typePapierConservation(), "typePapier", true);
add(typePapierConservationChp);
methodeConservationChp = new ChampCaseACocher(i18nC.methodeConservation(), "methodeRangement", true);
add(methodeConservationChp);
Text fixationPoucentLabel = new Text(i18nC.fixationPourcent());
add(fixationPoucentLabel);
Slider specimenFixationPourcentSlider = new Slider();
specimenFixationPourcentSlider.setMinValue(0);
specimenFixationPourcentSlider.setMaxValue(100);
specimenFixationPourcentSlider.setValue(0);
specimenFixationPourcentSlider.setIncrement(1);
specimenFixationPourcentSlider.setMessage("{0} "+i18nC.specimenFixationPourcent());
specimenFixationPourcentSlider.addListener(Events.Change, new Listener<SliderEvent>() {
public void handleEvent(SliderEvent be) {
int pourcent = ((Slider) be.getComponent()).getValue();
specimenFixationPourcentChp.setFieldLabel(i18nC.specimenFixationPourcent()+" ("+pourcent+"%) ");
}
});
specimenFixationPourcentChp = new SliderField(specimenFixationPourcentSlider);
specimenFixationPourcentChp.setFieldLabel(i18nC.specimenFixationPourcent());
add(specimenFixationPourcentChp, new FormData(200, 0));
Slider etiquetteFixationPourcentSlider = new Slider();
etiquetteFixationPourcentSlider.setMinValue(0);
etiquetteFixationPourcentSlider.setMaxValue(100);
etiquetteFixationPourcentSlider.setValue(0);
etiquetteFixationPourcentSlider.setIncrement(1);
etiquetteFixationPourcentSlider.setMessage("{0} "+i18nC.etiquetteFixationPourcent());
etiquetteFixationPourcentSlider.addListener(Events.Change, new Listener<SliderEvent>() {
public void handleEvent(SliderEvent be) {
int pourcent = ((Slider) be.getComponent()).getValue();
etiquetteFixationPourcentChp.setFieldLabel(i18nC.etiquetteFixationPourcent()+" ("+pourcent+"%) ");
}
});
etiquetteFixationPourcentChp = new SliderField(etiquetteFixationPourcentSlider);
etiquetteFixationPourcentChp.setFieldLabel(i18nC.etiquetteFixationPourcent());
add(etiquetteFixationPourcentChp, new FormData(200, 0));
typePapierConservationChp = new ChampCaseACocher(i18nC.typePapierConservation(), "typePapier", true);
add(typePapierConservationChp);
layout();
}
private void creerUniteRangement() {
ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteRangementTitre());
uniteRangementGrille = creerGrilleUniteRangement();
panneauGrille.add(uniteRangementGrille);
ToolBar barreOutils = creerBarreOutilsGrilleUniteRangement();
panneauGrille.setTopComponent(barreOutils);
add(panneauGrille);
ListStore<Valeur> etatUniteRangementStore = new ListStore<Valeur>();
etatUniteRangementCombo = new ComboBox<Valeur>();
etatUniteRangementCombo.setFieldLabel(i18nC.collectionUniteRangementEtatGeneral());
etatUniteRangementCombo.setToolTip(i18nC.collectionUniteRangementEtatGeneralInfo());
etatUniteRangementCombo.setForceSelection(true);
etatUniteRangementCombo.setTriggerAction(TriggerAction.ALL);
etatUniteRangementCombo.setDisplayField("nom");
etatUniteRangementCombo.setStore(etatUniteRangementStore);
etatUniteRangementCombo.setEditable(false);
add(etatUniteRangementCombo, new FormData(300, 0));
mediateur.obtenirListeValeurEtRafraichir(this, "etatUniteRangement");
}
private ContentPanel creerPanneauContenantGrille(String titre) {
ContentPanel panneau = new ContentPanel();
panneau.setHeading(titre);
panneau.setIcon(Images.ICONES.table());
panneau.setLayout(new FitLayout());
panneau.setFrame(true);
return panneau;
}
private Grid<UniteRangement> creerGrilleUniteRangement() {
ListStore<UniteRangement> storeGrille = new ListStore<UniteRangement>();
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
NumberField champNombre = new NumberField();
champNombre.setFormat(NumberFormat.getFormat("#"));
CellEditor editeurNombre = new CellEditor(champNombre);
ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
nombreColonne.setEditor(editeurNombre);
colonnes.add(nombreColonne);
ListStore<InterneValeur> precisionStore = new ListStore<InterneValeur>();
precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, i18nC.precisionApproximatif()));
precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, i18nC.precisionExact()));
final ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
precisionCombo.setForceSelection(true);
precisionCombo.setTriggerAction(TriggerAction.ALL);
precisionCombo.setDisplayField("nom");
precisionCombo.setStore(precisionStore);
precisionCombo.setEditable(false);
CellEditor editeurPrecision = new CellEditor(precisionCombo) {
@Override
public Object preProcessValue(Object valeur) {
InterneValeur retour = null;
if (valeur != null ) {
if (precisionCombo.getStore().findModel("nom", valeur.toString()) != null) {
retour = precisionCombo.getStore().findModel("nom", valeur.toString());
} else if (precisionCombo.getStore().findModel("abr", valeur.toString()) != null) {
retour = precisionCombo.getStore().findModel("abr", valeur.toString());
}
}
return retour;
}
@Override
public Object postProcessValue(Object valeur) {
String retour = null;
if (valeur != null ) {
if (valeur instanceof InterneValeur) {
InterneValeur valeurInterne = (InterneValeur) valeur;
retour = valeurInterne.getNom();
}
}
return retour;
}
};
ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
precisionColonne.setEditor(editeurPrecision);
colonnes.add(precisionColonne);
TextField<String> formatChp = new TextField<String>();
formatChp.setAllowBlank(false);
ColumnConfig formatColonne = new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
formatColonne.setEditor(new CellEditor(formatChp));
colonnes.add(formatColonne);
GridSelectionModel<UniteRangement> modeleDeSelection = new GridSelectionModel<UniteRangement>();
ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
EditorGrid<UniteRangement> grilleUniteRangement = new EditorGrid<UniteRangement>(storeGrille, modeleDeColonnes);
grilleUniteRangement.setHeight(300);
grilleUniteRangement.setBorders(true);
grilleUniteRangement.setSelectionModel(modeleDeSelection);
grilleUniteRangement.getView().setForceFit(true);
grilleUniteRangement.getView().setAutoFill(true);
grilleUniteRangement.setAutoExpandColumn("type");
grilleUniteRangement.setStripeRows(true);
grilleUniteRangement.setTrackMouseOver(true);
mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteRangement");
return grilleUniteRangement;
}
private ToolBar creerBarreOutilsGrilleUniteRangement() {
ToolBar barreOutils = new ToolBar();
Button ajouterBouton = creerBoutonAjouterUniteRangement();
barreOutils.add(ajouterBouton);
barreOutils.add(new SeparatorToolItem());
Button supprimerBouton = creerBoutonSupprimerUniteRangement();
barreOutils.add(supprimerBouton);
return barreOutils;
}
private Button creerBoutonAjouterUniteRangement() {
Button bouton = new Button(i18nC.ajouter());
bouton.setIcon(Images.ICONES.ajouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteRangementSaisirType());
box.addCallback(new Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent be) {
final UniteRangement unite = new UniteRangement();
unite.setType(be.getValue());
unite.setTypeAutre(true);
uniteRangementGrille.getStore().add(unite);
}
});
}
});
return bouton;
}
private Button creerBoutonSupprimerUniteRangement() {
Button bouton = new Button(i18nC.supprimer());
bouton.setIcon(Images.ICONES.supprimer());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
UniteRangement uniteRangementSelectionnee = uniteRangementGrille.getSelectionModel().getSelectedItem();
if (uniteRangementSelectionnee == null) {
Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteRangement()));
} else if (uniteRangementSelectionnee.getTypeAutre() == false) {
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteRangementAjoute());
} else {
uniteRangementGrille.getStore().remove(uniteRangementSelectionnee);
}
}
});
return bouton;
}
private void creerUniteBase() {
ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteBaseTitre());
uniteBaseGrille = creerGrilleUniteBase();
panneauGrille.add(uniteBaseGrille);
ToolBar barreOutils = creerBarreOutilsGrilleUniteBase();
panneauGrille.setTopComponent(barreOutils);
add(panneauGrille);
}
private Grid<UniteBase> creerGrilleUniteBase() {
ListStore<UniteBase> storeGrille = new ListStore<UniteBase>();
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150));
NumberField champNombre = new NumberField();
champNombre.setFormat(NumberFormat.getFormat("#"));
CellEditor editeurNombre = new CellEditor(champNombre);
ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50);
nombreColonne.setEditor(editeurNombre);
colonnes.add(nombreColonne);
ListStore<InterneValeur> precisionStore = new ListStore<InterneValeur>();
precisionStore.add(new InterneValeur(UniteRangement.COMPTE_APPROXIMATIF, i18nC.precisionApproximatif()));
precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, i18nC.precisionExact()));
final ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>();
precisionCombo.setForceSelection(true);
precisionCombo.setTriggerAction(TriggerAction.ALL);
precisionCombo.setDisplayField("nom");
precisionCombo.setStore(precisionStore);
precisionCombo.setEditable(false);
CellEditor editeurPrecision = new CellEditor(precisionCombo) {
@Override
public Object preProcessValue(Object valeur) {
InterneValeur retour = null;
if (valeur != null ) {
if (precisionCombo.getStore().findModel("nom", valeur.toString()) != null) {
retour = precisionCombo.getStore().findModel("nom", valeur.toString());
} else if (precisionCombo.getStore().findModel("abr", valeur.toString()) != null) {
retour = precisionCombo.getStore().findModel("abr", valeur.toString());
}
}
return retour;
}
@Override
public Object postProcessValue(Object valeur) {
String retour = null;
if (valeur != null ) {
if (valeur instanceof InterneValeur) {
InterneValeur valeurInterne = (InterneValeur) valeur;
retour = valeurInterne.getNom();
}
}
return retour;
}
};
ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50);
precisionColonne.setEditor(editeurPrecision);
colonnes.add(precisionColonne);
TextField<String> formatChp = new TextField<String>();
formatChp.setAllowBlank(false);
ColumnConfig formatColonne = new ColumnConfig("format", i18nC.collectionUniteFormat(), 100);
formatColonne.setEditor(new CellEditor(formatChp));
colonnes.add(formatColonne);
ColumnConfig partNombreColonne = new ColumnConfig("nombre_part", i18nC.collectionUniteNbre(), 50);
partNombreColonne.setEditor(editeurNombre);
colonnes.add(partNombreColonne);
ColumnConfig partPrecisionColonne = new ColumnConfig("precision_part", i18nC.collectionUnitePrecision(), 50);
partPrecisionColonne.setEditor(editeurPrecision);
colonnes.add(partPrecisionColonne);
ColumnConfig spNombreColonne = new ColumnConfig("nombre_sp", i18nC.collectionUniteNbre(), 50);
spNombreColonne.setEditor(editeurNombre);
colonnes.add(spNombreColonne);
ColumnConfig spPrecisionColonne = new ColumnConfig("precision_sp", i18nC.collectionUnitePrecision(), 50);
spPrecisionColonne.setEditor(editeurPrecision);
colonnes.add(spPrecisionColonne);
GridSelectionModel<UniteBase> modeleDeSelection = new GridSelectionModel<UniteBase>();
ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
modeleDeColonnes.addHeaderGroup(0, 0, new HeaderGroupConfig(i18nC.collectionUniteBase(), 1, 4));
modeleDeColonnes.addHeaderGroup(0, 4, new HeaderGroupConfig(i18nC.collectionUniteBasePart(), 1, 2));
modeleDeColonnes.addHeaderGroup(0, 6, new HeaderGroupConfig(i18nC.collectionUniteBaseSp(), 1, 2));
AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>();
total.setHtml("type", "TOTAL");
total.setSummaryType("nombre", SummaryType.SUM);
total.setSummaryFormat("nombre", NumberFormat.getFormat("#"));
total.setSummaryType("nombre_part", SummaryType.SUM);
total.setSummaryFormat("nombre_part", NumberFormat.getFormat("#"));
total.setSummaryType("nombre_sp", SummaryType.SUM);
total.setSummaryFormat("nombre_sp", NumberFormat.getFormat("#"));
modeleDeColonnes.addAggregationRow(total);
EditorGrid<UniteBase> grilleUniteBase = new EditorGrid<UniteBase>(storeGrille, modeleDeColonnes);
grilleUniteBase.setHeight(200);
grilleUniteBase.setBorders(true);
grilleUniteBase.setSelectionModel(modeleDeSelection);
grilleUniteBase.getView().setForceFit(true);
grilleUniteBase.getView().setAutoFill(true);
grilleUniteBase.setAutoExpandColumn("type");
grilleUniteBase.setStripeRows(true);
grilleUniteBase.setTrackMouseOver(true);
mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteBase");
return grilleUniteBase;
}
private ToolBar creerBarreOutilsGrilleUniteBase() {
ToolBar barreOutils = new ToolBar();
Button ajouterBouton = creerBoutonAjouterUniteBase();
barreOutils.add(ajouterBouton);
barreOutils.add(new SeparatorToolItem());
Button supprimerBouton = creerBoutonSupprimerUniteBase();
barreOutils.add(supprimerBouton);
return barreOutils;
}
private Button creerBoutonAjouterUniteBase() {
Button bouton = new Button(i18nC.ajouter());
bouton.setIcon(Images.ICONES.ajouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteBaseSaisirType());
box.addCallback(new Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent be) {
final UniteBase unite = new UniteBase();
unite.setType(be.getValue());
unite.setTypeAutre(true);
uniteBaseGrille.getStore().add(unite);
}
});
}
});
return bouton;
}
private Button creerBoutonSupprimerUniteBase() {
Button bouton = new Button(i18nC.supprimer());
bouton.setIcon(Images.ICONES.supprimer());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
UniteBase uniteBaseSelectionnee = uniteBaseGrille.getSelectionModel().getSelectedItem();
if (uniteBaseSelectionnee == null) {
Info.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteBase()));
} else if (uniteBaseSelectionnee.getTypeAutre() == false) {
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteBaseAjoute());
} else {
uniteBaseGrille.getStore().remove(uniteBaseSelectionnee);
}
}
});
return bouton;
}
public void rafraichir(Object nouvellesDonnees) {
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("typeUniteRangement"))) {
Iterator<String> it = listeValeurs.keySet().iterator();
while (it.hasNext()) {
Valeur valeur = listeValeurs.get(it.next());
UniteRangement unite = new UniteRangement();
unite.setType(valeur.getNom());
unite.setTypeAutre(false);
uniteRangementGrille.getStore().add(unite);
}
} else if (listeValeurs.getId().equals(config.getListeId("typeUniteBase"))) {
Iterator<String> it = listeValeurs.keySet().iterator();
while (it.hasNext()) {
Valeur valeur = listeValeurs.get(it.next());
UniteBase unite = new UniteBase();
unite.setType(valeur.getNom());
unite.setTypeAutre(false);
uniteBaseGrille.getStore().add(unite);
}
} else if (listeValeurs.getId().equals(config.getListeId("etatUniteRangement"))) {
Formulaire.rafraichirComboBox(listeValeurs, etatUniteRangementCombo, "id_valeur");
} else {
GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null);
}
}
}