001/*
002 *  Copyright 2012 GWT-Bootstrap
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package com.github.gwtbootstrap.client.ui.base;
017
018import com.google.gwt.user.client.ui.UIObject;
019
020/**
021 * The Helper class for {@link HasStyle} interface.
022 *
023 * @since 2.0.4.0
024 *
025 * @see HasStyle
026 * @see Style
027 *
028 * @author ohashi keisuke
029 * @author Carlos A Becker
030 */
031public class StyleHelper {
032
033        /**
034         * Adds the provided style to the widget.
035         *
036         * @param widget
037         *            the widget to be added style.
038         * @param style
039         *            the style to be added to the Widget.
040         */
041        public static <T extends UIObject> void addStyle(T widget, Style style) {
042        if (!style.get().isEmpty()) {
043            widget.addStyleName(style.get());
044        }
045        }
046
047        /**
048         * Replaces the widget's style with the provided one.
049         *
050         * @param widget
051         *            the widget to be applied style.
052         * @param style
053         *            the style to be applied to the Widget.
054         */
055        public static <T extends UIObject> void setStyle(T widget, Style style) {
056                widget.setStyleName(style.get());
057        }
058
059        /**
060         * Removes the provided style from the widget.
061         *
062         * @param widget
063         *            the widget to be removed style.
064         * @param style
065         *            the style to be removed from the Widget.
066         */
067        public static <T extends UIObject> void removeStyle(T widget, Style style) {
068                String styleString = style.get();
069
070                if (!styleString.isEmpty()) {
071                        widget.removeStyleName(styleString);
072                }
073        }
074
075        /**
076         * Change the style.
077         * @param widget the widget to be changed style.
078         * @param style the style to be applied to the widget.
079         * @param styleEnums other styles.
080         */
081        public static <S extends Enum<S> & Style> void changeStyle(UIObject widget, S style,Class<S> styleEnums) {
082                assert styleEnums != null : "styleEnums should not be null.";
083
084                changeStyle(widget, style, styleEnums.getEnumConstants());
085        }
086
087        /**
088         * Change the style.
089         * @param widget the widget to be changed style.
090         * @param style the style to be applied to the widget.
091         * @param otherStyles other styles.
092         */
093        public static <S extends Style> void changeStyle(UIObject widget,S style,S[] otherStyles) {
094
095                assert widget != null && style != null && otherStyles != null : "any args should not be null.";
096
097                for(S s : otherStyles) {
098                        removeStyle(widget, s);
099                }
100
101                addStyle(widget, style);
102        }
103        
104}