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     */
016    package com.github.gwtbootstrap.client.ui;
017    
018    import com.github.gwtbootstrap.client.ui.base.IconAnchor;
019    import com.github.gwtbootstrap.client.ui.constants.Constants;
020    import com.google.gwt.user.client.DOM;
021    import com.google.gwt.user.client.Element;
022    
023    /**
024     * The TabLink for {@link TabPanel}
025     * @author ohashi keisuke
026     *
027     */
028    public class TabLink extends NavWidget {
029    
030        private TabPane pane;
031        private boolean createTabPane = true;
032    
033        /**
034         * Create widget with set Effective TabPane 
035         * @param pane effective tabPane
036         */
037        public TabLink(TabPane pane) {
038            this();
039            setText(pane.getHeading());
040            setTablePane(pane);
041        }
042    
043        /**
044         * Create empty widget
045         */
046        public TabLink() {
047            super();
048            IconAnchor anchor = getAnchor();
049            anchor.getElement().setAttribute(Constants.DATA_TOGGLE, "tab");
050        }
051        
052        public void setCreateTabPane(boolean createTabPane) {
053            this.createTabPane = createTabPane;
054        }
055        
056        public boolean isCreateTabPane() {
057            return this.createTabPane;
058        }
059    
060        /**
061         * Set Effective TabPane
062         * @param pane
063         */
064        public void setTablePane(TabPane pane) {
065            this.pane = pane;
066            
067            if(pane.getId() == null || pane.getId().isEmpty()) {
068                pane.setHref(DOM.createUniqueId());
069            }
070    
071            setDataTarget(pane.getId());
072            
073            this.setActive(pane.isActive());
074        }
075        
076        public void setDataTarget(String id) {
077            getAnchor().getElement().setAttribute(Constants.DATA_TARGET,"#" + id);
078        }
079        
080        /**
081         * Get Effective TabPane
082         * @return effective TabPane
083         */
084        public TabPane getTabPane() {
085            return pane;
086        }
087        
088        @Override
089        protected void onAttach() {
090            super.onAttach();
091            
092            if(isActive()) {
093                show();
094            }
095        }
096        
097        @Override
098        public void setActive(boolean active) {
099            super.setActive(active);
100            
101            if(pane != null) {
102                pane.setActive(active);
103            }
104            
105        }
106        
107        /**
108         * show tab pane
109         */
110        public void show() {
111            setActive(true);
112            show(getAnchor().getElement());
113        }
114    
115        //@formatter:off
116        private native void show(Element e)/*-{
117            $wnd.jQuery(e).tab('show');
118        }-*/;
119        //@formatter:on
120    
121    }