public ProjectItem MoveTo(ProjectItem item, TreeItemInsertionRule insertionRule, ProjectItem insertionPoint = null, int relativePosition = -1) { Assertion.Require(item, "item"); lock (__treeLock) { return(this.Items.MoveToInsertionPoint(item, insertionRule, insertionPoint, relativePosition)); } }
static public FixedList <ProjectItem> CreateActivitiesFromModel(Activity activityModel, Project project, DateTime eventDate, ProjectItem insertionPoint, TreeItemInsertionRule insertionRule) { Assertion.Require(activityModel, "activityModel"); Assertion.Require(project, "project"); Assertion.Require(insertionPoint, "insertionPoint"); WhatIfResult result = ModelingServices.WhatIfCreatedFromEvent(activityModel, project, eventDate); if (result.HasErrors) { throw result.GetException(); } ProjectItemData.ResetProcessID(); StoreChanges(result); ProjectItemData.ClearProcessID(); if (result.StateChanges.Count > 0) { if (!insertionPoint.IsEmptyInstance && insertionRule != TreeItemInsertionRule.AsTreeRootAtEnd) { project.MoveTo(result.StateChanges[0].ProjectItem, insertionRule, insertionPoint); } else if (insertionPoint.IsEmptyInstance && (insertionRule == TreeItemInsertionRule.AsTreeRootAtStart || insertionRule == TreeItemInsertionRule.AsTreeRootAtEnd)) { project.MoveTo(result.StateChanges[0].ProjectItem, insertionRule, insertionPoint); } } return(project.GetItems()); }
internal ProjectItem MoveToInsertionPoint(ProjectItem itemToMove, TreeItemInsertionRule insertionRule, ProjectItem insertionPoint = null, int relativePosition = -1) { switch (insertionRule) { case TreeItemInsertionRule.AsSiblingBeforeInsertionPoint: this.ChangeParentAndPosition(itemToMove, newParent: insertionPoint.Parent, newPosition: insertionPoint.Position); return(itemToMove); case TreeItemInsertionRule.AsSiblingAfterInsertionPoint: int branchLastItemPosition = GetBranchLastItem(insertionPoint).Position; this.ChangeParentAndPosition(itemToMove, newParent: insertionPoint.Parent, newPosition: branchLastItemPosition + 1); return(itemToMove); case TreeItemInsertionRule.AsChildAsFirstNode: this.ChangeParentAndPosition(itemToMove, newParent: insertionPoint, newPosition: insertionPoint.Position + 1); return(itemToMove); case TreeItemInsertionRule.AsChildAsLastNode: branchLastItemPosition = GetBranchLastItem(insertionPoint).Position; this.ChangeParentAndPosition(itemToMove, newParent: insertionPoint, newPosition: branchLastItemPosition + 1); return(itemToMove); case TreeItemInsertionRule.AsChildAtPosition: Assertion.Require(relativePosition > 0, "Relative position must be greater than zero."); this.ChangeParentAndPosition(itemToMove, newParent: insertionPoint, newPosition: insertionPoint.Position + 1 + relativePosition); return(itemToMove); case TreeItemInsertionRule.AsTreeRootAtStart: this.ChangePosition(itemToMove, 1); return(itemToMove); case TreeItemInsertionRule.AsTreeRootAtEnd: return(itemToMove); case TreeItemInsertionRule.AtRelativePosition: Assertion.Require(relativePosition > 0, "Relative position must be greater than zero."); int indexOfInsertionPoint = this.itemsList.IndexOf(insertionPoint); this.itemsList.Remove(itemToMove); itemToMove.SetPosition(indexOfInsertionPoint + relativePosition + 1); this.itemsList.Insert(indexOfInsertionPoint + relativePosition, itemToMove); EmpiriaLog.Trace($"Item {itemToMove.Name} inserted at position {indexOfInsertionPoint}/{relativePosition}: [{itemToMove.Position}] // {insertionPoint.Name}."); this.RefreshPositions(); return(itemToMove); default: throw Assertion.EnsureNoReachThisCode($"Unrecognized insertion rule '{insertionRule.ToString()}'."); } }