package scrum.client.tasks;
import java.util.List;
import scrum.client.common.AScrumWidget;
import scrum.client.common.BlockListWidget;
import scrum.client.common.ElementPredicate;
import scrum.client.dnd.BlockListDropAction;
import scrum.client.project.Requirement;
import scrum.client.sprint.Task;
import com.google.gwt.user.client.ui.Widget;
public class TaskListWidget extends AScrumWidget {
private BlockListWidget<Task> list;
private BlockListDropAction<Task> dropAction;
private TaskBlockContainer container;
private Requirement requirement;
public TaskListWidget(Requirement requirement, TaskBlockContainer container) {
this(requirement, container, null);
}
public TaskListWidget(Requirement requirement, TaskBlockContainer container, BlockListDropAction<Task> dropAction) {
this.requirement = requirement;
this.container = container;
this.dropAction = dropAction;
}
@Override
protected Widget onInitialization() {
list = new BlockListWidget<Task>(new TaskBlock.TaskBlockFactory(container), this.dropAction);
list.setSelectionManager(container.getSelectionManager());
list.setMinHeight(100);
list.setAutoSorter(requirement.getTasksOrderComparator());
if (requirement.getProject().isTeamMember(getCurrentUser())) {
list.setDndSorting(true);
list.setMoveObserver(new MoveObserver());
}
return list;
}
public boolean selectTask(Task task) {
if (!list.contains(task)) update();
return list.showObject(task);
}
public void setTasks(List<Task> tasks) {
initialize();
list.setObjects(tasks);
}
public void setTaskHighlighting(ElementPredicate<Task> predicate) {
list.setTaskHighlighting(predicate);
}
public void clearTaskHighlighting() {
list.clearTaskHighlighting();
}
class MoveObserver implements Runnable {
public void run() {
List<Task> tasks = list.getObjects();
requirement.updateTasksOrder(tasks);
update();
}
}
}