/trunk/src/org/tela_botanica/client/vues/InformationRepartitionVue.java |
---|
New file |
0,0 → 1,90 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import com.google.gwt.user.client.ui.Image; |
import com.gwtext.client.widgets.Panel; |
/** |
* Un panneau affichant la repartition d'une plante |
* |
* @author David Delon |
* |
*/ |
public class InformationRepartitionVue extends Panel implements Rafraichissable { |
/** |
* Le médiateur associé |
*/ |
private ObservationMediateur observationMediateur = null; |
/** |
* l'image à afficher |
*/ |
private Image image = new Image(); |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
@SuppressWarnings("unused") |
private InformationRepartitionVue() { |
super(); |
} |
/** |
* Constructeur avec argument |
* @param obs le médiateur à associer |
*/ |
public InformationRepartitionVue(ObservationMediateur obs) { |
this.observationMediateur = obs; |
image.setPixelSize(150, 150); |
add(image); |
// on ajoute les listeners |
ajouterListeners(); |
} |
/** |
* Affichage carte de repartition |
* |
*/ |
public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) { |
// si on recoit une String contenant une URL |
if (nouvelleDonnees instanceof String) { |
String urlImage=(String) nouvelleDonnees; |
if (urlImage.length()==0) { |
image.setUrl(""); |
} |
else { |
image.setUrl(urlImage); |
} |
} |
} |
/** |
* Ajoute les listeners pour la gestions d'évènement |
*/ |
public void ajouterListeners() { |
} |
} |
/trunk/src/org/tela_botanica/client/vues/PanneauFiltresObservationVues.java |
---|
New file |
0,0 → 1,112 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.widgets.Button; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.event.ButtonListenerAdapter; |
import com.gwtext.client.widgets.layout.VerticalLayout; |
/** |
* Panneau contenant les filtres qu'on peut appliquer aux images |
* |
* @author aurelien |
* |
*/ |
public class PanneauFiltresObservationVues extends Panel { |
/** |
* Le médiateur associé |
*/ |
private ObservationMediateur observationMediateur = null; |
/** |
* L'arbre pour la recherche par mots clés |
*/ |
private ArbreLocaliteObservationFiltreVue arbreLocaliteObservationFiltreVue = null; |
/** |
* Bouton de validation |
*/ |
private Button valider = null; |
/** |
* Construcuteur sans argument (privé car on ne doit pas l'utiliser) |
*/ |
@SuppressWarnings("unused") |
private PanneauFiltresObservationVues() { |
super(); |
} |
/** |
* Constructeur avec arguments |
* |
* @param im |
* le médiateur à associer |
*/ |
public PanneauFiltresObservationVues(ObservationMediateur obs) { |
super("Rechercher des Observations"); |
observationMediateur = obs; |
this.setCollapsible(true); |
setLayout(new VerticalLayout()); |
arbreLocaliteObservationFiltreVue = new ArbreLocaliteObservationFiltreVue(obs); |
add(arbreLocaliteObservationFiltreVue); |
Panel panelValidation = new Panel(); |
valider = new Button("Rechercher"); |
panelValidation.add(valider); |
panelValidation.setBorder(false); |
add(panelValidation); |
valider.addListener(new ButtonListenerAdapter() { |
public void onClick(Button button, EventObject e) { |
// iMediateur.obtenirPhotoGalerie(iMediateur.getGalerieImage()); |
} |
}); |
} |
/** |
* Accesseur pour le filtre des mots clés |
* |
* @return le filtre des mots clés |
*/ |
public ArbreLocaliteObservationFiltreVue getArbreLocaliteObservationFiltreVue() { |
return arbreLocaliteObservationFiltreVue; |
} |
/** |
* Renvoie un booléen indiquant si un des filtres a été modifié |
* |
* @return true sur un des filtres est modifié, false sinon |
*/ |
public boolean renvoyerEtatFiltre() { |
return (arbreLocaliteObservationFiltreVue.renvoyerEtatFiltre()); |
} |
/** |
* Renvoie un tableau à 2 niveaux contenant des paires "nom_de_filtre", |
* "valeur" |
* |
* @return un tableau contenant les noms et les valeurs à filtrer |
*/ |
public String[][] renvoyerValeursAFiltrer() { |
String[][] filtres = { arbreLocaliteObservationFiltreVue.renvoyerValeursAFiltrer(), |
}; |
return filtres; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ImageGeneriqueVue.java |
---|
New file |
0,0 → 1,90 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import com.google.gwt.user.client.ui.Image; |
import com.gwtext.client.widgets.Panel; |
/** |
* Un panneau affichant une image generique provenant d eflore |
* |
* @author David Delon |
* |
*/ |
public class ImageGeneriqueVue extends Panel implements Rafraichissable { |
/** |
* Le médiateur associé |
*/ |
private ObservationMediateur observationMediateur = null; |
/** |
* l'image à afficher |
*/ |
private Image image = new Image(); |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
@SuppressWarnings("unused") |
private ImageGeneriqueVue() { |
super(); |
} |
/** |
* Constructeur avec argument |
* @param obs le médiateur à associer |
*/ |
public ImageGeneriqueVue(ObservationMediateur obs) { |
this.observationMediateur = obs; |
image.setPixelSize(150, 150); |
add(image); |
// on ajoute les listeners |
ajouterListeners(); |
} |
/** |
* Affichage image generique |
* |
*/ |
public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) { |
// si on recoit une String contenant une URL |
if (nouvelleDonnees instanceof String) { |
String urlImage=(String) nouvelleDonnees; |
if (urlImage.length()==0) { |
image.setUrl(""); |
} |
else { |
image.setUrl(urlImage); |
} |
} |
} |
/** |
* Ajoute les listeners pour la gestions d'évènement |
*/ |
public void ajouterListeners() { |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ArbreLocaliteObservationFiltreVue.java |
---|
New file |
0,0 → 1,331 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.interfaces.Filtrable; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import com.google.gwt.user.client.ui.Label; |
import com.gwtext.client.data.Node; |
import com.gwtext.client.data.NodeTraversalCallback; |
import com.gwtext.client.data.Tree; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.event.PanelListenerAdapter; |
import com.gwtext.client.widgets.tree.TreeNode; |
import com.gwtext.client.widgets.tree.TreePanel; |
/** |
* fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton |
* cliquable |
* |
* @author aurelien |
* |
*/ |
public class ArbreLocaliteObservationFiltreVue extends Panel implements Rafraichissable, |
Filtrable { |
/** |
* Le médiateur associé à la vue |
*/ |
private ObservationMediateur observationMediateur = null; |
/** |
* Les localites en cours |
*/ |
private String localitesEncours = ""; |
/** |
* Le treepanel qui affiche l'arbre |
*/ |
private TreePanel arbreLocalites = null; |
/** |
* booléen d'initialisation |
*/ |
private boolean estInstancie = false; |
/** |
* booléen d'etat |
*/ |
private boolean filtreModifie = false; |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
@SuppressWarnings("unused") |
private ArbreLocaliteObservationFiltreVue() { |
super(); |
} |
/** |
* Constructeur avec paramètres |
* |
* @param im |
* le médiateur à associer |
*/ |
public ArbreLocaliteObservationFiltreVue(ObservationMediateur obs) { |
// on crée le panel |
super(); |
this.observationMediateur = obs; |
// on crée le conteneur de l'arbre |
Label labelRecherche = new Label("Localités :"); |
arbreLocalites = new TreePanel(); |
this.setPaddings(5); |
this.setBorder(false); |
this.setCollapsible(true); |
this.setAutoWidth(true); |
add(labelRecherche); |
// on ajoute les listeners |
ajouterListenersPanel(); |
estInstancie = false; |
} |
/** |
* Ajoute les listeners pour le rendu du panel |
*/ |
private void ajouterListenersPanel() { |
this.addListener(new PanelListenerAdapter() { |
// on instancie réellement les composants au moment du rendu pour |
// accélérer l'affichage |
// et éviter des bugs |
@Override |
public void onRender(Component component) { |
// on interdit le drag and drop dans l'arbre |
arbreLocalites.setEnableDD(false); |
arbreLocalites.setId("x-view-tree-filter"); |
arbreLocalites.setAutoWidth(false); |
arbreLocalites.setAutoScroll(true); |
arbreLocalites.setBorder(false); |
// on crée une racine pour l'arbre |
TreeNode root = new TreeNode("Tags"); |
root.setId("racine_filtre"); |
String[] usObject = { "Localités", "racine" }; |
root.setUserObject(usObject); |
arbreLocalites.setRootNode(root); |
arbreLocalites.setRootVisible(true); |
arbreLocalites.setBorder(false); |
// on met en forme le layout |
((Panel) component).add(arbreLocalites); |
// on ajoute les listeners d'évenements |
ajouterListeners(); |
// et on demande l'arbre des localites |
observationMediateur.obtenirArbreLocalites(observationMediateur.getPanneauFiltres().getArbreLocaliteObservationFiltreVue()); |
// enfin on considère le composant comme instancié |
estInstancie = true; |
} |
}); |
} |
/** |
* ajoute les listeners pour les boutons et le cochage des mots clés |
*/ |
private void ajouterListeners() { |
} |
/** |
* Méthode héritée de l'interface rafraichissable |
*/ |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
// si on a reçu un arbre |
if (nouvelleDonnees instanceof Tree) { |
Tree nouvelArbre = (Tree) nouvelleDonnees; |
// on vide tous les noeuds |
arbreLocalites.getRootNode().eachChild(new NodeTraversalCallback() { |
public boolean execute(Node node) { |
node.remove(); |
return true; |
} |
}); |
// et on recopie le nouvel arbre |
copierFilsNoeud(nouvelArbre.getRootNode(), arbreLocalites |
.getRootNode()); |
// si l'arbre n'était pas encore considéré comme instancié |
if (!estInstancie) { |
// on signale que oui |
estInstancie = true; |
} |
// l'état du filtre est réinitialisé |
filtreModifie = false; |
show(); |
} |
if (nouvelleDonnees instanceof TreeNode) { |
TreeNode nd = (TreeNode) nouvelleDonnees; |
// si le noeud n'existe pas déjà c'est un ajout |
if (arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre") == null) { |
// donc on ne fait rien de spécial |
} |
// si le noeud existe déjà c'est un déplacement |
else { |
// alors on supprime d'abord le noeud concerné |
arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre") |
.remove(); |
} |
// on cherche le père du nouveau noeud |
Node ndPereOriginal = nd.getParentNode(); |
String idPereFiltre = ndPereOriginal.getId() + "_filtre"; |
String[] usObj = (String[]) nd.getUserObject(); |
TreeNode child = new TreeNode(usObj[0]); |
child.setId(usObj[1] + "_filtre"); |
child.setChecked(false); |
child.setUserObject(usObj); |
arbreLocalites.getNodeById(idPereFiltre).appendChild(child); |
// et on ajoute le nouveau noeud à son père |
copierFilsNoeud(nd, child); |
} |
// si on reçoit une string |
if (nouvelleDonnees instanceof String) { |
String idSupp = (String) nouvelleDonnees + "_filtre"; |
// c'est une suppression et si le noeud existe bien |
if (arbreLocalites.getTree().getNodeById(idSupp) != null) { |
// on le supprime |
arbreLocalites.getTree().getNodeById(idSupp).remove(); |
} |
} |
} |
/** |
* Accesseur pour le panneau contenant l'arbre |
* |
* @return le panneau de l'arbre des mots clés |
*/ |
public TreePanel getArbreMotsCles() { |
return arbreLocalites; |
} |
/** |
* Méthode héritée de Filtrable renvoie le nom du filtre |
*/ |
public String renvoyerNomFiltre() { |
return "Localités"; |
} |
/** |
* Renvoie un tableau contenant le nom du champ à filtrer et la valeur |
* |
* @return un tableau contenant le nom du champ à filtrer et sa valeur |
*/ |
public String[] renvoyerValeursAFiltrer() { |
valider(); |
String[] valeursFiltrees = { "localites", localitesEncours }; |
return valeursFiltrees; |
} |
/** |
* Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un |
* copie du sous arbre du premier noeud, qu'elle concatène au deuxième |
* |
* @param ndPereOriginal |
* le père des noeuds de l'arbre original |
* @param ndPereCopie |
* le père qui va recevoir les copies |
*/ |
private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) { |
if (ndPereCopie != null && ndPereOriginal != null) { |
Node[] ndNodeFils = ndPereOriginal.getChildNodes(); |
for (int i = 0; i < ndNodeFils.length; i++) { |
String[] usObj = (String[]) ndNodeFils[i].getUserObject(); |
TreeNode child = new TreeNode(usObj[0]); |
child.setId(usObj[1] + "_filtre"); |
child.setChecked(false); |
child.setUserObject(usObj); |
ndPereCopie.appendChild(child); |
if (!ndNodeFils[i].isLeaf()) { |
copierFilsNoeud(ndNodeFils[i], child); |
} |
} |
} |
} |
/** |
* Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non) |
*/ |
public boolean renvoyerEtatFiltre() { |
return filtreModifie; |
} |
public void valider() { |
if (estInstancie) { |
// on vide les mots clés en cours |
localitesEncours = ""; |
// pour chaque noeud à partir de la racine |
getArbreMotsCles().getRootNode().cascade( |
new NodeTraversalCallback() { |
// on éxécute une fonction |
public boolean execute(Node node) { |
// on récupère le mot clé associé au noeud et ses |
// infos |
TreeNode tn = getArbreMotsCles().getNodeById( |
node.getId()); |
String[] usObject = (String[]) tn.getUserObject(); |
//observationMediateur.mettreAjourLocalites(usObject[0], |
// usObject[1]); |
if (tn.getUI().isChecked()) { |
// et les concatène à la string des mots clés en |
// cours |
localitesEncours += usObject[1] + ","; |
} |
return true; |
} |
}); |
// on suppose que le filtre a change |
filtreModifie = true; |
} |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ListeObservationVue.java |
---|
251,7 → 251,7 |
public void onRowClick(GridPanel grid, int rowIndex, |
EventObject e) { |
// on notifie le médiateur et on lui passe le nuémro de ligne |
getObservationMediateur().clicListeObservation(rowIndex); |
observationMediateur.clicListeObservation(rowIndex); |
} |
261,7 → 261,7 |
// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu |
e.stopEvent() ; |
// on notifie le médiateur en lui passant l'évenement |
getObservationMediateur().montrerContextMenu(e); |
observationMediateur.montrerContextMenu(e); |
} |
// gestion du double clic |
268,7 → 268,7 |
public void onRowDblClick(GridPanel grid, int rowIndex, |
EventObject e) { |
// on notifie le médiateur en lui passant le numéro de ligne |
getObservationMediateur().doubleClicListeObservation(rowIndex); |
observationMediateur.doubleClicListeObservation(rowIndex); |
} |
}); |
368,10 → 368,7 |
} |
} |
private ObservationMediateur getObservationMediateur() { |
return observationMediateur ; |
} |
/** |
* Méthode héritée de l'interface rafraichissable |
391,7 → 388,7 |
{ |
ListeObservation data = (ListeObservation) nouvelleDonnees ; |
Object[][] observationData = new Object[data.size()][8]; |
Object[][] observationData = new Object[data.size()][7]; |
int i = 0 ; |
if(data.size() == 0) |
399,7 → 396,7 |
pageEncours = 0 ; |
} |
// on la parse et on récupère les informations quiç nous interessent |
// on la parse et on récupère les informations qui nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
411,6 → 408,7 |
observationData[i][3]= obs.getLieudit(); |
observationData[i][4]= obs.getDate(); |
observationData[i][5]= obs.getNumeroOrdre(); |
observationData[i][6]= obs.getNumeroNomenclaturalSaisi(); |
i++ ; |
425,10 → 423,14 |
FieldDef defDateObservation = new StringFieldDef("date_observation"); |
FieldDef defOrdreObservation = new StringFieldDef("ordre_observation"); |
// Non affiches : |
FieldDef defNumeroNomenclaturalSaisiObservation = new StringFieldDef("numeroNomenclaturalSaisi_observation"); |
// on associe le store |
FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation, |
defLieuObservation, defDateObservation, defOrdreObservation }; |
defLieuObservation, defDateObservation, defOrdreObservation, defNumeroNomenclaturalSaisiObservation }; |
RecordDef rd = new RecordDef(defTab); |
465,6 → 467,7 |
// et on notifie de le mediateur du changement des valeurs |
changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ; |
masquerChargement(); |
observationMediateur.obtenirListeObservation(); |
} |
476,6 → 479,8 |
// On affiche la dernière page |
pageEncours = pageMax ; |
masquerChargement(); |
observationMediateur.obtenirNombreObservation(); |
} |
537,6 → 542,8 |
pageEncours = pageCourante ; |
masquerChargement(); |
// On lance le chargerment des observations |
observationMediateur.obtenirNombreObservation(); |
556,6 → 563,8 |
taillePage = nouvelleTaillePage ; |
pageEncours = calculerPageCourante(nbElements) ; |
masquerChargement(); |
// On lance le chargerment des observations |
observationMediateur.obtenirNombreObservation(); |
/trunk/src/org/tela_botanica/client/vues/AutoCompleteAsyncTextBox.java |
---|
18,9 → 18,13 |
*/ |
// TODO : C |
package org.tela_botanica.client.vues; |
// TODO : Classe A supprimer ( reprendre le mecanisme du cache avant) |
// TODO : traiter latence (augmenter en fonction rapidit� saisie + texte vide) |
// TODO : traitement espace apres l'espece (%20) |
// TODO : Utiliser Suggestbox et les Associating Data Transfer Objects (DTOs) with Suggestion Objects |
/trunk/src/org/tela_botanica/client/vues/PanneauFiltresVues.java |
---|
19,7 → 19,6 |
/** |
* Le médiateur associé |
*/ |
@SuppressWarnings("unused") |
private ImageMediateur iMediateur = null; |
/** |