Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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();
             }
         }
     }
 }
Exemplo n.º 6
0
        /// <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;
                }
            }
        }
Exemplo n.º 7
0
 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);
                 }
             }
         }
     }
 }
Exemplo n.º 8
0
        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));
                }
            }
        }