Disable new, new from template, up, down, indent and unindent buttons in WBS

Depending on selected node and if it's or not updated from templates the
different buttons are enabled or disabled accordingly.

FEA: ItEr77S12AdaptPlanningAccordingTimesheets
This commit is contained in:
Manuel Rego Casasnovas 2012-11-12 22:32:38 +01:00
parent 43d4b9b805
commit a1f4ece458
9 changed files with 80 additions and 28 deletions

View file

@ -1606,4 +1606,14 @@ public abstract class OrderElement extends IntegrationEntity implements
return sumChargedEffort.isFinishedTimesheets(); return sumChargedEffort.isFinishedTimesheets();
} }
@Override
public boolean isUpdatedFromTimesheets() {
TaskElement taskElement = getTaskElement();
if (taskElement == null) {
return false;
}
return taskElement.isUpdatedFromTimesheets();
}
} }

View file

@ -158,6 +158,11 @@ public class OrderLineGroup extends OrderElement implements
return false; return false;
} }
@Override
public boolean isUpdatedFromTimesheets() {
return getThis().isUpdatedFromTimesheets();
}
} }
public static OrderLineGroup create() { public static OrderLineGroup create() {

View file

@ -590,4 +590,9 @@ public abstract class OrderElementTemplate extends BaseEntity implements
public abstract boolean isOrderTemplate(); public abstract boolean isOrderTemplate();
@Override
public boolean isUpdatedFromTimesheets() {
return false;
}
} }

View file

@ -100,6 +100,11 @@ public class OrderLineGroupTemplate extends OrderElementTemplate implements
return false; return false;
} }
@Override
public boolean isUpdatedFromTimesheets() {
return false;
}
} }
public static OrderLineGroupTemplate createNew() { public static OrderLineGroupTemplate createNew() {

View file

@ -60,4 +60,6 @@ public interface ITreeNode<T extends ITreeNode<T>> {
*/ */
boolean isEmptyLeaf(); boolean isEmptyLeaf();
boolean isUpdatedFromTimesheets();
} }

View file

@ -41,7 +41,6 @@ import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.orders.entities.OrderLine; import org.libreplan.business.orders.entities.OrderLine;
import org.libreplan.business.orders.entities.OrderLineGroup; import org.libreplan.business.orders.entities.OrderLineGroup;
import org.libreplan.business.orders.entities.SchedulingState; import org.libreplan.business.orders.entities.SchedulingState;
import org.libreplan.business.planner.entities.TaskElement;
import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.requirements.entities.CriterionRequirement;
import org.libreplan.business.templates.entities.OrderElementTemplate; import org.libreplan.business.templates.entities.OrderElementTemplate;
import org.libreplan.business.users.entities.UserRole; import org.libreplan.business.users.entities.UserRole;
@ -519,15 +518,6 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
super.removeCodeTextbox(key); super.removeCodeTextbox(key);
} }
@Override
protected boolean isUpdatedFromTimesheets(OrderElement currentElement) {
TaskElement taskElement = currentElement.getTaskElement();
if (taskElement != null) {
return taskElement.isUpdatedFromTimesheets();
}
return false;
}
} }
@Override @Override

View file

