diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TabSwitcher.java b/ganttzk/src/main/java/org/zkoss/ganttz/TabSwitcher.java index 62a14aae4..5a3172682 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TabSwitcher.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TabSwitcher.java @@ -21,7 +21,6 @@ package org.zkoss.ganttz; import org.zkoss.ganttz.adapters.TabsConfiguration; -import org.zkoss.ganttz.extensions.ITab; import org.zkoss.ganttz.util.IMenuItemsRegister; import org.zkoss.ganttz.util.OnZKDesktopRegistry; import org.zkoss.zk.ui.Component; @@ -49,9 +48,7 @@ public class TabSwitcher extends HtmlMacroComponent { private void addTabsFromComfiguration(TabsConfiguration configuration) { container.getChildren().clear(); tabsRegistry = new TabsRegistry(container); - for (ITab tab : configuration.getTabs()) { - tabsRegistry.add(tab); - } + configuration.applyTo(tabsRegistry); tabsRegistry.registerAtMenu(getMenuItemsRegisterLocator().retrieve()); tabsRegistry.showFirst(); } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/TabsConfiguration.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/TabsConfiguration.java index 6223b80c3..af9d36799 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/TabsConfiguration.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/TabsConfiguration.java @@ -21,29 +21,71 @@ package org.zkoss.ganttz.adapters; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import org.zkoss.ganttz.TabsRegistry; +import org.zkoss.ganttz.adapters.State.IValueChangeListener; import org.zkoss.ganttz.extensions.ITab; public class TabsConfiguration { + public static ChangeableTab configure(ITab tab) { + return new ChangeableTab(tab); + } + + public static class ChangeableTab { + private final ITab tab; + + private State reloadNameState; + + ChangeableTab(ITab tab) { + this.tab = tab; + } + + public ChangeableTab reloadNameOn(State reloadName) { + this.reloadNameState = reloadName; + return this; + } + } + public static TabsConfiguration create() { return new TabsConfiguration(); } - private List tabs = new ArrayList(); + private List tabs = new ArrayList(); private TabsConfiguration() { } public TabsConfiguration add(ITab tab) { - tabs.add(tab); + tabs.add(new ChangeableTab(tab)); return this; } - public List getTabs() { - return Collections.unmodifiableList(tabs); + public TabsConfiguration add(ChangeableTab changeableTab) { + tabs.add(changeableTab); + return this; + } + + public void applyTo(TabsRegistry tabsRegistry) { + for (ChangeableTab tab : tabs) { + tabsRegistry.add(tab.tab); + reloadNameIfNeeded(tabsRegistry, tab); + } + } + + private void reloadNameIfNeeded(final TabsRegistry tabsRegistry, + final ChangeableTab tab) { + if (tab.reloadNameState == null) { + return; + } + tab.reloadNameState.addListener(new IValueChangeListener() { + + @Override + public void hasChanged(State condition) { + tabsRegistry.loadNewName(tab.tab); + } + }); } }