Rev 19 | Rev 25 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.image;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
import org.tela_botanica.client.vues.BarreOutilsVue;
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.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.RegionPosition;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.Store;
import com.gwtext.client.widgets.DataView;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.FitLayout;
/**
* Mediateur gérant les interactions entre vues et les echanges de données
* C'est un singleton.
* @author aurelien
*
*/
public class ImageMediateur {
// cette classe est un singleton
private static boolean estInstancie = false ;
// controleur
private ImageModele iModele = null ;
//widgets
//Panneau principal des images (onglet "images")
private final Panel panneauPrincipalImage = new Panel("Images");
// Panneau à onglet pour la liste, la galerie et la vue en grand
private TabPanel ongletsImage = null ;
private Panel panneauMenuEtOngletsImage = null ;
private GalerieImageVue galerieImage = null ;
private ListeImageVue listeImage = null ;
private ZoomImageVue zoomImage = null ;
// panneau details et mots clés
private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
private MenuImageVue menuImageVue = null ;
private BarreOutilsVue barreOutilsVue = null ;
private PanneauMetadonneesVue metadonneesIptcExif = null ;
private int dernierIndexOnglet = 0 ;
private boolean selection = false ;
/**
* @param selection the selection to set
*/
public void setSelection(boolean selection) {
this.selection = selection;
}
/**
* @return the selection
*/
public boolean isSelection() {
return selection;
}
public static ImageMediateur Instance()
{
if(!estInstancie)
{
estInstancie = true ;
return new ImageMediateur() ;
}
else
{
return null ;
}
}
private ImageMediateur()
{
final BorderLayoutData regionNord = new BorderLayoutData(
RegionPosition.NORTH) ;
final BorderLayoutData regionCentre = new BorderLayoutData(
RegionPosition.CENTER) ;
final BorderLayoutData regionEst = new BorderLayoutData(
RegionPosition.EAST);
regionEst.setSplit(true);
iModele = ImageModele.Instance(this);
panneauPrincipalImage.setLayout(new BorderLayout());
panneauMenuEtOngletsImage = new Panel() ;
panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
ongletsImage = new TabPanel();
galerieImage = new GalerieImageVue(this) ;
Panel panneauListeImage = new Panel("Liste");
listeImage = new ListeImageVue(this);
panneauListeImage.setLayout(new FitLayout());
panneauListeImage.add(listeImage);
zoomImage = new ZoomImageVue(this);
ongletsImage.add(galerieImage);
ongletsImage.add(zoomImage);
ongletsImage.add(panneauListeImage);
menuImageVue = new MenuImageVue(this) ;
barreOutilsVue = new BarreOutilsVue(this) ;
detailsEtMotsCles.setWidth("20%");
detailsEtMotsCles.setAnimCollapse(true);
detailsEtMotsCles.setTitleCollapse(true);
detailsEtMotsCles.setCollapsible(true);
metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
detailsEtMotsCles.add(metadonneesIptcExif) ;
panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
}
public String getIdentifiant()
{
return "0" ;
}
public ImageModele getIModele() {
return iModele;
}
public Panel getPanneauPrincipalImage() {
return panneauPrincipalImage;
}
public TabPanel getOngletsImage() {
return ongletsImage;
}
public GalerieImageVue getGalerieImage() {
return galerieImage;
}
public ListeImageVue getListeImage() {
return listeImage;
}
public ZoomImageVue getZoomImage() {
return zoomImage;
}
public Panel getDetailsEtMotsCles() {
return detailsEtMotsCles;
}
/**
* @return the estInstancie
*/
public static boolean isEstInstancie() {
return estInstancie;
}
/**
* @return the panneauMenuEtOngletsImage
*/
public Panel getPanneauMenuEtOngletsImage() {
return panneauMenuEtOngletsImage;
}
/**
* @return the menuImageVue
*/
public MenuImageVue getMenuImageVue() {
return menuImageVue;
}
/**
* @return the barreOutilsVue
*/
public BarreOutilsVue getBarreOutilsVue() {
return barreOutilsVue;
}
/**
* @return the metadonneesIptcExif
*/
public PanneauMetadonneesVue getMetadonneesIptcExif() {
return metadonneesIptcExif;
}
/**
* @return the dernierIndexOnglet
*/
public int getDernierIndexOnglet() {
return dernierIndexOnglet;
}
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 ;
}
}
}
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() ;
}
public void obtenirPhotoGalerie(Rafraichissable r)
{
getIModele().obtenirPhotoGalerie(r) ;
}
public void obtenirMetadonnees(Rafraichissable r, String id)
{
getIModele().obtenirMetadonnees(r, id) ;
}
public void mettreAJourInfo(String commentaires, String date)
{
String ids[] = getVueSelectionnee().getIdSelectionnees() ;
getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
}
public void uploaderImages()
{
getIModele().uploaderImages() ;
}
public void clicGalerieImage(int index, Element node,
EventObject e)
{
Record rd = getGalerieImage().getDView().getRecord(node) ;
String imgUrl = rd.getAsString("url_image");
getZoomImage().rafraichir(imgUrl,false);
dernierIndexOnglet = 0 ;
if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
{
getOngletsImage().setActiveTab(1);
}
String imgNum = rd.getAsString("num_image");
obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
}
public void clicListeImage(int rowIndex)
{
Record rd = getListeImage().getSelectionModel().getSelected() ;
String imgUrl = rd.getAsString("url_image");
getZoomImage().rafraichir(imgUrl,false);
dernierIndexOnglet = 2 ;
String imgNum = rd.getAsString("num_image");
obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
}
public void doubleClicListeImage(int rowIndex)
{
clicListeImage(rowIndex) ;
getOngletsImage().setActiveTab(1);
}
public void rafraichirToutesVues()
{
obtenirPhotoGalerie(getGalerieImage());
}
public void montrerContextMenu(EventObject e)
{
menuImageVue.showAt(e.getXY()) ;
}
public void doubleClicZoomImage()
{
getOngletsImage().setActiveTab(dernierIndexOnglet);
}
public void clicBoutonZoomImage(String arg)
{
Store st ;
int selected ;
int storeIndex ;
Record nRec = null ;
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 à 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 à 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)
{
getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
if(getGalerieImage().isRendered())
{
getGalerieImage().getDView().select(storeIndex);
}
if(getListeImage().isRendered())
{
getListeImage().getSelectionModel().selectRecords(nRec) ;
}
String imgNum = nRec.getAsString("num_image");
obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
}
}
public void obtenirSelection(String nomVue)
{
}
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) ;
}
}
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 sélectionnées ?"))
{
getIModele().supprimerImages(ids) ;
aucuneSelection() ;
}
}
else
{
Window.alert("Impossible de supprimer : aucune image selectionnée") ;
}
}
public void aucuneSelection() {
if(getListeImage().getSelectionModel().getCount() <= 0 && getGalerieImage().getDView().getSelectionCount() <= 0)
{
getMetadonneesIptcExif().desactiverPanneau() ;
getZoomImage().desactiverPanneau() ;
setSelection(false) ;
}
}
public void selection() {
if(!isSelection())
{
getMetadonneesIptcExif().activerPanneau() ;
getZoomImage().activerPanneau() ;
setSelection(true);
}
}
}