@ -169,12 +169,6 @@ public class TemplatesTreeController extends
return currentElement.getSchedulingState(); return currentElement.getSchedulingState();
} }
@Override
protected boolean isUpdatedFromTimesheets(
OrderElementTemplate currentElement) {
return false;
}
} }
public TemplatesTreeController(IOrderTemplatesModel model, public TemplatesTreeController(IOrderTemplatesModel model,

View file

@ -116,6 +116,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree);
getModel().indent(element); getModel().indent(element);
filterByPredicateIfAny(); filterByPredicateIfAny();
updateControlButtons();
} }
public TreeModel getTreeModel() { public TreeModel getTreeModel() {
@ -140,6 +141,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree);
getModel().unindent(element); getModel().unindent(element);
filterByPredicateIfAny(); filterByPredicateIfAny();
updateControlButtons();
} }
public void up() { public void up() {
@ -153,6 +155,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree);
getModel().up(element); getModel().up(element);
filterByPredicateIfAny(); filterByPredicateIfAny();
updateControlButtons();
} }
public void down() { public void down() {
@ -165,6 +168,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree); viewStateSnapshot = TreeViewStateSnapshot.takeSnapshot(tree);
getModel().down(element); getModel().down(element);
filterByPredicateIfAny(); filterByPredicateIfAny();
updateControlButtons();
} }
public T getSelectedNode() { public T getSelectedNode() {
@ -350,6 +354,15 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
private List<Column> columns; private List<Column> columns;
private Button btnNewFromTemplate;
private Button downButton;
private Button upButton;
private Button leftButton;
private Button rightButton;
protected TreeViewStateSnapshot getSnapshotOfOpenedNodes() { protected TreeViewStateSnapshot getSnapshotOfOpenedNodes() {
return viewStateSnapshot; return viewStateSnapshot;
@ -357,6 +370,13 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
private void resetControlButtons() { private void resetControlButtons() {
btnNew.setDisabled(isNewButtonDisabled()); btnNew.setDisabled(isNewButtonDisabled());
btnNewFromTemplate.setDisabled(isNewButtonDisabled());
boolean disabled = readOnly || isPredicateApplied();
downButton.setDisabled(disabled);
upButton.setDisabled(disabled);
leftButton.setDisabled(disabled);
rightButton.setDisabled(disabled);
} }
protected abstract boolean isNewButtonDisabled(); protected abstract boolean isNewButtonDisabled();
@ -763,7 +783,7 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
SchedulingStateToggler schedulingStateToggler = new SchedulingStateToggler( SchedulingStateToggler schedulingStateToggler = new SchedulingStateToggler(
schedulingState); schedulingState);
schedulingStateToggler.setReadOnly(readOnly schedulingStateToggler.setReadOnly(readOnly
|| isUpdatedFromTimesheets(currentElement)); || currentElement.isUpdatedFromTimesheets());
final Treecell cell = addCell( final Treecell cell = addCell(
getDecorationFromState(getSchedulingStateFrom(currentElement)), getDecorationFromState(getSchedulingStateFrom(currentElement)),
schedulingStateToggler); schedulingStateToggler);
@ -1143,8 +1163,6 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
} }
protected abstract boolean isUpdatedFromTimesheets(T currentElement);
} }
public void setColumns(List<Column> columns) { public void setColumns(List<Column> columns) {
@ -1192,17 +1210,40 @@ public abstract class TreeController<T extends ITreeNode<T>> extends
/** /**
* Disable control buttons (new, up, down, indent, unindent, delete) * Disable control buttons (new, up, down, indent, unindent, delete)
*/ */
public void updateControlButtons(Event event) { public void updateControlButtons() {
updateControlButtons((Tree) event.getTarget()); T element = getSelectedNode();
} if (element == null) {
public void updateControlButtons(Tree tree) {
final Treeitem item = tree.getSelectedItem();
if (item == null) {
resetControlButtons(); resetControlButtons();
return; return;
} }
btnNew.setDisabled(false); Treeitem item = tree.getSelectedItem();
btnNew.setDisabled(isNewButtonDisabled()
|| element.isUpdatedFromTimesheets());
btnNewFromTemplate.setDisabled(isNewButtonDisabled()
|| element.isUpdatedFromTimesheets());
boolean disabled = readOnly || isPredicateApplied();
downButton.setDisabled(disabled || isLastItem(element));
upButton.setDisabled(disabled || isFirstItem(element));
disabled |= element.isUpdatedFromTimesheets();
leftButton.setDisabled(disabled
|| isFirstLevelElement(item)
|| element.getParent().isUpdatedFromTimesheets());
boolean previousSiblingIsUpdatedFromTimesheets = false;
try {
Treeitem previousItem = (Treeitem) item.getParent()
.getChildren().get(item.getIndex() - 1);
T previousSibling = type.cast(previousItem.getValue());
previousSiblingIsUpdatedFromTimesheets = previousSibling
.isUpdatedFromTimesheets();
} catch (IndexOutOfBoundsException e) {
// Do nothing
}
rightButton.setDisabled(disabled || isFirstItem(element)
|| previousSiblingIsUpdatedFromTimesheets);
} }
protected abstract boolean isPredicateApplied(); protected abstract boolean isPredicateApplied();

View file

@ -82,7 +82,7 @@
<vbox width="100%"> <vbox width="100%">
<tree id="tree" hflex="1" multiple="false" droppable="true" <tree id="tree" hflex="1" multiple="false" droppable="true"
onDrop="treeController.move(self, event.dragged)" onDrop="treeController.move(self, event.dragged)"
onSelect="treeController.updateControlButtons(event)" onSelect="treeController.updateControlButtons()"
mold="paging" pageSize="25" mold="paging" pageSize="25"
sclass="orderTree" sclass="orderTree"
zclass="z-dottree"> zclass="z-dottree">