Exemple #1
0
        public void CutAndPaste_ToDifferentCrowdRemovesMembershipFromSourceCrowdANdAddsNewMembershipToDestination()
        {
            // arrange
            var   repo = TestObjectsFactory.RepositoryUnderTest;
            var   crowdClipboard = TestObjectsFactory.CrowdClipboardUnderTest;
            Crowd parent0, parent1;
            CharacterCrowdMember child0_0, child0_1, child0_2, child0_3;
            CharacterCrowdMember child1_0, child1_1, child1_2, child1_3;

            TestObjectsFactory.AddCrowdwMemberHierarchyWithTwoParentsANdFourChildrenEach(repo, out parent0, out parent1, out child0_0,
                                                                                         out child0_1, out child0_2, out child0_3, out child1_0, out child1_1, out child1_2, out child1_3);

            //act-_
            CrowdMember memberToMove = child0_1;
            CrowdMember destination  = child1_1;

            crowdClipboard.CutToClipboard(child0_0);
            crowdClipboard.PasteFromClipboard(parent1);

            //assert
            var oldMem = parent0.MemberShips.FirstOrDefault(m => m.Child == child0_0);
            var newMem = parent1.MemberShips.FirstOrDefault(m => m.Child == child0_0);

            Assert.IsNull(oldMem);
            Assert.IsNotNull(newMem);
        }
Exemple #2
0
        public void CopyndPaste_ToSameCrowdCreatesACloneAndNewMembershipAndUniqueName()
        {
            // arrange
            var   repo = TestObjectsFactory.RepositoryUnderTest;
            var   crowdClipboard = TestObjectsFactory.CrowdClipboardUnderTest;
            Crowd parent0, parent1;
            CharacterCrowdMember child0_0, child0_1, child0_2, child0_3;
            CharacterCrowdMember child1_0, child1_1, child1_2, child1_3;

            TestObjectsFactory.AddCrowdwMemberHierarchyWithTwoParentsANdFourChildrenEach(repo, out parent0, out parent1, out child0_0,
                                                                                         out child0_1, out child0_2, out child0_3, out child1_0, out child1_1, out child1_2, out child1_3);

            var parent0Count = parent0.Members.Count;
            var parent1Count = parent1.Members.Count;

            //act
            CrowdMember memberToMove = child0_1;
            CrowdMember destination  = child1_1;

            crowdClipboard.CopyToClipboard(child0_0);
            crowdClipboard.PasteFromClipboard(parent0);

            //assert
            //  Mock.Get<CharacterCrowdMember>(child0_0).Verify(c => c.Clone());
            Assert.AreEqual(parent0Count + 1, parent0.Members.Count);// a new member added
        }
Exemple #3
0
        public void PasteCrowdMember()
        {
            Clipboard.Clear();
            // Lock character crowd Tree from updating;
            this.LockTreeUpdate(true);
            if (this.CrowdClipboard.CurrentClipboardAction == ClipboardAction.NumberedFlatenCopy)
            {
                OnFlattenNumberEntryFinished(this, null);
            }
            var         clipboardObjName = (this.CrowdClipboard.GetClipboardCrowdMember()).Name;
            CrowdMember pastedMember     = this.CrowdClipboard.PasteFromClipboard(this.SelectedCrowdMember);

            if (pastedMember.Name != clipboardObjName) // cloned
            {
                OnEditNeeded(pastedMember, null);
            }
            if (SelectedCrowdMember != null)
            {
                OnExpansionUpdateNeeded(this.SelectedCrowdMember, new CustomEventArgs <ExpansionUpdateEvent> {
                    Value = ExpansionUpdateEvent.Paste
                });
            }
            // UnLock character crowd Tree from updating
            this.LockTreeUpdate(false);
        }
