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 */
016 package com.github.gwtbootstrap.datepicker.client.ui;
017
018 import com.github.gwtbootstrap.client.ui.AppendButton;
019 import com.github.gwtbootstrap.client.ui.base.AddOn;
020 import com.github.gwtbootstrap.client.ui.constants.IconType;
021 import com.github.gwtbootstrap.datepicker.client.ui.base.DateBoxBase;
022 import com.github.gwtbootstrap.datepicker.client.ui.base.HasDateFormat;
023 import com.google.gwt.event.logical.shared.ValueChangeHandler;
024 import com.google.gwt.event.shared.HandlerRegistration;
025 import com.google.gwt.user.client.ui.HasValue;
026
027 import java.util.Date;
028
029 /**
030 * DateBoxAppended component.
031 *
032 * @since 2.0.4.0
033 * @author Carlos Alexandro Becker
034 */
035 public class DateBoxAppended extends AppendButton implements HasValue<Date>, HasDateFormat {
036 private final DateBoxAppendedAdapter box;
037
038 {
039 this.box = new DateBoxAppendedAdapter();
040 AddOn icon = new AddOn();
041 icon.setIcon(IconType.TH);
042 add(box);
043 add(icon);
044 }
045
046 /**
047 * {@inheritDoc}
048 */
049 @Override
050 public Date getValue() {
051 return box.getValue();
052 }
053
054 /**
055 * {@inheritDoc}
056 */
057 @Override
058 public void setValue(Date value) {
059 box.setValue(value);
060 }
061
062 /**
063 * {@inheritDoc}
064 */
065 @Override
066 public void setValue(Date value, boolean fireEvents) {
067 box.setValue(value, fireEvents);
068 }
069
070 /**
071 * {@inheritDoc}
072 */
073 @Override
074 public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Date> dateValueChangeHandler) {
075 return box.addValueChangeHandler(dateValueChangeHandler);
076 }
077
078 /**
079 * {@inheritDoc}
080 */
081 @Override
082 public void setFormat(String format) {
083 box.setFormat(format);
084 }
085
086 /**
087 * An 'adapter' to change some aspects of the behavior of datepickerbase. //TODO may need refactor.
088 */
089 private class DateBoxAppendedAdapter extends DateBoxBase {
090 @Override
091 protected void configure() {
092 DateBoxAppended that = DateBoxAppended.this;
093 super.configure(that);
094 getBox().getElement().setAttribute("readonly", null);
095 that.addStyleName("date");
096 }
097 }
098 }