From 5f49aeab3bb8b551433323691c9e2b915db90f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenzo=20Tilve=20=C3=81lvaro?= Date: Fri, 11 Nov 2011 11:25:53 +0100 Subject: [PATCH] [Bug #1244] Only create dateboxes for treerow textboxes when needed There is not visibility from GanttZK to dynamicDatebox component, and it has some diferences as far as the relationship between start and end date is more complex that in the webapp element. FEA: ItEr75S04BugFixing --- .../org/zkoss/ganttz/LeftTasksTreeRow.java | 145 +++++++++--------- .../web/ganttz/zul/leftTasksTreeRow.zul | 4 +- 2 files changed, 77 insertions(+), 72 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/LeftTasksTreeRow.java b/ganttzk/src/main/java/org/zkoss/ganttz/LeftTasksTreeRow.java index b7819656d..c06771892 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/LeftTasksTreeRow.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/LeftTasksTreeRow.java @@ -24,10 +24,13 @@ package org.zkoss.ganttz; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.LocalDate; @@ -47,6 +50,13 @@ import org.zkoss.zul.Treecell; import org.zkoss.zul.api.Label; import org.zkoss.zul.api.Treerow; +/** + * Row composer for Tasks details Tree
+ * + * @author Óscar González Fernández + * @author Manuel Rego Casasnovas + * @author Lorenzo Tilve Álvaro + */ public class LeftTasksTreeRow extends GenericForwardComposer { public interface ILeftTasksTreeNavigator { @@ -71,9 +81,7 @@ public class LeftTasksTreeRow extends GenericForwardComposer { private Textbox endDateTextBox; - private Datebox startDateBox; - - private Datebox endDateBox; + private Datebox openedDateBox = null; private DateFormat dateFormat; @@ -113,19 +121,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer { this.nameBox = nameBox; } - public Datebox getStartDateBox() { - return startDateBox; - } - - public void setStartDateBox(Datebox startDateBox) { - this.startDateBox = startDateBox; - this.startDateBox.setCompact(true); - this.startDateBox.setFormat("dd/MM/yyyy"); - } - - public Datebox getEndDateBox() { - return endDateBox; - } public Task getData() { return task; @@ -140,21 +135,35 @@ public class LeftTasksTreeRow extends GenericForwardComposer { public void userWantsDateBox(Component component) { if (component == startDateTextBox) { if (canChangeStartDate()) { - showDateBox(startDateBox, startDateTextBox); + createDateBox(startDateTextBox); } } if (component == endDateTextBox) { if (canChangeEndDate()) { - showDateBox(endDateBox, endDateTextBox); + createDateBox(endDateTextBox); } } } - private void showDateBox(Datebox dateBox, Textbox associatedTextBox) { - associatedTextBox.setVisible(false); - dateBox.setVisible(true); - dateBox.setFocus(true); - dateBox.setOpen(true); + public void createDateBox(Textbox textbox) { + openedDateBox = new Datebox(); + openedDateBox.setFormat("short"); + openedDateBox.setButtonVisible(false); + + try { + openedDateBox.setValue(dateFormat.parse(textbox.getValue())); + } catch (ParseException e) { + return; + } + + registerOnEnterOpenDateBox(openedDateBox); + registerBlurListener(openedDateBox); + registerOnChangeDatebox(openedDateBox, textbox); + + textbox.setVisible(false); + textbox.getParent().appendChild(openedDateBox); + openedDateBox.setFocus(true); + openedDateBox.setOpen(true); } private enum Navigation { @@ -236,25 +245,15 @@ public class LeftTasksTreeRow extends GenericForwardComposer { * the component that has lost focus */ public void dateBoxHasLostFocus(Datebox dateBox) { - if (dateBox == startDateBox) { - hideDateBox(startDateBox, startDateTextBox); - } - if (dateBox == endDateBox) { - hideDateBox(endDateBox, endDateTextBox); - } - } - - private void hideDateBox(Datebox dateBoxToDissapear, - Textbox associatedTextBox) { - dateBoxToDissapear.setVisible(false); - associatedTextBox.setVisible(true); + dateBox.getPreviousSibling().setVisible(true); + dateBox.setParent(null); } @Override public void doAfterCompose(Component component) throws Exception { super.doAfterCompose(component); findComponents((Treerow) component); - registerListeners(); + registerTextboxesListeners(); updateComponents(); task .addFundamentalPropertiesChangeListener(new PropertyChangeListener() { @@ -266,27 +265,22 @@ public class LeftTasksTreeRow extends GenericForwardComposer { }); } - private void registerListeners() { + private void registerTextboxesListeners() { if (disabilityConfiguration.isTreeEditable()) { registerKeyboardListener(nameBox); + registerOnChange(nameBox); registerKeyboardListener(startDateTextBox); registerKeyboardListener(endDateTextBox); - registerOnEnterListener(startDateTextBox); registerOnEnterListener(endDateTextBox); - - registerOnEnterOpenDateBox(startDateBox); - registerOnEnterOpenDateBox(endDateBox); - - registerBlurListener(startDateBox); - registerBlurListener(endDateBox); - - registerOnChange(nameBox); - registerOnChange(startDateBox); - registerOnChange(endDateBox); + registerOnChange(startDateTextBox); + registerOnChange(endDateTextBox); } } + public void registerDateboxListeners(Datebox datebox) { + } + private void findComponents(Treerow row) { List rowChildren = row.getChildren(); List treeCells = ComponentsFinder.findComponentsOfType(Treecell.class, @@ -297,14 +291,10 @@ public class LeftTasksTreeRow extends GenericForwardComposer { findComponentsForEndDateCell(treeCells.get(2)); } - private static Datebox findDateBoxOfCell(Treecell treecell) { - List children = treecell.getChildren(); - return ComponentsFinder.findComponentsOfType(Datebox.class, children).get(0); - } - private static Textbox findTextBoxOfCell(Treecell treecell) { List children = treecell.getChildren(); - return ComponentsFinder.findComponentsOfType(Textbox.class, children).get(0); + return ComponentsFinder.findComponentsOfType(Textbox.class, children) + .get(0); } private void findComponentsForNameCell(Treecell treecell) { @@ -335,6 +325,18 @@ public class LeftTasksTreeRow extends GenericForwardComposer { }); } + private void registerOnChangeDatebox(final Datebox datebox, + final Textbox textbox) { + datebox.addEventListener("onChange", new EventListener() { + + @Override + public void onEvent(Event event) { + textbox.setValue(dateFormat.format(datebox.getValue())); + updateBean(textbox); + } + }); + } + private void registerOnEnterListener(final Textbox textBox) { textBox.addEventListener("onOK", new EventListener() { @@ -358,7 +360,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer { private void findComponentsForStartDateCell(Treecell treecell) { if (disabilityConfiguration.isTreeEditable()) { startDateTextBox = findTextBoxOfCell(treecell); - startDateBox = findDateBoxOfCell(treecell); } else { startDateLabel = (Label) treecell.getChildren().get(0); } @@ -366,8 +367,6 @@ public class LeftTasksTreeRow extends GenericForwardComposer { private void findComponentsForEndDateCell(Treecell treecell) { if (disabilityConfiguration.isTreeEditable()) { - endDateBox = findDateBoxOfCell(treecell); - endDateBox.setDisabled(true); endDateTextBox = findTextBoxOfCell(treecell); } else { endDateLabel = (Label) treecell.getChildren().get(0); @@ -387,12 +386,26 @@ public class LeftTasksTreeRow extends GenericForwardComposer { public void updateBean(Component updatedComponent) { if (updatedComponent == getNameBox()) { task.setName(getNameBox().getValue()); - } else if (updatedComponent == getStartDateBox()) { - Date begin = getStartDateBox().getValue(); - task.moveTo(GanttDate.createFrom(begin)); - } else if (updatedComponent == getEndDateBox()) { - Date newEnd = getEndDateBox().getValue(); - task.resizeTo(LocalDate.fromDateFields(newEnd)); + if (StringUtils.isEmpty(getNameBox().getValue())) { + getNameBox().setValue(task.getName()); + } + } else if (updatedComponent == getStartDateTextBox()) { + try { + Date begin = dateFormat.parse(getStartDateTextBox().getValue()); + task.moveTo(GanttDate.createFrom(begin)); + } catch (ParseException e) { + getStartDateTextBox().setValue( + dateFormat.format(task.getBeginDate() + .toDayRoundedDate())); + } + } else if (updatedComponent == getEndDateTextBox()) { + try { + Date newEnd = dateFormat.parse(getEndDateTextBox().getValue()); + task.resizeTo(LocalDate.fromDateFields(newEnd)); + } catch (ParseException e) { + getEndDateTextBox().setValue( + asString(task.getEndDate().toDayRoundedDate())); + } } planner.updateTooltips(); } @@ -403,13 +416,7 @@ public class LeftTasksTreeRow extends GenericForwardComposer { getNameBox().setDisabled(!canRenameTask()); getNameBox().setTooltiptext(task.getName()); - getStartDateBox().setValue( - task.getBeginDate().toDayRoundedDate()); - getStartDateBox().setDisabled(!canChangeStartDate()); getStartDateTextBox().setDisabled(!canChangeStartDate()); - - getEndDateBox().setValue(task.getEndDate().toDayRoundedDate()); - getEndDateBox().setDisabled(!canChangeEndDate()); getEndDateTextBox().setDisabled(!canChangeEndDate()); getStartDateTextBox().setValue( diff --git a/ganttzk/src/main/resources/web/ganttz/zul/leftTasksTreeRow.zul b/ganttzk/src/main/resources/web/ganttz/zul/leftTasksTreeRow.zul index 420b6ac7c..618ab14cf 100644 --- a/ganttzk/src/main/resources/web/ganttz/zul/leftTasksTreeRow.zul +++ b/ganttzk/src/main/resources/web/ganttz/zul/leftTasksTreeRow.zul @@ -28,10 +28,8 @@ - - - +