Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1 → Rev 2

/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
New file
0,0 → 1,1281
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.observation.ObservationMediateur;
import org.tela_botanica.client.vues.ArbreMotsClesFiltreVue;
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.MenuImageVue;
import org.tela_botanica.client.vues.PanneauFiltresVues;
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
import org.tela_botanica.client.vues.ZoomImageVue;
 
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.DataView;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.FitLayout;
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;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
 
/**
* Mediateur gérant les interactions entre vues et les echanges de données
* C'est un singleton.
* @author aurelien
*
*/
public class ImageMediateur {
/**
* le mediateur des observations qui lie la partie images au carnet
*/
private ObservationMediateur oMediateur = null ;
/**
* booleen qui verifie l'unicite de l'instance (donc static)
*/
private static boolean estInstancie = false ;
/**
* modele de données
*/
private ImageModele iModele = null ;
/**
* L'identifiant utilisateur.
* Par défaut, il vaut 0
*/
private String identifiant = "0" ;
 
/**
* panneau principal des images (onglet "images")
*/
private final Panel panneauPrincipalImage = new Panel("Images");
/**
* panneau a onglet pour la liste, la galerie et la vue en grand
*/
private TabPanel ongletsImage = null ;
/**
* panneau de filtrage
*/
private PanneauFiltresVues filtres = null ;
/**
* conteneur du panneau a onglets
*/
private Panel panneauMenuEtOngletsImage = null ;
/**
* galerie de miniature
*/
private GalerieImageVue galerieImage = null ;
/**
* liste détaillée des images
*/
private ListeImageVue listeImage = null ;
/**
* vue agrandie de la l'image selectionnée
*/
private ZoomImageVue zoomImage = null ;
/**
* panneau a onglets affichant les métadonnées et les mots clés
*/
private PanneauMetadonneesVue metadonneesIptcExif = null ;
/**
* panneau conteneur pour le panneau a onglet des metadonnées
*/
private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
/**
* menu contextuel de manipulation des images
*/
private MenuImageVue menuImageVue = null ;
/**
* barre d'outils
*/
private BarreOutilsVue barreOutilsVue = null ;
/**
* l'indice du dernier onglet sélectionné
*/
private int dernierIndexOnglet = 0 ;
/**
* booleen explicitant s'il y a une selection en cours
*/
private boolean selection = false ;
/**
* Filtre pour les mots cles
*/
private ArbreMotsClesFiltreVue filtreMotsCles = null ;
/**
* Filtre pour les commentaires
*/
private BarreRechercheFiltreVue filtreCommentaires = null ;
 
/**
* constructeur privé (on accède a la classe par la méthode getInstance)
*/
private ImageMediateur()
{
// quelques variables de position pour les borderlayouts
final BorderLayoutData regionNord = new BorderLayoutData(
RegionPosition.NORTH) ;
final BorderLayoutData regionCentre = new BorderLayoutData(
RegionPosition.CENTER) ;
 
final BorderLayoutData regionEst = new BorderLayoutData(
RegionPosition.EAST);
regionEst.setSplit(true);
final BorderLayoutData regionOuest = new BorderLayoutData(
RegionPosition.WEST);
regionOuest.setSplit(true);
afficherMenuId() ;
 
// on crée un modèle
iModele = ImageModele.Instance(this);
// et on demande l'arbre des mots clés
iModele.initialiserArbreMotsCles() ;
// on gère la mise en page du panneau principal
panneauPrincipalImage.setLayout(new BorderLayout());
panneauPrincipalImage.setId("x-main-panel-image") ;
// on crée le panneau des filtres
filtres = new PanneauFiltresVues(this) ;
// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur
panneauMenuEtOngletsImage = new Panel() ;
panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
// le panneau à onglet qui contient les trois vues
ongletsImage = new TabPanel();
// la galerie
galerieImage = new GalerieImageVue(this) ;
// la liste des images
Panel panneauListeImage = new Panel("Liste");
listeImage = new ListeImageVue(this);
panneauListeImage.setLayout(new FitLayout());
panneauListeImage.add(listeImage);
// le panneau zoom
zoomImage = new ZoomImageVue(this);
// on ajoute les panneaux au panneau à onglets
ongletsImage.add(galerieImage);
ongletsImage.add(panneauListeImage);
ongletsImage.add(zoomImage);
// on crée les menu et la barre de vue
menuImageVue = new MenuImageVue(this) ;
barreOutilsVue = new BarreOutilsVue(this) ;
// on initialise le volet qui contient les mots clés
detailsEtMotsCles.setAnimCollapse(true);
detailsEtMotsCles.setTitleCollapse(true);
detailsEtMotsCles.setCollapsible(true);
filtreMotsCles = new ArbreMotsClesFiltreVue(this) ;
filtreCommentaires = new BarreRechercheFiltreVue(this) ;
// on crée le panneau conteneur des métadonnées et infos
metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
// et on l'inclut dans le volet approprié
detailsEtMotsCles.add(metadonneesIptcExif) ;
// on ajoute la barre de vue au nord du panneau qui contient menu et onglets d'images
panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
// les onglets au centre
panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
// on ajoute le panneau qui contient le menu et les onglets d'images au centre
panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
// et le panneau de métadonnées et d'info sur le coté droit
panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
// on ajoute les filtres au panneau gauche
panneauPrincipalImage.add(filtres,regionOuest) ;
filtres.setWidth("15%") ;
detailsEtMotsCles.setWidth("15%");
ajouterListeners() ;
}
/**
* constructeur avec paramètres privé (on accède a la classe par la méthode getInstance)
* @param om le médiateur des observations à associer à la partie image
*/
private ImageMediateur(ObservationMediateur om)
{
oMediateur = om ;
// quelques variables de position pour les borderlayouts
final BorderLayoutData regionNord = new BorderLayoutData(
RegionPosition.NORTH) ;
final BorderLayoutData regionCentre = new BorderLayoutData(
RegionPosition.CENTER) ;
 
final BorderLayoutData regionEst = new BorderLayoutData(
RegionPosition.EAST);
regionEst.setSplit(true);
final BorderLayoutData regionOuest = new BorderLayoutData(
RegionPosition.WEST);
regionOuest.setSplit(true);
afficherMenuId() ;
 
// on crée un modèle
iModele = ImageModele.Instance(this);
// et on demande l'arbre des mots clés
iModele.initialiserArbreMotsCles() ;
// on gère la mise en page du panneau principal
panneauPrincipalImage.setLayout(new BorderLayout());
// on crée le panneau des filtres
filtres = new PanneauFiltresVues(this) ;
filtres.setWidth(200) ;
// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur
panneauMenuEtOngletsImage = new Panel() ;
panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
// le panneau à onglet qui contient les trois vues
ongletsImage = new TabPanel();
// la galerie
galerieImage = new GalerieImageVue(this) ;
// la liste des images
Panel panneauListeImage = new Panel("Liste");
listeImage = new ListeImageVue(this);
panneauListeImage.setLayout(new FitLayout());
panneauListeImage.add(listeImage);
// le panneau zoom
zoomImage = new ZoomImageVue(this);
// on ajoute les panneaux au panneau à onglets
ongletsImage.add(galerieImage);
ongletsImage.add(zoomImage);
ongletsImage.add(panneauListeImage);
// on crée les menu et la barre de vue
menuImageVue = new MenuImageVue(this) ;
barreOutilsVue = new BarreOutilsVue(this) ;
// on initialise le volet qui contient les mots clés
detailsEtMotsCles.setWidth("25%");
detailsEtMotsCles.setAnimCollapse(true);
detailsEtMotsCles.setTitleCollapse(true);
detailsEtMotsCles.setCollapsible(true);
filtreMotsCles = new ArbreMotsClesFiltreVue(this) ;
filtreCommentaires = new BarreRechercheFiltreVue(this) ;
// on crée le panneau conteneur des métadonnées et infos
metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
// et on l'inclut dans le volet approprié
detailsEtMotsCles.add(metadonneesIptcExif) ;
// on ajoute la barre de vue au nord du panneau qui contient menu et onglets d'images
panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
// les onglets au centre
panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
// on ajoute le panneau qui contient le menu et les onglets d'images au centre
panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
// et le panneau de métadonnées et d'info sur le coté droit
panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
// on ajoute les filtres au panneau gauche
//panneauMenuEtOngletsImage.add(filtres,regionOuest) ;
//filtres.setCollapsed(false) ;
}
/**
* Change la valeur du booleen de selection
* @param selection la nouvelle valeur du booléen
*/
public void setSelection(boolean selection) {
this.selection = selection;
}
 
/**
* renvoie la valeur du booleen de selection
* @return la valeur du booleen de selection
*/
public boolean isSelection() {
return selection;
}
 
/**
* Retourne une instance de manière unique
* @return l'instance unique du médiateur
*/
public static ImageMediateur Instance()
{
if(!estInstancie)
{
estInstancie = true ;
return new ImageMediateur() ;
}
else
{
return null ;
}
}
/**
* Retourne une instance de manière unique en lui associant un médiateur pour les observations
* @param le médiateur des observations à associer
* @return l'instance unique du médiateur
*/
public static ImageMediateur Instance(ObservationMediateur om)
{
if(!estInstancie)
{
estInstancie = true ;
return new ImageMediateur(om) ;
}
else
{
return null ;
}
}
/**
* Renvoie l'identifiant de l'utilisateur en cours
* @return l'identifiant de l'utilisateur
*/
public String getIdentifiant()
{
return identifiant ;
}
/**.
* Setteur pour l'identifiant de l'utilisateur en cours
* @param id le nouvel identifiant utilisateur
*/
public void setIdentifiant(String id)
{
identifiant = id ;
}
/**
* Appelle les fonctions de chargement de données, suit généralement un appel
* à setIdentifiant, pour obtenir l'arbre des mots clés et les images du nouvel utilisateur
*/
public void changerUtilisateur()
{
getIModele().initialiserArbreMotsCles() ;
obtenirPhotoGalerie(getGalerieImage()) ;
}
 
/**
* Accesseur pour le modèle associé au médiateur
* @return le modèle associé
*/
public ImageModele getIModele() {
return iModele;
}
 
/**
* Accesseur pour le panneau principal
* @return le panneau principal
*/
public Panel getPanneauPrincipalImage() {
return panneauPrincipalImage;
}
 
/**
* Accesseur pour le panneau à onglets
* @return le panneau à onglets
*/
public TabPanel getOngletsImage() {
return ongletsImage;
}
 
/**
* Accesseur pour la galerie d'images
* @return la galerie d'image
*/
public GalerieImageVue getGalerieImage() {
return galerieImage;
}
 
public ListeImageVue getListeImage() {
return listeImage;
}
 
/**
* Accesseur pour le panneau "zoom"
* @return le panneau zoom
*/
public ZoomImageVue getZoomImage() {
return zoomImage;
}
 
/**
* Accesseur pour le panneau détails et mot clés
* @return le panneau détails et mots clés
*/
public Panel getDetailsEtMotsCles() {
return detailsEtMotsCles;
}
/**
* Accesseur pour le booleen d'instanciation
* @return le booleen d'instanciation
*/
public static boolean isEstInstancie() {
return estInstancie;
}
 
/**
* Accesseur pour la panneau contenant le menu et les onglets images
* @return le panneauMenuEtOngletsImage
*/
public Panel getPanneauMenuEtOngletsImage() {
return panneauMenuEtOngletsImage;
}
 
/**
* Accesseur pour le menu image
* @return the menuImageVue
*/
public MenuImageVue getMenuImageVue() {
return menuImageVue;
}
 
/**
* Accesseur pour la barre d'outils
* @return the barreOutilsVue
*/
public BarreOutilsVue getBarreOutilsVue() {
return barreOutilsVue;
}
 
/**
* Accesseur pour le panneau infos et métadonnées
* @return the metadonneesIptcExif
*/
public PanneauMetadonneesVue getMetadonneesIptcExif() {
return metadonneesIptcExif;
}
 
/**
* Renvoie l'index du dernier onglet sélectionné
* @return l'index du dernier onglet
*/
public int getDernierIndexOnglet() {
return dernierIndexOnglet;
}
/**
* Accesseur pour l'arbre des filtres
* @return l'arbre pour filtrer les mots clés
*/
public ArbreMotsClesFiltreVue getFiltreMotsCles()
{
return filtreMotsCles ;
}
/**
* Accesseur pour la barre de recherche
* @return la barre de recherche pour filtrer les commentaires
*/
public BarreRechercheFiltreVue getFiltreCommentaires()
{
return filtreCommentaires ;
}
/**
* Renvoie la vue sélectionné par l'utilisateur
* @return la vue selectionnée par l'utilisateur
*/
public VueListable getVueSelectionnee()
{
Panel active = ongletsImage.getActiveTab() ;
if(active != zoomImage)
{
if(active == galerieImage)
{
return galerieImage ;
}
else
{
return listeImage ;
}
}
else
{
if(dernierIndexOnglet == 0)
{
return galerieImage ;
}
else
{
return listeImage ;
}
 
}
}
/**
* Renvoie l'identifiant de la vue en cours
* @return l'identifiant de la vue en cours de visualisation
*/
public String getIdVueSelectionnee()
{
Panel active = ongletsImage.getActiveTab() ;
if(active != zoomImage)
{
if(active == galerieImage)
{
return galerieImage.getId() ;
}
else
{
return listeImage.getId() ;
}
}
else
{
if(dernierIndexOnglet == 0)
{
return galerieImage.getId() ;
}
else
{
return listeImage.getId() ;
}
 
}
}
/**
* Met a jour les données provenant du modèle et synchronise les vues entre elles
* @param o données de mises a jour pour les vues
* @param r le refraichissable qui a demandé la mise a jour
*/
public void synchroniserDonneesZoomListeGalerie(Object o, Rafraichissable r)
{
if(o instanceof Store) {
Store li = (Store)o ;
if(li.getCount() <= 0)
{
aucuneSelection() ;
}
else
{
selection() ;
}
}
if(r != getGalerieImage())
{
getGalerieImage().rafraichir(o,false);
}
if(r != getZoomImage())
{
getZoomImage().rafraichir(o,false);
}
if(r != getListeImage())
{
getListeImage().rafraichir(o,false);
}
aucuneSelection() ;
demasquerChargement() ;
}
/**
* envoie au modèle une demande de mise a jour
* @param r la vue demandeuse de mise a jour
*/
public void obtenirPhotoGalerie(Rafraichissable r)
{
masquerChargement() ;
getIModele().obtenirPhotoGalerie(r) ;
}
/**
* demande au modèle les métadonnées associées a une image
* @param r la vue demandeuse de mise a jour
* @param id l'identifiant de l'image
*/
public void obtenirMetadonnees(Rafraichissable r, String id)
{
getIModele().obtenirMetadonnees(r, id) ;
}
/**
* demande au modèle les ids des mots clés associés a une image
* @param r la vue demandeuse de mise a jour
* @param id l'identifiant de l'image
*/
public void obtenirMotsClesId(Rafraichissable r, String id)
{
getIModele().obtenirMotsClesId(r, id) ;
}
/**
* Envoie au modèle une demande pour obtenir l'arbre des mots clés
* @param r le raffraichissable qui a demandé la mise à jour
*/
public void obtenirArbreMotsCles(Rafraichissable r)
{
getIModele().obtenirArbreMotCle(r) ;
}
/**
* envoie au modèle une demande de mise a jour des informations modifiables
* associées a une image
* @param commentaires le commentaire de l'image
* @param date la date modifiée par l'utilisateur
*/
public void mettreAJourInfo(String commentaires, String date, String note)
{
String ids[] = getVueSelectionnee().getIdSelectionnees() ;
getIModele().mettreAJourCacheImage(commentaires, date, note, ids) ;
getListeImage().mettreAjourInfos(commentaires, date, note) ;
}
/**
* Met à jour l'arbre des mots clés affichés dans le volet de droite à partir de l'arbre passé en paramètre
* @param arbreMC le nouvel arbre des mots clés
*/
public void rafraichirArbreMotsCles(Tree arbreMC)
{
metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false) ;
filtres.getMotsClesFiltre().rafraichir(arbreMC, false) ;
}
/**
* envoie au modèle une demande pour lancer le formulaire ou l'application d'upload
*/
public void uploaderImages()
{
getIModele().uploaderImages() ;
}
/**
* Envoie une demande au modèle pour obtenir toutes les données annexes de l'image (métadonnées, note, etc ...),
* on y centralise tous les appels a obtenirQuelqueChose
* @param imgNum l'identifiant de l'image
*/
public void obtenirDonnes(String imgNum)
{
obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), imgNum) ;
obtenirNote(metadonneesIptcExif.getNoteVue(), imgNum) ;
}
/**
* Envoie une demande au modèle pour obtenir la note associée à une image
* @param noteVue le rafraichissable à qui est destiné cette information
* @param imgNum l'identifiant de l'image
*/
private void obtenirNote(Rafraichissable r, String imgNum) {
getIModele().obtenirNote(r,imgNum) ;
}
 
