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.HasResponsiveness;
024import org.gwtbootstrap3.client.ui.base.HasSize;
025import org.gwtbootstrap3.client.ui.base.helper.StyleHelper;
026import org.gwtbootstrap3.client.ui.constants.DeviceSize;
027import org.gwtbootstrap3.client.ui.constants.IconSize;
028import org.gwtbootstrap3.client.ui.constants.Styles;
029
030import com.google.gwt.dom.client.Document;
031import com.google.gwt.dom.client.Element;
032import com.google.gwt.user.client.ui.ComplexPanel;
033import com.google.gwt.user.client.ui.Widget;
034
035/**
036 * @author Joshua Godi
037 */
038public class IconStack extends ComplexPanel implements HasSize<IconSize>, HasResponsiveness {
039
040    public IconStack() {
041        setElement(Document.get().createSpanElement());
042        getElement().addClassName(Styles.ICON_STACK);
043    }
044
045    /**
046     * Adds an icon onto the icon stack
047     *
048     * @param icon Icon
049     * @param base Bottom icon or not
050     */
051    public void add(final Icon icon, final boolean base) {
052        icon.setStackBase(base);
053        add(icon);
054    }
055
056    @Override
057    public void add(final Widget child) {
058        if (!(child instanceof Icon)) {
059            throw new IllegalArgumentException("An IconStack can only have children that are of type Icon.");
060        }
061
062        add(child, (Element) getElement());
063    }
064
065    @Override
066    public void setVisibleOn(final DeviceSize deviceSize) {
067        StyleHelper.setVisibleOn(this, deviceSize);
068    }
069
070    @Override
071    public void setHiddenOn(final DeviceSize deviceSize) {
072        StyleHelper.setHiddenOn(this, deviceSize);
073    }
074
075    @Override
076    public void setSize(IconSize size) {
077        StyleHelper.addUniqueEnumStyleName(this, IconSize.class, size);
078    }
079
080    @Override
081    public IconSize getSize() {
082        return IconSize.fromStyleName(getStyleName());
083    }
084}