private void SelectPrevious() { if (_monsters.Any()) { MonsterListItemViewModel selected = _monsters.FirstOrDefault(x => x.IsSelected); foreach (MonsterListItemViewModel monster in _monsters) { monster.IsSelected = false; } if (selected == null) { _monsters[_monsters.Count - 1].IsSelected = true; _selectedMonster = new MonsterViewModel(_monsters[_monsters.Count - 1].MonsterModel); } else { int index = Math.Max(_monsters.IndexOf(selected) - 1, 0); _monsters[index].IsSelected = true; _selectedMonster = new MonsterViewModel(_monsters[index].MonsterModel); } OnPropertyChanged(nameof(SelectedMonster)); } }
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(MonstersViewModel.SelectedMonster)) { MonsterListItemViewModel selected = _viewModel.Monsters.FirstOrDefault(x => x.IsSelected); if (selected != null) { if (_tree.ItemContainerGenerator.ContainerFromItem(selected) is TreeViewItem item) { item.BringIntoView(); } } } }
private void SelectMonster(MonsterListItemViewModel monster) { bool selectMonster = true; if (_editMonsterXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedMonster.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditMonster()) { selectMonster = false; } } else if (result == false) { CancelEditMonster(); } else { selectMonster = false; } } else { CancelEditMonster(); } } if (selectMonster) { foreach (MonsterListItemViewModel item in _monsters) { item.IsSelected = false; } monster.IsSelected = true; _selectedMonster = new MonsterViewModel(monster.MonsterModel); OnPropertyChanged(nameof(SelectedMonster)); } }
private void MonsterListItemViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(MonsterListItemViewModel.IsSelected)) { MonsterListItemViewModel monsterListItemViewModel = sender as MonsterListItemViewModel; if (monsterListItemViewModel.IsSelected) { if (!_selectedMonsters.Any(x => x.Id == monsterListItemViewModel.MonsterModel.Id)) { _selectedMonsters.Add(monsterListItemViewModel.MonsterModel); } } else { _selectedMonsters.RemoveAll(x => x.Id == monsterListItemViewModel.MonsterModel.Id); } } }
private void SortMonsters() { if (_monsters != null && _monsters.Count > 0) { List <MonsterModel> monsters = _monsterSearchService.Sort(_monsters.Select(x => x.MonsterModel), _monsterSearchInput.SortOption.Key); for (int i = 0; i < monsters.Count; ++i) { if (monsters[i].Id != _monsters[i].MonsterModel.Id) { MonsterListItemViewModel monster = _monsters.FirstOrDefault(x => x.MonsterModel.Id == monsters[i].Id); if (monster != null) { _monsters.Move(_monsters.IndexOf(monster), i); } } } } }
/// <summary> /// Searches, applying current sorting and filtering /// </summary> public void Search() { _monsters.Clear(); foreach (MonsterModel monsterModel in _monsterSearchService.Search(_monsterSearchInput)) { _monsters.Add(new MonsterListItemViewModel(monsterModel, _stringService)); } if (_selectedMonster != null) { MonsterListItemViewModel monster = _monsters.FirstOrDefault(x => x.MonsterModel.Id == _selectedMonster.MonsterModel.Id); if (monster != null) { monster.IsSelected = true; } } OnPropertyChanged(nameof(SortAndFilterHeader)); }
private void SelectMonster(MonsterListItemViewModel monster) { _dialogService.ShowDetailsDialog(new MonsterViewModel(monster.MonsterModel)); }
private void Delete() { if (_selectedMonster != null) { bool canDelete = true; foreach (CharacterModel character in _compendium.Characters) { foreach (CompanionModel companion in character.Companions) { if (companion.MonsterModel != null && companion.MonsterModel.Id == _selectedMonster.MonsterModel.Id) { canDelete = false; break; } } if (!canDelete) { break; } } if (canDelete) { foreach (EncounterModel encounter in _compendium.Encounters) { foreach (EncounterMonsterModel encounterMonster in encounter.Creatures.Where(x => x is EncounterMonsterModel)) { if (encounterMonster.MonsterModel != null && encounterMonster.MonsterModel.Id == _selectedMonster.MonsterModel.Id) { canDelete = false; break; } } if (!canDelete) { break; } } } if (canDelete) { string message = String.Format("Are you sure you want to delete {0}?", _selectedMonster.Name); bool?result = _dialogService.ShowConfirmationDialog("Delete Monster", message, "Yes", "No", null); if (result == true) { _compendium.DeleteMonster(_selectedMonster.MonsterModel.Id); MonsterListItemViewModel listItem = _monsters.FirstOrDefault(x => x.MonsterModel.Id == _selectedMonster.MonsterModel.Id); if (listItem != null) { _monsters.Remove(listItem); } _selectedMonster = null; _compendium.SaveMonsters(); OnPropertyChanged(nameof(SelectedMonster)); if (_editMonsterXML != null) { CancelEditMonster(); } } } else { _dialogService.ShowConfirmationDialog("Unable Delete Monster", "Monster is in use by a character or encounter.", "OK", null, null); } } }
private void Copy() { if (_selectedMonster != null) { bool copyMonster = true; if (_editMonsterXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedMonster.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditMonster()) { copyMonster = false; } } else if (result == false) { CancelEditMonster(); } else { copyMonster = false; } } else { CancelEditMonster(); } } if (copyMonster) { MonsterModel newMonster = new MonsterModel(_selectedMonster.MonsterModel); newMonster.Name += " (copy)"; newMonster.Id = Guid.NewGuid(); newMonster.XML = newMonster.XML.Replace("<name>" + _selectedMonster.MonsterModel.Name + "</name>", "<name>" + newMonster.Name + "</name>"); _compendium.AddMonster(newMonster); if (_monsterSearchService.SearchInputApplies(_monsterSearchInput, newMonster)) { MonsterListItemViewModel listItem = new MonsterListItemViewModel(newMonster, _stringService); _monsters.Add(listItem); foreach (MonsterListItemViewModel item in _monsters) { item.IsSelected = false; } listItem.IsSelected = true; } _selectedMonster = new MonsterViewModel(newMonster); SortMonsters(); _compendium.SaveMonsters(); OnPropertyChanged(nameof(SelectedMonster)); } } }
private void Add() { bool addMonster = true; if (_editMonsterXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedMonster.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditMonster()) { addMonster = false; } } else if (result == false) { CancelEditMonster(); } else { addMonster = false; } } else { CancelEditMonster(); } } if (addMonster) { string xml = @"<name>New Monster</name> <size></size> <type></type> <alignment></alignment> <ac></ac> <hp></hp> <speed></speed> <str></str> <dex></dex> <con></con> <int></int> <wis></wis> <cha></cha> <save></save> <skill></skill> <resist></resist> <vulnerable></vulnerable> <immune></immune> <conditionImmune></conditionImmune> <senses></senses> <passive></passive> <languages></languages> <cr></cr> <trait> <name></name> <text></text> </trait> <action> <name></name> <text></text> <attack></attack> </action> <legendary> <name></name> <text></text> </legendary> <spells></spells> <slots></slots> <environment></environment>" ; MonsterModel monsterModel = _xmlImporter.GetMonster(xml); _compendium.AddMonster(monsterModel); if (_monsterSearchService.SearchInputApplies(_monsterSearchInput, monsterModel)) { MonsterListItemViewModel listItem = new MonsterListItemViewModel(monsterModel, _stringService); _monsters.Add(listItem); foreach (MonsterListItemViewModel item in _monsters) { item.IsSelected = false; } listItem.IsSelected = true; } _selectedMonster = new MonsterViewModel(monsterModel); _editMonsterXML = monsterModel.XML; SortMonsters(); _compendium.SaveMonsters(); OnPropertyChanged(nameof(EditingMonsterXML)); OnPropertyChanged(nameof(IsEditingMonster)); OnPropertyChanged(nameof(SelectedMonster)); } }
private bool SaveEditMonster() { bool saved = false; try { MonsterModel model = _xmlImporter.GetMonster(_editMonsterXML); if (model != null) { model.Id = _selectedMonster.MonsterModel.Id; _compendium.UpdateMonster(model); _selectedMonster = new MonsterViewModel(model); MonsterListItemViewModel oldListItem = _monsters.FirstOrDefault(x => x.MonsterModel.Id == model.Id); if (oldListItem != null) { if (_monsterSearchService.SearchInputApplies(_monsterSearchInput, model)) { oldListItem.UpdateModel(model); } else { _monsters.Remove(oldListItem); } } _editMonsterXML = null; _editHasUnsavedChanges = false; SortMonsters(); _compendium.SaveMonsters(); OnPropertyChanged(nameof(SelectedMonster)); OnPropertyChanged(nameof(EditingMonsterXML)); OnPropertyChanged(nameof(IsEditingMonster)); OnPropertyChanged(nameof(HasUnsavedChanges)); saved = true; } else { string message = String.Format("Something went wrong...{0}{1}{2}{3}", Environment.NewLine + Environment.NewLine, "The following are required:", Environment.NewLine, "-name"); _dialogService.ShowConfirmationDialog("Unable To Save", message, "OK", null, null); } } catch (Exception ex) { string message = String.Format("Something went wrong...{0}{1}", Environment.NewLine + Environment.NewLine, ex.Message); _dialogService.ShowConfirmationDialog("Unable To Save", message, "OK", null, null); } return(saved); }