/**
* est appelé lors d'un clic de souris sur une vignette dans la galerie
* le médiateur gère alors les conséquences
* @param index l'index du noeud dans la galerie
* @param node le noeud selectionné
* @param e l'object source de l'évenement
*/
public void clicGalerieImage(int index, Element node,
EventObject e)
{
Record rd = getGalerieImage().getDView().getRecord(node) ;
String imgUrl = rd.getAsString("url_image");
String[] imgXY = getIModele().obtenirTailleImage(rd.getAsString("num_image")) ;
String[] infosImage = {imgUrl , imgXY[0] , imgXY[1] } ;
getZoomImage().rafraichir(infosImage,false);
dernierIndexOnglet = 0 ;
if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
{
getOngletsImage().setActiveTab(2);
}
String imgNum = rd.getAsString("num_image");
obtenirDonnes(imgNum) ;
}
/**
* est appelé lors d'un clic de souris sur un enregistrement de la liste
* le médiateur gère alors les conséquences
* @param rowIndex le numéro de ligne selectionné
*/
public void clicListeImage(int rowIndex)
{
Record rd = getListeImage().getSelectionModel().getSelected() ;
String imgUrl = rd.getAsString("url_image");
String[] imgXY = getIModele().obtenirTailleImage(rd.getAsString("num_image")) ;
String[] infosImage = {imgUrl , imgXY[0] , imgXY[1] } ;
getZoomImage().rafraichir(infosImage,false);
dernierIndexOnglet = 1 ;
String imgNum = rd.getAsString("num_image");
obtenirDonnes(imgNum) ;
}
/**
* gestion du double clic dans la liste
* @param rowIndex
*/
public void doubleClicListeImage(int rowIndex)
{
clicListeImage(rowIndex) ;
getOngletsImage().setActiveTab(2);
}
/**
* envoie une demande de mise a jour des données au modèle
*/
public void rafraichirToutesVues()
{
obtenirPhotoGalerie(getIModele());
}
/**
* montre le menu au coordonnées indiquées
* @param e l'objet source de l'évenement
*/
public void montrerContextMenu(EventObject e)
{
menuImageVue.showAt(e.getXY()) ;
}
/**
* appelé lors du double clic sur l'image agrandie
*/
public void doubleClicZoomImage()
{
getOngletsImage().setActiveTab(dernierIndexOnglet);
}
/**
* appelé lors du clic sur un des boutons de la zone zoom
* @param arg le nom du bouton qui a cliqué
*/
public void clicBoutonZoomImage(String arg)
{
Store st ;
int selected ;
int storeIndex ;
Record nRec = null ;
// tout d'abord on obtient les index selectionnés suivant la vue
if(getVueSelectionnee() == galerieImage)
{
DataView dv = getGalerieImage().getDView();
st = getGalerieImage().getSt();
if(st.getCount() <= 0)
{
return ;
}
selected = st.indexOf(dv.getSelectedRecords()[0]);
storeIndex = dv.indexOf(selected);
}
else
{
st = listeImage.getSt() ;
if(st.getCount() <= 0)
{
return ;
}
selected = st.indexOf(listeImage.getSelectionModel().getSelected()) ;
storeIndex = selected ;
}
if(arg.equals("prev"))
{
// si la photo séléctionnée est la première, on passe a la
// dernière
if (selected == 0) {
storeIndex = st.getCount() - 1 ;
nRec = st.getAt(storeIndex);
}
else
{
storeIndex = storeIndex - 1 ;
nRec = st.getAt(storeIndex);
}
}
if(arg.equals("suiv"))
{
// si la photo selectionnée est la dernière on passe a la
// première
if (selected == st.getCount() - 1) {
storeIndex = 0 ;
nRec = st.getAt(0);
}
else
{
storeIndex = storeIndex + 1 ;
nRec = st.getAt(storeIndex);
}
}
if(nRec != null)
{
String imgUrl = nRec.getAsString("url_image");
String[] imgXY = getIModele().obtenirTailleImage(nRec.getAsString("num_image")) ;
String[] infosImage = {imgUrl , imgXY[0] , imgXY[1] } ;
getZoomImage().rafraichir(infosImage,false);
if(getGalerieImage().isRendered())
{
getGalerieImage().getDView().select(storeIndex);
}
if(getListeImage().isRendered())
{
getListeImage().getSelectionModel().selectRecords(nRec) ;
}
String imgNum = nRec.getAsString("num_image");
obtenirDonnes(imgNum) ;
}
}
 
