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 |
|
} |
|
}) ;*/ |
} |
|
|
|
} |