Browse Source

Fix for #5387

svn changeset:14433/svn branch:6.4
tags/6.7.0.beta1
John Alhroos 14 years ago
parent
commit
dfe75aa36f

+ 54
- 1
src/com/vaadin/terminal/gwt/client/ui/VCalendarPanel.java View File

@@ -81,6 +81,14 @@ public class VCalendarPanel extends FocusableFlexTable implements
void changed(Date date);
}
/**
* Dispatches an event when the panel when time is changed
*/
public interface TimeChangeListener {
void changed(int hour, int min, int sec, int msec);
}
/**
* Represents a Date button in the calendar
*/
@@ -161,6 +169,8 @@ public class VCalendarPanel extends FocusableFlexTable implements
private ValueChangeListener valueChangeListener;
private TimeChangeListener timeChangeListener;
private boolean hasFocus = false;
public VCalendarPanel() {
@@ -1481,7 +1491,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
}
/*
* (non-Javadoc)
* (non-Javadoc) VT
*
* @see
* com.google.gwt.event.dom.client.ChangeHandler#onChange(com.google.gwt
@@ -1498,19 +1508,53 @@ public class VCalendarPanel extends FocusableFlexTable implements
h = h + ampm.getSelectedIndex() * 12;
}
value.setHours(h);
if (timeChangeListener != null) {
timeChangeListener.changed(h, value.getMinutes(), value
.getSeconds(), DateTimeService
.getMilliseconds(value));
}
event.preventDefault();
event.stopPropagation();
} else if (event.getSource() == mins) {
final int m = mins.getSelectedIndex();
value.setMinutes(m);
if (timeChangeListener != null) {
timeChangeListener.changed(value.getHours(), m, value
.getSeconds(), DateTimeService
.getMilliseconds(value));
}
event.preventDefault();
event.stopPropagation();
} else if (event.getSource() == sec) {
final int s = sec.getSelectedIndex();
value.setSeconds(s);
if (timeChangeListener != null) {
timeChangeListener.changed(value.getHours(), value
.getMinutes(), s, DateTimeService
.getMilliseconds(value));
}
event.preventDefault();
event.stopPropagation();
} else if (event.getSource() == msec) {
final int ms = msec.getSelectedIndex();
DateTimeService.setMilliseconds(value, ms);
if (timeChangeListener != null) {
timeChangeListener.changed(value.getHours(), value
.getMinutes(), value.getSeconds(), ms);
}
event.preventDefault();
event.stopPropagation();
} else if (event.getSource() == ampm) {
final int h = hours.getSelectedIndex()
+ (ampm.getSelectedIndex() * 12);
value.setHours(h);
if (timeChangeListener != null) {
timeChangeListener.changed(h, value.getMinutes(), value
.getSeconds(), DateTimeService
.getMilliseconds(value));
}
event.preventDefault();
event.stopPropagation();
}
}
@@ -1584,6 +1628,15 @@ public class VCalendarPanel extends FocusableFlexTable implements
this.valueChangeListener = listener;
}
/**
* The time change listener is triggered when the user changes the time.
*
* @param listener
*/
public void setTimeChangeListener(TimeChangeListener listener) {
this.timeChangeListener = listener;
}
/**
* Returns the submit listener that listens to selection made from the panel
*

+ 17
- 0
src/com/vaadin/terminal/gwt/client/ui/VDateFieldCalendar.java View File

@@ -12,6 +12,7 @@ import com.vaadin.terminal.gwt.client.DateTimeService;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusOutListener;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.SubmitListener;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener;
public class VDateFieldCalendar extends VDateField {
@@ -52,6 +53,22 @@ public class VDateFieldCalendar extends VDateField {
caleandarPanel.setDate(null);
}
if (currentResolution > RESOLUTION_DAY) {
caleandarPanel.setTimeChangeListener(new TimeChangeListener() {
public void changed(int hour, int min, int sec, int msec) {
Date d = (Date) date.clone();
d.setHours(hour);
d.setMinutes(min);
d.setSeconds(sec);
DateTimeService.setMilliseconds(d, msec);
// Always update time changes to the server
caleandarPanel.setDate(d);
updateValueFromPanel();
}
});
}
// Update possible changes
caleandarPanel.renderCalendar();
}

+ 19
- 0
src/com/vaadin/terminal/gwt/client/ui/VPopupCalendar.java View File

@@ -26,6 +26,7 @@ import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusOutListener;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.SubmitListener;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener;
import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.ValueChangeListener;
/**
@@ -166,6 +167,24 @@ public class VPopupCalendar extends VTextualDate implements Paintable, Field,
});
}
if (currentResolution > RESOLUTION_DAY) {
calendar.setTimeChangeListener(new TimeChangeListener() {
public void changed(int hour, int min, int sec, int msec) {
Date d = (Date) date.clone();
d.setHours(hour);
d.setMinutes(min);
d.setSeconds(sec);
DateTimeService.setMilliseconds(d, msec);
// Always update time changes to the server
updateValue(d);
// Update text field
buildDate();
}
});
}
if (readonly) {
calendarToggle.addStyleName(CLASSNAME + "-button-readonly");
} else {

Loading…
Cancel
Save