/**
* synchronise la selection entre la galerie et la liste
* @param string le nom de la vue qui doit être synchronisee
*/
public void synchroniserSelection(String string) {
if(string.equals("galerie") && getDernierIndexOnglet() != 2)
{
Record[] sel = getGalerieImage().getDView().getSelectedRecords() ;
getListeImage().selectionnerEnregistrements(sel) ;
}
if(string.equals("liste") && getDernierIndexOnglet() != 0)
{
Record[] sel = getListeImage().getSelectionModel().getSelections() ;
int[] ids = new int[sel.length] ;
for (int i = 0; i < sel.length; i++) {
ids[i] = getGalerieImage().getSt().indexOf(sel[i]) ;
}
getGalerieImage().selectionnerImages(ids) ;
}
}
 
/**
* fait une demande de suppression des images (en local et en distant)
* des images selectionnees
*/
public void supprimerImages() {
String[] ids = null ;
if(dernierIndexOnglet == 0)
{
ids = getGalerieImage().getIdSelectionnees() ;
}
else
{
ids = getListeImage().getIdSelectionnees() ;
}
if(ids.length > 0)
{
if(com.google.gwt.user.client.Window
.confirm("Supprimer les images selectionnees ?"))
{
masquerChargement() ;
getIModele().supprimerImages(ids) ;
aucuneSelection() ;
}
}
else
{
Window.alert("Impossible de supprimer : aucune image selectionnee") ;
}
}
 
