package scrum.client.tasks; import scrum.client.collaboration.EmoticonsWidget; import scrum.client.common.ABlockWidget; import scrum.client.common.AScrumAction; import scrum.client.common.BlockHeaderWidget; import scrum.client.common.BlockWidgetFactory; import scrum.client.dnd.TrashSupport; import scrum.client.img.Img; import scrum.client.project.Requirement; import scrum.client.sprint.ClaimTaskAction; import scrum.client.sprint.CloseTaskAction; import scrum.client.sprint.CreateTaskImpedimentAction; import scrum.client.sprint.DeleteTaskAction; import scrum.client.sprint.ReopenTaskAction; import scrum.client.sprint.Task; import scrum.client.sprint.UnclaimTaskAction; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class TaskBlock extends ABlockWidget<Task> implements TrashSupport { private SimplePanel statusIcon; private Label requirementLabel; private Label ownerLabel; private TaskBlockContainer container; public TaskBlock(TaskBlockContainer container) { this.container = container; } @Override protected void onInitializationHeader(BlockHeaderWidget header) { Task task = getObject(); statusIcon = header.insertPrefixIcon(); if (container.isShowRequirement()) requirementLabel = header.appendCenterSuffix(null); if (container.isShowOwner()) ownerLabel = header.appendCenterSuffix(null); header.appendCell(new EmoticonsWidget(task), null, true, true, null); header.addMenuAction(new ClaimTaskAction(task)); header.addMenuAction(new CloseTaskAction(task)); header.addMenuAction(new ReopenTaskAction(task)); header.addMenuAction(new UnclaimTaskAction(task)); header.addMenuAction(new CreateTaskImpedimentAction(task)); header.addMenuAction(new DeleteTaskAction(task)); } @Override protected void onUpdateHeader(BlockHeaderWidget header) { Task task = getObject(); header.setDragHandle(task.getReference()); Image statusImage = null; if (task.isClosed()) { statusImage = Img.bundle.tskClosed().createImage(); statusImage.setTitle("Closed."); } else if (task.isBlocked()) { statusImage = Img.bundle.tskBlocked().createImage(); statusImage.setTitle("Blocked by " + task.getImpediment().getReferenceAndLabel() + "."); } else if (task.isOwnerSet()) { statusImage = Img.bundle.tskClaimed().createImage(); statusImage.setTitle("Claimed by " + task.getOwner().getName() + "."); } statusIcon.setWidget(statusImage); if (requirementLabel != null) { Requirement req = task.getRequirement(); requirementLabel.setText(req.getReference() + " " + req.getLabel()); } if (ownerLabel != null) ownerLabel.setText(task.isOwnerSet() ? task.getOwner().getName() : null); header.setCenter(task.getLabel()); } @Override protected Widget onExtendedInitialization() { return new TaskWidget(getObject(), container.isWideMode()); } public AScrumAction getTrashAction() { return new DeleteTaskAction(getObject()); } public TaskBlockContainer getContainer() { return this.container; } public static class TaskBlockFactory implements BlockWidgetFactory<Task> { private TaskBlockContainer container; public TaskBlockFactory(TaskBlockContainer container) { this.container = container; } public ABlockWidget<Task> createBlock() { return new TaskBlock(container); } } }