Rev 679 | Rev 1018 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.image;import org.tela_botanica.client.image.ImageMediateur;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.vues.ArbreMotsClesVue;import org.tela_botanica.client.vues.image.filtres.RechercheFiltreTaxonVue;import com.google.gwt.core.client.GWT;import com.google.gwt.core.client.JavaScriptObject;import com.google.gwt.user.client.Timer;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.ui.Label;import com.gwtext.client.core.EventObject;import com.gwtext.client.core.Ext;import com.gwtext.client.core.NameValuePair;import com.gwtext.client.widgets.BoxComponent;import com.gwtext.client.widgets.Button;import com.gwtext.client.widgets.Component;import com.gwtext.client.widgets.Container;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.TabPanel;import com.gwtext.client.widgets.event.ButtonListenerAdapter;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.form.DateField;import com.gwtext.client.widgets.form.Field;import com.gwtext.client.widgets.form.TextArea;import com.gwtext.client.widgets.form.TextField;import com.gwtext.client.widgets.form.event.FieldListener;import com.gwtext.client.widgets.form.event.FieldListenerAdapter;import com.gwtext.client.widgets.grid.GridPanel;import com.gwtext.client.widgets.grid.GridView;import com.gwtext.client.widgets.grid.PropertyGridPanel;import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;import com.gwtext.client.widgets.layout.FitLayout;import com.gwtext.client.widgets.layout.RowLayout;import com.gwtext.client.widgets.layout.RowLayoutData;import com.gwtext.client.widgets.layout.VerticalLayout;/*** Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il* implémente l'interface rafraichissable** @author aurelien**/public class PanneauMetadonneesVue extends TabPanel implements Rafraichissable {/*** Le médiateur associé à la vue*/private ImageMediateur imediateur = null;/*** Le panneau des Exifs*/private PropertyGridPanel ExifGrid = null;/*** Le panneau des Iptc*/private PropertyGridPanel IptcGrid = null;/*** La grille pour le panneau des Exifs*/private GridView gViewExif = null;/*** La grille pour le panneau de Iptc*/private GridView gViewIptc = null;/*** L'onglet des Exifs*/private Panel panneauExifGrid = null;/*** L'onglet des Iptc*/private Panel panneauIptcGrid = null;/*** L'onglet des infos*/private Panel panneauInfoGrid = null;/*** L'onglet des mots clés*/private ArbreMotsClesVue panneauMotsCles = null;/*** l'onglet des observations*/private Panel panneauMiniListeObservation = null;/*** Le champ commentaire*/private TextField commentaireGeneral = null;/*** Le champ date*/private DateField dateImage = null;/*** La barre de recherche rapide des taxons*/private RechercheFiltreTaxonVue rechercheFiltreTaxonVue = null;/*** La mini liste des observations*/private MiniListeObservationVue miniListeObservation = null ;/*** Le bouton de validation*/Button validerInfo = null;/*** Barre de notation*/BarreNotationVue noteVue = null;/*** Booleen d'instanciation*/boolean estInstancie = false;Timer timerRedimensionnement = null;/*** Constructeur sans argument (privé car ne doit pas être utilisé)*/@SuppressWarnings("unused")private PanneauMetadonneesVue() {super();}/*** Constructeur avec argument** @param im*/public PanneauMetadonneesVue(ImageMediateur im) {super();// on associe le médiateurimediateur = im;// on crée et dispose les panneaux et les champspanneauExifGrid = new Panel("Exif");panneauIptcGrid = new Panel("Iptc");panneauInfoGrid = new Panel("Infos");panneauMotsCles = new ArbreMotsClesVue(im);panneauMotsCles.setHeight("500px");Panel sousPanneauInfosGenerales = new Panel("Infos Générales");sousPanneauInfosGenerales.setLayout(new VerticalLayout());sousPanneauInfosGenerales.setBorder(false);sousPanneauInfosGenerales.setHeight(200);sousPanneauInfosGenerales.setAutoWidth(true);sousPanneauInfosGenerales.setMargins(5);sousPanneauInfosGenerales.setPaddings(5);sousPanneauInfosGenerales.setCollapsible(true);Label labelComm = new Label("Commentaires :");labelComm.setHeight("20px");commentaireGeneral = new TextArea();commentaireGeneral.setWidth("90%");Label labelDate = new Label("Date :");Label labelNote = new Label("Note :");panneauMotsCles.setBorder(false);labelDate.setHeight("20px");dateImage = new DateField();dateImage.setAutoWidth(true);dateImage.setFormat("d/m/Y");validerInfo = new Button("OK");noteVue = new BarreNotationVue(im, 5);panneauMiniListeObservation = new Panel("Observations") ;if(!Ext.isIE()) {panneauMiniListeObservation.setLayout(new RowLayout());}miniListeObservation = new MiniListeObservationVue(im);rechercheFiltreTaxonVue = new RechercheFiltreTaxonVue(im);rechercheFiltreTaxonVue.setTitle("Recherche dans les observations");if(Ext.isIE()) {panneauMiniListeObservation.add(rechercheFiltreTaxonVue);rechercheFiltreTaxonVue.setHeight(90);} else {panneauMiniListeObservation.add(rechercheFiltreTaxonVue, new RowLayoutData(90));}rechercheFiltreTaxonVue.setWidth("100%") ;rechercheFiltreTaxonVue.setBorder(false);if(Ext.isIE()) {panneauMiniListeObservation.add(miniListeObservation, new RowLayoutData(400)) ;} else {panneauMiniListeObservation.add(miniListeObservation, new RowLayoutData()) ;}sousPanneauInfosGenerales.add(labelComm);sousPanneauInfosGenerales.add(commentaireGeneral);sousPanneauInfosGenerales.add(labelDate);sousPanneauInfosGenerales.add(dateImage);sousPanneauInfosGenerales.add(labelNote);sousPanneauInfosGenerales.add(noteVue);sousPanneauInfosGenerales.add(validerInfo);sousPanneauInfosGenerales.setAutoHeight(true);panneauMotsCles.setAutoHeight(true);panneauInfoGrid.setBorder(false);panneauInfoGrid.setAutoHeight(true);panneauExifGrid.setAutoScroll(true);panneauIptcGrid.setAutoScroll(true);panneauInfoGrid.add(sousPanneauInfosGenerales);panneauInfoGrid.add(panneauMotsCles);this.add(panneauMiniListeObservation) ;this.add(panneauInfoGrid);this.add(panneauExifGrid);this.add(panneauIptcGrid);gViewExif = new GridView();gViewExif.setForceFit(true);ExifGrid = new PropertyGridPanel();ExifGrid.setId("meta_exif");ExifGrid.setView(gViewExif);ExifGrid.setNameText("Métadonnées Exif");ExifGrid.setAutoWidth(true);ExifGrid.setHeight(500);ExifGrid.setSorted(false);ExifGrid.setAutoScroll(true);gViewIptc = new GridView();gViewIptc.setForceFit(true);IptcGrid = new PropertyGridPanel();IptcGrid.setId("meta_iptc");IptcGrid.setView(gViewIptc);IptcGrid.setNameText("Métadonnées IPTC");IptcGrid.setAutoWidth(true);IptcGrid.setHeight(500);IptcGrid.setSorted(false);IptcGrid.setAutoScroll(true);panneauExifGrid.add(ExifGrid);panneauIptcGrid.add(IptcGrid);// on ajoute les listenersajouterListeners();// on effectue le rendu//this.doLayout(true);}private void ajouterListeners() {// on ajoute un écouteurvaliderInfo.addListener(new ButtonListenerAdapter() {// gestion du clicpublic void onClick(Button button, EventObject e) {button.focus();// lors du clic sur le bouton valider on met à jour les// commentaires et la dategetIMediateur().mettreAJourInfo(commentaireGeneral.getText(),dateImage.getRawValue(), noteVue.getNote());}});// gestion des clics dans la grilleExifGrid.addGridCellListener(new GridCellListenerAdapter() {// lors d'un clic d'une cellulepublic void onCellClick(GridPanel grid, int rowIndex, int colIndex,EventObject e) {// on empeche l'éditione.stopEvent();ExifGrid.stopEditing();}// lors du double clic sur une cellulepublic void onCellDblClick(GridPanel grid, int rowIndex,int colIndex, EventObject e) {// on empêche l'éditione.stopEvent();ExifGrid.stopEditing();}});IptcGrid.addGridCellListener(new GridCellListenerAdapter() {// lors d'un clic d'une cellulepublic void onCellClick(GridPanel grid, int rowIndex, int colIndex,EventObject e) {// on empeche l'éditione.stopEvent();ExifGrid.stopEditing();}// lors d'un double clic d'une cellulepublic void onCellDblClick(GridPanel grid, int rowIndex,int colIndex, EventObject e) {// on empeche l'éditione.stopEvent();ExifGrid.stopEditing();}});panneauMiniListeObservation.addListener(new ContainerListenerAdapter() {public void onResize(BoxComponent component, int adjWidth, int adjHeight,int rawWidth, int rawHeight) {timerRedimensionnement = new Timer() {public void run() {int taille = 500;if(Window.getClientHeight() > 800 ) {taille = Window.getClientHeight() - 226;}panneauMiniListeObservation.setHeight(taille);}};timerRedimensionnement.schedule(300);}});panneauExifGrid.addListener(new ContainerListenerAdapter() {public void onResize(BoxComponent component, int adjWidth, int adjHeight,int rawWidth, int rawHeight) {timerRedimensionnement = new Timer() {public void run() {int taille = 500;taille = Window.getClientHeight() - 150;ExifGrid.setHeight(taille);panneauExifGrid.setHeight(taille);}};timerRedimensionnement.schedule(300);}});panneauExifGrid.addListener(new ContainerListenerAdapter() {public void onResize(BoxComponent component, int adjWidth, int adjHeight,int rawWidth, int rawHeight) {timerRedimensionnement = new Timer() {public void run() {int taille = 500;taille = Window.getClientHeight() - 150;IptcGrid.setHeight(taille);panneauIptcGrid.setHeight(taille);}};timerRedimensionnement.schedule(300);}});}/*** Desactive visuellement ce panneau*/public void desactiverPanneau() {panneauInfoGrid.setDisabled(true);panneauExifGrid.setDisabled(true);panneauIptcGrid.setDisabled(true);}/*** Active visuellement ce panneau*/public void activerPanneau() {panneauInfoGrid.setDisabled(false);panneauExifGrid.setDisabled(false);panneauIptcGrid.setDisabled(false);}/*** Accesseur pour le médiateur** @return le médiateur associé à la vue*/public ImageMediateur getIMediateur() {return imediateur;}/*** Méthode héritée de l'interface rafraichissable** @param nouvelleDonnees* les nouvelles données* @param repandreRafraichissement* le booleen de notification de mise à jour*/public void rafraichir(Object nouvelleDonnees,boolean repandreRafraichissement) {// si on reçoit un tableau d'objetsif (nouvelleDonnees instanceof Object[]) {final Object ressourceObject = nouvelleDonnees;if(!this.isRendered()) {addListener(new PanelListenerAdapter() {public void onRender(Component component) {rafraichir(ressourceObject, false);}});return ;}// extrait infos, exifs et iptcObject meta[] = (Object[]) nouvelleDonnees;String[][] exif = (String[][]) meta[0];String[][] iptc = (String[][]) meta[1];final String[][] gen = (String[][]) meta[2];NameValuePair[] exifSource = new NameValuePair[exif.length];NameValuePair[] iptcSource = new NameValuePair[iptc.length];int maxLength;if (exif.length <= iptc.length) {maxLength = iptc.length;} else {maxLength = exif.length;}for (int i = 0; i < maxLength; i++) {if (i < exif.length && !exif[i][0].equals("null")) {exifSource[i] = new NameValuePair(exif[i][0], exif[i][1]);}if (i < iptc.length && !iptc[i][0].equals("null")) {iptcSource[i] = new NameValuePair(iptc[i][0], iptc[i][1]);}}// on met à jour les champs avec la bonne valeurcommentaireGeneral.setValue(gen[0][1]);dateImage.setValue(gen[1][1]);// et on met à jour les données pour l'affichageExifGrid.setSource(exifSource);IptcGrid.setSource(iptcSource);}}/*** Accesseur pour le panneau des mots clés** @return the panneauMotsCles*/public ArbreMotsClesVue getPanneauMotsCles() {return panneauMotsCles;}public BarreNotationVue getNoteVue() {return noteVue;}public MiniListeObservationVue getMiniListeObservation(){return miniListeObservation ;}public RechercheFiltreTaxonVue getRechercheFiltreTaxonVue(){return rechercheFiltreTaxonVue ;}public void redimensionner() {if(panneauMiniListeObservation.isCreated() && panneauMiniListeObservation.isVisible()) {panneauMiniListeObservation.doLayout();//panneauMiniListeObservation.show();miniListeObservation.redimensionner();}}}