/trunk/src/org/tela_botanica/client/image/ImageMediateur.java |
---|
1,14 → 1,14 |
package org.tela_botanica.client.image; |
import org.tela_botanica.client.interfaces.IdVue; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.interfaces.VueListable; |
import org.tela_botanica.client.vues.ArbreMotsClesFiltreVue; |
import org.tela_botanica.client.vues.ArbreMotsClesVue; |
import org.tela_botanica.client.vues.BarreNotationVue; |
import org.tela_botanica.client.vues.BarreOutilsVue; |
import org.tela_botanica.client.vues.BarreRechercheFiltreVue; |
import org.tela_botanica.client.vues.GalerieImageVue; |
import org.tela_botanica.client.vues.ListeImageVue; |
import org.tela_botanica.client.vues.MenuFiltreVue; |
import org.tela_botanica.client.vues.MenuImageVue; |
import org.tela_botanica.client.vues.PanneauMetadonneesVue; |
import org.tela_botanica.client.vues.ZoomImageVue; |
55,6 → 55,7 |
*/ |
private ImageModele iModele = null ; |
private String identifiant = "0" ; |
/** |
* panneau principal des images (onglet "images") |
125,7 → 126,7 |
* Filtre pour les commentaires |
*/ |
private BarreRechercheFiltreVue filtreCommentaires = null ; |
/** |
* constructeur privé (on accède a la classe par la méthode getInstance |
*/ |
141,6 → 142,8 |
final BorderLayoutData regionEst = new BorderLayoutData( |
RegionPosition.EAST); |
regionEst.setSplit(true); |
afficherMenuId() ; |
// on crée un modèle |
235,6 → 238,7 |
else |
{ |
return null ; |
} |
} |
244,8 → 248,19 |
*/ |
public String getIdentifiant() |
{ |
return "0" ; |
return identifiant ; |
} |
public void setIdentifiant(String id) |
{ |
identifiant = id ; |
} |
public void changerUtilisateur() |
{ |
getIModele().initialiserArbreMotsCles() ; |
obtenirPhotoGalerie(getGalerieImage()) ; |
} |
/** |
* Accesseur pour le modèle associé au médiateur |
316,7 → 331,7 |
} |
/** |
* Accesseur pour le menu |
* Accesseur pour le menu image |
* @return the menuImageVue |
*/ |
public MenuImageVue getMenuImageVue() { |
522,6 → 537,7 |
String ids[] = getVueSelectionnee().getIdSelectionnees() ; |
getIModele().mettreAJourCacheImage(commentaires, date, note, ids) ; |
getListeImage().mettreAjourInfos(commentaires, date, note) ; |
} |
/** |
855,6 → 871,7 |
mn.addListener(new MenuListenerAdapter() { |
public void onItemClick(BaseItem item, EventObject e) |
{ |
if(item.equals(suppN)) |
1025,6 → 1042,12 |
} |
public void afficherMenuId() |
{ |
IdVue i = new IdVue(this) ; |
i.show() ; |
} |
/** |
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres |
* sous forme de tableau [nom, valeur] |
/trunk/src/org/tela_botanica/client/image/ImageModele.java |
---|
2,28 → 2,23 |
import java.util.HashMap; |
import java.util.Iterator; |
import java.util.Vector; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.ImageAsynchroneDAO; |
import org.tela_botanica.client.modeles.ImageCarnet; |
import org.tela_botanica.client.modeles.ImageUploaderAsynchroneDAO; |
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO; |
import org.tela_botanica.client.modeles.ListeImageCarnet; |
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO; |
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO; |
import org.tela_botanica.client.modeles.NombreImageAsynchroneDAO; |
import org.tela_botanica.client.vues.BarreNotationVue; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ExtElement; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.IntegerFieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.Node; |
import com.gwtext.client.data.NodeTraversalCallback; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
91,6 → 86,7 |
if(!estInstancie) |
{ |
// on en crée un nouveau |
estInstancie = true ; |
return new ImageModele(im); |
} |
else |
129,14 → 125,13 |
// on rassemble les critères |
String[][] criteres = {{"ci_ce_utilisateur", ""+getIMediateur().getIdentifiant()}, {motsClesFiltres[0][0], motsClesFiltres[0][1]}, {motsClesFiltres[1][0],motsClesFiltres[1][1] }} ; |
// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages) |
NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO() ; |
niaDAO.setIModele(this) ; |
NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO(this) ; |
niaDAO.obtenirNombreImages(this, criteres) ; |
// ensuite on demande la page correspondante avec les mêmes critères |
String[][] criteres2 = { {"ci_limite" ,""+taillePage },{"ci_numero_page",""+pageEncours}, {motsClesFiltres[0][0], motsClesFiltres[0][1]}, {motsClesFiltres[1][0],motsClesFiltres[1][1] }} ; |
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images |
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(); |
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(this); |
liaDAO.ObtenirListeImages(this, criteres2); |
} |
146,8 → 141,7 |
*/ |
public void uploaderImages() |
{ |
ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO() ; |
IuADaO.setIModele(this) ; |
ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO(this) ; |
IuADaO.choisirMethodeUpload() ; |
} |
228,6 → 222,7 |
ic.miseAJourInfoGenerales(commentaires, date, note) ; |
mettreAjourBaseDeDonneesImageCarnet(ic) ; |
} |
} |
/** |
246,8 → 241,7 |
*/ |
public void mettreAJourBaseDeDonneesListeImageCarnet() |
{ |
ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO(); |
liDaO.setIModele(this); |
ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO(this); |
liDaO.SynchroniserBaseDeDonnees(cacheImage); |
} |
259,7 → 253,7 |
*/ |
public void mettreAjourBaseDeDonneesImageCarnet(ImageCarnet ic) |
{ |
ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO(); |
ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO(this); |
iaDaO.SynchroniserBaseDeDonnees(ic) ; |
} |
271,8 → 265,7 |
public void supprimerImages(String[] ids) |
{ |
String rids[] = new String[ids.length] ; |
ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO() ; |
liDao.setIModele(this); |
ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO(this) ; |
for (int i = 0; i < ids.length; i++) |
{ |
299,7 → 292,7 |
if(nouvelleDonnees instanceof ListeImageCarnet) |
{ |
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ; |
Object[][] photoData = new Object[data.size()][7]; |
Object[][] photoData = new Object[data.size()][8]; |
int i = 0 ; |
if(data.size() == 0) |
318,6 → 311,7 |
photoData[i][4] = im.getSUrl() ; |
photoData[i][5] = im.getMUrl() ; |
photoData[i][6] = im.getLUrl() ; |
photoData[i][7] = im.getNote() ; |
i++ ; |
} |
330,7 → 324,8 |
FieldDef defUrlImageS = new StringFieldDef("url_image_S"); |
FieldDef defUrlImageM = new StringFieldDef("url_image_M"); |
FieldDef defUrlImage = new StringFieldDef("url_image"); |
FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage}; |
FieldDef defNoteImage = new IntegerFieldDef("note_image") ; |
FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage,defNoteImage}; |
RecordDef rd = new RecordDef(defTab) ; |
final MemoryProxy dataProxy = new MemoryProxy(photoData); |
463,7 → 458,7 |
ImageCarnet ic = (ImageCarnet)cacheImage.get(ids[i]) ; |
ic.mettreAjourMotsCles(motsClesEnCours) ; |
ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO() ; |
ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO(this) ; |
imgDao.SynchroniserMotsClesImageBaseDeDonnees(ic) ; |
} |
} |
477,9 → 472,7 |
*/ |
public void initialiserArbreMotsCles() |
{ |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ; |
MCDao.setIModele(this) ; |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ; |
MCDao.obtenirListeMotsCles(this) ; |
} |
500,8 → 493,7 |
*/ |
public void ajouterMotCleDansArbre(TreeNode n, com.gwtext.client.data.Tree arbreMC) |
{ |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ; |
MCDao.setIModele(this) ; |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ; |
String[] usObj = (String[])n.getUserObject() ; |
String motCle = usObj[0] ; |
533,8 → 525,7 |
public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) |
{ |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ; |
MCDao.setIModele(this) ; |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ; |
String[] usObj = (String[])n.getUserObject() ; |
String motCle = usObj[0] ; |
555,8 → 546,7 |
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC) |
{ |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ; |
MCDao.setIModele(this) ; |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ; |
String[] usObj = (String[])n.getUserObject() ; |
String motCle = usObj[0] ; |
588,8 → 578,7 |
*/ |
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC) |
{ |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ; |
MCDao.setIModele(this) ; |
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ; |
String[] usObj = (String[])n.getUserObject() ; |
String motCle = usObj[0] ; |
676,6 → 665,7 |
*/ |
public void requeteTerminee() |
{ |
getIMediateur().demasquerChargement() ; |
getIMediateur().rafraichirToutesVues() ; |
} |
/trunk/src/org/tela_botanica/client/vues/MenuFiltreVue.java |
---|
New file |
0,0 → 1,98 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.image.ImageMediateur; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.widgets.menu.BaseItem; |
import com.gwtext.client.widgets.menu.Item; |
import com.gwtext.client.widgets.menu.Menu; |
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter; |
public class MenuFiltreVue extends Menu { |
/** |
* Le médiateur associé à la vue |
*/ |
private ImageMediateur iMediateur ; |
/** |
* Item pour la recherche par mots clés |
*/ |
private Item chercherImage = null ; |
/** |
* Item pour la recherche sur les commentaires |
*/ |
private Item chercherCommentaire = null ; |
/** |
* Constructeur sans argument (privé car ne doit être utilisé) |
*/ |
private MenuFiltreVue() |
{ |
super(); |
} |
/** |
* Constructeur avec paramètre |
* @param im le médiateur à associer |
*/ |
public MenuFiltreVue(ImageMediateur im) |
{ |
super() ; |
iMediateur = im ; |
// on construit le menu |
chercherImage = new Item("Filtrer par les mots clés") ; |
chercherCommentaire = new Item("Filtrer par les commentaires") ; |
addItem(chercherImage) ; |
addItem(chercherCommentaire) ; |
// on ajoute les listeners |
ajouterListeners() ; |
} |
/** |
* Ajoute les listeners pour la gestions des évènements |
*/ |
private void ajouterListeners() |
{ |
this.addListener(new MenuListenerAdapter() { |
// gestion du clic sur un item |
public void onItemClick(BaseItem item, EventObject e) { |
// si c'est la recherche par mots clé |
if(item.equals(chercherImage)) |
{ |
// on notifie le médiateur |
getIMediateur().afficherFiltreMotsCles() ; |
} |
// si c'est la recherche par commentaires |
if(item.equals(chercherCommentaire)) |
{ |
// on notifie le médiateur |
getIMediateur().afficherFiltreCommentaires() ; |
} |
// enfin, on cache le menu |
hide() ; |
} |
}) ; |
} |
/** |
* Accesseur pour le médiateur |
* @return le médiateur associé à la vue |
*/ |
public ImageMediateur getIMediateur() |
{ |
return iMediateur ; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/PanneauMetadonneesVue.java |
---|
126,7 → 126,7 |
Label labelComm = new Label("Commentaires :") ; |
labelComm.setHeight("20px") ; |
commentaireGeneral = new TextArea() ; |
commentaireGeneral.setAutoWidth(true) ; |
commentaireGeneral.setWidth("90%") ; |
Label labelDate = new Label("Date :") ; |
Label labelNote = new Label("Note :") ; |
322,12 → 322,12 |
for(int i = 0; i < maxLength ; i++) |
{ |
if(i < exif.length) |
if(i < exif.length && !exif[i][0].equals("null")) |
{ |
exifSource[i] = new NameValuePair(exif[i][0],exif[i][1]) ; |
} |
if(i < iptc.length) |
if(i < iptc.length && !iptc[i][0].equals("null")) |
{ |
iptcSource[i] = new NameValuePair(iptc[i][0],iptc[i][1]) ; |
} |
/trunk/src/org/tela_botanica/client/vues/BarreOutilsVue.java |
---|
19,6 → 19,15 |
*/ |
ToolbarMenuButton images = null ; |
/** |
* Un bouton qui sert à déployer le menu |
*/ |
ToolbarMenuButton filtres = null ; |
/** |
* Un bouton qui sert à déployer le menu |
*/ |
ToolbarMenuButton utilisateur = null ; |
/** |
* Le médiateur associé à la toolbar |
*/ |
ImageMediateur iMediateur = null ; |
26,6 → 35,16 |
* Le menu de gestion des images |
*/ |
MenuImageVue imageMenu = null ; |
/** |
* Le menu de gestion des filtres |
*/ |
MenuFiltreVue filtreMenu = null ; |
/** |
* Le menu de gestion utilisateur |
*/ |
MenuIdVue idMenu = null ; |
/** |
* Constructeur sans argument (ne doit pas être utilisé donc privé) |
37,7 → 56,7 |
/** |
* Constructeur avec paramètres |
* @param im |
* @param im le médiateur à associer à la vue |
*/ |
public BarreOutilsVue(ImageMediateur im) { |
46,9 → 65,15 |
iMediateur = im ; |
imageMenu = new MenuImageVue(im) ; |
filtreMenu = new MenuFiltreVue(im) ; |
idMenu = new MenuIdVue(im) ; |
images = new ToolbarMenuButton("Fichiers",imageMenu) ; |
filtres = new ToolbarMenuButton("Filtres", filtreMenu) ; |
utilisateur = new ToolbarMenuButton("Utilisateur",idMenu) ; |
this.addButton(images) ; |
this.addButton(filtres) ; |
this.addButton(utilisateur) ; |
} |
/trunk/src/org/tela_botanica/client/vues/MenuIdVue.java |
---|
New file |
0,0 → 1,85 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.image.ImageMediateur; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.widgets.menu.BaseItem; |
import com.gwtext.client.widgets.menu.Item; |
import com.gwtext.client.widgets.menu.Menu; |
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter; |
public class MenuIdVue extends Menu { |
/** |
* Le médiateur associé à la vue |
*/ |
private ImageMediateur iMediateur ; |
/** |
* Item pour le changement d'utilisateur |
*/ |
private Item changerId = null ; |
/** |
* Constructeur sans argument (privé car ne doit être utilisé) |
*/ |
private MenuIdVue() |
{ |
super(); |
} |
/** |
* Constructeur avec paramètre |
* @param im le médiateur à associer |
*/ |
public MenuIdVue(ImageMediateur im) |
{ |
super() ; |
iMediateur = im ; |
// on construit le menu |
changerId = new Item("Changer d'utilisateur") ; |
addItem(changerId) ; |
// on ajoute les listeners |
ajouterListeners() ; |
} |
/** |
* Ajoute les listeners pour la gestions des évènements |
*/ |
private void ajouterListeners() |
{ |
this.addListener(new MenuListenerAdapter() { |
// gestion du clic sur un item |
public void onItemClick(BaseItem item, EventObject e) { |
// si c'est la recherche par commentaires |
if(item.equals(changerId)) |
{ |
// on notifie le médiateur |
getIMediateur().afficherMenuId() ; |
} |
// enfin, on cache le menu |
hide() ; |
} |
}) ; |
} |
/** |
* Accesseur pour le médiateur |
* @return le médiateur associé à la vue |
*/ |
public ImageMediateur getIMediateur() |
{ |
return iMediateur ; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ListeImageVue.java |
---|
192,7 → 192,7 |
htmlImage += "<div class=\"img-note centered-list\">" ; |
for(int i = 0 ; i <= noteImg ; i++) |
{ |
htmlImage += "<img src=\"etoile_notee.jpg\">" ; |
htmlImage += "<img src=\"etoile_petite.png\">" ; |
} |
htmlImage += "</div>" ; |
} |
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesVue.java |
---|
109,6 → 109,8 |
String[] usObject = {"Mots clés" , "racine" } ; |
root.setUserObject(usObject) ; |
arbreMotsCles.setAutoScroll(true) ; |
arbreMotsCles.setRootNode(root) ; |
arbreMotsCles.setRootVisible(false) ; |
arbreMotsCles.getRootNode().setIcon("tela.png") ; |
230,29 → 232,8 |
{ |
// on notifie le médiateur et on lui passe l'arbre |
GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ; |
} |
// gestion du changement de valeur dans la checkbox |
} |
/*public void onCheckChange(TreeNode node, boolean checked) { |
// si on a coché un noeud |
if(checked) |
{ |
// on remonte pour cocher tous les parents du noeud |
node.bubble(new NodeTraversalCallback() { |
public boolean execute(Node node) |
{ |
TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ; |
tn.getUI().toggleCheck(true) ; |
return true ; |
} |
}) ; |
} |
}*/ |
}) ; |
// gestion de la validation |
330,27 → 311,30 |
*/ |
public void ajouterNoeud(TreeNode parent) |
{ |
// on met l'ajout du noeud à vrai |
ajoutNoeud = true ; |
// on crée un nouveau noeud vide |
TreeNode nd = new TreeNode(""); |
nd.setIcon("tela.png") ; |
nd.setChecked(true); |
// on associe un objet au noeud qui contient des infos |
String[] usObject = new String[2] ; |
// l'objet contient le nom du noeud |
usObject[0] = "" ; |
// l'identifiant d'un noeud c'est son hashcode |
usObject[1] = Integer.toString(nd.hashCode()) ; |
// l'objet associé au noeud contient aussi son identifiant |
nd.setId(usObject[1]) ; |
nd.setUserObject(usObject) ; |
// on le concatène au parent et on étend ses enfants |
parent.appendChild(nd); |
parent.expand(); |
// enfin on place le curseur et on fait apparaitre le champ d'édition pour que l'utilisateur nomme son mot clé |
te.startEdit(nd); |
// on met l'ajout du noeud à vrai |
ajoutNoeud = true ; |
// on crée un nouveau noeud vide |
TreeNode nd = new TreeNode(""); |
nd.setIcon("tela.png") ; |
nd.setChecked(true); |
// on associe un objet au noeud qui contient des infos |
String[] usObject = new String[2] ; |
// l'objet contient le nom du noeud |
usObject[0] = "" ; |
usObject[1] = Integer.toString(nd.hashCode()) ; |
nd.setId(usObject[1]) ; |
nd.setUserObject(usObject) ; |
// l'identifiant d'un noeud c'est son hashcode |
// l'objet associé au noeud contient aussi son identifiant |
// on le concatène au parent et on étend ses enfants |
parent.appendChild(nd); |
parent.expand(); |
// enfin on place le curseur et on fait apparaitre le champ d'édition pour que l'utilisateur nomme son mot clé |
te.startEdit(nd); |
} |
/** |
420,6 → 404,11 |
Tree nouvelArbre = (Tree)nouvelleDonnees ; |
// on prend sa racine et on l'attache à l'arbre des mots clés |
Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes() ; |
for (int i = 0; i < rootChild.length; i++) { |
rootChild[i].remove() ; |
} |
getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ; |
getArbreMotsCles().expandAll() ; |
434,7 → 423,6 |
if(motsCleInitialises == false && motsClesEnAttente != null) |
{ |
// on les coche |
// TODO: corriger le bug qui fait que ça ne marche pas la premiere fois !!!! |
cocherMotsCles(motsClesEnAttente) ; |
motsCleInitialises = true ; |
} |
/trunk/src/org/tela_botanica/client/vues/BarreNotationVue.java |
---|
9,20 → 9,52 |
import com.google.gwt.user.client.ui.Widget; |
import com.gwtext.client.widgets.Panel; |
/** |
* Une barre de notation avec des étoiles, tout ce qu'il ya de plus classique, |
* utilisant Ajax (et pas CSS) |
* @author aurelien |
* |
*/ |
public class BarreNotationVue extends Panel implements Rafraichissable { |
/** |
* Le médiateur associé |
*/ |
private ImageMediateur iMediateur = null ; |
/** |
* La note actuellement affichée |
*/ |
private int noteEnCours = 0 ; |
/** |
* La note maximum |
*/ |
private int noteMax = 0 ; |
/** |
* La note au dessus de laquelle se trouve le curseur (pour gérer le rollover) |
*/ |
private int noteCurseur = 0 ; |
/** |
* Booléen indiquant si une note est affectée à la barre en ce moment |
*/ |
private boolean estNote = false ; |
/** |
* Tablmeau d'images contenant les étoiles affichées |
*/ |
private Image[] etoiles = null ; |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
private BarreNotationVue() |
{ |
super() ; |
} |
/** |
* Constructeur avec arguments |
* @param im le médiateur à associer à la vue |
* @param noteMax la note maximale |
*/ |
public BarreNotationVue(ImageMediateur im, int noteMax) |
{ |
iMediateur = im ; |
44,24 → 76,27 |
etoiles[i].addMouseListener(new MouseListenerAdapter() { |
// si la souris passe sur la barre |
public void onMouseEnter(Widget sender) { |
Image enCours = (Image)sender ; |
int nEnCours = 0 ; |
// on met en surbrillance toutes les étoiles allant de la première jusqu'à |
// celle sous le curseur |
for(int i = 0 ; etoiles[i] != enCours ; i++) |
{ |
etoiles[i].setUrl("etoile_curseur.jpg") ; |
etoiles[i].setUrl("etoile_curseur.png") ; |
nEnCours = i ; |
} |
enCours.setUrl("etoile_curseur.jpg") ; |
enCours.setUrl("etoile_curseur.png") ; |
} |
// si la souris sort de la barre |
public void onMouseLeave(Widget sender) { |
// on affiche la véritable note |
afficherNote() ; |
} |
69,16 → 104,17 |
}) ; |
etoiles[i].addClickListener(new ClickListener() { |
// si on clique sur une étoiles |
public void onClick(Widget sender) { |
int i = 0 ; |
// on récupère le numéro de l'étoile sur laquelle on a cliqué |
while(etoiles[i] != (Image)sender) |
{ |
i++ ; |
} |
// et on affecte la note |
noter(i) ; |
} |
89,24 → 125,33 |
} |
/** |
* Fonction héritée de l'interface rafraichissable |
*/ |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
// si on recoit un tableau de string |
if(nouvelleDonnees instanceof String[]) |
{ |
estNote = false ; |
{ |
// on récupère le premier élément (un entier, qui contient la note) |
String[] note = (String[])nouvelleDonnees ; |
int noteInt = Integer.parseInt(note[0]) ; |
if(noteInt != -1) |
// si l'entier est une note valide |
if(noteInt != -1 && noteInt >= 0) |
{ |
noter(noteInt) ; |
} |
// sinon si l'entier vaut -1 |
else |
{ |
// alors on note avec 0 |
// et on met le booleen de notation a false (qui signifie que l'image n'est pas encore notée) |
estNote = false ; |
noteEnCours = 0 ; |
// et demande l'affichage |
afficherNote() ; |
} |
114,18 → 159,32 |
} |
/** |
* Affecte une note à la barre et rafraichit l'affichage |
* @param note la nouvelle note |
*/ |
public void noter(int note) |
{ |
// on affecte la note |
noteEnCours = note ; |
// on met le boolean de notation à true (l'image est notée) |
estNote = true ; |
// et on demande l'affichage |
afficherNote() ; |
} |
/** |
* Setteur pour la note maximale |
* @param nMax la nouvelle note maximale |
*/ |
public void setNoteMax(int nMax) |
{ |
// on affecte la note |
noteMax = nMax ; |
// on prépare le tableau d'image |
etoiles = new Image[noteMax] ; |
// qu'on remplit par defaut avec des images d'étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i] = new Image("etoile_vide.jpg") ; |
133,25 → 192,32 |
} |
} |
/** |
* Affiche la note d'une image sous la forme d'étoiles |
*/ |
public void afficherNote() |
{ |
// si l'image est notée |
if(estNote) |
{ |
// on affiche autant d'étoiles que le chiffre de la note |
for(int i = 0 ; i <= noteEnCours ; i++) |
{ |
etoiles[i].setUrl("etoile_notee.jpg") ; |
etoiles[i].setUrl("etoile_notee.png") ; |
} |
// et si elle est inférieure à la note maximale, on remplit le reste par des étoiles vides |
for (int j = noteEnCours + 1 ; j < noteMax ; j++) |
{ |
etoiles[j].setUrl("etoile_vide.jpg") ; |
etoiles[j].setUrl("etoile_vide.png") ; |
} |
} |
// sinon |
else |
{ |
// on remplit toute la barre avec des étoiles vides |
for(int i = 0 ; i < noteMax ; i++) |
{ |
etoiles[i].setUrl("etoile_vide.jpg") ; |
etoiles[i].setUrl("etoile_vide.png") ; |
} |
} |
158,6 → 224,10 |
} |
/** |
* Accesseur pour la note en cours sous forme de string |
* @return |
*/ |
public String getNote() |
{ |
return ""+noteEnCours ; |
/trunk/src/org/tela_botanica/client/vues/MenuImageVue.java |
---|
28,18 → 28,8 |
* Item pour la suppression |
*/ |
private Item supprimerImage = null ; |
/** |
* Item pour la recherche par mots clés |
*/ |
private Item chercherImage = null ; |
/** |
* Item pour la recherche sur les commentaires |
*/ |
private Item chercherCommentaire = null ; |
/** |
* Constructeur sans argument (privé car ne doit être utilisé) |
*/ |
private MenuImageVue() |
60,13 → 50,8 |
// on construit le menu |
uploaderImage = new Item("Uploader des images") ; |
supprimerImage = new Item("Supprimer les images selectionnées") ; |
chercherImage = new Item("Filtrer par les mots clés") ; |
chercherCommentaire = new Item("Filtrer par les commentaires") ; |
addItem(uploaderImage); |
addItem(supprimerImage) ; |
addSeparator() ; |
addItem(chercherImage) ; |
addItem(chercherCommentaire) ; |
// on ajoute les listeners |
ajouterListeners() ; |
97,20 → 82,6 |
getIMediateur().supprimerImages() ; |
} |
// si c'est la recherche par mots clé |
if(item.equals(chercherImage)) |
{ |
// on notifie le médiateur |
getIMediateur().afficherFiltreMotsCles() ; |
} |
// si c'est la recherche par commentaires |
if(item.equals(chercherCommentaire)) |
{ |
// on notifie le médiateur |
getIMediateur().afficherFiltreCommentaires() ; |
} |
// enfin, on cache le menu |
hide() ; |
/trunk/src/org/tela_botanica/client/vues/ZoomImageVue.java |
---|
19,7 → 19,6 |
/** |
* Panneau d'affichage d'une image avec des boutons précdents et suivant |
* TODO: assurer le redimensionnement automatique de l'image et la centrer |
* @author aurelien |
* |
*/ |
/trunk/src/org/tela_botanica/client/interfaces/IdVue.java |
---|
New file |
0,0 → 1,99 |
package org.tela_botanica.client.interfaces; |
import org.tela_botanica.client.image.ImageMediateur; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.widgets.Button; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.Window; |
import com.gwtext.client.widgets.event.ButtonListenerAdapter; |
import com.gwtext.client.widgets.event.KeyListener; |
import com.gwtext.client.widgets.event.WindowListenerAdapter; |
import com.gwtext.client.widgets.form.TextField; |
public class IdVue extends Window implements Rafraichissable { |
private ImageMediateur iMediateur ; |
private TextField champId = null ; |
private Button ok = null ; |
public IdVue(ImageMediateur im) |
{ |
super("Identification") ; |
iMediateur = im ; |
champId = new TextField() ; |
ok = new Button("OK") ; |
add(champId) ; |
add(ok) ; |
setSize(156,75) ; |
setClosable(false) ; |
setModal(true) ; |
this.setCloseAction(HIDE) ; |
ajouterListeners() ; |
} |
private void ajouterListeners() { |
// gestion du clic sur le bouton |
ok.addListener(new ButtonListenerAdapter() { |
public void onClick(Button button, EventObject e) { |
valider() ; |
} |
}) ; |
// gestion de la touche entrée |
champId.addKeyListener(EventObject.ENTER, new KeyListener() { |
public void onKey(int key, EventObject e) { |
valider() ; |
} |
}) ; |
this.addListener(new WindowListenerAdapter() { |
public void onClose(Panel panel) { |
} |
}); |
} |
public ImageMediateur getIMediateur() |
{ |
return iMediateur ; |
} |
protected void valider() { |
String id = champId.getText() ; |
getIMediateur().setIdentifiant(""+id.hashCode()) ; |
getIMediateur().changerUtilisateur() ; |
this.close() ; |
} |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/NombreImageAsynchroneDAO.java |
---|
1,18 → 1,13 |
package org.tela_botanica.client.modeles; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.image.ImageModele; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.HTTPRequest; |
import com.google.gwt.user.client.ResponseTextHandler; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.Image; |
/** |
* DAO qui renvoie le nombre d'image associées à différents critères donnés (utile pour la pagination) |
26,6 → 21,11 |
*/ |
private ImageModele iModele = null ; |
public NombreImageAsynchroneDAO(ImageModele im) |
{ |
iModele = im ; |
} |
/** |
* Setteur pour le modèle |
* @param im le modèlme à associer |
77,7 → 77,7 |
// qui contient une valeur : le nombre d'images correspondant au critères |
JSONValue res = responseValue.isArray().get(0) ; |
JSONString reponseNombre = res.isString() ; |
int maxImages = (int)Integer.parseInt(reponseNombre.stringValue()) ; |
int maxImages = Integer.parseInt(reponseNombre.stringValue()) ; |
int[] nbImages = {maxImages} ; |
// on le met dans un tableau d'entiers qu'on tranmset au demandeur de la mise à jour |
r.rafraichir(nbImages, true) ; |
/trunk/src/org/tela_botanica/client/modeles/MotsClesAsynchroneDAO.java |
---|
1,9 → 1,9 |
package org.tela_botanica.client.modeles; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.image.ImageModele; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONValue; |
23,6 → 23,11 |
*/ |
private ImageModele iModele = null ; |
public MotsClesAsynchroneDAO(ImageModele im) |
{ |
iModele = im ; |
} |
/** |
* Setteur pour le modèle |
* @param im le modèle à associer |
/trunk/src/org/tela_botanica/client/modeles/ImageUploaderAsynchroneDAO.java |
---|
1,20 → 1,13 |
package org.tela_botanica.client.modeles; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.image.ImageModele; |
import org.tela_botanica.client.interfaces.iMediateur; |
import com.google.gwt.core.client.JavaScriptObject; |
import com.google.gwt.user.client.Timer; |
import com.gwtext.client.core.UrlParam; |
import com.gwtext.client.widgets.BoxComponent; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Container; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.Window; |
import com.gwtext.client.widgets.event.WindowListener; |
import com.gwtext.client.widgets.event.WindowListenerAdapter; |
import com.gwtextux.client.widgets.upload.UploadDialog; |
import com.gwtextux.client.widgets.upload.UploadDialogListener; |
import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter; |
31,6 → 24,11 |
*/ |
private static ImageModele iModele ; |
public ImageUploaderAsynchroneDAO(ImageModele im) |
{ |
iModele = im ; |
} |
/** |
* Setteur pour le modele |
* @param im le modèle à associer au DAO |
52,10 → 50,10 |
UrlParam id = new UrlParam("identifiant",iModele.getIdentifiant()) ; |
UrlParam[] params = {id} ; |
up.setBaseParams(params); |
up.setModal(true) ; |
up.addListener(new UploadDialogListenerAdapter() { |
public void onClose(Panel panel) { |
iModele.requeteTerminee() ; |
63,8 → 61,7 |
}); |
up.show(); |
} |
/** |
73,9 → 70,12 |
*/ |
private static void appelerUploadMultiple() |
{ |
final Window nPan = new Window("Upload multiple"); |
nPan.setWidth(640) ; |
final String warning = "<p class=\"warning_upload\"> A la fin de l'envoi, veuillez fermer la fenêtre pour accéder aux images. </p>" ; |
final String applet = "<applet code=\"wjhk.jupload2.JUploadApplet\" archive=\"wjhk.jupload.jar\" alt=\"\" mayscript=\"\" height=\"350\" width=\"625\">"; |
final String paramPostTarget = "<param name=\"postURL\" value=\"jrest/InventoryImage/\">"; |
final String paramUploadPolicy = "<param name=\"uploadPolicy\" value=\"PictureUploadPolicy\">"; |
107,11 → 107,14 |
+"<input type=\"hidden\" name=\"identifiant\" value=\""+iModele.getIdentifiant()+"\">" |
+"</form>" ; |
nPan.setHtml(appelApplet+htmlForm); |
nPan.setHtml(warning+appelApplet+htmlForm); |
nPan.setModal(true) ; |
nPan.addListener(new WindowListenerAdapter() { |
public void onClose(Panel panel) { |
iModele.requeteTerminee() ; |
/trunk/src/org/tela_botanica/client/modeles/ImageCarnet.java |
---|
50,6 → 50,7 |
/** |
* Surcharge de toString qui affiche toutes les propriétés de l'image |
*/ |
public String toString() |
{ |
String valeur = " "; |
242,7 → 243,7 |
*/ |
public String[][] getMetadonnesIptc() { |
String[][] metaIptc = new String[12][2] ; |
String[][] metaIptc = new String[14][2] ; |
int elem = 0 ; |
for (Iterator it = this.keySet().iterator(); it.hasNext();) |
278,7 → 279,7 |
* @return les métadonnées Exif |
*/ |
public String[][] getMetadonnesExif() { |
String[][] metaExif = new String[31][2] ; |
int elem = 0 ; |
/trunk/src/org/tela_botanica/client/modeles/ImageAsynchroneDAO.java |
---|
3,10 → 3,11 |
import java.util.Iterator; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.image.ImageModele; |
import com.google.gwt.user.client.HTTPRequest; |
import com.google.gwt.user.client.ResponseTextHandler; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.widgets.Window; |
/** |
* DAO d'accès à une image, n'est utilisé que pour l'écriture et pas pour la lecture des images |
16,6 → 17,18 |
*/ |
public class ImageAsynchroneDAO { |
ImageModele iModele = null ; |
public ImageAsynchroneDAO(ImageModele im) |
{ |
iModele = im ; |
} |
public void setIModele(ImageModele im) |
{ |
iModele = im ; |
} |
/** |
* Met à jour la base de données avec toutes les données d'une image |
* @param ic l'image à mettre à jour |
35,10 → 48,17 |
} |
// et on envoie une requête asynchrone |
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() { |
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
//TODO: ajouter une vérification de la mise à jour |
if(responseText.equals("OK")) |
{ |
return ; |
} |
else |
{ |
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données") ; |
} |
} |
59,10 → 79,17 |
postData += "&ci_id_image="+id+"&ci_meta_mots_cles="+motsCles ; |
// on envoie une requête asynchrone |
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() { |
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
//TODO: ajouter une vérification de la mise à jour |
if(responseText.equals("OK")) |
{ |
return ; |
} |
else |
{ |
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des mots clés") ; |
} |
} |
80,10 → 107,17 |
postData += "&action=DELETE" ; |
// on envoie un post avec l'id de l'image à supprimer |
HTTPRequest.asyncPost("jrest/inventoryImage/0/"+ic.getId(), postData, new ResponseTextHandler() { |
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/"+ic.getId(), postData, new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
//TODO: ajouter une vérification de la mise à jour |
if(responseText.equals("OK")) |
{ |
return ; |
} |
else |
{ |
com.google.gwt.user.client.Window.alert("Problème lors de la suppression des images ") ; |
} |
} |
}) ; |
/trunk/src/org/tela_botanica/client/modeles/ListeImageCarnet.java |
---|
1,7 → 1,6 |
package org.tela_botanica.client.modeles; |
import java.util.HashMap; |
import java.util.Vector; |
/** |
* table de hachage composée d'ImageCarnet, renvoyé par les objets de type DAO |
/trunk/src/org/tela_botanica/client/modeles/ListeImageAsynchroneDAO.java |
---|
2,7 → 2,6 |
import java.util.Iterator; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.image.ImageModele; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
9,17 → 8,9 |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.HTTPRequest; |
import com.google.gwt.user.client.ResponseTextHandler; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
/** |
* Data Object Access communiquant avec le serveur jrest fournissant la liste des images |
34,6 → 25,11 |
*/ |
ImageModele iModele = null ; |
public ListeImageAsynchroneDAO(ImageModele im) |
{ |
iModele = im ; |
} |
/** |
* Setteur pour le modèle |
* @param im le modèle à associer |
71,7 → 67,7 |
} |
// on envoie le get asynchrone |
HTTPRequest.asyncGet("jrest/InventoryImageList/0/"+requete, new ResponseTextHandler() { |
HTTPRequest.asyncGet("jrest/InventoryImageList/"+iModele.getIdentifiant()+"/"+requete, new ResponseTextHandler() { |
// si tout se passe bien on reçoit une réponse JSON |
public void onCompletion(String responseText) { |
148,10 → 144,17 |
} |
// on fait un post asynchrone et on les envoie à jrest |
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() { |
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
//TODO: vérifier mieux le succès del a requête |
if(responseText.equals("OK")) |
{ |
return ; |
} |
else |
{ |
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données") ; |
} |
} |