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); }
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 }
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); }
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); }
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; } } } }
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); } } }
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); }
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); }
public void CloneLinkCharacter(CrowdMember crowdMember) { this.CrowdClipboard.CloneLinkToClipboard(crowdMember); NotifyOfPropertyChange(() => CanPasteCrowdMember); }
public void RemoveAllActions() { CrowdMember selectedMember = (CrowdMember)this.SelectedCharacterCrowdMember ?? (CrowdMember)this.SelectedCrowdMember; selectedMember.RemoveAllActions(); }
public DeleteCrowdMemberEvent(CrowdMember member) { this.DeletedMember = member; }
public RenameCrowdMemberEvent(CrowdMember member, object source) { this.RenamedMember = member; this.Source = source; }