001package org.gwtbootstrap3.client.ui;
002
003/*
004 * #%L
005 * GwtBootstrap3
006 * %%
007 * Copyright (C) 2013 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
023import org.gwtbootstrap3.client.ui.base.ComplexWidget;
024import org.gwtbootstrap3.client.ui.base.HasEmphasis;
025import org.gwtbootstrap3.client.ui.base.HasSize;
026import org.gwtbootstrap3.client.ui.base.HasType;
027import org.gwtbootstrap3.client.ui.base.helper.StyleHelper;
028import org.gwtbootstrap3.client.ui.constants.ElementTags;
029import org.gwtbootstrap3.client.ui.constants.Emphasis;
030import org.gwtbootstrap3.client.ui.constants.IconFlip;
031import org.gwtbootstrap3.client.ui.constants.IconRotate;
032import org.gwtbootstrap3.client.ui.constants.IconSize;
033import org.gwtbootstrap3.client.ui.constants.IconType;
034import org.gwtbootstrap3.client.ui.constants.Styles;
035
036import com.google.gwt.dom.client.Document;
037import com.google.gwt.event.dom.client.ClickEvent;
038import com.google.gwt.event.dom.client.ClickHandler;
039import com.google.gwt.event.dom.client.HasClickHandlers;
040import com.google.gwt.event.shared.HandlerRegistration;
041import com.google.gwt.uibinder.client.UiConstructor;
042
043/**
044 * Simple put, an icon.
045 *
046 * @author Sven Jacobs
047 * @see org.gwtbootstrap3.client.ui.constants.IconType
048 * @see org.gwtbootstrap3.client.ui.constants.IconSize
049 */
050public class Icon extends ComplexWidget implements HasType<IconType>, HasSize<IconSize>, HasEmphasis, HasClickHandlers {
051
052    public Icon() {
053        setElement(Document.get().createElement(ElementTags.I));
054        addStyleName(Styles.FONT_AWESOME_BASE);
055    }
056
057    @UiConstructor
058    public Icon(final IconType type) {
059        this();
060        setType(type);
061    }
062
063    @Override
064    public void setType(final IconType type) {
065        StyleHelper.addUniqueEnumStyleName(this, IconType.class, type);
066    }
067
068    @Override
069    public IconType getType() {
070        return IconType.fromStyleName(getStyleName());
071    }
072
073    public void setBorder(final boolean border) {
074        StyleHelper.toggleStyleName(this, border, Styles.ICON_BORDER);
075    }
076
077    public boolean isBorder() {
078        return StyleHelper.containsStyle(Styles.ICON_BORDER, getStyleName());
079    }
080
081    public void setStackBase(final boolean stackBase) {
082        StyleHelper.toggleStyleName(this, stackBase, Styles.ICON_STACK_BASE);
083    }
084
085    public boolean isStackBase() {
086        return StyleHelper.containsStyle(Styles.ICON_STACK_BASE, getStyleName());
087    }
088
089    public void setFixedWidth(final boolean fixedWidth) {
090        StyleHelper.toggleStyleName(this, fixedWidth, Styles.ICON_FIXED_WIDTH);
091    }
092
093    public boolean isFixedWidth() {
094        return StyleHelper.containsStyle(Styles.ICON_FIXED_WIDTH, getStyleName());
095    }
096
097    public void setStackTop(final boolean stackTop) {
098        StyleHelper.toggleStyleName(this, stackTop, Styles.ICON_STACK_TOP);
099    }
100
101    public boolean isStackTop() {
102        return StyleHelper.containsStyle(Styles.ICON_STACK_TOP, getStyleName());
103    }
104
105    public void setInverse(final boolean inverse) {
106        StyleHelper.toggleStyleName(this, inverse, Styles.ICON_INVERSE);
107    }
108
109    public boolean isInverse() {
110        return StyleHelper.containsStyle(Styles.ICON_INVERSE, getStyleName());
111    }
112
113    public void setSpin(final boolean spin) {
114        StyleHelper.toggleStyleName(this, spin, Styles.ICON_SPIN);
115    }
116
117    public boolean isSpin() {
118        return StyleHelper.containsStyle(Styles.ICON_SPIN, getStyleName());
119    }
120
121    public void setPulse(final boolean pulse) {
122        StyleHelper.toggleStyleName(this, pulse, Styles.ICON_PULSE);
123    }
124
125    public boolean isPulse() {
126        return StyleHelper.containsStyle(Styles.ICON_PULSE, getStyleName());
127    }
128
129    public void setRotate(final IconRotate iconRotate) {
130        if (iconRotate == null) {
131            return;
132        }
133        StyleHelper.addUniqueEnumStyleName(this, IconRotate.class, iconRotate);
134    }
135
136    public IconRotate getRotate() {
137        return IconRotate.fromStyleName(getStyleName());
138    }
139
140    public void setFlip(final IconFlip iconFlip) {
141        if (iconFlip == null) {
142            return;
143        }
144
145        StyleHelper.addUniqueEnumStyleName(this, IconFlip.class, iconFlip);
146    }
147
148    public IconFlip getFlip() {
149        return IconFlip.fromStyleName(getStyleName());
150    }
151
152    @Override
153    public void setSize(final IconSize iconSize) {
154        StyleHelper.addUniqueEnumStyleName(this, IconSize.class, iconSize);
155    }
156
157    @Override
158    public IconSize getSize() {
159        return IconSize.fromStyleName(getStyleName());
160    }
161
162    @Override
163    public void setEmphasis(final Emphasis emphasis) {
164        StyleHelper.addUniqueEnumStyleName(this, Emphasis.class, emphasis);
165    }
166
167    @Override
168    public Emphasis getEmphasis() {
169        return Emphasis.fromStyleName(getStyleName());
170    }
171
172    @Override
173    public HandlerRegistration addClickHandler(final ClickHandler handler) {
174        return addDomHandler(handler, ClickEvent.getType());
175    }
176}