Exemple #4
0
        public void RenameCrowdMember(string updatedName)
        {
            CrowdMember renamedMember = null;

            if (this.OriginalName == updatedName)
            {
                OriginalName = null;
                return;
            }
            if (this.IsUpdatingCharacter)
            {
                if (SelectedCharacterCrowdMember == null)
                {
                    return;
                }
                SelectedCharacterCrowdMember.Rename(updatedName);
                renamedMember = SelectedCharacterCrowdMember;
                this.SelectedCrowdMember.SortMembers();
                this.OriginalName = null;
            }
            else
            {
                if (SelectedCrowdMember == null)
                {
                    return;
                }
                SelectedCrowdMember.Rename(updatedName);
                renamedMember = SelectedCrowdMember;
                this.CrowdRepository.SortCrowds();
                this.OriginalName = null;
            }
            this.EventAggregator.PublishOnUIThread(new RenameCrowdMemberEvent(renamedMember, this));
        }
        private TreeViewItem FindTreeViewItemUnderTreeViewItemByModelName(TreeViewItem tvi, string modelName)
        {
            TreeViewItem treeViewItemRet = null;

            if (tvi != null)
            {
                CrowdMember model = tvi.DataContext as CrowdMember;
                if (model.Name == modelName)
                {
                    return(tvi);
                }
                else if (tvi.Items != null)
                {
                    for (int i = 0; i < tvi.Items.Count; i++)
                    {
                        TreeViewItem item         = tvi.ItemContainerGenerator.ContainerFromItem(tvi.Items[i]) as TreeViewItem;
                        var          treeViewItem = FindTreeViewItemUnderTreeViewItemByModelName(item, modelName);
                        if (treeViewItem != null)
                        {
                            treeViewItemRet = treeViewItem;
                            break;
                        }
                    }
                }
            }
            return(treeViewItemRet);
        }
Exemple #6
0
 public void Initialize()
 {
     //Arrange
     testCrowdMember                = new Mock <CrowdMember>().Object;
     keyBindsGenerator              = new Mock <KeyBindsGenerator>().Object;
     testCrowdMember.Name           = "Statesman";
     testCrowdMember.ActiveIdentity = new Identity("model_Statesman", IdentityType.Model);
 }
        private void viewModel_ExpansionUpdateNeeded(object sender, CustomEventArgs <ExpansionUpdateEvent> e)
        {
            Crowd                crowdModel  = sender as Crowd;
            DependencyObject     dObject     = null;
            ExpansionUpdateEvent updateEvent = e.Value;

            if (updateEvent == ExpansionUpdateEvent.Filter)
            {
                ExpandMatchedNode(sender);
            }
            else if (updateEvent == ExpansionUpdateEvent.DragDrop)
            {
                if (this.currentDropItemNode != null)
                {
                    this.currentDropItemNode.IsExpanded = true;
                }
            }
            else
            {
                if (this.selectedCrowdRoot != null && crowdModel != null)
                {
                    TreeViewItem item = treeViewCrowd.ItemContainerGenerator.ContainerFromItem(this.selectedCrowdRoot) as TreeViewItem;
                    dObject = FindTreeViewItemUnderTreeViewItemByModelName(item, crowdModel.Name);
                    if (dObject == null)
                    {
                        dObject = treeViewCrowd.GetItemFromSelectedObject(crowdModel);
                    }
                }
                else
                {
                    dObject = treeViewCrowd.GetItemFromSelectedObject(crowdModel);
                }
                TreeViewItem tvi = dObject as TreeViewItem;
                if (tvi != null)
                {
                    CrowdMember model = tvi.DataContext as CrowdMember;
                    if (tvi.Items != null && tvi.Items.Count > 0)
                    {
                        if (updateEvent != ExpansionUpdateEvent.Delete)
                        {
                            tvi.IsExpanded = true;
                        }
                        else
                        {
                            UpdateExpansions(tvi);
                        }
                    }
                    else
                    {
                        tvi.IsExpanded = false;
                    }
                }
            }
        }
