Bug #1363: Remove visibility listeners corresponding to deleted tasks.

To do that we had to add an attribute in DependencyComponent to store the
listener and a method in Task to be able to delete visibility listeners.

This listener was causing that deleted tasks re-appeared when containers were
closed and opened again.

FEA: ItEr76S04BugFixing
This commit is contained in:
Jacobo Aragunde Pérez 2012-02-14 16:17:46 +01:00
parent 4353465efe
commit 2d7ea169bc
3 changed files with 31 additions and 2 deletions

View file

@ -56,6 +56,8 @@ public class DependencyComponent extends XulElement implements AfterCompose {
private IConstraintViolationListener<GanttDate> violationListener;
private PropertyChangeListener visibilityChangeListener;
private boolean violated = false;
public DependencyComponent(TaskComponent source, TaskComponent destination,
@ -192,4 +194,12 @@ public class DependencyComponent extends XulElement implements AfterCompose {
return (source.isLimiting() || destination.isLimiting());
}
public PropertyChangeListener getVisibilityChangeListener() {
return visibilityChangeListener;
}
public void setVisibilityChangeListener(PropertyChangeListener visibilityChangeListener) {
this.visibilityChangeListener = visibilityChangeListener;
}
}

View file

@ -149,6 +149,7 @@ public class DependencyList extends XulElement implements AfterCompose {
visibilityToggler);
destination.getTask().addVisibilityPropertiesChangeListener(
visibilityToggler);
dependencyComponent.setVisibilityChangeListener(visibilityToggler);
boolean dependencyMustBeVisible = visibilityToggler
.dependencyMustBeVisible();
visibilityToggler.toggleDependencyExistence(dependencyMustBeVisible);
@ -280,7 +281,7 @@ public class DependencyList extends XulElement implements AfterCompose {
for (DependencyComponent dependencyComponent : DependencyList.this
.getDependencyComponents()) {
if (dependencyComponent.contains(task)) {
this.removeChild(dependencyComponent);
removeDependencyComponent(dependencyComponent);
}
}
}
@ -289,8 +290,21 @@ public class DependencyList extends XulElement implements AfterCompose {
for (DependencyComponent dependencyComponent : DependencyList.this
.getDependencyComponents()) {
if (dependencyComponent.hasSameSourceAndDestination(dependency)) {
this.removeChild(dependencyComponent);
removeDependencyComponent(dependencyComponent);
}
}
}
private void removeDependencyComponent(DependencyComponent dependencyComponent) {
//remove the visibility listener attached to the tasks
TaskComponent source = dependencyComponent.getSource();
TaskComponent destination = dependencyComponent.getDestination();
PropertyChangeListener listener =
dependencyComponent.getVisibilityChangeListener();
source.getTask().removeVisibilityPropertiesChangeListener(listener);
destination.getTask().removeVisibilityPropertiesChangeListener(listener);
//remove the dependency itself
this.removeChild(dependencyComponent);
}
}

View file

@ -309,6 +309,11 @@ public abstract class Task implements ITaskFundamentalProperties {
.removePropertyChangeListener(listener);
}
public void removeVisibilityPropertiesChangeListener(
PropertyChangeListener listener) {
this.visibilityProperties.removePropertyChangeListener(listener);
}
@Override
public GanttDate getEndDate() {
return fundamentalProperties.getEndDate();