private void SelectPrevious()
        {
            if (_races.Any())
            {
                RaceListItemViewModel selected = _races.FirstOrDefault(x => x.IsSelected);

                foreach (RaceListItemViewModel race in _races)
                {
                    race.IsSelected = false;
                }

                if (selected == null)
                {
                    _races[_races.Count - 1].IsSelected = true;
                    _selectedRace = new RaceViewModel(_races[_races.Count - 1].RaceModel);
                }
                else
                {
                    int index = Math.Max(_races.IndexOf(selected) - 1, 0);
                    _races[index].IsSelected = true;
                    _selectedRace            = new RaceViewModel(_races[index].RaceModel);
                }

                OnPropertyChanged(nameof(SelectedRace));
            }
        }
示例#2
0
 private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 {
     if (e.PropertyName == nameof(RacesViewModel.SelectedRace))
     {
         RaceListItemViewModel selected = _viewModel.Races.FirstOrDefault(x => x.IsSelected);
         if (selected != null)
         {
             if (_tree.ItemContainerGenerator.ContainerFromItem(selected) is TreeViewItem item)
             {
                 item.BringIntoView();
             }
         }
     }
 }
        private void Delete()
        {
            if (_selectedRace != null)
            {
                bool canDelete = true;

                foreach (CharacterModel character in _compendium.Characters)
                {
                    if (character.Race != null && character.Race.Id == _selectedRace.RaceModel.Id)
                    {
                        canDelete = false;
                        break;
                    }
                }

                if (canDelete)
                {
                    string message = String.Format("Are you sure you want to delete {0}?", _selectedRace.Name);

                    bool?result = _dialogService.ShowConfirmationDialog("Delete Race", message, "Yes", "No", null);

                    if (result == true)
                    {
                        _compendium.DeleteRace(_selectedRace.RaceModel.Id);

                        RaceListItemViewModel listItem = _races.FirstOrDefault(x => x.RaceModel.Id == _selectedRace.RaceModel.Id);
                        if (listItem != null)
                        {
                            _races.Remove(listItem);
                        }

                        _selectedRace = null;

                        _compendium.SaveRaces();

                        OnPropertyChanged(nameof(SelectedRace));

                        if (_editRaceXML != null)
                        {
                            CancelEditRace();
                        }
                    }
                }
                else
                {
                    _dialogService.ShowConfirmationDialog("Unable Delete Race", "Race is in use by a character.", "OK", null, null);
                }
            }
        }
        private void SelectRace(RaceListItemViewModel race)
        {
            bool selectRace = true;

            if (_editRaceXML != null)
            {
                if (_editHasUnsavedChanges)
                {
                    string body = String.Format("{0} has unsaved changes.{1}What would you like to do?",
                                                _selectedRace.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 (!SaveEditRace())
                        {
                            selectRace = false;
                        }
                    }
                    else if (result == false)
                    {
                        CancelEditRace();
                    }
                    else
                    {
                        selectRace = false;
                    }
                }
                else
                {
                    CancelEditRace();
                }
            }

            if (selectRace)
            {
                foreach (RaceListItemViewModel item in _races)
                {
                    item.IsSelected = false;
                }
                race.IsSelected = true;

                _selectedRace = new RaceViewModel(race.RaceModel);
                OnPropertyChanged(nameof(SelectedRace));
            }
        }
 private void SortRaces()
 {
     if (_races != null && _races.Count > 0)
     {
         List <RaceModel> races = _raceSearchService.Sort(_races.Select(x => x.RaceModel), _raceSearchInput.SortOption.Key);
         for (int i = 0; i < races.Count; ++i)
         {
             if (races[i].Id != _races[i].RaceModel.Id)
             {
                 RaceListItemViewModel race = _races.FirstOrDefault(x => x.RaceModel.Id == races[i].Id);
                 if (race != null)
                 {
                     _races.Move(_races.IndexOf(race), i);
                 }
             }
         }
     }
 }
        /// <summary>
        /// Searches, applying current sorting and filtering
        /// </summary>
        public void Search()
        {
            _races.Clear();
            foreach (RaceModel raceModel in _raceSearchService.Search(_raceSearchInput))
            {
                _races.Add(new RaceListItemViewModel(raceModel, _stringService));
            }

            if (_selectedRace != null)
            {
                RaceListItemViewModel race = _races.FirstOrDefault(x => x.RaceModel.Id == _selectedRace.RaceModel.Id);
                if (race != null)
                {
                    race.IsSelected = true;
                }
            }

            OnPropertyChanged(nameof(SortAndFilterHeader));
        }
        private void Copy()
        {
            if (_selectedRace != null)
            {
                bool copyRace = true;

                if (_editRaceXML != null)
                {
                    if (_editHasUnsavedChanges)
                    {
                        string body = String.Format("{0} has unsaved changes.{1}What would you like to do?",
                                                    _selectedRace.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 (!SaveEditRace())
                            {
                                copyRace = false;
                            }
                        }
                        else if (result == false)
                        {
                            CancelEditRace();
                        }
                        else
                        {
                            copyRace = false;
                        }
                    }
                    else
                    {
                        CancelEditRace();
                    }
                }

                if (copyRace)
                {
                    RaceModel newRace = new RaceModel(_selectedRace.RaceModel);
                    newRace.Name += " (copy)";
                    newRace.Id    = Guid.NewGuid();
                    newRace.XML   = newRace.XML.Replace("<name>" + _selectedRace.RaceModel.Name + "</name>",
                                                        "<name>" + newRace.Name + "</name>");

                    _compendium.AddRace(newRace);

                    if (_raceSearchService.SearchInputApplies(_raceSearchInput, newRace))
                    {
                        RaceListItemViewModel listItem = new RaceListItemViewModel(newRace, _stringService);
                        _races.Add(listItem);
                        foreach (RaceListItemViewModel item in _races)
                        {
                            item.IsSelected = false;
                        }
                        listItem.IsSelected = true;
                    }

                    _selectedRace = new RaceViewModel(newRace);

                    SortRaces();

                    _compendium.SaveRaces();

                    OnPropertyChanged(nameof(SelectedRace));
                }
            }
        }
        private void Add()
        {
            bool addRace = true;

            if (_editRaceXML != null)
            {
                if (_editHasUnsavedChanges)
                {
                    string body = String.Format("{0} has unsaved changes.{1}What would you like to do?",
                                                _selectedRace.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 (!SaveEditRace())
                        {
                            addRace = false;
                        }
                    }
                    else if (result == false)
                    {
                        CancelEditRace();
                    }
                    else
                    {
                        addRace = false;
                    }
                }
                else
                {
                    CancelEditRace();
                }
            }

            if (addRace)
            {
                string xml = @"<name>New Race</name>
									<size></size>
									<speed></speed>
									<ability></ability>
									<spellAbility></spellAbility>
									<proficiency></proficiency>
									<trait>
										 <name></name>
										 <text></text>
									</trait>"                                    ;

                RaceModel raceModel = _xmlImporter.GetRace(xml);

                _compendium.AddRace(raceModel);

                if (_raceSearchService.SearchInputApplies(_raceSearchInput, raceModel))
                {
                    RaceListItemViewModel listItem = new RaceListItemViewModel(raceModel, _stringService);
                    _races.Add(listItem);
                    foreach (RaceListItemViewModel item in _races)
                    {
                        item.IsSelected = false;
                    }
                    listItem.IsSelected = true;
                }


                _selectedRace = new RaceViewModel(raceModel);

                _editRaceXML = raceModel.XML;

                SortRaces();

                _compendium.SaveRaces();

                OnPropertyChanged(nameof(EditingRaceXML));
                OnPropertyChanged(nameof(IsEditingRace));
                OnPropertyChanged(nameof(SelectedRace));
            }
        }
        private bool SaveEditRace()
        {
            bool saved = false;

            try
            {
                RaceModel model = _xmlImporter.GetRace(_editRaceXML);

                if (model != null)
                {
                    model.Id = _selectedRace.RaceModel.Id;
                    _compendium.UpdateRace(model);
                    _selectedRace = new RaceViewModel(model);

                    RaceListItemViewModel oldListItem = _races.FirstOrDefault(x => x.RaceModel.Id == model.Id);
                    if (oldListItem != null)
                    {
                        if (_raceSearchService.SearchInputApplies(_raceSearchInput, model))
                        {
                            oldListItem.UpdateModel(model);
                        }
                        else
                        {
                            _races.Remove(oldListItem);
                        }
                    }

                    _editRaceXML           = null;
                    _editHasUnsavedChanges = false;

                    SortRaces();

                    _compendium.SaveRaces();

                    OnPropertyChanged(nameof(SelectedRace));
                    OnPropertyChanged(nameof(EditingRaceXML));
                    OnPropertyChanged(nameof(IsEditingRace));
                    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);
        }