/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.ui.switcher; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HasValue; import com.google.gwt.user.client.ui.SimpleCheckBox; /** * UI element with two states boolean states: "ON" - true, "OFF" - false. * User switches the state by click. * * @author Ann Shumilova */ public class Switcher extends Composite implements HasValue<Boolean> { private static final Resources RESOURCES = GWT.create(Resources.class); SimpleCheckBox checkbox; public Switcher() { FlowPanel mainPanel = new FlowPanel(); mainPanel.setStyleName(RESOURCES.switcherCSS().onoffswitch()); final String elementId = DOM.createUniqueId(); checkbox = new SimpleCheckBox(); checkbox.getElement().setId(elementId); checkbox.setName("onoffswitch"); checkbox.setStyleName(RESOURCES.switcherCSS().onoffswitchCheckbox()); mainPanel.add(checkbox); Element label = DOM.createLabel(); label.setClassName(RESOURCES.switcherCSS().onoffswitchLabel()); label.setAttribute("for", elementId); Element inner = DOM.createDiv(); inner.setClassName(RESOURCES.switcherCSS().onoffswitchInner()); label.appendChild(inner); Element sw = DOM.createDiv(); sw.setClassName(RESOURCES.switcherCSS().onoffswitchSwitch()); label.appendChild(sw); mainPanel.getElement().appendChild(label); initWidget(mainPanel); } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Boolean> handler) { return checkbox.addValueChangeHandler(handler); } @Override public Boolean getValue() { return checkbox.getValue(); } @Override public void setValue(Boolean value) { checkbox.setValue(value); } @Override public void setValue(Boolean value, boolean fireEvents) { checkbox.setValue(value); if (fireEvents) { ValueChangeEvent.fire(this, value); } } public interface Resources extends ClientBundle { @Source({"switcher.css", "org/eclipse/che/ide/api/ui/style.css"}) SwitcherCSS switcherCSS(); interface SwitcherCSS extends CssResource { String onoffswitchInner(); String onoffswitch(); String onoffswitchSwitch(); String onoffswitchLabel(); String onoffswitchCheckbox(); } } static { RESOURCES.switcherCSS().ensureInjected(); } }