Subversion Repositories eFlore/Archives.cel-v2

Compare Revisions

Ignore whitespace Rev 39 → Rev 40

/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesVue.java
97,6 → 97,10
arbreMotsCles = new TreePanel() ;
// on permet le drag and drop dans l'arbre
arbreMotsCles.setEnableDD(true) ;
arbreMotsCles.setId("x-view-tree-keyword") ;
arbreMotsCles.setAutoWidth(true) ;
//arbreMotsCles.setAutoScroll(true) ;
arbreMotsCles.setBorder(false) ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags") ;
120,6 → 124,8
this.add(valider,new RowLayoutData("10%")) ;
this.setBorder(false) ;
this.setCollapsible(true) ;
this.setTitleCollapse(true) ;
// on ajoute les listeners
ajouterListeners() ;
/trunk/src/org/tela_botanica/client/vues/MenuImageVue.java
54,6 → 54,7
chercherImage = new Item("Filtrer des images") ;
addItem(uploaderImage);
addItem(supprimerImage) ;
addItem(chercherImage) ;
// on ajoute les listeners
ajouterListeners() ;
87,7 → 88,13
hide() ;
}
if(item.equals(chercherImage))
{
getIMediateur().afficherFiltres() ;
hide() ;
}
}
}) ;
/trunk/src/org/tela_botanica/client/vues/PanneauMetadonneesVue.java
13,6 → 13,7
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.NameValuePair;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
29,6 → 30,8
import com.gwtext.client.widgets.grid.PropertyGridPanel;
import com.gwtext.client.widgets.grid.event.GridCellListener;
import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;
import com.gwtext.client.widgets.layout.VerticalLayout;
125,10 → 128,16
panneauInfoGrid = new Panel("info") ;
panneauMotsCles = new ArbreMotsClesVue(im) ;
panneauInfoGrid.setLayout(new VerticalLayout());
panneauInfoGrid.setHeight(500);
panneauInfoGrid.setMargins(5) ;
panneauInfoGrid.setPaddings(5) ;
Panel sousPanneauInfosGenerales = new Panel("Infos Générales") ;
sousPanneauInfosGenerales.setLayout(new VerticalLayout());
sousPanneauInfosGenerales.setBorder(false) ;
sousPanneauInfosGenerales.setHeight(200);
sousPanneauInfosGenerales.setAutoWidth(true) ;
sousPanneauInfosGenerales.setMargins(5) ;
sousPanneauInfosGenerales.setPaddings(5) ;
sousPanneauInfosGenerales.setCollapsible(true) ;
Label labelComm = new Label("Commentaires :") ;
labelComm.setHeight("20px") ;
commentaireGeneral = new TextArea() ;
143,18 → 152,25
validerInfo = new Button("OK") ;
panneauInfoGrid.add(labelComm) ;
panneauInfoGrid.add(commentaireGeneral) ;
panneauInfoGrid.add(labelDate) ;
panneauInfoGrid.add(dateImage) ;
panneauInfoGrid.add(validerInfo) ;
sousPanneauInfosGenerales.add(labelComm) ;
sousPanneauInfosGenerales.add(commentaireGeneral) ;
sousPanneauInfosGenerales.add(labelDate) ;
sousPanneauInfosGenerales.add(dateImage) ;
sousPanneauInfosGenerales.add(validerInfo) ;
sousPanneauInfosGenerales.setAutoHeight(true);
panneauMotsCles.setAutoHeight(true) ;
panneauInfoGrid.setBorder(false);
panneauInfoGrid.setAutoHeight(true);
panneauInfoGrid.add(sousPanneauInfosGenerales) ;
panneauInfoGrid.add(panneauMotsCles) ;
this.add(panneauInfoGrid) ;
this.add(panneauExifGrid) ;
this.add(panneauIptcGrid) ;
this.add(panneauMotsCles) ;
gViewExif = new GridView();
gViewExif.setForceFit(true);
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesFiltreVue.java
New file
0,0 → 1,241
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.google.gwt.core.client.JavaScriptObject;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.Tree;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.JsObject;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListener;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.WindowListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
 
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable {
 
/**
* Le médiateur associé à la vue
*/
private ImageMediateur iMediateur = null ;
/**
* Les mots clés en cours
*/
private String motsClesEncours = "" ;
/**
* Le treepanel qui affiche l'arbre
*/
private TreePanel arbreMotsCles = null ;
/**
* Bouton rechercher
*/
private Button rechercher = null ;
/**
* booléen d'initialisation
*/
private boolean estInstancie = false ;
/**
* booléen d'etat
*/
private boolean filtreModifie = false ;
private ArbreMotsClesFiltreVue()
{
super() ;
}
public ArbreMotsClesFiltreVue(ImageMediateur im)
{
// on crée le panel
super("Mots clés") ;
this.setLayout(new RowLayout());
iMediateur = im ;
// on crée le conteneur de l'arbre
arbreMotsCles = new TreePanel() ;
// on permet le drag and drop dans l'arbre
arbreMotsCles.setEnableDD(true) ;
arbreMotsCles.setId("x-view-tree-filter") ;
arbreMotsCles.setAutoWidth(true) ;
//arbreMotsCles.setAutoScroll(true) ;
arbreMotsCles.setBorder(false) ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags") ;
root.setId("racine_filtre") ;
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setRootNode(root) ;
arbreMotsCles.setRootVisible(false) ;
arbreMotsCles.getRootNode().setIcon("tela.png") ;
arbreMotsCles.setBorder(false) ;
rechercher = new Button("Rechercher") ;
// on met en forme le layout
this.add(arbreMotsCles,new RowLayoutData("90%")) ;
this.add(rechercher,new RowLayoutData("10%")) ;
this.setBorder(false) ;
this.setCollapsible(true) ;
this.setTitleCollapse(true) ;
// on ajoute les listeners
ajouterListeners() ;
estInstancie = true ;
}
public void ajouterListeners()
{
// gestion de la validation
rechercher.addListener(new ButtonListenerAdapter() {
 
public void onClick(Button button, EventObject e) {
// on vide les mots clés en cours
motsClesEncours = "" ;
// 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() ;
getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
if(tn.getUI().isChecked())
{
// et les concatène à la string des mots clés en cours
motsClesEncours += usObject[1]+"," ;
}
return true ;
}
});
// on suppose que le filtre a change
filtreModifie = true ;
// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreMotsCles()) ;
}
 
}) ;
this.addListener(new WindowListenerAdapter() {
public void onClose(Panel panel) {
arbreMotsCles.getRootNode().destroy() ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags") ;
root.setId("racine_filtre") ;
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setRootNode(root) ;
}
}) ;
}
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
// si on a reçu un arbre
if(nouvelleDonnees instanceof Tree)
{
Tree nouvelArbre = (Tree)nouvelleDonnees ;
copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
getArbreMotsCles().expandAll() ;
// si l'arbre n'était pas encore considéré comme instancié
if(!estInstancie)
{
// on signale que oui
estInstancie = true ;
}
filtreModifie = false ;
setSize(200, 300) ;
show() ;
}
}
public ImageMediateur getIMediateur()
{
return iMediateur ;
}
public TreePanel getArbreMotsCles()
{
return arbreMotsCles ;
}
 
