diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java index 418b23426..3681eff1f 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TabsRegistry.java @@ -53,8 +53,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 3207a7576..c99cdae0e 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 @@ -50,6 +50,7 @@ import org.springframework.stereotype.Component; import org.zkoss.ganttz.Planner; 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; @@ -191,8 +192,8 @@ public class MultipleTabsPlannerController implements Composer, @Override public void goToScheduleOf(Order order) { - mode.goToOrderMode(order); - getTabsRegistry().show(planningTab); + getTabsRegistry() + .show(planningTab, changeModeTo(order)); } @Override @@ -204,8 +205,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); @@ -219,14 +220,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 @@ -391,14 +391,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); } @@ -409,20 +407,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 @@ -430,4 +425,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); } }