private void SelectPrevious() { if (_characters.Any()) { CharacterListItemViewModel selected = _characters.FirstOrDefault(x => x.IsSelected); foreach (CharacterListItemViewModel character in _characters) { character.IsSelected = false; } if (selected == null) { _characters[_characters.Count - 1].IsSelected = true; _selectedCharacter = new CharacterViewModel(_characters[_characters.Count - 1].CharacterModel); } else { int index = Math.Max(_characters.IndexOf(selected) - 1, 0); _characters[index].IsSelected = true; _selectedCharacter = new CharacterViewModel(_characters[index].CharacterModel); } OnPropertyChanged(nameof(SelectedCharacter)); } }
private void Delete() { if (_selectedCharacter != null) { bool canDelete = true; foreach (EncounterModel encounter in _compendium.Encounters) { foreach (EncounterCharacterModel encounterCharacter in encounter.Creatures.Where(x => x is EncounterCharacterModel)) { if (encounterCharacter.CharacterModel != null && encounterCharacter.CharacterModel.Id == _selectedCharacter.CharacterModel.Id) { canDelete = false; break; } } if (!canDelete) { break; } } if (canDelete) { string message = String.Format("Are you sure you want to delete {0}?", _selectedCharacter.Name); bool?result = _dialogService.ShowConfirmationDialog("Delete Character", message, "Yes", "No", null); if (result == true) { _compendium.DeleteCharacter(_selectedCharacter.CharacterModel.Id); CharacterListItemViewModel listItem = _characters.FirstOrDefault(x => x.CharacterModel.Id == _selectedCharacter.CharacterModel.Id); if (listItem != null) { _characters.Remove(listItem); } _selectedCharacter = null; _compendium.SaveCharacters(); OnPropertyChanged(nameof(SelectedCharacter)); if (_characterEditViewModel != null) { CancelEditCharacter(); } } } else { _dialogService.ShowConfirmationDialog("Unable Delete Character", "Character is in use by an encounter.", "OK", null, null); } } }
private bool SaveEditCharacter() { bool saved = false; if (_characterEditViewModel.CharacterModel != null) { if (String.IsNullOrWhiteSpace(_characterEditViewModel.Name)) { _dialogService.ShowConfirmationDialog("Required Field", "Name is required.", "OK", null, null); } else { _characterEditViewModel.CharacterModel.Id = _selectedCharacter.CharacterModel.Id; _compendium.UpdateCharacter(_characterEditViewModel.CharacterModel); _selectedCharacter = new CharacterViewModel(_characterEditViewModel.CharacterModel); if (_characterEditViewModel.IsNew) { _selectedCharacter.SetupNewlyCreatedCharacter(); } CharacterListItemViewModel oldListItem = _characters.FirstOrDefault(x => x.CharacterModel.Id == _characterEditViewModel.CharacterModel.Id); if (oldListItem != null) { if (_characterSearchService.SearchInputApplies(_characterSearchInput, _selectedCharacter.CharacterModel)) { oldListItem.UpdateModel(_characterEditViewModel.CharacterModel); } else { _characters.Remove(oldListItem); } } _characterEditViewModel = null; _editHasUnsavedChanges = false; SortCharacters(); _compendium.SaveCharacters(); OnPropertyChanged(nameof(SelectedCharacter)); OnPropertyChanged(nameof(EditingCharacter)); OnPropertyChanged(nameof(IsEditingCharacter)); OnPropertyChanged(nameof(HasUnsavedChanges)); saved = true; } } return(saved); }
private void SelectCharacter(CharacterListItemViewModel characterItem) { bool selectCharacter = true; if (_characterEditViewModel != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedCharacter.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 (!SaveEditCharacter()) { selectCharacter = false; } } else if (result == false) { CancelEditCharacter(); } else { selectCharacter = false; } } else { CancelEditCharacter(); } } if (selectCharacter) { foreach (CharacterListItemViewModel item in _characters) { item.IsSelected = false; } characterItem.IsSelected = true; _selectedCharacter = new CharacterViewModel(characterItem.CharacterModel); _selectedCharacter.LevelUp += _selectedCharacter_LevelUp; OnPropertyChanged(nameof(SelectedCharacter)); } }
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(CharactersViewModel.SelectedCharacter)) { CharacterListItemViewModel selected = _viewModel.Characters.FirstOrDefault(x => x.IsSelected); if (selected != null) { if (_tree.ItemContainerGenerator.ContainerFromItem(selected) is TreeViewItem item) { item.BringIntoView(); } } } }
/// <summary> /// Searches, applying current sorting and filtering /// </summary> public void Search() { _characters.Clear(); foreach (CharacterModel characterModel in _characterSearchService.Search(_characterSearchInput)) { _characters.Add(new CharacterListItemViewModel(characterModel)); } if (_selectedCharacter != null) { CharacterListItemViewModel character = _characters.FirstOrDefault(x => x.CharacterModel.Id == _selectedCharacter.CharacterModel.Id); if (character != null) { character.IsSelected = true; } } }
private void SortCharacters() { if (_characters != null && _characters.Count > 0) { List <CharacterModel> characters = _characterSearchService.Sort(_characters.Select(x => x.CharacterModel), _characterSearchInput.SortOption.Key); for (int i = 0; i < characters.Count; ++i) { if (characters[i].Id != _characters[i].CharacterModel.Id) { CharacterListItemViewModel character = _characters.FirstOrDefault(x => x.CharacterModel.Id == characters[i].Id); if (character != null) { _characters.Move(_characters.IndexOf(character), i); } } } } }
private void Copy() { if (_selectedCharacter != null) { bool copyCharacter = true; if (_characterEditViewModel != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedCharacter.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 (!SaveEditCharacter()) { copyCharacter = false; } } else if (result == false) { CancelEditCharacter(); } else { copyCharacter = false; } } else { CancelEditCharacter(); } } if (copyCharacter) { CharacterModel characterModel = new CharacterModel(_selectedCharacter.CharacterModel); characterModel.Name += " (copy)"; characterModel.Id = Guid.NewGuid(); _compendium.AddCharacter(characterModel); if (_characterSearchService.SearchInputApplies(_characterSearchInput, characterModel)) { CharacterListItemViewModel listItem = new CharacterListItemViewModel(characterModel); _characters.Add(listItem); foreach (CharacterListItemViewModel item in _characters) { item.IsSelected = false; } listItem.IsSelected = true; } _selectedCharacter = new CharacterViewModel(characterModel); SortCharacters(); _compendium.SaveCharacters(); OnPropertyChanged(nameof(SelectedCharacter)); } } }