Rev 403 | Rev 1291 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;import org.tela_botanica.client.interfaces.ListePaginable;import org.tela_botanica.client.interfaces.Rafraichissable;import com.google.gwt.user.client.Window;import com.gwtext.client.core.EventCallback;import com.gwtext.client.core.EventObject;import com.gwtext.client.core.Template;import com.gwtext.client.data.Record;import com.gwtext.client.data.SimpleStore;import com.gwtext.client.data.Store;import com.gwtext.client.widgets.Button;import com.gwtext.client.widgets.Toolbar;import com.gwtext.client.widgets.ToolbarButton;import com.gwtext.client.widgets.ToolbarTextItem;import com.gwtext.client.widgets.event.ButtonListenerAdapter;import com.gwtext.client.widgets.form.ComboBox;import com.gwtext.client.widgets.form.Field;import com.gwtext.client.widgets.form.TextField;import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;import com.gwtext.client.widgets.form.event.TextFieldListenerAdapter;public class MiniBarrePaginationVue extends Toolbar implements Rafraichissable {/*** Instance du médiateur à qui on notifie les évnènements*/private ListePaginable listePaginable = null;/*** Bouton précédent*/private ToolbarButton prevPage = new ToolbarButton();/*** Bouton suivant*/private ToolbarButton suivPage = new ToolbarButton();/*** Numéro de la page courante (attention, commence à zéro pour des raisons* pratiques)*/private int pageCourante = 0;/*** Nombre de page total*/private int pageTotale = 1;/*** Nombre d'élements total*/private int nbElement = 0;/*** Nombre d'élément par page*/private int taillePage = 0;/*** Texte statique de la toolbar 2*/private ToolbarTextItem afficherNbElem = new ToolbarTextItem("Afficher ");/*** Combobox permettant de selectionner le nombre d'élements à afficher par* page et donc de changer la variable taillePage*/private ComboBox selecteurTaillePage = new ComboBox();/*** Les différents intervalles de page possibles (intialisé par défaut)*/String[] pages = { "200","100","50", "20", "10" };Store storeIntervalle = null ;/*** Label indiquant le type d'element affiché**/private String labelElement="Elements";/*** taille de la page par defaut**/private int taillePageDefaut = 50;/*** Texte statique de la toolbar 3*/private ToolbarTextItem nbElemParPage = new ToolbarTextItem(labelElement + " par page ");/*** retourne la liste associé à la barre*/public ListePaginable getlistePaginable() {return listePaginable;}/**************************************************************************** constructeur sans argument (privé car ne doit pas être utilisé)*/@SuppressWarnings("unused")private MiniBarrePaginationVue() {super();}/*** constructeur avec paramètres** @param im* le médiateur à associer à la barre*/public MiniBarrePaginationVue(ListePaginable lst) {super();listePaginable = lst;// on dispose un peu de texte et quelques espaces pour séparer les// élémentsaddButton(prevPage);addSpacer();addButton(suivPage);addSpacer();addItem(afficherNbElem);prevPage.setIcon("page_prev.png");suivPage.setIcon("page_suiv.png");setIntervallesPages(pages) ;// le template definit ce que l'on affiche pour chaque element du store// dans la comboboxfinal Template tp = new Template("<div class=\"x-combo-list-item\">"+ "{nb_page}" + "<div class=\"x-clear\"></div></div>");tp.compile();selecteurTaillePage.setTpl(tp);selecteurTaillePage.setStore(storeIntervalle);selecteurTaillePage.setEditable(false);addField(selecteurTaillePage);selecteurTaillePage.setValue(""+taillePageDefaut);selecteurTaillePage.setWidth(50);addItem(nbElemParPage);// on ajoute les différents listenersajouterListeners();}/*** Texte nommant les elements pagines (Images, Observation, truc, machin etc...).* @param label*/public void setLabelElement(String label) {this.labelElement = label;nbElemParPage.setText(labelElement + " par page ");}public void setTaillePageParDefaut(int taille) {this.taillePageDefaut = taille;selecteurTaillePage.setValue(""+taillePageDefaut);}public void setIntervallesPages(String[] intervalle){String[][] intervallesPages = new String[intervalle.length][1] ;for(int i = 0 ; i < intervalle.length ; i++){intervallesPages[i][0] = intervalle[i] ;}storeIntervalle = new SimpleStore(new String[] { "nb_page" },intervallesPages );storeIntervalle.load();selecteurTaillePage.setStore(storeIntervalle);}/*** ajoute les différents listeners nécessaires au bon fonctionnement des* éléments de la barre de pagination*/private void ajouterListeners() {// boutons suivants et précédentsprevPage.addListener(new ButtonListenerAdapter() {public void onClick(Button button, EventObject e) {// si la page courante n'est pas la premièreif (pageCourante > 0) {// on décrémente la page courante de 1pageCourante--;// on rafraichit l'affichage// et on notifie le médiateur de l'évenementlistePaginable.changerNumeroPage(pageCourante);}}});suivPage.addListener(new ButtonListenerAdapter() {public void onClick(Button button, EventObject e) {// si la page courante n'est pas la dernièreif (pageCourante < pageTotale - 1) {// on incrémente la page courante de 1pageCourante++;// on rafraichit l'affichage// et on notifie le médiateur de l'évenementlistePaginable.changerNumeroPage(pageCourante);}}});// listener pour la selection dans la comboboxselecteurTaillePage.addListener(new ComboBoxListenerAdapter() {public void onSelect(ComboBox comboBox, Record record, int index) {String nouvelleTaillePageString = comboBox.getStore().getRecordAt(index).getAsString("nb_page");int nouvelleTaillePage = Integer.parseInt(nouvelleTaillePageString);// si la taille de page est différente de l'ancienneif (nouvelleTaillePage != taillePage) {// on la changechangerTaillePage(nouvelleTaillePage);}// et on met la valeur à jour dans la comboboxcomboBox.setValue(nouvelleTaillePageString);Window.alert("la nouvelle taille est :"+nouvelleTaillePageString);}});}/*** Met à jour la page en cours** @param nouvellePageCourante* la nouvelle page en cours*/public void changerPageCourante(int nouvellePageCourante) {pageCourante = nouvellePageCourante;}/*** Methode héritée de l'interface rafraichissable*/public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {// si on reçoit un tableau de intif (nouvelleDonnees instanceof int[]) {int[] page = (int[]) nouvelleDonnees;// le premier élement est le nombre de pages totalespageTotale = page[0];// le second la page en courspageCourante = page[1];// le troisième la taille de la pagetaillePage = page[2];// et le dernier le nombre total d'élémentsnbElement = page[3];// si la page courante dépasse la page totale (cas normalement// improbable car géré en amont)// on met le numéro de page à la page courante -1 (car la page// courante est comptée à partir// de zéro)if (pageCourante >= pageTotale && pageCourante != 0) {pageCourante = pageTotale - 1;// le cas échéant on en notifie le médiateurlistePaginable.changerNumeroPage(pageCourante);}}}/*** Renvoie les différents intervalles de pages possibles** @return un tableau de string qui contient les différentes* taille de pages*/public String[] getNbPages() {return pages;}/*** Envoie au médiateur une demande pour modifier la taille de la page (qui* va à son tour faire les modifications nécessaires)** @param nouvelleTaillePage* la nouvelle taille de page (élement appartenant au tableau* renvoyé par getNbPages())*/public void changerTaillePage(int nouvelleTaillePage) {listePaginable.changerTaillePage(nouvelleTaillePage);}/*** Selectionne la valeur correspond à celle passée en paramètre dans la* combobox (si elle existe)** @param nouvelleTaillePage* la nouvelle taille de page*/public void selectionnerTaillePage(int nouvelleTaillePage) {selecteurTaillePage.setValue("" + nouvelleTaillePage);}}