final CheckBox chkToday = new CheckBox("Utilizza Data e Ora del Server");
final TextBox txtTemp = new TextBox();
final TextBox txtLight = new TextBox();
final DateBox tpkDate = new DateBox();
final TextBox dtkHour = new TextBox();
final TextBox dtkMin = new TextBox();
final TextBox dtkSec = new TextBox();
// valori di default
dtkHour.setText("0");
dtkMin.setText("0");
dtkSec.setText("0");
// handler per impedire che l'utente inserisca Minuti e Secondi con formato errato
KeyDownHandler time = new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
// inputbox interessata
TextBox input = (TextBox)(event.getSource());
char carattere = (char)event.getNativeKeyCode();
// il carattere inserito � un numero?
if (Character.isDigit(carattere)){
// effettuo il controllo sul contenuto solo se necessario
if (!input.getText().isEmpty()){
int limit;
// l'ora pu� assumere valori 0-23, minuti/secondi 0-59
if (input==dtkHour){
limit = 23; }else{ limit = 59; }
// ci stiamo allargando troppo, elimina il carattere!
if (Integer.parseInt(input.getText()+carattere) > limit) {
input.cancelKey(); }
// se il testo inizia per '0' e contiene altri 2 caratteri allora eliminalo!
if (input.getText().startsWith("0")){
if (input.getText().length()==2){
input.setText(Integer.toString(Integer.parseInt(input.getText())));}}
}
}else{
// Il carattere inserito non � un numero? Eliminalo!
// il controllo per il Backspace non pu� avvenire assieme a
// quello del formato del carattere
if(carattere != (char) KeyCodes.KEY_BACKSPACE &&
carattere != (char) KeyCodes.KEY_TAB){input.cancelKey();}
}
}
};
KeyDownHandler fDown = new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
// inputbox interessata
TextBox input = (TextBox)(event.getSource());
char carattere = (char)event.getNativeKeyCode();
// controllo che il carattere inserito sia un numero/segno [-]/Backspace/Tab
if (Character.isDigit(carattere)){
// niente da fare qui
}else if (carattere == (char) 109 || // carattere [ - ] in Opera e Firefox
carattere == (char) 189){ // carattere [ - ] in MSIE, Safari e Chrome
if (input == txtLight){
input.cancelKey();
}else{toCheck[curFocus] = true;}
}else if (
carattere == (char) 190){ // carattere [ . ]
//toCheck = true;
}else if (carattere == (char) KeyCodes.KEY_BACKSPACE){
toCheck[curFocus] = true;
}else if (carattere == (char) KeyCodes.KEY_TAB){
// niente da fare qui, se ne occupa onBlur
}else{
input.cancelKey();
}
}
};
KeyUpHandler fUp = new KeyUpHandler(){
@Override
public void onKeyUp(KeyUpEvent event) {
if(toCheck[curFocus]){
rightDataPat((TextBox)(event.getSource()));
}
}
};
BlurHandler fBlur = new BlurHandler(){
@Override
public void onBlur(BlurEvent event) {
rightDataPat((TextBox)(event.getSource()));
}
};
FocusHandler fFocus = new FocusHandler(){
@Override
public void onFocus(FocusEvent event) {
curFocus = (((TextBox)(event.getSource()) == txtLight) ? 0 : 1);
}
};
// associo alle textbox gli handler necessari
dtkHour.addKeyDownHandler(time);
dtkMin.addKeyDownHandler(time);
dtkSec.addKeyDownHandler(time);
txtTemp.addKeyDownHandler(fDown);
txtLight.addKeyDownHandler(fDown);
txtTemp.addKeyUpHandler(fUp);
txtLight.addKeyUpHandler(fUp);
txtTemp.addBlurHandler(fBlur);
txtLight.addBlurHandler(fBlur);
txtTemp.addFocusHandler(fFocus);
txtLight.addFocusHandler(fFocus);
// messaggio durante l'invio dei dati al Server
pendingPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT);
pendingPanel.add(pendingMessage);
// elimino l'elemento HTML "Loading"
DOM.removeChild(DOM.getElementById("jContainer"), DOM.getElementById("loading"));
// definisco gli elementi da inserire nella pagina Web
HorizontalPanel timehp = new HorizontalPanel();
timehp.add(dtkHour);
timehp.add(dtkMin);
timehp.add(dtkSec);
// Aggiungo gli elementi HTML alla pagina
RootPanel.get("tempFieldContainer").add(txtTemp);
RootPanel.get("lightFieldContainer").add(txtLight);
RootPanel.get("dateFieldContainer").add(tpkDate);
RootPanel.get("timeFieldContainer").add(timehp);
RootPanel.get("chkFieldContainer").add(chkToday);
tpkDate.setValue(new Date());
RootPanel.get("sendButtonContainer").add(sendButton);
// l'opzione di default prevede che la data e l'ora siano presi dal Server
chkToday.setChecked(true);
tpkDate.setEnabled(false);
dtkHour.setEnabled(false);
dtkMin.setEnabled(false);
dtkSec.setEnabled(false);
// Handler che si occupa di disabilitare i campi relativi all'orario
// nel caso in cui si decida di utilizzare la data attuale
chkToday.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
tpkDate.setEnabled(!chkToday.isChecked());
dtkHour.setEnabled(!chkToday.isChecked());
dtkMin.setEnabled(!chkToday.isChecked());
dtkSec.setEnabled(!chkToday.isChecked());
}
});