001package com.github.gwtbootstrap.client.ui;
002
003import com.github.gwtbootstrap.client.ui.base.DivWidget;
004import com.github.gwtbootstrap.client.ui.constants.Constants;
005import com.google.gwt.user.client.DOM;
006import com.google.gwt.user.client.ui.IsWidget;
007import com.google.gwt.user.client.ui.Widget;
008
009/**
010 * Simple Accordion style widget.
011 * <p>
012 * It's a container of {@link AccordionGroup}.
013 * <p>
014 * <h3>UiBinder Usage:</h3>
015 * <p/>
016 * <pre>
017 * {@code
018 * <b:Accordion>
019 *     <b:AccordionGroup heading="One">
020 *         <b:Paragraph>one</b:Paragraph>
021 *         <b:Paragraph>two</b:Paragraph>
022 *     </b:AccordionGroup>
023 *     
024 *     <b:AccordionGroup heading="Defalut Open" defaultOpen="true">
025 *         <b:Paragraph>The default opened Accordion</b:Paragraph>
026 *     </b:AccordionGroup>
027 *     
028 *     <b:AccordionGroup defaultOpen="true" heading="With Icon" icon="GITHUB">
029 *         <b:Paragraph>Icon style</b:Paragraph>
030 *     </b:AccordionGroup>
031 *     
032 *     <b:AccordionGroup heading="With Custom Icon">
033 *         <b:customTrigger>
034 *             <b:Image addStyleNames="{style.icon}" resource="{res.logo}"/>
035 *         </b:customTrigger>
036 *         <b:Paragraph>Custom Icon Style</b:Paragraph>
037 *     </b:AccordionGroup>
038 * </b:Accordion>
039 * }
040 * </pre>
041 * 
042 * @since 2.2.1.0
043 * @author ohashi keisuke
044 * @see Accordion
045 * @see Collapse
046 * @see CollapseTrigger
047 * @see <a href="http://twitter.github.com/bootstrap/javascript.html#collapse">Twitter Bootstrap document</a>
048 *
049 */
050public class Accordion extends DivWidget {
051
052    /**
053     * Create an empty widget.
054     */
055    public Accordion() {
056        super(Constants.ACCORDION);
057        getElement().setId(DOM.createUniqueId());
058    }
059    
060    /**
061     * {@inheritDoc}
062     */
063    @Override
064    public void add(IsWidget child) {
065        if(child instanceof Collapse) {
066            Collapse collapse = (Collapse)child;
067            
068            collapse.setParent("#" + getId());
069        }
070        super.add(child);
071    }
072    
073    /**
074     * {@inheritDoc}
075     */
076    @Override
077    public void add(Widget w) {
078        
079        if(w instanceof AccordionGroup) {
080            AccordionGroup accordionGroup = (AccordionGroup)w;
081            
082            accordionGroup.setParent("#" + getId());
083        }
084        
085        super.add(w);
086    }
087}