diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java index 9d6163d20..97c45dc2c 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java @@ -54,8 +54,23 @@ public class TabsRegistry { tabs.add(tab); } + public interface IBeforeShowAction { + public void doAction(); + } + + private static final IBeforeShowAction DO_NOTHING = new IBeforeShowAction() { + @Override + public void doAction() { + } + }; + public void show(ITab tab) { + show(tab, DO_NOTHING); + } + + public void show(ITab tab, IBeforeShowAction beforeShowAction) { hideAllExcept(tab); + beforeShowAction.doAction(); tab.show(); parent.invalidate(); activateMenuIfRegistered(tab); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/Mode.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/Mode.java index 6eada96c4..922408c6f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/Mode.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/Mode.java @@ -24,6 +24,9 @@ import java.util.List; import org.apache.commons.lang.Validate; import org.navalplanner.business.orders.entities.Order; +import org.zkoss.ganttz.TabsRegistry; +import org.zkoss.ganttz.TabsRegistry.IBeforeShowAction; +import org.zkoss.ganttz.extensions.ITab; /** * @author Óscar González Fernández @@ -64,6 +67,15 @@ public class Mode { return current.getOrder(); } + /** + *

+ * Changes the mode to {@link ModeType#ORDER}. This causes to show the tab + * for the order mode of the given order. + *

+ * Beware that calling this method and then later showing another tab causes + * an unnecessary repaint. So if you need to change the tab and the mode, + * use {@link TabsRegistry#show(ITab, IBeforeShowAction)} instead. + */ public void goToOrderMode(Order order) { changeTo(current.createOrderMode(order)); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java index 4a5d8f00d..2a3e0c445 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/MultipleTabsPlannerController.java @@ -49,6 +49,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.zkoss.ganttz.TabSwitcher; import org.zkoss.ganttz.TabsRegistry; +import org.zkoss.ganttz.TabsRegistry.IBeforeShowAction; import org.zkoss.ganttz.adapters.State; import org.zkoss.ganttz.adapters.TabsConfiguration; import org.zkoss.ganttz.adapters.TabsConfiguration.ChangeableTab; @@ -190,8 +191,8 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToScheduleOf(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(planningTab); + getTabsRegistry() + .show(planningTab, changeModeTo(order)); } @Override @@ -203,8 +204,8 @@ public class MultipleTabsPlannerController implements Composer, public void goToTaskResourceAllocation(Order order, TaskElement task) { orderPlanningController.setShowedTask(task); - mode.goToOrderMode(order); - getTabsRegistry().show(planningTab); + getTabsRegistry() + .show(planningTab, changeModeTo(order)); } }, breadcrumbs); @@ -218,14 +219,13 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToScheduleOf(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(planningTab); + getTabsRegistry() + .show(planningTab, changeModeTo(order)); } @Override public void goToOrderDetails(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(ordersTab); + getTabsRegistry().show(ordersTab, changeModeTo(order)); } @Override @@ -389,14 +389,12 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToOrder(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(planningTab); + getTabsRegistry().show(planningTab, changeModeTo(order)); } @Override public void goToOrderElementDetails(OrderElement orderElement, Order order) { - getTabsRegistry().show(ordersTab); - mode.goToOrderMode(order); + getTabsRegistry().show(ordersTab, changeModeTo(order)); orderCRUDController.highLight(orderElement); } @@ -407,20 +405,17 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToOrderDetails(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(ordersTab); + getTabsRegistry().show(ordersTab, changeModeTo(order)); } @Override public void goToResourcesLoad(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(resourceLoadTab); + getTabsRegistry().show(resourceLoadTab, changeModeTo(order)); } @Override public void goToAdvancedAllocation(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(advancedAllocationTab); + getTabsRegistry().show(advancedAllocationTab, changeModeTo(order)); } @Override @@ -428,4 +423,13 @@ public class MultipleTabsPlannerController implements Composer, getTabsRegistry().show(ordersTab); orderCRUDController.showCreateFormFromTemplate(template); } + + private IBeforeShowAction changeModeTo(final Order order) { + return new IBeforeShowAction() { + @Override + public void doAction() { + mode.goToOrderMode(order); + } + }; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/PlanningTabCreator.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/PlanningTabCreator.java index 8925125d3..d9f9cccc7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/PlanningTabCreator.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/tabs/PlanningTabCreator.java @@ -171,7 +171,6 @@ public class PlanningTabCreator { OrderElement orderElement = task.getOrderElement(); if (orderElement instanceof Order) { Order order = (Order) orderElement; - mode.goToOrderMode(order); tabsController.goToOrderDetails(order); } } @@ -203,7 +202,6 @@ public class PlanningTabCreator { OrderElement orderElement = task.getOrderElement(); if (orderElement instanceof Order) { Order order = (Order) orderElement; - mode.goToOrderMode(order); tabsController.goToResourcesLoad(order); } } @@ -235,7 +233,6 @@ public class PlanningTabCreator { OrderElement orderElement = task.getOrderElement(); if (orderElement instanceof Order) { Order order = (Order) orderElement; - mode.goToOrderMode(order); tabsController.goToAdvancedAllocation(order); } }