From b4ea86c80fa2a733fdd83bcdb1f6961023f21a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 9 Nov 2010 17:14:34 +0100 Subject: [PATCH] FEA: ItEr02S03MigracionZK5 Avoid uses of Mode#goToOrderMode that cause unnecessary repaintings Now the mode is changed after hiding the previous tab, so the previous tab is not repainted and the new tab is showed with the correct mode. FEA: ItEr63S03BugFixing --- .../java/org/zkoss/ganttz/TabsRegistry.java | 15 +++++++ .../navalplanner/web/planner/tabs/Mode.java | 12 ++++++ .../tabs/MultipleTabsPlannerController.java | 40 ++++++++++--------- .../web/planner/tabs/PlanningTabCreator.java | 3 -- 4 files changed, 49 insertions(+), 21 deletions(-) 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); } }