Exemple #8
0
        public void DeleteCrowdMember()
        {
            // Lock character crowd Tree from updating;
            this.LockTreeUpdate(true);
            CrowdMember deletedMember = null;

            // Determine if Character or Crowd is to be deleted
            if (SelectedCharacterCrowdMember != null) // Delete Character
            {
                if (SelectedCharacterCrowdMember.RosterParent != null && SelectedCharacterCrowdMember.RosterParent.Name == SelectedCrowdMember.Name)
                {
                    deletedMember = SelectedCharacterCrowdMember;
                }
                // Delete the Character from all occurances of this crowd
                SelectedCrowdMember.RemoveMember(SelectedCharacterCrowdMember);
            }
            else // Delete Crowd
            {
                //If it is a nested crowd, just delete it from the parent
                if (this.SelectedCrowdParent != null)
                {
                    SelectedCrowdParent.RemoveMember(SelectedCrowdMember);
                }
                else // Delete it from the repo altogether
                {
                    this.CrowdRepository.RemoveCrowd(SelectedCrowdMember);
                    deletedMember = SelectedCrowdMember;
                }
            }

            // UnLock character crowd Tree from updating;
            this.LockTreeUpdate(false);
            // Update character crowd if necessary
            if (this.lastCharacterCrowdStateToUpdate != null)
            {
                this.SetSelectedCrowdMember(lastCharacterCrowdStateToUpdate);
                this.lastCharacterCrowdStateToUpdate = null;
            }
            // Fire event so that roster and char editor can update themselves
            if (deletedMember != null)
            {
                this.EventAggregator.PublishOnUIThread(new DeleteCrowdMemberEvent(deletedMember));
            }
            if (this.SelectedCrowdMember != null)
            {
                OnExpansionUpdateNeeded(this.SelectedCrowdMember, new CustomEventArgs <ExpansionUpdateEvent> {
                    Value = ExpansionUpdateEvent.Delete
                });
            }
        }
        private TreeViewItem FindNodeThatRepresentsCrowdMember(TreeViewItem tviParent, CrowdMember modelToSelect)
        {
            TreeViewItem item = null;

            if (tviParent != null)
            {
                CrowdMember model = tviParent.DataContext as CrowdMember;
                if (tviParent.Items != null)
                {
                    tviParent.IsExpanded = true;
                    tviParent.UpdateLayout();
                    for (int i = 0; i < tviParent.Items.Count; i++)
                    {
                        item = tviParent.ItemContainerGenerator.ContainerFromItem(tviParent.Items[i]) as TreeViewItem;
                        if (item != null)
                        {
                            model = item.DataContext as CrowdMember;
                            if (model.Name == modelToSelect.Name)
                            {
                                item.IsSelected = true;
                                item.UpdateLayout();
                                if (model is Crowd)
                                {
                                    this.viewModel.SelectedCrowdMember          = model as Crowd;
                                    this.viewModel.SelectedCrowdParent          = tviParent.DataContext as Crowd;
                                    this.viewModel.SelectedCharacterCrowdMember = null;
                                }
                                else
                                {
                                    this.viewModel.SelectedCharacterCrowdMember = model as CharacterCrowdMemberImpl;
                                    this.viewModel.SelectedCrowdMember          = tviParent.DataContext as Crowd;
                                }
                                if (this.selectedCrowdRoot == null)
                                {
                                    this.selectedCrowdRoot = tviParent.DataContext as CrowdImpl;
                                }
                                break;
                            }
                        }
                    }
                }
            }
            return(item);
        }
        private void viewModel_EditNeeded(object sender, CustomEventArgs <string> e)
        {
            CrowdMember modelToSelect = sender as CrowdMember;

            if (sender == null) // need to unselect
            {
                UnselectSelectedNodeInTreeview();
            }
            else
            {
                bool    itemFound = false;
                TextBox txtBox    = null;
                treeViewCrowd.UpdateLayout();

                if (sender is Crowd)
                {
                    TreeViewItem item = FindCrowdNodeInTree(sender as Crowd);
                    if (item != null)
                    {
                        itemFound = true;
                        txtBox    = FindTextBoxInTemplate(item);
                    }
                }

                if (!itemFound)
                {
                    bool         isDragDropInProgress = e != null && e.Value == "EditAfterDragDrop" && this.currentDropItemNodeParent != null;
                    TreeViewItem tvi  = GetParentNodeForItemToSelect(isDragDropInProgress);
                    TreeViewItem item = FindNodeThatRepresentsCrowdMember(tvi, modelToSelect);
                    if (item != null)
                    {
                        itemFound = true;
                        txtBox    = FindTextBoxInTemplate(item);
                    }
                }
                if (txtBox != null)
                {
                    this.viewModel.EnterEditMode(txtBox);
                }
            }
        }
