/trunk/src/org/tela_botanica/client/modeles/ListeImageAsynchroneDAO.java |
---|
New file |
0,0 → 1,51 |
package org.tela_botanica.client.modeles; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.HTTPRequest; |
import com.google.gwt.user.client.ResponseTextHandler; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
public class ListeImageAsynchroneDAO { |
public void ObtenirListeImages(final Rafraichissable r) |
{ |
HTTPRequest.asyncGet("getphotos.php", new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
final Object[][] photoData ; |
final JSONValue responseValue = JSONParser.parse(responseText); |
if (responseValue.isArray() != null) { |
final JSONArray liste_noms = responseValue.isArray(); |
final int taillemax = liste_noms.size(); |
photoData = new Object[taillemax][2]; |
for (int j = 0; j < liste_noms.size(); j++) { |
final JSONString debuturl = (JSONString) liste_noms |
.get(j); |
photoData[j] = new Object[]{"photo" + j, |
"images/" + debuturl.stringValue()}; |
} |
} |
else |
{ |
photoData = null ; |
} |
r.rafraichir(photoData); |
} |
}); |
} |
} |
/trunk/src/org/tela_botanica/client/image/ImageControleur.java |
---|
1,5 → 1,8 |
package org.tela_botanica.client.image; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO; |
public class ImageControleur { |
private ImageMediateur iMediateur = null ; |
8,5 → 11,11 |
iMediateur = im ; |
} |
public void obtenirPhotoGalerie(Rafraichissable r) |
{ |
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(); |
liaDAO.ObtenirListeImages(r); |
} |
} |
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java |
---|
1,10 → 1,19 |
package org.tela_botanica.client.image; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.vues.GalerieImageVue; |
import org.tela_botanica.client.vues.ListeImageVue; |
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; |
96,5 → 105,98 |
return detailsEtMotsCles; |
} |
public void synchroniserZoomListeGalerie(Object o, Rafraichissable r) |
{ |
if(r != getGalerieImage()) |
{ |
getGalerieImage().rafraichir(o); |
} |
if(r != getZoomImage()) |
{ |
getZoomImage().rafraichir(o); |
} |
if(r != getListeImage()) |
{ |
getListeImage().rafraichir(o); |
} |
} |
public void ObtenirPhotoGalerie(Rafraichissable r) |
{ |
getIControleur().obtenirPhotoGalerie(r) ; |
} |
public void ClicGalerieImage(int index, Element node, |
EventObject e) |
{ |
Record rd = getGalerieImage().getDView().getRecord(node) ; |
String imgUrl = rd.getAsString("url_image"); |
getZoomImage().rafraichir(imgUrl); |
if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK) |
{ |
getOngletsImage().setActiveTab(1); |
} |
} |
public void DoubleClicZoomImage() |
{ |
getOngletsImage().setActiveTab(0); |
} |
public void ClicBoutonZoomImage(String arg) |
{ |
DataView dv = getGalerieImage().getDView(); |
Store st = getGalerieImage().getSt(); |
Record nRec = null ; |
final int selected = st.indexOf(dv.getSelectedRecords()[0]); |
int storeIndex = dv.indexOf(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")); |
dv.select(storeIndex); |
} |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ListeImageVue.java |
---|
6,12 → 6,18 |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
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.widgets.Component; |
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; |
42,17 → 48,10 |
public ListeImageVue(ImageMediateur im) { |
this.iMediateur = im ; |
configurerColonnes(); |
configurerStore(); |
setAutoWidth(true); |
setAutoHeight(true); |
} |
// role : configurer les colonnes affichées dans la grille |
private void configurerColonnes() { |
setAutoHeight(true); |
numImage = new ColumnConfig("numéro d'image","num_image",150,true); |
urlImage = new ColumnConfig("Image","url_image",150,true,new Renderer() { |
60,7 → 59,7 |
public String render(Object value, CellMetadata cellMetadata, |
Record record, int rowIndex, int colNum, Store store) { |
String ImgUrl = record.getAsString("Miniature"); |
String ImgUrl = record.getAsString("url_image"); |
return "<img src=\""+ImgUrl+"\" title='example'>"; |
} |
78,22 → 77,90 |
st = new Store(rd) ; |
this.setStore(st); |
ajouterListeners() ; |
} |
// role : préparer le store et faire l'appel aux données nécessaires |
private void configurerStore() { |
// role : configurer les colonnes affichées dans la grille |
private void initialiser() { |
getIMediateur().ObtenirPhotoGalerie(this); |
} |
public void ajouterListeners() |
{ |
this.addListener(new ContainerListenerAdapter() { |
public void onHide(Component component) { |
// TODO Auto-generated method stub |
} |
public void onRender(Component component) { |
// TODO Auto-generated method stub |
} |
public void onShow(Component component) { |
initialiser(); |
} |
}); |
} |
public void rafraichir(Object nouvelleDonnees) { |
// TODO Auto-generated method stub |
Object[][] photoData = (Object[][])nouvelleDonnees ; |
final MemoryProxy dataProxy = new MemoryProxy(photoData); |
final ArrayReader reader = new ArrayReader(new RecordDef( |
new FieldDef[]{new StringFieldDef("num_image"), |
new StringFieldDef("url_image")})); |
final Store photoStore = new Store(dataProxy, reader); |
photoStore.load(); |
st = photoStore; |
this.reconfigure(st, modeleColonnes); |
} |
public ImageMediateur getIMediateur() { |
return iMediateur; |
} |
public ColumnConfig getNumImage() { |
return numImage; |
} |
public ColumnConfig getUrlImage() { |
return urlImage; |
} |
public ColumnModel getModeleColonnes() { |
return modeleColonnes; |
} |
public Store getSt() { |
return st; |
} |
public ColumnConfig getCl() { |
return cl; |
} |
/trunk/src/org/tela_botanica/client/vues/ZoomImageVue.java |
---|
5,7 → 5,12 |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.google.gwt.user.client.DOM; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.Widget; |
import com.gwtext.client.core.RegionPosition; |
import com.gwtext.client.widgets.Button; |
import com.gwtext.client.widgets.Panel; |
24,9 → 29,19 |
super("Zoom"); |
iMediateur = im ; |
image = new Image(); |
image.setUrl("images/vide.jpg"); |
image = new Image() { |
public void onBrowserEvent(Event event) { |
if (Event.ONDBLCLICK == DOM.eventGetType(event)) { |
getIMediateur().DoubleClicZoomImage(); |
} |
} |
}; |
image.sinkEvents(Event.ONDBLCLICK); |
image.setUrl("image/vide.jpg"); |
this.setLayout(new BorderLayout()); |
prev.setWidth("5%"); |
35,12 → 50,61 |
this.add(prev,new BorderLayoutData(RegionPosition.WEST)); |
this.add(image,new BorderLayoutData(RegionPosition.CENTER)); |
this.add(suiv,new BorderLayoutData(RegionPosition.EAST)); |
ajouterListenersBoutons(); |
} |
public void rafraichir(Object nouvelleDonnees) { |
// TODO Auto-generated method stub |
if(nouvelleDonnees instanceof String) |
{ |
getImage().setUrl((String)nouvelleDonnees); |
} |
} |
public void ajouterListenersBoutons() |
{ |
prev.addClickListener(new ClickListener() { |
public void onClick(Widget sender) { |
getIMediateur().ClicBoutonZoomImage("prev"); |
} |
}); |
suiv.addClickListener(new ClickListener() { |
public void onClick(Widget sender) { |
getIMediateur().ClicBoutonZoomImage("suiv"); |
} |
}); |
} |
public ImageMediateur getIMediateur() { |
return iMediateur; |
} |
public Image getImage() { |
return image; |
} |
public com.google.gwt.user.client.ui.Button getPrev() { |
return prev; |
} |
public com.google.gwt.user.client.ui.Button getSuiv() { |
return suiv; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/GalerieImageVue.java |
---|
7,9 → 7,12 |
import com.google.gwt.core.client.JavaScriptObject; |
import com.google.gwt.user.client.Element; |
import com.google.gwt.user.client.Event; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.XTemplate; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
16,13 → 19,17 |
import com.gwtext.client.util.Format; |
import com.gwtext.client.widgets.BoxComponent; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Container; |
import com.gwtext.client.widgets.DataView; |
import com.gwtext.client.widgets.Observable; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.DataView.Data; |
import com.gwtext.client.widgets.event.ContainerListener; |
import com.gwtext.client.widgets.event.ContainerListenerAdapter; |
import com.gwtext.client.widgets.event.DataViewListener; |
import com.gwtext.client.widgets.event.DataViewListenerAdapter; |
public class GalerieImageVue extends Panel implements Rafraichissable { |
public class GalerieImageVue extends Panel implements Rafraichissable, Observable { |
// instance du médiateur |
private ImageMediateur iMediateur = null; |
34,54 → 41,38 |
super("Galerie"); |
iMediateur = im ; |
// Preparation de la dataview et du template |
// le template va créer une div contenant une image |
// pour chacune des photos |
final XTemplate template = new XTemplate( |
new String[]{ |
"<tpl for='.'>", |
"<div class='thumb-wrap' id='{nom}'>", |
"<div class='thumb'><img src='{url}' title='{nom}'></div>", |
"<span>{nom}</span></div>", "</tpl>", |
"<div class='x-clear'></div>"}); |
template.compile(); |
this.addListener(new ContainerListenerAdapter() { |
// la dataview affichera les images en accord avec le template |
// cree precedemment |
dView = new DataView("div.thumb-wrap") { |
public void prepareData(Data data) { |
data.setProperty("shortName", Format.ellipsis(data |
.getProperty("name"), 15)); |
public void onHide(Component component) { |
// TODO Auto-generated method stub |
} |
}; |
dView.setTpl(template); |
public void onRender(Component component) { |
// TODO Auto-generated method stub |
} |
public void onShow(Component component) { |
if(dView == null) |
{ |
initialiser(); |
} |
} |
}); |
// parametre d'affichage de la dataview |
dView.setAutoHeight(true); |
dView.setMultiSelect(true); |
dView.setOverCls("x-view-over"); |
dView.setEmptyText("Aucune image à afficher"); |
// creation du store |
FieldDef defNumImage = new StringFieldDef("num_image"); |
FieldDef defUrlImage = new StringFieldDef("url_image"); |
FieldDef[] defTab = {defNumImage,defUrlImage}; |
RecordDef rd = new RecordDef(defTab) ; |
st = new Store(rd) ; |
dView.setStore(st); |
// ajouts de la gestion des evenements pour la dataview |
ajouterListeners(); |
this.add(dView); |
} |
public void ajouterListeners() |
public void ajouterListenersDataView() |
{ |
// ajout de listeners pour la gestion de la selection |
// dans la galerie |
dView.addListener(new DataViewListenerAdapter() { |
90,8 → 81,9 |
public void onClick(DataView source, int index, Element node, |
EventObject e) { |
//TODO: appeler le mediateur |
getIMediateur().ClicGalerieImage(index, node, e); |
} |
110,7 → 102,9 |
public void onDblClick(DataView source, int index, Element node, |
EventObject e) { |
//TODO: appeler le mediateur |
getIMediateur().ClicGalerieImage(index, node, e); |
} |
124,9 → 118,84 |
} |
// instantiation paresseuse |
public void initialiser() |
{ |
// Preparation de la dataview et du template |
// le template va créer une div contenant une image |
// pour chacune des photos |
final XTemplate template = new XTemplate( |
new String[]{ |
"<tpl for='.'>", |
"<div class='thumb-wrap' id='{num_image}'>", |
"<div class='thumb'><img src='{url_image}' title='{num_image}'></div>", |
"<span>{nom}</span></div>", "</tpl>", |
"<div class='x-clear'></div>"}); |
template.compile(); |
// la dataview affichera les images en accord avec le template |
// cree precedemment |
dView = new DataView("div.thumb-wrap") { |
public void prepareData(Data data) { |
data.setProperty("shortName", Format.ellipsis(data |
.getProperty("num_image"), 15)); |
} |
}; |
dView.setTpl(template); |
// parametre d'affichage de la dataview |
dView.setAutoHeight(true); |
dView.setMultiSelect(true); |
dView.setOverCls("x-view-over"); |
dView.setEmptyText("Aucune image à afficher"); |
// creation du store |
FieldDef defNumImage = new StringFieldDef("num_image"); |
FieldDef defUrlImage = new StringFieldDef("url_image"); |
FieldDef[] defTab = {defNumImage,defUrlImage}; |
RecordDef rd = new RecordDef(defTab) ; |
st = new Store(rd) ; |
dView.setStore(st); |
// ajouts de la gestion des evenements pour la dataview |
ajouterListenersDataView(); |
this.add(dView); |
getIMediateur().ObtenirPhotoGalerie(this); |
} |
public void rafraichir(Object nouvelleDonnees) { |
// TODO Auto-generated method stub |
Object[][] photoData = (Object[][])nouvelleDonnees ; |
final MemoryProxy dataProxy = new MemoryProxy(photoData); |
final ArrayReader reader = new ArrayReader(new RecordDef( |
new FieldDef[]{new StringFieldDef("num_image"), |
new StringFieldDef("url_image")})); |
final Store photoStore = new Store(dataProxy, reader); |
photoStore.load(); |
st = photoStore; |
dView.setStore(st); |
dView.refresh(); |
} |
public ImageMediateur getIMediateur() { |
return iMediateur; |
} |
public DataView getDView() { |
return dView; |
} |
public Store getSt() { |
return st; |
} |
} |