17,17 → 17,26 |
|
|
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONNumber; |
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.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.ClickListener; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.DockPanel; |
import com.google.gwt.user.client.ui.FlexTable; |
import com.google.gwt.user.client.ui.Grid; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasHorizontalAlignment; |
import com.google.gwt.user.client.ui.HasVerticalAlignment; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.google.gwt.user.client.ui.SourcesTableEvents; |
import com.google.gwt.user.client.ui.TableListener; |
import com.google.gwt.user.client.ui.VerticalPanel; |
import com.google.gwt.user.client.ui.Widget; |
|
/** |
* A tree displaying a set of email folders. |
35,6 → 44,87 |
public class LocationList extends Composite { |
|
|
|
// Barre de navigation |
|
private class NavBar extends Composite implements ClickListener { |
|
public final DockPanel bar = new DockPanel(); |
|
public final Button gotoFirst = new Button("<<", this); |
|
public final Button gotoNext = new Button(">", this); |
|
public final Button gotoPrev = new Button("<", this); |
|
public final Button gotoEnd = new Button(">>", this); |
|
public final HTML status = new HTML(); |
|
|
public NavBar() { |
initWidget(bar); |
bar.setStyleName("navbar"); |
status.setStyleName("status"); |
status.setWordWrap(false); |
|
HorizontalPanel buttons = new HorizontalPanel(); |
|
buttons.add(status); |
buttons.setCellHorizontalAlignment(status, |
HasHorizontalAlignment.ALIGN_RIGHT); |
buttons.setCellVerticalAlignment(status, |
HasVerticalAlignment.ALIGN_MIDDLE); |
buttons.setCellWidth(status, "100%"); |
|
|
buttons.add(gotoFirst); |
buttons.add(gotoPrev); |
buttons.add(gotoNext); |
buttons.add(gotoEnd); |
bar.add(buttons, DockPanel.EAST); |
bar.setCellHorizontalAlignment(buttons, DockPanel.ALIGN_RIGHT); |
|
|
bar.setCellHorizontalAlignment(buttons, DockPanel.ALIGN_LEFT); |
|
bar.setVerticalAlignment(DockPanel.ALIGN_MIDDLE); |
|
|
|
|
|
} |
|
public void onClick(Widget sender) { |
if (sender == gotoNext) { |
// Move forward a page. |
startIndex += VISIBLE_LOCATION_COUNT; |
if (startIndex >= count) |
startIndex -= VISIBLE_LOCATION_COUNT; |
} else { |
if (sender == gotoPrev) { |
// Move back a page. |
startIndex -= VISIBLE_LOCATION_COUNT; |
if (startIndex < 0) |
startIndex = 0; |
} else { |
if (sender == gotoEnd) { |
gotoEnd(); |
} else { |
if (sender == gotoFirst) { |
startIndex = 0; |
} |
} |
} |
} |
update(); |
} |
|
} |
|
|
|
private static final int VISIBLE_LOCATION_COUNT = 15; |
private static final String VALUE_UNKNOWN = "Inconnues"; |
|
55,6 → 145,12 |
|
private String location = "all"; |
|
|
private NavBar navBar=null; |
|
|
private int count = 65000; |
|
// Tous selectionné |
private int selectedRow = -1; |
|
70,6 → 166,7 |
user=mediator.getUser(); |
serviceBaseUrl = mediator.getServiceBaseUrl(); |
|
navBar = new NavBar(); |
|
// Mise en forme du header |
|
85,7 → 182,7 |
header.getCellFormatter().setWidth(0, 0, "100%"); |
|
|
// Mise en forme du selecteur |
// Mise en forme de l'entree "Toutes localités" |
|
selector.setCellSpacing(0); |
selector.setCellPadding(0); |
110,7 → 207,7 |
selector.setStyleName("location-ListElement"); |
|
|
// Mise en forme de la table. |
// Mise en forme du contenu |
|
table.setCellSpacing(0); |
table.setBorderWidth(0); |
121,8 → 218,12 |
|
// Mise en forme barre navigation |
|
outer.add(navBar); |
|
navBar.setWidth("100%"); |
|
outer.add(header); |
inner.add(selector); |
inner.add(selector); // Toutes localités |
inner.add(table); |
inner.setStyleName("location-List"); |
inner.setWidth("100%"); |
151,15 → 252,41 |
selector.getRowFormatter().addStyleName(0, "location-SelectedRow"); |
mediator.onLocationSelected("all"); |
|
update(); |
|
updateCount(); |
// update() |
|
initWidget(outer); |
|
|
} |
|
/** |
* Recherche nombre d'enregistrement pour l'utilisateur en cours |
* |
* |
*/ |
|
public void updateCount() { |
|
setStatusDisabled(); |
|
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryLocationList/" + user , |
new ResponseTextHandler() { |
|
public void onCompletion(String str) { |
JSONValue jsonValue = JSONParser.parse(str); |
JSONNumber jsonNumber; |
if ((jsonNumber = jsonValue.isNumber()) != null) { |
count = (int) jsonNumber.getValue(); |
update(); |
} |
} |
}); |
|
} |
|
|
private void selectRow(int row) { |
|
styleRow(selectedRow, false); |
194,14 → 321,8 |
public void update() { |
|
|
// TODO : ne pas recreer la table a chaque fois ... : parcouris le retour, le comparer au present |
// et inserer ou supprimer s'il le faut. |
setStatusDisabled(); |
|
// TODO : ou alors prevoir un update pour les ajouts (forcemment à la fin) et un update pour les suppressions ... |
// Sauf qu'il y a les chgts de pages ... : oui, la un fait un update normal ... |
|
// TODO : despaghettiser |
|
HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryLocationList/" + user + "/" |
+ startIndex + "/" + VISIBLE_LOCATION_COUNT, |
|
213,21 → 334,19 |
JSONArray jsonArray; |
JSONArray jsonArrayNested; |
|
for (int i = table.getRowCount() - 1; i >= 0; i--) { |
table.removeRow(i); |
} |
int row=0; |
int i=0; |
|
if (location.compareTo("all")==0) { |
styleRow(selectedRow, false); |
selector.getRowFormatter().addStyleName(0, "location-SelectedRow"); |
} |
|
|
if ((jsonArray = jsonValue.isArray()) != null) { |
int arraySize = jsonArray.size(); |
for (int i = 0; i < arraySize; ++i) { |
for (i = 0; i < arraySize; ++i) { |
if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) { |
int row = table.insertRow(table.getRowCount()); |
if (i>=table.getRowCount()) { |
row = table.insertRow(table.getRowCount()); |
} |
else { |
row = i; |
} |
// Lieu |
|
String loc=((JSONString)jsonArrayNested.get(0)).stringValue(); |
242,6 → 361,9 |
if (loc.compareTo(location)==0) { |
styleRow(row, true); |
} |
else { |
styleRow(row, false); |
} |
|
table.getFlexCellFormatter().setWidth(row, 0, "100%"); |
} |
249,7 → 371,21 |
} |
} |
|
if (location.compareTo("all")==0) { |
selector.getRowFormatter().addStyleName(0, "location-SelectedRow"); |
} |
|
|
// Suppression fin ancien affichage |
if (i<table.getRowCount()-1) { |
for (int j = table.getRowCount() - 1; j > i-1; j--) { |
table.removeRow(j); |
} |
} |
setStatusEnabled(); |
|
|
} |
}); |
|
} |
260,5 → 396,88 |
|
|
|
/* |
* Positionnement index de parcours (this.startIndex) pour affichage de la |
* dernière page |
* |
* @param |
* @return void |
*/ |
|
private void gotoEnd() { |
|
if ((count == 0) || (count % VISIBLE_LOCATION_COUNT) > 0) { |
startIndex = count - (count % VISIBLE_LOCATION_COUNT); |
} else { |
startIndex = count - VISIBLE_LOCATION_COUNT; |
} |
|
} |
|
|
/** |
* Affichage message d'attente et désactivation navigation |
* |
* @param |
* @return void |
*/ |
|
private void setStatusDisabled() { |
|
navBar.gotoFirst.setEnabled(false); |
navBar.gotoPrev.setEnabled(false); |
navBar.gotoNext.setEnabled(false); |
navBar.gotoEnd.setEnabled(false); |
|
setStatusText("Patientez ..."); |
} |
|
/** |
* Affichage numero de page et gestion de la navigation |
* |
*/ |
|
private void setStatusEnabled() { |
|
// Il y a forcemment un disabled avant d'arriver ici |
|
if (count > 0) { |
|
if (startIndex >= VISIBLE_LOCATION_COUNT) { // Au dela de la |
// premiere page |
navBar.gotoPrev.setEnabled(true); |
navBar.gotoFirst.setEnabled(true); |
if (startIndex < (count - VISIBLE_LOCATION_COUNT)) { // Pas la |
// derniere |
// page |
navBar.gotoNext.setEnabled(true); |
navBar.gotoEnd.setEnabled(true); |
setStatusText((startIndex + 1) + " - " |
+ (startIndex + VISIBLE_LOCATION_COUNT) + " sur " + count ); |
} else { // Derniere page |
setStatusText((startIndex + 1) + " - " + count + " sur " + count ); |
} |
} else { // Premiere page |
if (count > VISIBLE_LOCATION_COUNT) { // Des pages derrieres |
navBar.gotoNext.setEnabled(true); |
navBar.gotoEnd.setEnabled(true); |
setStatusText((startIndex + 1) + " - " |
+ (startIndex + VISIBLE_LOCATION_COUNT) + " sur " + count); |
} else { |
setStatusText((startIndex + 1) + " - " + count + " sur " + count); |
} |
} |
} |
|
else { // Pas d'inventaire, pas de navigation |
setStatusText("0 - 0 sur 0"); |
} |
} |
|
|
|
private void setStatusText(String text) { |
navBar.status.setText(text); |
} |
|
} |