Exemple #11
0
        public static object GetCurrentSelectedCrowdInCrowdCollectionInTreeView(Object tv, out CrowdMember crowdMember)
        {
            Crowd containingCrowdModel = null;

            crowdMember = null;
            TreeView treeView = tv as TreeView;

            if (treeView != null && treeView.SelectedItem != null)
            {
                if (treeView.SelectedItem is Crowd)
                {
                    containingCrowdModel = treeView.SelectedItem as Crowd;
                }
                else
                {
                    DependencyObject dObject = treeView.GetItemFromSelectedObject(treeView.SelectedItem);
                    TreeViewItem     tvi     = dObject as TreeViewItem; // got the selected treeviewitem
                    crowdMember = tvi.DataContext as CrowdMember;
                    dObject     = VisualTreeHelper.GetParent(tvi);      // got the immediate parent
                    tvi         = dObject as TreeViewItem;              // now get first treeview item parent
                    while (tvi == null)
                    {
                        dObject = VisualTreeHelper.GetParent(dObject);
                        tvi     = dObject as TreeViewItem;
                    }
                    containingCrowdModel = tvi.DataContext as Crowd;
                }
            }

            return(containingCrowdModel);
        }
Exemple #12
0
 public void DragDropSelectedCrowdMember(Crowd targetCrowd)
 {
     this.LockTreeUpdate(true);
     if (this.SelectedCharacterCrowdMember != null) // dragged a Character
     {
         // avoid linking or cloning of default and combat effect crowds
         if (this.SelectedCharacterCrowdMember.Name != DEFAULT_CHARACTER_NAME && this.SelectedCharacterCrowdMember.Name != COMBAT_EFFECTS_CHARACTER_NAME)
         {
             if (this.SelectedCrowdMember.Name == targetCrowd.Name)
             {
                 // It is in the same crowd, so clone
                 this.CrowdClipboard.CopyToClipboard(this.SelectedCharacterCrowdMember);
                 CrowdMember pastedMember = this.CrowdClipboard.PasteFromClipboard(targetCrowd);
                 OnEditNeeded(pastedMember, new CustomEventArgs <string>()
                 {
                     Value = "EditAfterDragDrop"
                 });
             }
             else
             {
                 // different crowd, so link
                 if (!targetCrowd.ContainsMember(SelectedCharacterCrowdMember))
                 {
                     this.CrowdClipboard.LinkToClipboard(this.SelectedCharacterCrowdMember);
                     this.CrowdClipboard.PasteFromClipboard(targetCrowd);
                 }
             }
         }
     }
     else // dragged a Crowd
     {
         // link/clone the crowd but don't create circular reference
         if (this.SelectedCrowdMember != null && targetCrowd.Name != this.SelectedCrowdMember.Name)
         {
             bool canLinkCrowd = false;
             if (SelectedCrowdMember.Members != null && !targetCrowd.IsCrowdNestedWithinContainerCrowd(SelectedCrowdMember))
             {
                 canLinkCrowd = true;
             }
             else
             {
                 canLinkCrowd = true;
             }
             if (canLinkCrowd)
             {
                 if (!targetCrowd.ContainsMember(this.SelectedCrowdMember))
                 {
                     // Link
                     this.CrowdClipboard.LinkToClipboard(this.SelectedCrowdMember);
                     this.CrowdClipboard.PasteFromClipboard(targetCrowd);
                 }
                 else
                 {
                     // Clone
                     this.CrowdClipboard.CopyToClipboard(this.SelectedCrowdMember);
                     CrowdMember pastedMember = this.CrowdClipboard.PasteFromClipboard(targetCrowd);
                     OnEditNeeded(pastedMember, new CustomEventArgs <string>()
                     {
                         Value = "EditAfterDragDrop"
                     });
                 }
             }
         }
     }
     if (targetCrowd != null)
     {
         OnExpansionUpdateNeeded(targetCrowd, new CustomEventArgs <ExpansionUpdateEvent> {
             Value = ExpansionUpdateEvent.DragDrop
         });
     }
     this.LockTreeUpdate(false);
 }
Exemple #13
0
 public void CloneLinkCharacter(CrowdMember crowdMember)
 {
     this.CrowdClipboard.CloneLinkToClipboard(crowdMember);
     NotifyOfPropertyChange(() => CanPasteCrowdMember);
 }
Exemple #14
0
        public void RemoveAllActions()
        {
            CrowdMember selectedMember = (CrowdMember)this.SelectedCharacterCrowdMember ?? (CrowdMember)this.SelectedCrowdMember;

            selectedMember.RemoveAllActions();
        }
Exemple #15
0
 public DeleteCrowdMemberEvent(CrowdMember member)
 {
     this.DeletedMember = member;
 }
Exemple #16
0
 public RenameCrowdMemberEvent(CrowdMember member, object source)
 {
     this.RenamedMember = member;
     this.Source        = source;
 }