5,7 → 5,6 |
import org.tela_botanica.client.interfaces.VueListable; |
|
import com.google.gwt.user.client.Element; |
import com.google.gwt.user.client.Window; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.XTemplate; |
import com.gwtext.client.data.FieldDef; |
14,6 → 13,10 |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
import com.gwtext.client.dd.DragData; |
import com.gwtext.client.dd.DragSource; |
import com.gwtext.client.dd.DropTarget; |
import com.gwtext.client.dd.DropTargetConfig; |
import com.gwtext.client.util.Format; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.DataView; |
20,57 → 23,64 |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.event.ContainerListenerAdapter; |
import com.gwtext.client.widgets.event.DataViewListenerAdapter; |
import com.gwtext.client.widgets.grid.GridDragData; |
|
/** |
* Galerie d'images miniatures |
* Avec barre de pagination |
* Galerie d'images miniatures Avec barre de pagination |
* |
* @author aurelien |
*/ |
public class GalerieImageVue extends Panel implements Rafraichissable, VueListable { |
public class GalerieImageVue extends Panel implements Rafraichissable, |
VueListable { |
|
/** |
* instance du médiateur |
*/ |
private ImageMediateur iMediateur = null; |
*/ |
private ImageMediateur iMediateur = null; |
/** |
* Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données |
*/ |
private DataView dView = null; |
* Dataview, littéralement "vue de données" qui permet de définir la manière |
* d'afficher les données |
*/ |
private DataView dView = null; |
/** |
* Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données |
*/ |
private Store st = null; |
* Dataview, littéralement "vue de données" qui permet de définir la manière |
* d'afficher les données |
*/ |
private Store st = null; |
/** |
* Barre de pagination gérant l'affichage d'un nombre donné d'élements par page et la navigation entre eux |
*/ |
private pageToolBarVue pt = null ; |
* Barre de pagination gérant l'affichage d'un nombre donné d'élements par |
* page et la navigation entre eux |
*/ |
private pageToolBarVue pt = null; |
/** |
* Booleen indiquant si la galerie est instanciée ou pas |
*/ |
private boolean estInstancie = false ; |
*/ |
private boolean estInstancie = false; |
|
/** |
* Constructeur sans argument, privé car ne doit pas être utilisé |
*/ |
@SuppressWarnings("unused") |
private GalerieImageVue() |
{ |
super() ; |
private GalerieImageVue() { |
super(); |
} |
|
|
/** |
* Constructeur avec argument |
* @param im le médiateur avec lequel la vue va communiquer |
* |
* @param im |
* le médiateur avec lequel la vue va communiquer |
*/ |
public GalerieImageVue(ImageMediateur im) { |
super("Galerie"); |
iMediateur = im; |
|
|
// on ajoute des listeners au composant tout entier |
this.addListener(new ContainerListenerAdapter() { |
|
// pour gagner du temps on n'instancie la vue en elle même que lors du premier affichage (lazy rendering) |
|
// pour gagner du temps on n'instancie la vue en elle même que lors |
// du premier affichage (lazy rendering) |
|
public void onShow(Component component) { |
|
if (!estInstancie) { |
79,15 → 89,16 |
} |
|
}); |
|
|
// et on ajoute la tool bar |
pt = new pageToolBarVue(im) ; |
this.setBottomToolbar(pt) ; |
pt = new pageToolBarVue(im); |
this.setBottomToolbar(pt); |
|
} |
|
/** |
* Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la vue de données |
* Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la |
* vue de données |
*/ |
public void ajouterListenersDataView() { |
|
94,12 → 105,12 |
// ajout de listeners pour la gestion de la selection |
// dans la galerie |
dView.addListener(new DataViewListenerAdapter() { |
|
|
// gestion du clic sur une image |
|
|
public void onClick(DataView source, int index, Element node, |
EventObject e) { |
|
|
// on en notifie le médiateur |
getIMediateur().clicGalerieImage(index, node, e); |
|
106,11 → 117,11 |
} |
|
// gestion du clic droit |
|
|
public void onContextMenu(DataView source, int index, Element node, |
EventObject e) { |
|
// on stoppe l'évenement |
// on stoppe l'évenement |
e.stopEvent(); |
// et on notifie le médiateur |
getIMediateur().montrerContextMenu(e); |
118,17 → 129,17 |
} |
|
// gestion du double clic |
|
|
public void onDblClick(DataView source, int index, Element node, |
EventObject e) { |
|
// on notife le mediateur |
getIMediateur().clicGalerieImage(index, node, e); |
|
|
} |
|
// gestion des actions en fonction de la selection |
|
|
public void onSelectionChange(DataView view, Element[] selections) { |
|
// s'il n'y a aucun élement sélectionné |
138,7 → 149,8 |
} else { |
// sinon on notifie le médiateur |
getIMediateur().selection(); |
// et on lui demande de synchroniser la séléction avec les autres vues |
// et on lui demande de synchroniser la séléction avec les |
// autres vues |
getIMediateur().synchroniserSelection("galerie"); |
} |
} |
148,7 → 160,8 |
|
/** |
* Accesseur pour la dataview |
* @return la dataview |
* |
* @return la dataview |
*/ |
public DataView getDView() { |
return dView; |
156,7 → 169,9 |
|
/** |
* Renvoie les ids des images sélectionnées |
* @return un tableau de String contenant les identifiants des images sélectionnées |
* |
* @return un tableau de String contenant les identifiants des images |
* sélectionnées |
*/ |
public String[] getIdSelectionnees() { |
Record[] selection = getDView().getSelectedRecords(); |
173,6 → 188,7 |
|
/** |
* Accesseur pour le médiateur |
* |
* @return le médiateur associé à la vue |
*/ |
public ImageMediateur getIMediateur() { |
181,26 → 197,28 |
|
/** |
* Accesseur pour le store |
* |
* @return le store associé à la vue |
*/ |
public Store getSt() { |
return st; |
} |
|
|
/** |
* Accesseur pour la toolbar |
* Accesseur pour la toolbar |
* |
* @return la toolbar associée à la vue |
*/ |
public pageToolBarVue getToolBarVue() |
{ |
return pt ; |
public pageToolBarVue getToolBarVue() { |
return pt; |
} |
|
/** |
* Fonction d'initialisation du contenu (appelée lors du premier affichage de la liste) |
* Fonction d'initialisation du contenu (appelée lors du premier affichage |
* de la liste) |
*/ |
public void initialiser() { |
|
|
// Preparation de la dataview et du template |
// le template va créer une div contenant une image |
// pour chacune des photos |
211,7 → 229,8 |
"<div class='thumb'><img src='{url_image_M}' title='{num_image}'></div>", |
"<span>{nom}</span></div>", "</tpl>", |
"<div class='x-clear'></div>" }); |
// pour des raisons de performances on compile le template en une fonction |
// pour des raisons de performances on compile le template en une |
// fonction |
template.compile(); |
|
// la dataview affichera les images en accord avec le template |
218,11 → 237,11 |
// cree precedemment |
dView = new DataView("div.thumb-wrap") { |
|
|
public void prepareData(Data data) { |
data.setProperty("shortName", Format.ellipsis(data |
.getProperty("num_image"), 15)); |
.getProperty("num_image"), 15)); |
} |
|
}; |
dView.setTpl(template); |
|
246,21 → 265,50 |
RecordDef rd = new RecordDef(defTab); |
st = new Store(rd); |
dView.setStore(st); |
|
|
this.getDView().setLoadingText("chargement"); |
|
// ajouts de la gestion des evenements pour la dataview |
ajouterListenersDataView(); |
configDragAndDrop() ; |
|
this.add(dView); |
|
|
// enfin on envoie une demande de données au médiateur |
getIMediateur().obtenirPhotoGalerie(this); |
// et on déclare le composant comme instancié |
estInstancie = true ; |
estInstancie = true; |
} |
|
public void configDragAndDrop() |
{ |
// on fabrique la nouvelle configuration |
// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup |
DropTargetConfig dtc = new DropTargetConfig(); |
dtc.setdDdGroup("DragGroupName"); |
|
//La drop target permet de gérer l'évenement onDrop sur l'élement courant |
@SuppressWarnings("unused") |
DropTarget tg = new DropTarget(this, dtc) |
{ |
public boolean notifyDrop(DragSource source, EventObject e, DragData data){ |
|
// si les données proviennent d'une grille |
if(data instanceof GridDragData) |
{ |
// on appelle le médiateur |
return iMediateur.lierObsDD(source, e, data,getId()) ; |
} |
return false ; |
} |
|
public String notifyOver(DragSource source, EventObject e, DragData data){ |
return "x-dd-drop-ok"; |
} |
}; |
|
} |
|
/** |
* Méthode héritée de l'interface rafraichissable |
*/ |
269,7 → 317,7 |
|
// si l'objet reçu est un store |
if (nouvelleDonnees instanceof Store) { |
|
|
st = (Store) nouvelleDonnees; |
// on le charge |
st.load(); |
277,28 → 325,30 |
dView.setStore(st); |
// et on rafrachit la vue |
dView.refresh(); |
|
|
} |
|
// si le composant doit répandre le rafraichissement |
if (repandreRafraichissement) { |
// il en notifie le médiateur en lui donnant une copie des données et en notifiant qu'il en est l'expéditeur |
// il en notifie le médiateur en lui donnant une copie des données |
// et en notifiant qu'il en est l'expéditeur |
getIMediateur().synchroniserDonneesZoomListeGalerie( |
nouvelleDonnees, this); |
} |
|
|
// si c'est la première mise à jour que l'on reçoit |
if(!estInstancie) |
{ |
if (!estInstancie) { |
// alors le composant est considéré comme instancié |
estInstancie = true ; |
estInstancie = true; |
} |
} |
|
/** |
* Méthode héritée de l'interface VueListable |
* Sélectionne les images dans la galerie suivant les identifiants donnés en paramètres |
* @param ids les identifiants des images à sélectionner |
* Méthode héritée de l'interface VueListable Sélectionne les images dans la |
* galerie suivant les identifiants donnés en paramètres |
* |
* @param ids |
* les identifiants des images à sélectionner |
*/ |
public void selectionnerImages(int[] ids) { |
|
305,5 → 355,5 |
getDView().select(ids); |
|
} |
|
|
} |