New file |
0,0 → 1,395 |
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 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.NameValuePair; |
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.PanelListener; |
import com.gwtext.client.widgets.event.PanelListenerAdapter; |
import com.gwtext.client.widgets.form.DateField; |
import com.gwtext.client.widgets.form.TextArea; |
import com.gwtext.client.widgets.form.TextField; |
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.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 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; |
|
/** |
* 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édiateur |
imediateur = im; |
|
// on crée et dispose les panneaux et les champs |
panneauExifGrid = new Panel("Exif"); |
panneauIptcGrid = new Panel("Iptc"); |
panneauInfoGrid = new Panel("info"); |
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") ; |
panneauMiniListeObservation.setLayout(new FitLayout()) ; |
panneauMiniListeObservation.setHeight(800) ; |
miniListeObservation = new MiniListeObservationVue(im) ; |
panneauMiniListeObservation.add(miniListeObservation) ; |
|
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); |
|
panneauInfoGrid.add(sousPanneauInfosGenerales); |
panneauInfoGrid.add(panneauMotsCles); |
|
this.add(panneauInfoGrid); |
this.add(panneauExifGrid); |
this.add(panneauIptcGrid); |
this.add(panneauMiniListeObservation) ; |
|
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.setAutoHeight(true); |
ExifGrid.setSorted(false); |
|
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.setAutoHeight(true); |
IptcGrid.setSorted(false); |
|
panneauExifGrid.add(ExifGrid); |
panneauIptcGrid.add(IptcGrid); |
|
// on ajoute les listeners |
ajouterListeners(); |
|
// on effectue le rendu |
this.doLayout(true); |
|
} |
|
private void ajouterListeners() { |
// on ajoute un écouteur |
validerInfo.addListener(new ButtonListenerAdapter() { |
|
// gestion du clic |
|
public void onClick(Button button, EventObject e) { |
|
button.focus(); |
// lors du clic sur le bouton valider on met à jour les |
// commentaires et la date |
getIMediateur().mettreAJourInfo(commentaireGeneral.getText(), |
dateImage.getRawValue(), noteVue.getNote()); |
|
} |
}); |
|
// gestion des clics dans la grille |
ExifGrid.addGridCellListener(new GridCellListenerAdapter() { |
|
// lors d'un clic d'une cellule |
|
public void onCellClick(GridPanel grid, int rowIndex, int colIndex, |
EventObject e) { |
|
// on empeche l'édition |
e.stopEvent(); |
ExifGrid.stopEditing(); |
|
} |
|
// lors du double clic sur une cellule |
|
public void onCellDblClick(GridPanel grid, int rowIndex, |
int colIndex, EventObject e) { |
|
// on empêche l'édition |
e.stopEvent(); |
ExifGrid.stopEditing(); |
|
} |
|
}); |
|
IptcGrid.addGridCellListener(new GridCellListenerAdapter() { |
|
// lors d'un clic d'une cellule |
|
public void onCellClick(GridPanel grid, int rowIndex, int colIndex, |
EventObject e) { |
// on empeche l'édition |
e.stopEvent(); |
ExifGrid.stopEditing(); |
|
} |
|
// lors d'un double clic d'une cellule |
|
public void onCellDblClick(GridPanel grid, int rowIndex, |
int colIndex, EventObject e) { |
// on empeche l'édition |
e.stopEvent(); |
ExifGrid.stopEditing(); |
|
} |
|
}); |
|
} |
|
/** |
* Desactive visuellement ce panneau |
*/ |
public void desactiverPanneau() { |
this.setDisabled(true); |
} |
|
/** |
* Active visuellement ce panneau |
*/ |
public void activerPanneau() { |
this.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'objets |
if (nouvelleDonnees instanceof Object[]) { |
// extrait infos, exifs et iptc |
Object meta[] = (Object[]) nouvelleDonnees; |
String[][] exif = (String[][]) meta[0]; |
String[][] iptc = (String[][]) meta[1]; |
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 valeur |
commentaireGeneral.setValue(gen[0][1]); |
dateImage.setRawValue(gen[1][1]); |
|
// et on met à jour les données pour l'affichage |
ExifGrid.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 void redimensionner() { |
|
if(panneauMiniListeObservation.isCreated() && panneauMiniListeObservation.isVisible()) { |
panneauMiniListeObservation.doLayout(); |
//panneauMiniListeObservation.show(); |
miniListeObservation.redimensionner(); |
} |
|
} |
} |
Property changes: |
Added: svn:mergeinfo |