public String renvoyerNomFiltre() {
return "mots clés" ;
}
 
public String[] renvoyerValeursAFiltrer() {
String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
return valeursFiltrees ;
}
public void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
{
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.setIcon("tela.png") ;
child.setChecked(false);
child.setUserObject(usObj) ;
ndPereCopie.appendChild(child) ;
if(! ndNodeFils[i].isLeaf())
{
copierFilsNoeud(ndNodeFils[i],child) ;
}
}
}
 
 
public boolean renvoyerEtatFiltre() {
return filtreModifie ;
}
 
}
/trunk/src/org/tela_botanica/client/vues/pageToolBarVue.java
315,21 → 315,25
*/
public void rafraichirNumeroPage()
{
champPage.setValue(""+(pageCourante+1)) ;
surTotalPage.setText(" sur "+pageTotale) ;
// si la page n'est pas la dernière
if(pageCourante + 1 != pageTotale)
System.out.println("Nombre d'éléments :"+nbElement);
if(nbElement == 0)
{
// sauf pour la dernière page qui contient souvent moins d'élements que le nombre d'élements par page
intervalleElements.setText("Images "+pageCourante*taillePage+" - "+(pageCourante+1)*taillePage+" sur "+nbElement) ;
champPage.setValue(""+(0)) ;
// on met simplement à jour l'intervalle qui contient toujours le même nombre d'éléments
intervalleElements.setText("Images 0 - 0 sur 0") ;
}
else
{
if(nbElement == 0)
champPage.setValue(""+(pageCourante+1)) ;
// si la page n'est pas la dernière
if(pageCourante + 1 != pageTotale)
{
// on met simplement à jour l'intervalle qui contient toujours le même nombre d'éléments
intervalleElements.setText("Images 0 - 0 sur 0") ;
// sauf pour la dernière page qui contient souvent moins d'élements que le nombre d'élements par page
intervalleElements.setText("Images "+pageCourante*taillePage+" - "+(pageCourante+1)*taillePage+" sur "+nbElement) ;
}
else
{
336,7 → 340,6
// on met simplement à jour l'intervalle qui contient toujours le même nombre d'éléments
intervalleElements.setText("Images "+pageCourante*taillePage+" - "+nbElement+" sur "+nbElement) ;
}
}
}
371,7 → 374,7
// si la page courante dépasse la page totale (cas normalement improbable car géré en amont)
// on met le numéro de page à la page courante -1 (car la page courante est comptée à partir
// de zéro)
if(pageCourante >= pageTotale)
if(pageCourante >= pageTotale && pageCourante != 0)
{
pageCourante = pageTotale - 1 ;
// le cas échéant on en notifie le médiateur
/trunk/src/org/tela_botanica/client/interfaces/Rafraichissable.java
1,7 → 1,21
package org.tela_botanica.client.interfaces;
 
/**
* Toutes les classes qui recoivent des données de manières asynchrones ou imprévisible
* implémentent cette interface.
* Elle permet de faire transiter le rafraichissable jusqu'au DAO et d'appeler sa méthode rafraichir un fois
* les données reçues, tout celà en préservant bien la séparation des rôles car les classes qui font transiter
* le rafraichissable ne connaissent que cette interface et pas le restye de l'objet
* @author aurelien
*
*/
public interface Rafraichissable {
/**
* Méthode de mise à jour d'un objet
* @param nouvelleDonnees Un objet de n'importe quel type (programmation générique) qui contient les données de mise à jour
* @param repandreRaffraichissement indique si l'élement doit notifier d'autres éléments de sa mise à jour
*/
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement);
 
}
/trunk/src/org/tela_botanica/client/interfaces/Filtrable.java
New file
0,0 → 1,9
package org.tela_botanica.client.interfaces;
 
public interface Filtrable {
public String[] renvoyerValeursAFiltrer() ;
public String renvoyerNomFiltre() ;
public boolean renvoyerEtatFiltre() ;
}
/trunk/src/org/tela_botanica/client/interfaces/VueListable.java
1,7 → 1,19
package org.tela_botanica.client.interfaces;
 
/**
* Les classes qui implétement cette interface sont des classes qui affichent
* des éléments qui peuvent être identifiés de manière unique
* Cette interface facilite le travail du médiateur dans la mesure ou il peut obtenir
* les éléments selectionnés d'une vue sans se préoccuper de son type précis
* @author aurelien
*
*/
public interface VueListable {
 
/**
* Renvoie un tableau contenant les identifiants des élements selectionnés
* @return les id des éléments sélectionnés
*/
public String[] getIdSelectionnees() ;
}