001/*
002 *  Copyright 2012 GWT-Bootstrap
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package com.github.gwtbootstrap.datetimepicker.client.ui;
017
018import com.github.gwtbootstrap.client.ui.AppendButton;
019import com.github.gwtbootstrap.client.ui.base.AddOn;
020import com.github.gwtbootstrap.client.ui.base.HasAlternateSize;
021import com.github.gwtbootstrap.client.ui.base.HasIcon;
022import com.github.gwtbootstrap.client.ui.base.HasVisibility;
023import com.github.gwtbootstrap.client.ui.event.HasVisibleHandlers;
024import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
025import com.github.gwtbootstrap.client.ui.constants.BaseIconType;
026import com.github.gwtbootstrap.client.ui.constants.IconPosition;
027import com.github.gwtbootstrap.client.ui.constants.IconSize;
028import com.github.gwtbootstrap.client.ui.constants.IconType;
029import com.github.gwtbootstrap.client.ui.event.HiddenHandler;
030import com.github.gwtbootstrap.client.ui.event.HideHandler;
031import com.github.gwtbootstrap.client.ui.event.ShowHandler;
032import com.github.gwtbootstrap.client.ui.event.ShownHandler;
033import com.github.gwtbootstrap.datetimepicker.client.ui.base.DateTimeBoxBase;
034import com.github.gwtbootstrap.datetimepicker.client.ui.base.HasAllDateTimePickerHandlers;
035import com.github.gwtbootstrap.datetimepicker.client.ui.base.HasDateFormat;
036import com.github.gwtbootstrap.datetimepicker.client.ui.base.PickerPosition;
037import com.google.gwt.editor.client.IsEditor;
038import com.google.gwt.editor.client.adapters.TakesValueEditor;
039import com.google.gwt.event.dom.client.ChangeHandler;
040import com.google.gwt.event.dom.client.HasChangeHandlers;
041import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
042import com.google.gwt.event.logical.shared.ValueChangeHandler;
043import com.google.gwt.event.shared.HandlerRegistration;
044import com.google.gwt.user.client.ui.HasValue;
045import com.google.gwt.user.client.ui.ValueBoxBase.TextAlignment;
046
047import java.util.Date;
048
049/**
050 * DateTimeBoxAppended component.
051 *
052 * @author Carlos Alexandro Becker
053 * @author Alain Penders
054 * @since 2.1.1.0
055 */
056public class DateTimeBoxAppended
057        extends AppendButton implements HasValue<Date>,
058                                        HasDateFormat, HasIcon, HasValueChangeHandlers<Date>, HasVisibility,
059        HasChangeHandlers, HasVisibleHandlers, HasAllDateTimePickerHandlers,
060        HasAlternateSize, IsEditor<TakesValueEditor<Date>> {
061
062    /**
063     * An 'adapter' to change some aspects of the behavior of datepickerbase.
064     */
065    private class DateTimeBoxAppendedAdapter
066            extends DateTimeBoxBase {
067        @Override
068        protected void configure() {
069            DateTimeBoxAppended that = DateTimeBoxAppended.this;
070            that.addStyleName("date");
071            super.configure(that);
072        }
073    }
074
075    private final DateTimeBoxAppendedAdapter box;
076    private AddOn icon;
077    {
078        this.box = new DateTimeBoxAppendedAdapter();
079        icon = new AddOn();
080        icon.setIcon(IconType.TH);
081        add(box);
082        add(icon);
083    }
084
085
086    /**
087     * {@inheritDoc}
088     */
089    @Override
090    public Date getValue() {
091        return box.getValue();
092    }
093
094    /**
095     * {@inheritDoc}
096     */
097    @Override
098    public void setValue(Date value) {
099        box.setValue(value);
100    }
101
102    /**
103     * {@inheritDoc}
104     */
105    @Override
106    public void setValue(Date value, boolean fireEvents) {
107        box.setValue(value, fireEvents);
108    }
109
110     /**
111     * {@inheritDoc}
112     */
113    @Override
114    public void setAlternateSize(AlternateSize size) {
115        box.setAlternateSize(size);
116    }
117
118    public void setAlignment(TextAlignment align) {
119        box.setAlignment(align);
120    }
121
122    /**
123     * {@inheritDoc}
124     */
125    @Override
126    public HandlerRegistration addValueChangeHandler(
127            ValueChangeHandler<Date> dateValueChangeHandler) {
128        return box.addValueChangeHandler(dateValueChangeHandler);
129    }
130
131    /**
132     * {@inheritDoc}
133     */
134    @Override
135    public void setFormat(String format) {
136        box.setFormat(format);
137    }
138
139    /**
140     * {@inheritDoc}
141     */
142    @Override
143    public void setIcon(IconType type) {
144        setBaseIcon(type);
145    }
146
147    /**
148     * {@inheritDoc}
149     */
150    @Override
151    public void setBaseIcon(BaseIconType type) {
152        icon.setBaseIcon(type);
153    }
154
155    /**
156     * {@inheritDoc}
157     */
158    @Override
159    public void setIconSize(IconSize size) {
160        icon.setIconSize(size);
161    }
162
163    /**
164     * {@inheritDoc}
165     */
166    @Override
167    public void setCustomIconStyle(String customIconStyle) {
168        icon.setCustomIconStyle(customIconStyle);
169    }
170
171    /**
172     * {@inheritDoc}
173     *
174     * @deprecated
175     */
176    @Override
177    public void setIconPosition(IconPosition position) {
178        icon.setIconPosition(position);
179    }
180
181    /**
182     * {@inheritDoc}
183     */
184    @Override
185    public void setAutoClose(boolean autoclose) {
186        box.setAutoClose(autoclose);
187    }
188
189    /**
190     * {@inheritDoc}
191     */
192    @Override
193    public void setEndDate(String date) {
194        box.setEndDate(date);
195    }
196
197    /**
198     * {@inheritDoc}
199     */
200    @Override
201    public void setEndDate_(Date date) {
202        box.setEndDate_(date);
203    }
204
205    /**
206     * {@inheritDoc}
207     */
208    @Override
209    public void setLanguage(String language) {
210        box.setLanguage(language);
211    }
212
213    /**
214     * {@inheritDoc}
215     */
216    @Override
217    public void setStartDate(String date) {
218        box.setStartDate(date);
219    }
220
221    /**
222     * {@inheritDoc}
223     */
224    @Override
225    public void setStartDate_(Date date) {
226        box.setStartDate_(date);
227    }
228
229    /**
230     * {@inheritDoc}
231     */
232    @Override
233    public void setMinView(ViewMode mode) {
234        box.setMinView(mode);
235    }
236
237    /**
238     * {@inheritDoc}
239     */
240    @Override
241    public void setMinView(String mode) {
242        box.setMinView(mode);
243    }
244
245    /**
246     * {@inheritDoc}
247     */
248    @Override
249    public void setMaxView(ViewMode mode) {
250        box.setMaxView(mode);
251    }
252
253    /**
254     * {@inheritDoc}
255     */
256    @Override
257    public void setMaxView(String mode) {
258        box.setMaxView(mode);
259    }
260
261    /**
262     * {@inheritDoc}
263     */
264    @Override
265    public void setStartView(ViewMode mode) {
266        box.setStartView(mode);
267    }
268
269    /**
270     * {@inheritDoc}
271     */
272    @Override
273    public void setStartView(String mode) {
274        box.setStartView(mode);
275    }
276
277    /**
278     * {@inheritDoc}
279     */
280    @Override
281    public void setWeekStart(int start) {
282        box.setWeekStart(start);
283    }
284
285    /**
286     * {@inheritDoc}
287     */
288    @Override
289    public TakesValueEditor<Date> asEditor() {
290        return box.asEditor();
291    }
292
293    /**
294     * {@inheritDoc}
295     */
296    @Override
297    public HandlerRegistration addHideHandler(HideHandler handler) {
298        return box.addHideHandler(handler);
299    }
300
301    /**
302     * {@inheritDoc}
303     */
304    @Override
305    public HandlerRegistration addHiddenHandler(HiddenHandler handler) {
306        return box.addHiddenHandler(handler);
307    }
308
309    /**
310     * {@inheritDoc}
311     */
312    @Override
313    public HandlerRegistration addShowHandler(ShowHandler handler) {
314        return box.addShowHandler(handler);
315    }
316
317    /**
318     * {@inheritDoc}
319     */
320    @Override
321    public HandlerRegistration addShownHandler(ShownHandler handler) {
322        return box.addShownHandler(handler);
323    }
324
325    /**
326     * {@inheritDoc}
327     */
328    @Override
329    public HandlerRegistration addChangeHandler(ChangeHandler handler) {
330        return box.addChangeHandler(handler);
331    }
332
333    /**
334     * {@inheritDoc}
335     */
336    @Override
337    public void show() {
338        box.show();
339    }
340
341    /**
342     * {@inheritDoc}
343     */
344    @Override
345    public void hide() {
346        box.hide();
347    }
348
349    /**
350     * {@inheritDoc}
351     */
352    @Override
353    public void toggle() {
354        box.toggle();
355    }
356
357    /**
358    * @see com.google.gwt.user.client.ui.ValueBoxBase#isReadOnly()
359    */
360    public boolean isReadOnly() {
361        return box.isReadOnly();
362    }
363
364    /**
365     * @see com.google.gwt.user.client.ui.ValueBoxBase#setReadOnly(boolean) 
366     */
367    public void setReadOnly(boolean readonly) {
368        box.setReadOnly(readonly);
369    }
370
371
372    @Override
373    public void setDaysOfWeekDisabled(String value) {
374        box.setDaysOfWeekDisabled(value);
375    }
376
377
378    @Override
379    public void setMinuteStep(int minutes) {
380        box.setMinuteStep(minutes);
381    }
382
383
384    @Override
385    public void setShowTodayButton(boolean show) {
386        box.setShowTodayButton(show);
387    }
388
389
390    @Override
391    public void setHighlightToday(boolean highlight) {
392        box.setHighlightToday(highlight);
393    }
394
395    public void setPickerPosition(PickerPosition pickerPosition) {
396        box.setPickerPosition(pickerPosition);
397    }
398
399    public PickerPosition getPickerPosition() {
400        return box.getPickerPosition();
401    }
402}