001    package 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    
023    import org.gwtbootstrap3.client.ui.base.ComplexWidget;
024    import org.gwtbootstrap3.client.ui.base.HasType;
025    import org.gwtbootstrap3.client.ui.base.helper.StyleHelper;
026    import org.gwtbootstrap3.client.ui.constants.ElementTags;
027    import org.gwtbootstrap3.client.ui.constants.IconFlip;
028    import org.gwtbootstrap3.client.ui.constants.IconRotate;
029    import org.gwtbootstrap3.client.ui.constants.IconSize;
030    import org.gwtbootstrap3.client.ui.constants.IconType;
031    import org.gwtbootstrap3.client.ui.constants.Styles;
032    
033    import com.google.gwt.dom.client.Document;
034    import com.google.gwt.uibinder.client.UiConstructor;
035    
036    /**
037     * Simple put, an icon.
038     *
039     * @author Sven Jacobs
040     * @see org.gwtbootstrap3.client.ui.constants.IconType
041     */
042    public class Icon extends ComplexWidget implements HasType<IconType> {
043    
044        public Icon() {
045            setElement(Document.get().createElement(ElementTags.I));
046            addStyleName(Styles.FONT_AWESOME_BASE);
047        }
048    
049        @UiConstructor
050        public Icon(final IconType type) {
051            this();
052            setType(type);
053        }
054    
055        @Override
056        public void setType(final IconType type) {
057            StyleHelper.addUniqueEnumStyleName(this, IconType.class, type);
058        }
059    
060        @Override
061        public IconType getType() {
062            return IconType.fromStyleName(getStyleName());
063        }
064    
065        public void setLight(final boolean light) {
066            StyleHelper.toggleStyleName(this, light, Styles.ICON_LIGHT);
067        }
068    
069        public boolean isLight() {
070            return StyleHelper.containsStyle(Styles.ICON_LIGHT, getStyleName());
071        }
072    
073        public void setMuted(final boolean muted) {
074            StyleHelper.toggleStyleName(this, muted, Styles.ICON_MUTED);
075        }
076    
077        public boolean isMuted() {
078            return StyleHelper.containsStyle(Styles.ICON_MUTED, getStyleName());
079        }
080    
081        public void setBorder(final boolean border) {
082            StyleHelper.toggleStyleName(this, border, Styles.ICON_BORDER);
083        }
084    
085        public boolean isBorder() {
086            return StyleHelper.containsStyle(Styles.ICON_BORDER, getStyleName());
087        }
088    
089        public void setStackBase(final boolean stackBase) {
090            StyleHelper.toggleStyleName(this, stackBase, Styles.ICON_STACK_BASE);
091        }
092    
093        public boolean isStackBase() {
094            return StyleHelper.containsStyle(Styles.ICON_STACK_BASE, getStyleName());
095        }
096    
097        public void setFixedWidth(final boolean fixedWidth) {
098            StyleHelper.toggleStyleName(this, fixedWidth, Styles.ICON_FIXED_WIDTH);
099        }
100    
101        public boolean isFixedWidth() {
102            return StyleHelper.containsStyle(Styles.ICON_FIXED_WIDTH, getStyleName());
103        }
104    
105        public void setStackTop(final boolean stackTop) {
106            StyleHelper.toggleStyleName(this, stackTop, Styles.ICON_STACK_TOP);
107        }
108    
109        public boolean isStackTop() {
110            return StyleHelper.containsStyle(Styles.ICON_STACK_TOP, 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 setRotate(final IconRotate iconRotate) {
122            if (iconRotate == null) {
123                return;
124            }
125    
126            StyleHelper.addUniqueEnumStyleName(this, IconRotate.class, iconRotate);
127        }
128    
129        public IconRotate getRotate() {
130            return IconRotate.fromStyleName(getStyleName());
131        }
132    
133        public void setFlip(final IconFlip iconFlip) {
134            if (iconFlip == null) {
135                return;
136            }
137    
138            StyleHelper.addUniqueEnumStyleName(this, IconFlip.class, iconFlip);
139        }
140    
141        public IconFlip getFlip() {
142            return IconFlip.fromStyleName(getStyleName());
143        }
144    
145        public void setSize(final IconSize iconSize) {
146            if (iconSize == null) {
147                return;
148            }
149    
150            StyleHelper.addUniqueEnumStyleName(this, IconSize.class, iconSize);
151        }
152    
153        public IconSize getSize() {
154            return IconSize.fromStyleName(getStyleName());
155        }
156    }