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 java.util.List; 019 020 import com.github.gwtbootstrap.client.ui.base.DivWidget; 021 import com.github.gwtbootstrap.client.ui.resources.Bootstrap; 022 import com.google.gwt.core.client.GWT; 023 import com.google.gwt.user.client.ui.IsWidget; 024 import com.google.gwt.user.client.ui.Widget; 025 026 //@formatter:off 027 /** 028 * The container for a tabbable nav. 029 * 030 * @since 2.0.4.0 031 * @author Dominik Mayer 032 * @author ohashi keisuke 033 */ 034 //@formatter:on 035 public class TabPanel extends DivWidget { 036 037 private static class TabContent extends DivWidget { 038 039 public TabContent() { 040 setStyleName(Bootstrap.tab_content); 041 } 042 } 043 044 private NavTabs tabs = new NavTabs(); 045 046 private TabContent tabContent = new TabContent(); 047 048 public TabPanel() { 049 this(Bootstrap.Tabs.ABOVE); 050 } 051 052 public TabPanel(Bootstrap.Tabs position) { 053 setTabPosition(position.get().toLowerCase()); 054 } 055 056 public void setTabPosition(String position) { 057 if(tabs.getParent() != null) { 058 remove(tabs); 059 remove(tabContent); 060 } 061 062 if (position.equalsIgnoreCase("below")) { 063 setStyle(Bootstrap.Tabs.BELOW); 064 super.add(tabContent); 065 super.add(tabs); 066 } else if (position.equalsIgnoreCase("left")) { 067 setStyle(Bootstrap.Tabs.LEFT); 068 super.add(tabs); 069 super.add(tabContent); 070 } else if (position.equalsIgnoreCase("right")) { 071 setStyle(Bootstrap.Tabs.RIGHT); 072 super.add(tabs); 073 super.add(tabContent); 074 } else { 075 setStyle(Bootstrap.Tabs.ABOVE); 076 super.add(tabs); 077 super.add(tabContent); 078 } 079 } 080 081 @Override 082 public void add(Widget child) { 083 084 if (child instanceof TabPane) { 085 add((TabPane) child); 086 return; 087 } 088 089 if (child instanceof TabLink) { 090 add((TabLink) child); 091 return; 092 } 093 094 if(child instanceof DropdownTab) { 095 add((DropdownTab) child); 096 return; 097 } 098 099 if(GWT.isProdMode()) { 100 throw new IllegalArgumentException("TabPanel can add only TabPane or TabLink or Tab or DorpdownTab. you added " + child); 101 } 102 } 103 104 private void add(DropdownTab dropdownTab) { 105 106 tabs.add(dropdownTab); 107 108 List<Tab> tabList = dropdownTab.getTabList(); 109 for (Tab tab : tabList) { 110 TabPane tabPane = tab.getTabPane(); 111 tabContent.add(tabPane); 112 } 113 } 114 115 private void add(TabPane child) { 116 117 if(child.isCreateTabLink()) { 118 TabLink tabLink = new TabLink(child); 119 tabs.add(tabLink); 120 } 121 tabContent.add(child); 122 } 123 124 private void add(final TabLink child) { 125 126 if(child.isCreateTabPane() && child.getTabPane() == null){ 127 TabPane pane = new TabPane(child.getText()); 128 child.setTablePane(pane); 129 tabContent.add(pane); 130 } else if(child.getTabPane() != null) { 131 tabContent.add(child.getTabPane()); 132 } 133 tabs.add(child); 134 } 135 136 @Override 137 public void clear() { 138 tabContent.clear(); 139 tabs.clear(); 140 } 141 142 /** 143 * Remove tab or tabpane. 144 * <p> 145 * If Tablink has TabPane,romve TabPane with TabLink. 146 * </pre> 147 * {@inheritDoc} 148 */ 149 @Override 150 public boolean remove(int index) { 151 Widget widget = tabs.getWidget(index); 152 153 if (widget instanceof TabLink) { 154 TabLink link = (TabLink) widget; 155 if(link.getTabPane() != null) { 156 link.getTabPane().removeFromParent(); 157 } 158 return tabs.remove(index); 159 } else if(widget instanceof TabPane) { 160 return tabContent.remove(widget); 161 } 162 163 return super.remove(widget); 164 } 165 166 /** 167 * remove TabLink or TabPane. 168 * <p> 169 * </p> 170 * {@inheritDoc} 171 */ 172 @Override 173 public boolean remove(Widget w) { 174 175 if (w instanceof TabLink) { 176 TabLink link = (TabLink) w; 177 178 if(link.getTabPane() != null) { 179 link.getTabPane().removeFromParent(); 180 } 181 return tabs.remove(w); 182 } else if(w instanceof TabPane) { 183 return tabContent.remove(w); 184 } 185 186 return super.remove(w); 187 } 188 189 /** 190 * {@inheritDoc} 191 */ 192 @Override 193 public boolean remove(IsWidget child) { 194 195 if (child instanceof Tab) { 196 Tab tab = (Tab) child; 197 198 TabLink link = tab.asTabLink(); 199 200 if(link.getTabPane() != null) { 201 link.getTabPane().removeFromParent(); 202 } 203 return tabs.remove(link); 204 } else if(child instanceof DropdownTab) { 205 DropdownTab tab = (DropdownTab)child; 206 207 List<Tab> tabList = tab.getTabList(); 208 209 for (Tab tab2 : tabList) { 210 tabContent.remove(tab2.getTabPane()); 211 } 212 return super.remove(child); 213 } 214 215 return super.remove(child); 216 } 217 }