package org.geogebra.web.html5.util.tabpanel;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
public class MultiRowsTabBar extends FlowPanel implements
HasSelectionHandlers<Integer> {
private int selectedTab;
private MultiRowsTabPanel tabPanel;
public MultiRowsTabBar(MultiRowsTabPanel tabPanel2) {
tabPanel = tabPanel2;
}
@Override
public HandlerRegistration addSelectionHandler(
SelectionHandler<Integer> handler) {
return addHandler(handler, SelectionEvent.getType());
}
public void setTabText(int index, String tabText) {
assert (index >= 0) && (index < getTabCount()) : "Tab index out of bounds";
((Label) this.getWidget(index)).setText(tabText);
}
private int getTabCount() {
return getWidgetCount();
}
public int getSelectedTab() {
return selectedTab;
}
public void selectTab(int index) {
if ((index < -1) || (index >= getTabCount())) {
throw new IndexOutOfBoundsException();
}
setSelectionStyle(this.getWidget(selectedTab), false);
selectedTab = index;
setSelectionStyle(this.getWidget(selectedTab), true);
tabPanel.deck.showWidget(selectedTab);
SelectionEvent.fire(tabPanel, index);
}
private static void setSelectionStyle(Widget item, boolean selected) {
if (item != null) {
if (selected) {
item.addStyleName("gwt-TabBarItem-selected");
setStyleName(DOM.getParent(item.getElement()),
"gwt-TabBarItem-wrapper-selected", true);
} else {
item.removeStyleName("gwt-TabBarItem-selected");
setStyleName(DOM.getParent(item.getElement()),
"gwt-TabBarItem-wrapper-selected", false);
}
}
}
/*
* @deprecated Use {@link #addTab(String)} instead
*/
@Override
@Deprecated
public void add(Widget w) {
// do nothing
}
public void addTab(String label) {
Tab tab = new Tab(label);
tab.addStyleName("gwt-TabBarItem");
super.add(tab);
}
private class Tab extends Label {
Tab(String label) {
super(label);
sinkEvents(Event.ONCLICK);
}
@Override
public void onBrowserEvent(Event event) {
if (DOM.eventGetType(event) == Event.ONCLICK) {
selectTabByTabWidget(this);
}
super.onBrowserEvent(event);
}
}
void selectTabByTabWidget(Widget tabWidget) {
int numTabs = getWidgetCount();
for (int i = 0; i < numTabs; ++i) {
if (getWidget(i) == tabWidget) {
selectTab(i);
return;
}
}
}
public void setTabEnabled(int index, boolean enabled) {
assert (index >= 0) && (index < getTabCount()) : "Tab index out of bounds";
setStyleName(getWidget(index).getElement(), "gwt-TabBarItem-disabled",
!enabled);
setStyleName(getWidget(index).getElement().getParentElement(),
"gwt-TabBarItem-wrapper-disabled", !enabled);
}
}