/**
* desactive les onglets de metadonnees et de zoom (dans le cas ou rien n'est selectionne)
*/
public void aucuneSelection() {
if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
{
getZoomImage().disable() ;
getMetadonneesIptcExif().desactiverPanneau() ;
getZoomImage().desactiverPanneau() ;
setSelection(false) ;
}
}
/**
* reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il n'y en avait pas)
*/
public void selection() {
if(!isSelection())
{
getMetadonneesIptcExif().activerPanneau() ;
getZoomImage().activerPanneau() ;
getZoomImage().enable() ;
setSelection(true);
}
}
 
/**
* Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau d'un noeud donné
* @param n le noeud ou le menu doit apparaitre
* @param ev l'objet contenant les données sur l'évenement
* @param te l'éditeur associé à l'arbre qui permet de modifier les libellés des noeuds
*/
public void montrerContextMenuArbre(final TreeNode n, EventObject ev, final TreeEditor te)
{
Menu mn = new Menu() ;
final com.gwtext.client.widgets.menu.Item ajoutN = new Item("Ajouter mot cle");
final com.gwtext.client.widgets.menu.Item suppN = new Item("Supprimer mot cle");
mn.addItem(ajoutN);
mn.addItem(suppN);
mn.addListener(new MenuListenerAdapter() {
public void onItemClick(BaseItem item, EventObject e)
{
if(item.equals(suppN))
{
getMetadonneesIptcExif().getPanneauMotsCles().supprimerNoeud(n) ;
}
if(item.equals(ajoutN))
{
getMetadonneesIptcExif().getPanneauMotsCles().ajouterNoeud(n) ;
}
}
});
mn.showAt(ev.getXY());
}
/**
* Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du mot clé
* @param text le texte du mot clé
* @param id l'identifiant du mot clé
*/
public void mettreAjourMotsClesId(String text, String id) {
getIModele().mettreAjourMotsClesId(text, id) ;
}
 
