001 package org.gwtbootstrap3.client.ui;
002
003 /*
004 * #%L
005 * GwtBootstrap3
006 * %%
007 * Copyright (C) 2013 - 2014 GwtBootstrap3
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 * http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023 import org.gwtbootstrap3.client.ui.base.HasFormValue;
024 import org.gwtbootstrap3.client.ui.base.HasId;
025 import org.gwtbootstrap3.client.ui.base.HasPull;
026 import org.gwtbootstrap3.client.ui.base.HasResponsiveness;
027 import org.gwtbootstrap3.client.ui.base.helper.StyleHelper;
028 import org.gwtbootstrap3.client.ui.base.mixin.EnabledMixin;
029 import org.gwtbootstrap3.client.ui.base.mixin.IdMixin;
030 import org.gwtbootstrap3.client.ui.base.mixin.PullMixin;
031 import org.gwtbootstrap3.client.ui.constants.DeviceSize;
032 import org.gwtbootstrap3.client.ui.constants.Pull;
033 import org.gwtbootstrap3.client.ui.gwt.Widget;
034 import org.gwtbootstrap3.client.ui.impl.SimpleCheckBoxImpl;
035
036 import com.google.gwt.core.client.GWT;
037 import com.google.gwt.dom.client.Document;
038 import com.google.gwt.dom.client.Element;
039 import com.google.gwt.dom.client.InputElement;
040 import com.google.gwt.event.dom.client.ChangeEvent;
041 import com.google.gwt.event.dom.client.ChangeHandler;
042 import com.google.gwt.event.dom.client.HasChangeHandlers;
043 import com.google.gwt.event.shared.HandlerRegistration;
044 import com.google.gwt.user.client.ui.RootPanel;
045
046 /**
047 * A simple checkbox widget, with no label.
048 */
049 public class SimpleCheckBox extends com.google.gwt.user.client.ui.SimpleCheckBox implements HasResponsiveness, HasId,
050 HasPull, HasFormValue, HasChangeHandlers {
051
052 private static final SimpleCheckBoxImpl impl = GWT.create(SimpleCheckBoxImpl.class);
053
054 /**
055 * Creates a SimpleCheckBox widget that wraps an existing <input
056 * type='checkbox'> element.
057 *
058 * This element must already be attached to the document. If the element is
059 * removed from the document, you must call
060 * {@link RootPanel#detachNow(Widget)}.
061 *
062 * @param element
063 * the element to be wrapped
064 */
065 public static SimpleCheckBox wrap(Element element) {
066 // Assert that the element is attached.
067 assert Document.get().getBody().isOrHasChild(element);
068
069 SimpleCheckBox checkBox = new SimpleCheckBox(InputElement.as(element));
070
071 // Mark it attached and remember it for cleanup.
072 checkBox.onAttach();
073 RootPanel.detachOnWindowClose(checkBox);
074
075 return checkBox;
076 }
077
078 private final IdMixin<SimpleCheckBox> idMixin = new IdMixin<SimpleCheckBox>(this);
079 private final PullMixin<SimpleCheckBox> pullMixin = new PullMixin<SimpleCheckBox>(this);
080 private final EnabledMixin<SimpleCheckBox> enabledMixin = new EnabledMixin<SimpleCheckBox>(this);
081
082 /**
083 * Creates a new simple checkbox.
084 */
085 public SimpleCheckBox() {
086 super(Document.get().createCheckInputElement());
087 }
088
089 /**
090 * This constructor may be used by subclasses to explicitly use an existing
091 * element. This element must be an <input> element whose type is
092 * 'checkbox'.
093 *
094 * @param element
095 * the element to be used
096 */
097 protected SimpleCheckBox(InputElement element) {
098 super(element);
099 }
100
101 @Override
102 public HandlerRegistration addChangeHandler(ChangeHandler handler) {
103 return addDomHandler(handler, ChangeEvent.getType());
104 }
105
106 @Override
107 public void setEnabled(boolean enabled) {
108 enabledMixin.setEnabled(enabled);
109 }
110
111 @Override
112 public boolean isEnabled() {
113 return enabledMixin.isEnabled();
114 }
115
116 /**
117 * {@inheritDoc}
118 */
119 @Override
120 public void setId(final String id) {
121 idMixin.setId(id);
122 }
123
124 /**
125 * {@inheritDoc}
126 */
127 @Override
128 public String getId() {
129 return idMixin.getId();
130 }
131
132 /**
133 * {@inheritDoc}
134 */
135 @Override
136 public void setVisibleOn(final DeviceSize deviceSize) {
137 StyleHelper.setVisibleOn(this, deviceSize);
138 }
139
140 /**
141 * {@inheritDoc}
142 */
143 @Override
144 public void setHiddenOn(final DeviceSize deviceSize) {
145 StyleHelper.setHiddenOn(this, deviceSize);
146 }
147
148 /**
149 * {@inheritDoc}
150 */
151 @Override
152 public void setPull(final Pull pull) {
153 pullMixin.setPull(pull);
154 }
155
156 /**
157 * {@inheritDoc}
158 */
159 @Override
160 public Pull getPull() {
161 return pullMixin.getPull();
162 }
163
164 @Override
165 protected void ensureDomEventHandlers() {
166 impl.ensureDomEventHandlers(this);
167 }
168
169 }