4,6 → 4,7 |
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; |
15,7 → 16,10 |
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 { |
|
32,6 → 36,7 |
* Bouton suivant |
*/ |
private ToolbarButton suivPage = new ToolbarButton(); |
|
/** |
* Numéro de la page courante (attention, commence à zéro pour des raisons |
* pratiques) |
53,7 → 58,15 |
* Texte statique de la toolbar 2 |
*/ |
private ToolbarTextItem afficherNbElem = new ToolbarTextItem("Afficher "); |
|
/** |
* Affichage de la page courante |
*/ |
private TextField champPage = new TextField("" + (pageCourante + 1)); |
|
private ToolbarTextItem surPageTotale = new ToolbarTextItem("/ "); |
|
/** |
* Combobox permettant de selectionner le nombre d'élements à afficher par |
* page et donc de changer la variable taillePage |
*/ |
62,7 → 75,7 |
/** |
* Les différents intervalles de page possibles (intialisé par défaut) |
*/ |
String[] pages = { "200","100","50", "20", "10" }; |
String[] pages = {"200","100","50", "20", "10"}; |
|
Store storeIntervalle = null ; |
|
72,14 → 85,12 |
* Label indiquant le type d'element affiché |
* |
*/ |
private String labelElement="Obs"; |
|
private String labelElement="Elements"; |
|
/** |
* taille de la page par defaut |
* |
*/ |
|
private int taillePageDefaut = 50; |
|
|
86,13 → 97,11 |
/** |
* Texte statique de la toolbar 3 |
*/ |
private ToolbarTextItem nbElemParPage = new ToolbarTextItem( |
labelElement + " par page "); |
private ToolbarTextItem nbElemParPage = new ToolbarTextItem(labelElement); |
|
/** |
* retourne la liste associé à la barre |
*/ |
|
public ListePaginable getlistePaginable() { |
return listePaginable; |
} |
119,7 → 128,8 |
// on dispose un peu de texte et quelques espaces pour séparer les |
// éléments |
addButton(prevPage); |
addSpacer(); |
addField(champPage); |
addItem(surPageTotale); |
addButton(suivPage); |
|
addSpacer(); |
142,6 → 152,7 |
addField(selecteurTaillePage); |
selecteurTaillePage.setValue(""+taillePageDefaut); |
selecteurTaillePage.setWidth(50); |
champPage.setWidth(20); |
|
addItem(nbElemParPage); |
|
154,7 → 165,6 |
* 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 "); |
242,6 → 252,83 |
} |
|
}); |
|
champPage.addListener(new TextFieldListenerAdapter() { |
|
@Override |
public void onSpecialKey(Field field, EventObject e) { |
|
// on teste si la touche entrée a été pressée |
if (e.getKey() == EventObject.ENTER) { |
int nouvellePage = pageCourante; |
// on teste avec parseInt si la valeur entrée est un entier |
try { |
nouvellePage = Integer |
.parseInt(champPage.getRawValue()); |
} |
// si ce n'est pas le cas alors on remet le numéro de page |
// correct |
catch (NumberFormatException nfe) { |
rafraichirNumeroPage(); |
champPage.focus(true); |
return; |
} |
|
// si la conversion reussit on verifie s'il est nécessaire |
// de changer de page |
// et si la nouvelle est comprise dans l'intervalle des |
// pages existantes (0..pageTotale) |
if (nouvellePage != pageCourante + 1 && nouvellePage > 0 |
&& nouvellePage <= pageTotale) { |
// le cas échéant, on charge la nouvelle page et on |
// notifie le médiateur |
changerPageCourante(nouvellePage - 1); |
listePaginable.changerNumeroPage(pageCourante); |
|
} else { |
// sinon on reaffiche l'ancien numero de page sans rien |
// changer |
rafraichirNumeroPage(); |
champPage.focus(true); |
} |
} |
} |
|
@Override |
public void onFocus(Field field) { |
|
champPage.focus(true); |
} |
|
}); |
|
// pour éviter de se compliquer la vie, on filtre tous les charactères |
// non numériques |
champPage.addKeyPressListener(new EventCallback() { |
|
@Override |
public void execute(EventObject e) { |
|
// si c'est un numerique |
if (Character.isDigit((char) e.getCharCode())) { |
// on laisse passer |
return; |
} |
|
// si c'est la touche entrée ou backspace (valider ou effacer) |
if (e.getKey() == EventObject.ENTER |
|| e.getKey() == EventObject.BACKSPACE) { |
// on laisse passer |
return; |
} else { |
// sinon on remet le numero de page correct et on annule |
// l'évenement |
rafraichirNumeroPage(); |
e.stopEvent(); |
} |
} |
|
}); |
} |
|
/** |
283,6 → 370,8 |
// le cas échéant on en notifie le médiateur |
listePaginable.changerNumeroPage(pageCourante); |
} |
|
rafraichirNumeroPage(); |
} |
} |
|
318,4 → 407,17 |
public void selectionnerTaillePage(int nouvelleTaillePage) { |
selecteurTaillePage.setValue("" + nouvelleTaillePage); |
} |
|
/** |
* Met à jour les affichage sur les numéros de pages et d'intervalle |
* d'éléments à partir des variables de classes |
*/ |
public void rafraichirNumeroPage() { |
if (nbElement == 0) { |
champPage.setValue("" + (0)); |
} else { |
champPage.setValue("" + (pageCourante + 1)); |
} |
surPageTotale.setText("/"+pageTotale); |
} |
} |