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.github.gwtbootstrap.client.ui.constants.Device;
019import com.google.gwt.user.client.DOM;
020import com.google.gwt.user.client.ui.ComplexPanel;
021import com.google.gwt.user.client.ui.HasWidgets;
022import com.google.gwt.user.client.ui.Widget;
023
024/**
025 * A widget that can have several child widgets.
026 * <p>
027 * Base of a lot of other components :)
028 * 
029 * @since 2.0.4.0
030 * 
031 * @author Carlos Alexandro Becker
032 */
033public class ComplexWidget extends ComplexPanel implements HasWidgets,
034                HasStyle, IsResponsive {
035
036        /**
037         * Creates a new widget that is based on the provided html tag.
038         * 
039         * @param tag
040         *            the html tag used for this widget
041         */
042        public ComplexWidget(String tag) {
043                setElement(DOM.createElement(tag));
044        }
045
046        /**
047         * {@inheritDoc}
048         */
049        @Override
050        public void add(Widget w) {
051                add(w, getElement());
052                
053//              // logical add
054//              getChildren().add(w);
055//
056//              // physical add
057//              getElement().appendChild(w.getElement());
058
059        }
060
061        /**
062         * Inserts another widget into this one.
063         * 
064         * @param w
065         *            the widget to be inserted
066         * @param beforeIndex
067         *            the index of the position before which it should be set
068         */
069        public void insert(Widget w, int beforeIndex) {
070                insert(w, getElement(), beforeIndex, true);
071        }
072
073        /**
074         * {@inheritDoc}
075         */
076        public void setStyle(Style style) {
077                StyleHelper.setStyle(this, style);
078        }
079
080        /**
081         * {@inheritDoc}
082         */
083        public void addStyle(Style style) {
084                StyleHelper.addStyle(this, style);
085        }
086
087        /**
088         * {@inheritDoc}
089         */
090        public void removeStyle(Style style) {
091                StyleHelper.removeStyle(this, style);
092        }
093
094        /**
095         * {@inheritDoc}
096         */
097        public void setShowOn(Device device) {
098                ResponsiveHelper.setShowOn(this, device);
099        }
100
101        /**
102         * {@inheritDoc}
103         */
104        public void setHideOn(Device device) {
105                ResponsiveHelper.setHideOn(this, device);
106        }
107}