when using a TabSet with the setCanAddTabs(true) property, I encountered one inconvenience. If I have so many Tabs that I have to scroll them, then the addTab button becomes invisible on the screen and I have to scroll to the end so that it becomes visible again.
I found a solution to this problem, but I don't like it. I'm sure you have a more elegant solution. Could you guide me on the right path?
Below is an example of my solution.
I found a solution to this problem, but I don't like it. I'm sure you have a more elegant solution. Could you guide me on the right path?
Below is an example of my solution.
Code:
public class TestBug implements EntryPoint {
private ImgButton addListButton;
private TabSet templatesTabSet;
public void onModuleLoad() {
addListButton = new ImgButton();
addListButton.setSrc("[SKIN]actions/add.png");
addListButton.setVisible(false);
addListButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addTab();
}
});
TabBar tabBarProperties = new TabBar();
tabBarProperties.addMembersChangedHandler(new MembersChangedHandler() {
@Override
public void onMembersChanged(MembersChangedEvent event) {
checkAddTabButton();
}
});
tabBarProperties.addScrolledHandler(new ScrolledHandler() {
@Override
public void onScrolled(ScrolledEvent event) {
checkAddTabButton(); }
});
templatesTabSet = new TabSet();
templatesTabSet.setTabBarProperties(tabBarProperties);
templatesTabSet.setTabBarControls(addListButton, TabBarControls.TAB_SCROLLER, TabBarControls.TAB_PICKER);
templatesTabSet.setTabBarPosition(Side.TOP);
templatesTabSet.setWidth(400);
templatesTabSet.setHeight(400);
templatesTabSet.setCanAddTabs(true);
templatesTabSet.setCanCloseTabs(true);
templatesTabSet.setCloseTabIcon("[SKIN]actions/remove.png");
templatesTabSet.addAddTabClickedHandler(new AddTabClickedHandler() {
@Override
public void onAddTabClicked(AddTabClickedEvent event) {
addTab();
}
});
templatesTabSet.addCloseClickHandler(new CloseClickHandler() {
@Override
public void onCloseClick(TabCloseClickEvent event) {
templatesTabSet.removeTab(event.getTab());
}
});
String[] titles = new String[] {"tab example 1", "tab example 2", "tab example 3", "tab example 4", "tab example 5", "tab example 6"};
for(String title:titles) {
Tab tab = new Tab(title, "[SKINIMG]Dialog/say.png");
templatesTabSet.addTab(tab);
}
templatesTabSet.draw();
}
private void addTab() {
Tab[] tabs = templatesTabSet.getTabs();
Tab tab = new Tab("new tab example " + tabs.length);
templatesTabSet.addTab(tab);
templatesTabSet.selectTab(tab);
}
private void checkAddTabButton() {
final Timer timer = new Timer() {
@Override
public void run() {
cancel();
TabBar tabBar = templatesTabSet.getTabBar();
Canvas[] members = tabBar.getMembers();
if(members.length > 1) {
Canvas lastTab = members[members.length - 1];
Boolean isVisible = addListButton.isVisible();
ImgButton addTabButton = templatesTabSet.getAddTabButton();
if((lastTab.getRight() - tabBar.getScrollLeft()) > templatesTabSet.getWidth()) {
if(!isVisible) {
addListButton.setVisible(true);
addTabButton.setVisible(false);
}
} else {
if(isVisible) {
addListButton.setVisible(false);
addTabButton.setVisible(true);
}
}
}
}
};
timer.scheduleRepeating(100);
}
}
Comment