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