コード例 #1
0
ファイル: Project.cs プロジェクト: Ontica/Empiria.Steps
        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));
            }
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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()}'.");
            }
        }