Skip to content

Commit 69fe804

Browse files
committed
2 parents 8e003d5 + c0a657a commit 69fe804

File tree

2 files changed

+65
-40
lines changed

2 files changed

+65
-40
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
<img src="http://gwt-material-demo.herokuapp.com/bin/ic_gwt_logo.png" />
2-
#gwt-material
1+
<img src="http://i.imgur.com/VaBxpGj.png" />
2+
<h2>gwt-material</h2>
3+
<p>A Google Material Design wrapper for GWT</p>
34
[![Build Status](https://travis-ci.org/GwtMaterialDesign/gwt-material.svg?branch=master)](https://travis-ci.org/GwtMaterialDesign/gwt-material) [![Join the chat at https://gitter.im/GwtMaterialDesign/gwt-material](https://img.shields.io/badge/GITTER-join%20chat-green.svg)](https://gitter.im/GwtMaterialDesign/gwt-material?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
45

56
<br/>
6-
A Google Material Design wrapper for GWT<br/>
7+
78

89
## Demo
910
* [1.4 Release Demo](http://gwtmaterialdesign.github.io/gwt-material-demo/)

gwt-material/src/main/java/gwt/material/design/client/ui/MaterialDatePicker.java

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@
2323
import com.google.gwt.core.client.JsDate;
2424
import com.google.gwt.dom.client.Document;
2525
import com.google.gwt.dom.client.Element;
26+
import com.google.gwt.event.logical.shared.CloseEvent;
27+
import com.google.gwt.event.logical.shared.CloseHandler;
28+
import com.google.gwt.event.logical.shared.HasCloseHandlers;
29+
import com.google.gwt.event.logical.shared.HasOpenHandlers;
30+
import com.google.gwt.event.logical.shared.OpenEvent;
31+
import com.google.gwt.event.logical.shared.OpenHandler;
32+
import com.google.gwt.event.logical.shared.ValueChangeEvent;
33+
import com.google.gwt.event.logical.shared.ValueChangeHandler;
34+
import com.google.gwt.event.shared.HandlerRegistration;
35+
import com.google.gwt.user.client.ui.HasValue;
36+
2637
import gwt.material.design.client.base.*;
2738
import gwt.material.design.client.base.mixin.ErrorMixin;
2839
import gwt.material.design.client.base.mixin.GridMixin;
@@ -51,7 +62,8 @@
5162
* @see <a href="http://gwt-material-demo.herokuapp.com/#pickers">Material Date Picker</a>
5263
*/
5364
//@formatter:on
54-
public class MaterialDatePicker extends MaterialWidget implements HasGrid, HasError, HasOrientation, HasPlaceholder {
65+
public class MaterialDatePicker extends MaterialWidget implements HasGrid, HasError, HasOrientation, HasPlaceholder,
66+
HasValue<Date>, HasOpenHandlers<MaterialDatePicker>, HasCloseHandlers<MaterialDatePicker> {
5567

5668
/**
5769
* Enum for identifying various selection types for the picker.
@@ -63,18 +75,6 @@ public enum MaterialDatePickerType {
6375
YEAR
6476
}
6577

66-
/**
67-
* Delegate interface for handling picker events.
68-
*/
69-
public interface MaterialDatePickerDelegate {
70-
/**
71-
* Called as soon as a click occurs on the calendar widget. !EXPERIMENTAL!
72-
*
73-
* @param currDate which is currently selected.
74-
*/
75-
void onCalendarClose(Date currDate);
76-
}
77-
7878
private String placeholder;
7979
private Date date;
8080
private Date dateMin;
@@ -87,7 +87,6 @@ public interface MaterialDatePickerDelegate {
8787
private MaterialLabel lblError = new MaterialLabel();
8888

8989
private Orientation orientation = Orientation.PORTRAIT;
90-
private MaterialDatePickerDelegate delegate;
9190
private MaterialDatePickerType selectionType = MaterialDatePickerType.DAY;
9291

9392
private final GridMixin<MaterialDatePicker> gridMixin = new GridMixin<>(this);
@@ -175,31 +174,20 @@ else if (thingSet.select) {
175174
});
176175
}-*/;
177176

178-
/**
179-
* A delegate which implements handling of events from date picker.
180-
*
181-
* @param delegate which will be notified on picker events.
182-
* @see MaterialDatePickerDelegate
183-
*/
184-
public void setDelegate(MaterialDatePickerDelegate delegate) {
185-
this.delegate = delegate;
186-
}
187-
188177
void onClose() {
189-
190-
if (delegate != null) {
191-
delegate.onCalendarClose(getDate());
192-
}
178+
CloseEvent.fire(this, this);
193179
}
194180

195181
void onOpen() {
196182
label.addStyleName("active");
197183
dateInput.setFocus(true);
184+
OpenEvent.fire(this, this);
198185
}
199186

200187
void onSelect() {
201188
label.addStyleName("active");
202189
dateInput.addStyleName("valid");
190+
ValueChangeEvent.fire(this, getValue());
203191
}
204192

205193
void onClear() {
@@ -248,14 +236,7 @@ public static native Element initDatePicker(Element inputSrc, String typeName, S
248236
* @param date - must not be <code>null</code>
249237
*/
250238
public void setDate(Date date) {
251-
if (date == null) {
252-
return;
253-
}
254-
this.date = date;
255-
if (initialized) {
256-
setPickerDate(JsDate.create((double) date.getTime()), pickatizedDateInput);
257-
label.addStyleName("active");
258-
}
239+
setValue(date);
259240
}
260241

261242
public Date getDateMin() {
@@ -292,11 +273,14 @@ public native void setPickerDate(JsDate date, Element picker) /*-{
292273
picker.pickadate('picker').set('select', date, { muted: true });
293274
}-*/;
294275

276+
/**
277+
* Same as calling {@link #getValue()}
278+
*/
295279
public Date getDate() {
296280
return getPickerDate();
297281
}
298282

299-
public Date getPickerDate() {
283+
protected Date getPickerDate() {
300284
try {
301285
JsDate selectedDate = getDatePickerValue(pickatizedDateInput);
302286
return new Date((long) selectedDate.getTime());
@@ -403,4 +387,44 @@ public void setFormat(String format) {
403387
}
404388
this.format = format;
405389
}
390+
391+
@Override
392+
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Date> handler) {
393+
return addHandler(handler, ValueChangeEvent.getType());
394+
}
395+
396+
@Override
397+
public Date getValue() {
398+
return getPickerDate();
399+
}
400+
401+
@Override
402+
public void setValue(Date value) {
403+
setValue(value, false);
404+
}
405+
406+
@Override
407+
public void setValue(Date value, boolean fireEvents) {
408+
if (value == null) {
409+
return;
410+
}
411+
this.date = value;
412+
if (initialized) {
413+
setPickerDate(JsDate.create((double) value.getTime()), pickatizedDateInput);
414+
label.addStyleName("active");
415+
}
416+
if (fireEvents){
417+
ValueChangeEvent.fire(this, value);
418+
}
419+
}
420+
421+
@Override
422+
public HandlerRegistration addCloseHandler(CloseHandler<MaterialDatePicker> handler) {
423+
return addHandler(handler, CloseEvent.getType());
424+
}
425+
426+
@Override
427+
public HandlerRegistration addOpenHandler(OpenHandler<MaterialDatePicker> handler) {
428+
return addHandler(handler, OpenEvent.getType());
429+
}
406430
}

0 commit comments

Comments
 (0)