From b0445f56658ea93450cc1c7677c2b0d52ae1321c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 18 Aug 2009 12:26:56 +0200 Subject: [PATCH] ItEr22S12CUVistaRecursosTempoPorProxectoItEr21S07: Specifying the view currently shown as a tab. --- .../main/java/org/zkoss/ganttz/Planner.java | 33 ++++++++++- .../java/org/zkoss/ganttz/TabsRegistry.java | 55 +++++++++++++++++++ .../org/zkoss/ganttz/TasksPlanningTab.java | 26 ++++++++- .../org/zkoss/ganttz/extensions/ITab.java | 10 ++++ 4 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java index 2e42470e8..c7878758a 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java @@ -13,6 +13,10 @@ import org.zkoss.ganttz.data.Task; import org.zkoss.ganttz.extensions.ICommand; import org.zkoss.ganttz.extensions.ICommandOnTask; import org.zkoss.ganttz.extensions.IContext; +import org.zkoss.ganttz.extensions.ITab; +import org.zkoss.ganttz.extensions.ITabFactory; +import org.zkoss.ganttz.util.IMenuItemsRegister; +import org.zkoss.ganttz.util.MenuItemsRegisterLocator; import org.zkoss.zk.ui.Executions; import org.zkoss.zul.impl.XulElement; @@ -111,7 +115,34 @@ public class Planner extends XulElement { this.context = context; clear(); context.add(configuration.getData()); - createTasksPlanningTab(); + visualizeTabs(context, configuration + .getTabFactories()); + } + + private TabsRegistry createTabs(IContext context, + List> factories) { + List tabs = new ArrayList(); + tabs.add(createTasksPlanningTab()); + for (ITabFactory factory : factories) { + tabs.add(factory.create(context)); + } + TabsRegistry tabsRegistry = new TabsRegistry(this); + for (ITab t : tabs) { + tabsRegistry.add(t); + } + return tabsRegistry; + } + + private void visualizeTabs( + FunctionalityExposedForExtensions context, + List> tabFactories) { + TabsRegistry tabs = createTabs(context, tabFactories); + registryTabs(tabs); + tabs.showFirst(); + } + + private void registryTabs(TabsRegistry tabs) { + tabs.registerAtMenu(MenuItemsRegisterLocator.retrieve()); } private void clear() { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java new file mode 100644 index 000000000..fdf2c954f --- /dev/null +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java @@ -0,0 +1,55 @@ +package org.zkoss.ganttz; + +import java.util.ArrayList; +import java.util.List; + +import org.zkoss.ganttz.extensions.ITab; +import org.zkoss.ganttz.util.IMenuItemsRegister; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; + +public class TabsRegistry { + + private List tabs = new ArrayList(); + + private final Component parent; + + public TabsRegistry(Component parent) { + this.parent = parent; + } + + public void add(ITab tab) { + tab.addToParent(parent); + tabs.add(tab); + } + + public void show(ITab tab) { + hideAllExcept(tab); + tab.show(); + } + + private void hideAllExcept(ITab tab) { + for (ITab t : tabs) { + if (t.equals(tab)) + continue; + t.hide(); + } + } + + public void showFirst() { + show(tabs.get(0)); + } + + public void registerAtMenu(IMenuItemsRegister menu) { + for (final ITab t : tabs) { + menu.addMenuItem(t.getName(), new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + show(t); + } + }); + } + } +} diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TasksPlanningTab.java b/ganttzk/src/main/java/org/zkoss/ganttz/TasksPlanningTab.java index 4c0abb302..bec779414 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TasksPlanningTab.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TasksPlanningTab.java @@ -1,6 +1,9 @@ package org.zkoss.ganttz; -public class TasksPlanningTab { +import org.zkoss.ganttz.extensions.ITab; +import org.zkoss.zk.ui.Component; + +public class TasksPlanningTab implements ITab { private final Planner planner; private final LeftPane leftPane; @@ -19,4 +22,25 @@ public class TasksPlanningTab { leftPane.afterCompose(); ganttPanel.afterCompose(); } + + @Override + public void addToParent(Component parent) { + } + + @Override + public void hide() { + leftPane.detach(); + ganttPanel.detach(); + } + + @Override + public void show() { + leftPane.setParent(planner); + ganttPanel.setParent(planner); + } + + @Override + public String getName() { + return "Tasks Planning"; + } } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ITab.java b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ITab.java index 115ae5bbf..5ba5fea39 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ITab.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ITab.java @@ -1,5 +1,15 @@ package org.zkoss.ganttz.extensions; +import org.zkoss.zk.ui.Component; + public interface ITab { + String getName(); + + void addToParent(Component parent); + + void show(); + + void hide(); + }