/trunk/src/org/tela_botanica/client/image/ImageModele.java |
---|
144,15 → 144,9 |
public ImageMediateur getIMediateur() { |
return iMediateur; |
} |
public String[][] obtenirFiltresPourComptage() { |
/** |
* Appelle le DAO asynchrone pour obtenir la liste des images |
* |
* @param r |
* le rafraichissable auxquel on enverra les données |
*/ |
public void obtenirNombrePhotoGalerie(Rafraichissable r) { |
String valeursFiltres[][] = getIMediateur().renvoyerFiltres(); |
int tailleFiltres = valeursFiltres.length; |
167,7 → 161,41 |
for (int i = 0; i < valeursFiltres.length; i++) { |
criteres[i] = valeursFiltres[i]; |
} |
return criteres; |
} |
public String[][] obtenirFiltresPourDonnees() { |
String valeursFiltres[][] = getIMediateur().renvoyerFiltres(); |
int tailleFiltres = valeursFiltres.length; |
String[][] criteres2 = new String[tailleFiltres + 2][2]; |
String[] limite = { "limite", "" + taillePage }; |
String[] taillePage = { "numero_page", "" + pageEncours }; |
criteres2[0] = limite; |
criteres2[1] = taillePage; |
for (int i = 0; i < valeursFiltres.length; i++) { |
criteres2[i + 2] = valeursFiltres[i]; |
} |
return valeursFiltres; |
} |
/** |
* Appelle le DAO asynchrone pour obtenir la liste des images |
* |
* @param r |
* le rafraichissable auxquel on enverra les données |
*/ |
public void obtenirNombrePhotoGalerie(Rafraichissable r) { |
String[][] criteres = obtenirFiltresPourComptage(); |
// on les crée un DAO auquel on les transmet et qui demande le nombre |
// d'images correspondantes (pour les pages) |
NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO(this); |
180,16 → 208,22 |
int tailleFiltres = valeursFiltres.length; |
String[][] criteres2 = new String[tailleFiltres + 2][2]; |
String[][] criteres2 = new String[tailleFiltres + 4][2]; |
String[] tri = { "tri", "" + getIMediateur().getTri() }; |
String[] triDir = { "dir", "" + getIMediateur().getDirectionTri()}; |
String[] limite = { "limite", "" + taillePage }; |
String[] taillePage = { "numero_page", "" + pageEncours }; |
criteres2[0] = limite; |
criteres2[1] = taillePage; |
criteres2[2] = tri; |
criteres2[3] = triDir; |
for (int i = 0; i < valeursFiltres.length; i++) { |
criteres2[i + 2] = valeursFiltres[i]; |
criteres2[i + 4] = valeursFiltres[i]; |
} |
// et on crée un DAO auquel on les transmet et qui envoie une requete |
414,7 → 448,7 |
// si l'on a reçu une liste d'images |
if (nouvelleDonnees instanceof ListeImageCarnet) { |
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees; |
Object[][] photoData = new Object[data.size()][13]; |
Object[][] photoData = new Object[data.size()][14]; |
int i = 0; |
if (data.size() == 0) { |
437,29 → 471,14 |
photoData[i][10] = im.getTailleImage()[1]; |
photoData[i][11] = im.getTailleImage()[0]; |
photoData[i][12] = im.getIdsObsAssociees(); |
photoData[i][13] = im.getIdsObsAssociees(); |
i++; |
} |
// creation du store qui les contient |
FieldDef defNumImage = new IntegerFieldDef("num_image"); |
FieldDef defNomImage = new StringFieldDef("nom_original"); |
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 defNoteImage = new IntegerFieldDef("note_image"); |
FieldDef defIdImage = new IntegerFieldDef("id_image"); |
FieldDef defTailleX = new IntegerFieldDef("taille_x"); |
FieldDef defTailleY = new IntegerFieldDef("taille_y"); |
FieldDef defObsAssociees = new StringFieldDef("obs_associees"); |
FieldDef[] defTab = { defNumImage,defNomImage, defDatImage, defLieImage, |
defAppImage, defUrlImageS, defUrlImageM, defUrlImage, |
defNoteImage, defIdImage, defTailleX, defTailleY, defObsAssociees }; |
RecordDef rd = new RecordDef(defTab); |
RecordDef rd = new RecordDef(ImageMediateur.getDefinitionsChampsGrilleImages()); |
final MemoryProxy dataProxy = new MemoryProxy(photoData); |
final ArrayReader reader = new ArrayReader(rd); |
470,9 → 489,6 |
st = photoStore; |
st.load(); |
// par défaut le store est trié sur le numéro d'image |
st.sort("num_image"); |
// si on doit répandre les données, on notifie le médiateur qui les |
// distribuera à son tour |
if (repandreRafraichissement) { |
910,8 → 926,11 |
public void obtenirMiniListeObservations(Rafraichissable r, String[] critere, int taillePage, int numeroPage) { |
String[][] criteres = {{critere[0],critere[1]},{"limite",""+taillePage},{"numero_page",""+numeroPage}} ; |
String[] tri = { "tri", "" + getIMediateur().getTriMiniListeObs() }; |
String[] triDir = { "tri_dir", "" + getIMediateur().getDirectionTriMiniListeObs()}; |
String[][] criteres = {{critere[0],critere[1]},{"limite",""+taillePage},{"numero_page",""+numeroPage}, tri, triDir} ; |
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images |
ListeObservationAsynchroneDAO loaDAO = new ListeObservationAsynchroneDAO(this); |
loaDAO.obtenirListeObservation(r, iMediateur.getIdentifiant(), criteres); |
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java |
---|
30,8 → 30,13 |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ExtElement; |
import com.gwtext.client.core.RegionPosition; |
import com.gwtext.client.core.SortDir; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.IntegerFieldDef; |
import com.gwtext.client.data.Record; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
import com.gwtext.client.data.Tree; |
import com.gwtext.client.dd.DragData; |
import com.gwtext.client.dd.DragSource; |
592,8 → 597,7 |
} |
public void obtenirPhotoGalerie() { |
public void obtenirPhotoGalerie() { |
obtenirPhotoGalerie(getGalerieImage()); |
} |
607,6 → 611,16 |
masquerChargement(); |
getIModele().obtenirNombrePhotoGalerie(r); |
} |
/** envoie au modèle une demande de mise a jour |
* |
* @param r |
* la vue demandeuse de mise a jour |
*/ |
public void obtenirPhotoGalerieSansCalculerPages(Rafraichissable r) { |
masquerChargement(); |
getIModele().obtenirPhotoGalerie(r); |
} |
/** |
* demande au modèle les métadonnées associées a une image |
1816,5 → 1830,48 |
obtenirMotsClesId(fnMc, ids[ids.length - 1]); |
} |
} |
public String getTri() { |
// centralise le tri suivant la vue active |
// pour le moment seule la liste est triable |
return listeImage.renvoyerTri(); |
} |
public String getDirectionTri() { |
// centralise la direction de tri suivant la vue active |
return listeImage.renvoyerDirectionTri(); |
} |
public static FieldDef[] getDefinitionsChampsGrilleImages() { |
// creation du store |
FieldDef defNumImage = new IntegerFieldDef("num_image"); |
FieldDef defNomImage = new StringFieldDef("nom_original"); |
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 defNoteImage = new StringFieldDef("note_image"); |
FieldDef defidImage = new StringFieldDef("id_image"); |
FieldDef defTailleX = new IntegerFieldDef("taille_x"); |
FieldDef defTailleY = new IntegerFieldDef("taille_y"); |
FieldDef defObsAssociees = new StringFieldDef("obs_associees"); |
FieldDef defTransmis = new StringFieldDef("transmis"); |
FieldDef[] defTab = { defNumImage, defNomImage, defDatImage, defLieImage, |
defAppImage, defUrlImageS, defUrlImageM, defUrlImage, |
defNoteImage, defidImage, defTailleX, defTailleY, defObsAssociees, defTransmis}; |
return defTab; |
} |
public String getTriMiniListeObs() { |
return metadonneesIptcExif.getMiniListeObservation().renvoyerTri(); |
} |
public String getDirectionTriMiniListeObs() { |
return metadonneesIptcExif.getMiniListeObservation().renvoyerDirectionTri(); |
} |
} |
/trunk/src/org/tela_botanica/client/vues/observation/ListeObservationVue.java |
---|
345,6 → 345,9 |
observationMediateur.obtenirListeObservation(); |
} |
}; |
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite |
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas) |
// #mondeDeMerde |
t.schedule(200); |
} |
}); |
/trunk/src/org/tela_botanica/client/vues/image/MiniListeObservationVue.java |
---|
1,5 → 1,6 |
package org.tela_botanica.client.vues.image; |
import java.util.HashMap; |
import java.util.Iterator; |
import org.tela_botanica.client.i18n.Msg; |
8,9 → 9,11 |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.ListeObservation; |
import org.tela_botanica.client.modeles.objets.Observation; |
import org.tela_botanica.client.modeles.objets.Ontologies; |
import org.tela_botanica.client.util.Util; |
import org.tela_botanica.client.vues.MiniBarrePaginationVue; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.data.Record; |
import com.gwtext.client.data.SimpleStore; |
31,6 → 34,7 |
import com.gwtext.client.widgets.grid.GridPanel; |
import com.gwtext.client.widgets.grid.Renderer; |
import com.gwtext.client.widgets.grid.RowSelectionModel; |
import com.gwtext.client.widgets.grid.event.GridHeaderListenerAdapter; |
import com.gwtext.client.widgets.grid.event.GridListenerAdapter; |
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter; |
import com.gwtext.client.widgets.menu.BaseItem; |
40,6 → 44,7 |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ExtElement; |
import com.gwtext.client.core.SortDir; |
import com.gwtext.client.dd.DragData; |
/** |
93,6 → 98,12 |
*/ |
private int pageMax = 1 ; |
private SortDir directionTri; |
private String champTri; |
private boolean triActif; |
/** |
* Constructeur avec arguments |
* @param im le médiateur à associer à la vue |
101,6 → 112,8 |
{ |
iMediateur = im ; |
directionTri = SortDir.ASC; |
this.setId("x-view-mini-obs") ; |
// on construit le modèle de colonnes |
148,7 → 161,7 |
} ; |
// on crée un store simple contenant un petit set de données et deux colonnes |
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, getObs()); |
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, getObs()); |
ColumnConfig[] columns = { |
new ColumnConfig("", "transmis", 30, true, new Renderer() { |
166,10 → 179,10 |
} |
}), |
new ColumnConfig(Msg.get("taxon"), "plante", 145, true, colRend), |
new ColumnConfig(Msg.get("date"), "date", 68, true, dateRend), |
new ColumnConfig(Msg.get("lieu"), "lieu", 145, true, colRend), |
new ColumnConfig(Msg.get("numero"), "ordre_obs", 50, true, colRend), } ; |
new ColumnConfig(Msg.get("taxon"), "nomSaisi_observation", 145, true, colRend), |
new ColumnConfig(Msg.get("date"), "date_observation", 68, true, dateRend), |
new ColumnConfig(Msg.get("lieu"), "lieu_observation", 145, true, colRend), |
new ColumnConfig(Msg.get("numero"), "ordre_observation", 50, true, colRend), } ; |
ColumnModel columnModel = new ColumnModel(columns); |
209,6 → 222,27 |
setTopToolbar(bt) ; |
this.addGridHeaderListener(new GridHeaderListenerAdapter() { |
@Override |
public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) { |
triActif = true; |
Timer t = new Timer() { |
@Override |
public void run() { |
enregistrerEtatTri(); |
// Trier ne change pas le nombre de pages, on peut donc se passer d'un appel |
// au comptage (ce serait mieux si ces deux appels étaient combinés) |
obtenirMiniListeObservations(); |
} |
}; |
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite |
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas) |
// #mondeDeMerde |
t.schedule(200); |
} |
}); |
selecteurMode.addListener(new ComboBoxListenerAdapter() { |
@Override |
231,7 → 265,7 |
@Override |
public void onContextMenu(EventObject e) { |
// si pas de selection, on selection au moins la ligne sur laquelle on a fait le clic |
// si pas de selection, on selectionne au moins la ligne sur laquelle on a fait le clic |
if(getSelectionModel().getSelections().length <= 0) { |
int index = getView().findRowIndex(e); |
Record rddrop = getStore().getRecordAt(index) ; |
341,7 → 375,8 |
i++ ; |
} |
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, listeObs); |
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, listeObs); |
store.sort(champTri, directionTri); |
store.load(); |
this.reconfigure(store, colModel) ; |
} |
653,4 → 688,33 |
return false; |
} |
} |
private void enregistrerEtatTri() { |
if(triActif) { |
this.directionTri = store.getSortState().getDirection(); |
this.champTri = store.getSortState().getField(); |
} |
} |
public String renvoyerTri() { |
String tri = "ordre"; |
if(triActif) { |
HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleObservationChampsTri(); |
if(corr.containsKey(champTri)) { |
tri = corr.get(champTri); |
} |
} |
return tri; |
} |
public String renvoyerDirectionTri() { |
String triDir = "ASC"; |
try { |
triDir = (triActif) ? directionTri.getDirection() : "ASC"; |
} catch (Exception e) { |
triDir = "ASC"; |
} |
return triDir; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/image/ListeImageVue.java |
---|
1,13 → 1,19 |
package org.tela_botanica.client.vues.image; |
import java.util.HashMap; |
import org.tela_botanica.client.i18n.Msg; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.interfaces.ListePaginable; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.interfaces.VueListable; |
import org.tela_botanica.client.modeles.objets.Ontologies; |
import org.tela_botanica.client.util.Util; |
import org.tela_botanica.client.vues.BarrePaginationVue; |
import com.google.gwt.user.client.Timer; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.SortDir; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.IntegerFieldDef; |
import com.gwtext.client.data.Record; |
27,6 → 33,7 |
import com.gwtext.client.widgets.grid.GridPanel; |
import com.gwtext.client.widgets.grid.Renderer; |
import com.gwtext.client.widgets.grid.RowSelectionModel; |
import com.gwtext.client.widgets.grid.event.GridHeaderListenerAdapter; |
import com.gwtext.client.widgets.grid.event.GridRowListener; |
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter; |
117,6 → 124,12 |
*/ |
private boolean garderRatio = true; |
private SortDir directionTri; |
private String champTri; |
private boolean triActif; |
/** |
* Constructeur sans arguments (privé car ne doit pas être utilisé) |
*/ |
144,6 → 157,8 |
bt.setLabelElement(Msg.get("images")); |
bt.setTaillePageParDefaut(50); |
setBottomToolbar(bt); |
directionTri = SortDir.ASC; |
// on construit le modèle de colonnes |
numImage = new ColumnConfig(Msg.get("numero"), "num_image", 30, true, |
163,7 → 178,7 |
}); |
transmisImage = new ColumnConfig(" ", "obs_associees", 10, true, new Renderer() { |
transmisImage = new ColumnConfig(" ", "transmis", 10, true, new Renderer() { |
@Override |
public String render(Object value, CellMetadata cellMetadata, |
354,24 → 369,7 |
this.setAutoWidth(true); |
this.setEnableColumnResize(true); |
// creation du store |
FieldDef defNumImage = new IntegerFieldDef("num_image"); |
FieldDef defTransmisImage = new IntegerFieldDef("obs_associees"); |
FieldDef defNomImage = new StringFieldDef("nom_original"); |
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 defNoteImage = new StringFieldDef("note_image"); |
FieldDef defTailleX = new IntegerFieldDef("taille_x"); |
FieldDef defTailleY = new IntegerFieldDef("taille_y"); |
FieldDef defObsAssociees = new StringFieldDef("obs_associees"); |
FieldDef[] defTab = { defNumImage,defTransmisImage, defNomImage, defDatImage, defLieImage, |
defAppImage, defUrlImageS, defUrlImageM, defUrlImage, |
defNoteImage, defTailleX, defTailleY, defObsAssociees}; |
RecordDef rd = new RecordDef(defTab); |
RecordDef rd = new RecordDef(ImageMediateur.getDefinitionsChampsGrilleImages()); |
st = new Store(rd); |
// on associe le store |
this.setStore(st); |
395,6 → 393,28 |
* Ajoute les listeners pour la gestion des évènements |
*/ |
private void ajouterListeners() { |
this.addGridHeaderListener(new GridHeaderListenerAdapter() { |
@Override |
public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) { |
triActif = true; |
Timer t = new Timer() { |
@Override |
public void run() { |
enregistrerEtatTri(); |
// Trier ne change pas le nombre de page, on peut donc se passer d'un appel |
// au comptage (ce serait mieux si ces deux appels étaient combinés) |
iMediateur.obtenirPhotoGalerieSansCalculerPages(ListeImageVue.this); |
} |
}; |
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite |
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas) |
// #mondeDeMerde |
t.schedule(200); |
} |
}); |
this.addListener(new ContainerListenerAdapter() { |
@Override |
593,13 → 613,12 |
// si on reçoit un store |
if (nouvelleDonnees instanceof Store) { |
// on affecte celui-ci comme gestionnaire de données |
st = (Store) nouvelleDonnees; |
st.sort(champTri, directionTri); |
st.load(); |
// et on reconfigure et rafraichit la vue |
this.reconfigure(st, this.getColumnModel()); |
} |
744,5 → 763,33 |
return associeesTranmises; |
} |
private void enregistrerEtatTri() { |
if(triActif) { |
this.directionTri = st.getSortState().getDirection(); |
this.champTri = st.getSortState().getField(); |
} |
} |
public String renvoyerTri() { |
String tri = "ordre"; |
if(triActif) { |
HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleImageChampsTri(); |
if(corr.containsKey(champTri)) { |
tri = corr.get(champTri); |
} |
} |
return tri; |
} |
public String renvoyerDirectionTri() { |
String triDir = "ASC"; |
try { |
triDir = (triActif) ? directionTri.getDirection() : "ASC"; |
} catch (Exception e) { |
triDir = "ASC"; |
} |
return triDir; |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/objets/Ontologies.java |
---|
6,8 → 6,12 |
import org.tela_botanica.client.i18n.Msg; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.IntegerFieldDef; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.SimpleStore; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
public class Ontologies { |
145,4 → 149,18 |
return correspondances; |
} |
public static HashMap<String, String> getCorrespondanceGrilleImageChampsTri() { |
HashMap<String, String> correspondances = new HashMap<String, String>(); |
correspondances.put("num_image", "ordre"); |
correspondances.put("transmis", "transmission"); |
correspondances.put("obs_associees", "nom_sel"); |
correspondances.put("dat_image", "date_prise_de_vue"); |
correspondances.put("lie_image", "zone_geo"); |
correspondances.put("app_image", "appareil_fabriquant"); |
correspondances.put("note_image", "note_qualite"); |
correspondances.put("nom_original", "nom_original"); |
return correspondances; |
} |
} |