package scrum.client.project; import ilarkesto.gwt.client.Date; 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.journal.ActivateChangeHistoryAction; import scrum.client.sprint.Sprint; 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 RequirementBlock extends ABlockWidget<Requirement> implements TrashSupport { private SimplePanel statusIcon; private Label estimationLabel; private SprintSwitchIndicatorWidget sprintBorderIndicator; @Override protected void onInitializationHeader(BlockHeaderWidget header) { Requirement requirement = getObject(); statusIcon = header.insertPrefixIcon(); estimationLabel = header.appendCenterSuffix(null); header.appendCell(new EmoticonsWidget(requirement), null, true, true, null); header.appendCell(new EstimationBarWidget(requirement), "150px", false, true, null); header.addMenuAction(new AddRequirementToCurrentSprintAction(requirement)); header.addMenuAction(new RemoveRequirementFromSprintAction(requirement)); // header.addMenuAction(new CloseRequirementAction(requirement)); // header.addMenuAction(new ReopenRequirementAction(requirement)); header.addMenuAction(new SetRequirementDirtyAction(requirement)); header.addMenuAction(new SetRequirementCleanAction(requirement)); header.addMenuAction(new StartRequirementEstimationVotingAction(requirement)); // header.addMenuAction(new CloseRequirementEstimationVotingAction(requirement)); // header.addMenuAction(new RequirementEstimationVotingShowoffAction(requirement)); // header.addMenuAction(new ResetRequirementEstimationVotingAction(requirement)); header.addMenuAction(new ActivateChangeHistoryAction(requirement)); header.addMenuAction(new DeleteRequirementAction(requirement)); } @Override protected void onUpdateHeader(BlockHeaderWidget header) { Requirement requirement = getObject(); header.setDragHandle(requirement.getReference()); Image statusImage = null; if (requirement.isWorkEstimationVotingActive()) { statusImage = Img.bundle.reqPoker().createImage(); statusImage.setTitle("Estimation game \"Planning Poker\" active."); } else if (requirement.isInCurrentSprint()) { statusImage = Img.bundle.reqInSprint().createImage(); statusImage.setTitle("In current sprint."); } else if (requirement.isClosed()) { statusImage = Img.bundle.reqClosed().createImage(); statusImage.setTitle("Closed."); } else if (!requirement.isEstimatedWorkValid()) { statusImage = Img.bundle.reqDirty().createImage(); statusImage.setTitle("Needs estimation."); } estimationLabel.setText(requirement.getEstimatedWorkWithUnit()); statusIcon.setWidget(statusImage); header.setCenter(requirement.getLabel()); boolean sprintBorder = false; Requirement previous = getList().getPrevious(requirement); if (previous != null) { EstimationBar previousEstimationBar = previous.getEstimationBar(); sprintBorder = !requirement.getEstimationBar().isCompetedOnSameSprint(previousEstimationBar); } if (previous != null && sprintBorder) { if (sprintBorderIndicator == null) { sprintBorderIndicator = new SprintSwitchIndicatorWidget(); Sprint sprint = getCurrentProject().getCurrentSprint(); int sprints = previous.getEstimationBar().getEndSprintOffset() + 1; sprintBorderIndicator.updateLabel(sprints, sprint.getLength().multiplyBy(sprints).subtract( sprint.getBegin().getPeriodTo(Date.today()).abs())); getPreHeaderPanel().add(sprintBorderIndicator); } } else { if (sprintBorderIndicator != null) { getPreHeaderPanel().remove(sprintBorderIndicator); sprintBorderIndicator = null; } } } @Override protected Widget onExtendedInitialization() { return new RequirementWidget(getObject(), true, true, false, true, true, true, false); } public AScrumAction getTrashAction() { return new DeleteRequirementAction(getObject()); } public static final BlockWidgetFactory<Requirement> FACTORY = new BlockWidgetFactory<Requirement>() { public RequirementBlock createBlock() { return new RequirementBlock(); } }; }