/**
* Récupère les identifiants des images selectionnés
* et appelle le modèle pour qu'il mette à jour les associations mots clés/images
* @param motsClesEnCours les mots clés à associer aux images selectionnés séparés par une ','
* @param arbreMC l'arbre des mots clés à mettre à jour
*/
public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
String[] ids = getGalerieImage().getIdSelectionnees() ;
getIModele().mettreAjourMotsCles(ids,motsClesEnCours,arbreMC) ;
}
/**
* Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots clés
* @param n le noeud à ajouter à l'arbre
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void ajouterMotCleDansArbre(TreeNode n,Tree arbreMC)
{
getIModele().ajouterMotCleDansArbre(n, arbreMC) ;
filtres.getMotsClesFiltre().rafraichir(n, false) ;
}
 
/**
* Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre dans l'arbre des mots clés
* @param n le noeud à supprimer
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
getIModele().supprimerMotCleDansArbre(n,arbreMC) ;
filtres.getMotsClesFiltre().rafraichir(n.getId(), false) ;
}
 
/**
* Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots clés
* @param n le noeud à modifier
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void modifierMotCleDansArbre(TreeNode n , Tree arbreMC) {
getIModele().modifierMotCleDansArbre(n,arbreMC) ;
filtres.getMotsClesFiltre().rafraichir(n, false) ;
}
/**
* Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans l'arbre des mots clés
* @param n le noeud à déplacer
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void deplacerMotCleDansArbre(TreeNode n , Tree arbreMC) {
getIModele().deplacerMotCleDansArbre(n, arbreMC) ;
filtres.getMotsClesFiltre().rafraichir(n, false) ;
}
 
/**
* initialise les mots clés cochés par rapport aux images sélectionnées
*/
public void initialiserMotsCleCoches() {
obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), getGalerieImage().getIdSelectionnees()[0]) ;
}
 
