Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 28 | Rev 36 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import java.util.Iterator;

import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
import org.tela_botanica.client.modeles.ImageCarnet;
import org.tela_botanica.client.modeles.ListeImageCarnet;

import com.google.gwt.core.client.JavaScriptObject;
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.JsObject;
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.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StoreMgr;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.util.JavaScriptObjectHelper;
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.event.ComponentListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.PanelListener;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.grid.CellMetadata;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.GridView;
import com.gwtext.client.widgets.grid.Renderer;
import com.gwtext.client.widgets.grid.RowSelectionModel;
import com.gwtext.client.widgets.grid.event.GridCellListener;
import com.gwtext.client.widgets.grid.event.GridListener;
import com.gwtext.client.widgets.grid.event.GridRowListener;
import com.gwtext.client.widgets.grid.event.RowSelectionListener;
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
import com.gwtext.client.widgets.layout.AnchorLayout;
import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtextux.client.data.BufferedStore;

/**
 * Liste d'image composée de miniatures et d'information sur l'image
 * 
 * @author aurelien
 */
public class ListeImageVue extends GridPanel implements Rafraichissable,
                VueListable {

        // instance du médiateur
        private ImageMediateur  iMediateur              = null;

        private ColumnConfig    numImage;
        private ColumnConfig    urlImage;
        private ColumnConfig    lieImage;
        private ColumnConfig    datImage;
        private ColumnConfig    appImage;
        private ColumnModel             modeleColonnes;

        private boolean                 estInstancie    = false;

        // données locales
        // store qui gère les données de la liste d'images
        private Store                   st                              = null;
        private ColumnConfig    cl                              = null;
        
        private pageToolBarVue bt = null ;

        public ListeImageVue(ImageMediateur im) {

                super();

                this.setId("listeImageGrid");

                this.iMediateur = im;
                
                bt = new pageToolBarVue(im);            
                this.setBottomToolbar(bt) ;

                numImage = new ColumnConfig("numéro", "num_image", 30, true);
                datImage = new ColumnConfig("date", "dat_image", 120, true);
                lieImage = new ColumnConfig("lieu", "lie_image", 120, true);
                appImage = new ColumnConfig("appareil", "app_image", 200, true);
                urlImage = new ColumnConfig("Image", "url_image_S", 30, true,
                                new Renderer() {

                                        public String render(Object value,
                                                        CellMetadata cellMetadata, Record record,
                                                        int rowIndex, int colNum, Store store) {

                                                String ImgUrl = record.getAsString("url_image_S");
                                                String ImgNum = record.getAsString("num_image");
                                                return "<div class=\"img-list\"> <img src=\"" + ImgUrl
                                                                + "\" title='" + ImgNum + "'> </div>";
                                        }

                                });

                ColumnConfig[] cm = {numImage, urlImage, datImage, lieImage, appImage};
                modeleColonnes = new ColumnModel(cm);
                this.setColumnModel(modeleColonnes);
                this.setAutoScroll(true);
                this.setAutoWidth(true);
                this.setEnableColumnResize(true);

                // creation du store
                FieldDef defNumImage = new IntegerFieldDef("num_image");
                FieldDef defDatImage = new StringFieldDef("dat_image");
                FieldDef defLieImage = new StringFieldDef("lie_image");
                FieldDef defAppImage = new StringFieldDef("app_image");
                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 };
                RecordDef rd = new RecordDef(defTab);
                st = new Store(rd);
                this.setStore(st);
                this.getView().setAutoFill(true);

                this.setLoadMask("chargement");

                ajouterListeners();

        }

        public void ajouterListeners() {
                this.addListener(new ContainerListenerAdapter() {

                        public void onHide(Component component) {

                        }

                        public void onRender(Component component) {

                                if (!isEstInstancie()) {
                                        setEstInstancie(true);
                                        getIMediateur().synchroniserSelection("galerie");
                                }
                        }

                        public void onShow(Component component) {

                        }

                });

                this.addGridRowListener(new GridRowListener() {

                        public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {

                                getIMediateur().clicListeImage(rowIndex);
                        }

                        public void onRowContextMenu(GridPanel grid, int rowIndex,
                                        EventObject e) {

                                e.stopEvent() ;
                                getIMediateur().montrerContextMenu(e);
                        }

                        public void onRowDblClick(GridPanel grid, int rowIndex,
                                        EventObject e) {

                                getIMediateur().doubleClicListeImage(rowIndex);
                        }
                });

                this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {

                        public void onSelectionChange(RowSelectionModel sm) {

                                if (sm.getCount() <= 0) {
                                        getIMediateur().aucuneSelection();
                                } else {
                                        getIMediateur().selection();
                                        getIMediateur().synchroniserSelection("liste");
                                }
                        }
                });
        }

        public ColumnConfig getCl() {
                return cl;
        }

        public String[] getIdSelectionnees() {
                Record[] selection = this.getSelectionModel().getSelections();
                int taille = selection.length;
                String id_selection[] = new String[taille];

                for (int i = 0; i < selection.length; i++) {

                        id_selection[i] = selection[i].getAsString("num_image");
                }

                return id_selection;
        }

        public ImageMediateur getIMediateur() {
                return iMediateur;
        }

        public ColumnModel getModeleColonnes() {
                return modeleColonnes;
        }

        public ColumnConfig getNumImage() {
                return numImage;
        }

        public Store getSt() {
                return st;
        }

        public ColumnConfig getUrlImage() {
                return urlImage;
        }

        /**
         * @return the estInstancie
         */
        public boolean isEstInstancie() {
                return estInstancie;
        }

        public void rafraichir(Object nouvelleDonnees,
                        boolean repandreRafraichissement) {

                if (nouvelleDonnees instanceof Store) {

                        st = (Store) nouvelleDonnees;
                        st.load();
                        this.reconfigure(st, this.getColumnModel());
                                        
                }

                if (repandreRafraichissement) {
                        getIMediateur().synchroniserDonneesZoomListeGalerie(
                                        nouvelleDonnees, this);
                }
        }

        public void selectionnerEnregistrements(Record[] sel) {

                if (isEstInstancie()) {
                        getSelectionModel().clearSelections();
                        getSelectionModel().selectRecords(sel);
                }
        }
        
        public pageToolBarVue getToolBarVue()
        {
                return bt ;
        }

        /**
         * @param estInstancie
         *            the estInstancie to set
         */
        public void setEstInstancie(boolean estInstancie) {
                this.estInstancie = estInstancie;
        }

        /**
         * @param mediateur
         *            the iMediateur to set
         */
        public void setIMediateur(ImageMediateur mediateur) {
                iMediateur = mediateur;
        }

}