/**
* Appelle le modèle pour lui demander les données d'une page à afficher
* @param pageCourante le numéro de page à affciher
*/
public void changerNumeroPage(int pageCourante) {
// on met le mesage d'attente
masquerChargement() ;
// on appelle le modèle
getIModele().changerNumeroPage(pageCourante) ;
// et met à jour les numéros de page dans les barre d'outils
getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
getListeImage().getToolBarVue().changerPageCourante(pageCourante);
}
/**
* Appelle le modèle pour qu'il change la taille de page utilisée
* @param nouvelleTaillePage la nouvelle taille de page
*/
public void changerTaillePage(int nouvelleTaillePage)
{
// on met le message d'attente
masquerChargement() ;
// on appelle le modèle
getIModele().changerTaillePage(nouvelleTaillePage) ;
// et on met à jour la taille de page dans les barres d'outils
getGalerieImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
getListeImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
}
 
/**
* Met à jour les barre d'outils avec des nouvelles valeurs
* @param pageMax le nombre de pages
* @param pageEncours la page en cours
* @param taillePage la taille de page
* @param nbElement le nombre d'élements par page
*/
public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement)
{
int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
getGalerieImage().getToolBarVue().rafraichir(pages, false) ;
getListeImage().getToolBarVue().rafraichir(pages, false) ;
}
/**
* Recherche l'élement actuellement affiché et affiche son message de chargement
*/
public void masquerChargement()
{
ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
if(masked != null && !masked.isMasked())
{
masked.mask("Chargement",true) ;
}
}
/**
* Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
*/
public void demasquerChargement()
{
ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
if(masked != null && masked.isMasked())
{
masked.unmask() ;
}
}
 
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]
* @return Les noms et valeurs des filtres
*/
public String[][] renvoyerFiltres()
{
String[][] valeursFiltres = filtres.renvoyerValeursAFiltrer() ;
return valeursFiltres ;
}
/**
* Indique si les filtres ont changés depuis la dernière requête
* (il faut faire un OR sur le résultat de toutes les fonctions
* renvoyerEtatFiltre s'il y a plus d'un filtre)
* @return true si au moins un des filtres a changé, false sinon
*/
public boolean getEtatFiltres()
{
return (filtres.renvoyerEtatFiltre());
}
/**
* Accesseur pour le panneau de droite contenant les filtres
* @return le panneau contenant les filtres
*/
public PanneauFiltresVues getPanneauFiltres()
{
return filtres ;
}
public void ajouterListeners()
{
/*ongletsImage.addListener(new TabPanelListenerAdapter() {
 
public boolean doBeforeTabChange(TabPanel source, Panel newPanel,
Panel oldPanel) {
if(newPanel != null && newPanel.equals(getZoomImage()))
{
if(getGalerieImage() != null && getGalerieImage().getIdSelectionnees().length <= 0)
{
Window.alert("Aucune image selectionnée pour l'affichage !") ;
aucuneSelection() ;
return false ;
}
}
return true ;
}
 
public void onTabChange(TabPanel source, Panel tab) {
// TODO Auto-generated method stub
}
 
public void onActivate(Panel panel) {
// TODO Auto-generated method stub
}
}) ;*/
}
 
}