/// <summary> /// Sets the filter to the given new value. /// </summary> /// <param name="value">New filter.</param> public void SetFilter(KanjiFilter value) { _filter = value; // Update properties. Radicals.SelectedItems.Clear(); foreach (FilteringRadical radical in Radicals) { if (_filter.Radicals.Contains(radical)) { radical.IsSelected = true; Radicals.SelectedItems.Add(radical); } else { radical.IsSelected = false; } } RaisePropertyChanged("TextFilter"); RaisePropertyChanged("MainFilter"); RaisePropertyChanged("MainFilterMode"); ComputeRadicalAvailability(); }
/// <summary> /// Navigates to the kanji referred by the given character. /// Filters using the referred vocab kanji writing string. /// Writes a navigation history entry to trace back to the /// navigation state active before the operation. /// </summary> /// <param name="character"> /// Character driving the navigation.</param> public void Navigate(KanjiWritingCharacter character) { if (KanjiDetailsVm != null) { // Temporarily unsubscribe the event. KanjiDetailsVm.KanjiNavigated -= OnKanjiNavigated; } // Add the current state to the navigation history. PushNavigationHistoryEntry(); // Create a new filter matching the vocab word selected. _kanjiFilter = new KanjiFilter() { TextFilter = character.OriginalVocab.KanjiWriting, // Ignore the levels because not only are they irrelevant, // they might not even be the same for the kanji as for the vocab. JlptLevel = Levels.IgnoreJlptLevel, WkLevel = Levels.IgnoreWkLevel }; // Apply the filter KanjiFilterVm.SetFilter(_kanjiFilter); KanjiListVm.Navigate(_kanjiFilter, character.Kanji); // Create a new KanjiDetailsVm. // Do not use the SetKanjiDetailsVm method as to not dispose // the previous value. KanjiDetailsVm = new KanjiDetailsViewModel(new ExtendedKanji(character.Kanji)); // Re-subscribe the event. KanjiDetailsVm.KanjiNavigated += OnKanjiNavigated; }
public KanjiListViewModel(KanjiFilter filter) : base(filter) { KanjiSelectionCommand = new RelayCommand <ExtendedKanji>(OnKanjiSelected); _titleConverter = new Converters.KanjiToStringConverter(); _ordinalConverter = new Converters.IntegerToOrdinalStringConverter(); }
/// <summary> /// Changes the filter and selects the given result from the new results /// list, if available. /// </summary> /// <param name="newFilter">New filter value.</param> /// <param name="newSelection">New selection.</param> public void Navigate(KanjiFilter newFilter, KanjiEntity newSelection) { SelectedIndex = -1; SelectedKanji = null; SetFilter(newFilter); _navigationSelection = newSelection; }
/// <summary> /// Command callback. /// Navigates back in the navigation history. /// </summary> private void OnNavigateBack() { try { KanjiNavigationEntry entry = _navigationHistory.Pop(); RaisePropertyChanged("CanNavigateBack"); // Apply the filter. _kanjiFilter = entry.KanjiFilter; KanjiFilterVm.SetFilter(_kanjiFilter); if (_kanjiDetailsVm != null) { KanjiListVm.Navigate(_kanjiFilter, _kanjiDetailsVm.KanjiEntity.DbKanji); } else { KanjiListVm.SetFilter(_kanjiFilter); } // Reset the kanji details viewmodel. SetKanjiDetailsVm(entry.KanjiDetailsVm); } catch (InvalidOperationException) { // The command was fired several times in a // row and the navigation history was empty. // // No problem, just ignore the exception. } }
/// <summary> /// Sets the filter to the given new value. /// </summary> /// <param name="value">New filter.</param> public void SetFilter(KanjiFilter value) { _filter = value; // Update properties. Radicals.SelectedItems.Clear(); foreach (FilteringRadical radical in Radicals) { if (_filter.Radicals.Contains(radical)) { radical.IsSelected = true; Radicals.SelectedItems.Add(radical); } else { radical.IsSelected = false; } } RaisePropertyChanged("TextFilter"); RaisePropertyChanged("MainFilter"); RaisePropertyChanged("MainFilterMode"); RaisePropertyChanged("JlptLevel"); RaisePropertyChanged("WkLevel"); ComputeRadicalAvailability(); }
public RadicalEntity[] GetAvailableRadicals(KanjiFilter filter) { string anyReadingFilter = filter.MainFilterMode == KanjiFilterModeEnum.AnyReading ? filter.MainFilter : string.Empty; string kunYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.KunYomi ? filter.MainFilter : string.Empty; string onYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.OnYomi ? filter.MainFilter : string.Empty; string nanoriFilter = filter.MainFilterMode == KanjiFilterModeEnum.Nanori ? filter.MainFilter : string.Empty; string meaningFilter = filter.MainFilterMode == KanjiFilterModeEnum.Meaning ? filter.MainFilter : string.Empty; RadicalGroup[] radicalGroups = filter.Radicals.SelectMany(r => r.Reference.RadicalGroups).ToArray(); return _radicalDao.GetAvailableRadicals(radicalGroups, filter.TextFilter, meaningFilter, anyReadingFilter, onYomiFilter, kunYomiFilter, nanoriFilter) .ToArray(); }
/// <summary> /// Sets the kanji filter to the given value. /// </summary> /// <param name="value">Filter value.</param> public void SetFilter(KanjiFilter value) { _filter = value; _itemList.SetFilter(value); ReapplyFilter(); foreach (ExtendedKanji item in _loadedItems) { if (_navigationSelection != null && item.DbKanji.ID == _navigationSelection.ID) { SelectedKanji = item; SelectedIndex = _loadedItems.IndexOf(item); //SelectedIndex = _loadedItemsCount - 1; _navigationSelection = null; } } }
/// <summary> /// Returns the item count. /// </summary> protected override int GetItemCount() { KanjiFilter filter = (KanjiFilter)_currentFilter; string anyReadingFilter = filter.MainFilterMode == KanjiFilterModeEnum.AnyReading ? filter.MainFilter : string.Empty; string kunYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.KunYomi ? filter.MainFilter : string.Empty; string onYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.OnYomi ? filter.MainFilter : string.Empty; string nanoriFilter = filter.MainFilterMode == KanjiFilterModeEnum.Nanori ? filter.MainFilter : string.Empty; string meaningFilter = filter.MainFilterMode == KanjiFilterModeEnum.Meaning ? filter.MainFilter : string.Empty; RadicalGroup[] radicalGroups = filter.Radicals.SelectMany(r => r.Reference.RadicalGroups).ToArray(); return((int)_kanjiDao.GetFilteredKanjiCount(radicalGroups, filter.TextFilter, meaningFilter, anyReadingFilter, onYomiFilter, kunYomiFilter, nanoriFilter, filter.JlptLevel, filter.WkLevel)); }
public KanjiFilterViewModel(KanjiFilter filter) { _filter = filter; _comparer = new RadicalComparer(); _comparer.SortMode = Kanji.Interface.Properties.Settings.Default.RadicalSortMode; _comparer.SortByRelevance = false; RadicalSortMode = Kanji.Interface.Properties.Settings.Default.RadicalSortMode; _radicalBusiness = new RadicalBusiness(); MainFilterMode = KanjiFilterModeEnum.Meaning; JlptLevel = Levels.IgnoreJlptLevel; WkLevel = Levels.IgnoreWkLevel; FilterModeChangedCommand = new RelayCommand(OnFilterModeChanged); SendMainFilterCommand = new RelayCommand(OnSendMainFilter); SendRadicalFilterCommand = new RelayCommand(OnSendRadicalFilter); SetRadicalSortModeCommand = new RelayCommand <RadicalSortModeEnum>(OnSetRadicalSortMode); RadicalStore.Instance.IssueWhenLoaded(OnRadicalsLoaded); }
public KanjiViewModel() : base(NavigationPageEnum.Kanji) { NavigationActor.Instance.KanjiVm = this; _kanjiFilter = new KanjiFilter(); KanjiFilterVm = new KanjiFilterViewModel(_kanjiFilter); KanjiListVm = new KanjiListViewModel(_kanjiFilter); KanjiFilterVm.FilterChanged += OnFilterChanged; KanjiListVm.KanjiSelected += OnKanjiSelected; ClearSelectedKanjiCommand = new RelayCommand(OnClearSelectedKanji); ClearFilterCommand = new RelayCommand(OnClearFilter); NavigateBackCommand = new RelayCommand(OnNavigateBack); _navigationHistory = new FixedSizeStack <KanjiNavigationEntry>( MaxNavigationHistorySize); }
public RadicalEntity[] GetAvailableRadicals(KanjiFilter filter) { string anyReadingFilter = filter.MainFilterMode == KanjiFilterModeEnum.AnyReading ? filter.MainFilter : string.Empty; string kunYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.KunYomi ? filter.MainFilter : string.Empty; string onYomiFilter = filter.MainFilterMode == KanjiFilterModeEnum.OnYomi ? filter.MainFilter : string.Empty; string nanoriFilter = filter.MainFilterMode == KanjiFilterModeEnum.Nanori ? filter.MainFilter : string.Empty; string meaningFilter = filter.MainFilterMode == KanjiFilterModeEnum.Meaning ? filter.MainFilter : string.Empty; RadicalGroup[] radicalGroups = filter.Radicals.SelectMany(r => r.Reference.RadicalGroups).ToArray(); return(_radicalDao.GetAvailableRadicals(radicalGroups, filter.TextFilter, meaningFilter, anyReadingFilter, onYomiFilter, kunYomiFilter, nanoriFilter, filter.JlptLevel, filter.WkLevel) .ToArray()); }
public KanjiFilterViewModel(KanjiFilter filter) { _filter = filter; _comparer = new RadicalComparer(); _comparer.SortMode = Kanji.Interface.Properties.Settings.Default.RadicalSortMode; _comparer.SortByRelevance = false; RadicalSortMode = Kanji.Interface.Properties.Settings.Default.RadicalSortMode; _radicalBusiness = new RadicalBusiness(); MainFilterMode = KanjiFilterModeEnum.Meaning; FilterModeChangedCommand = new RelayCommand(OnFilterModeChanged); SendMainFilterCommand = new RelayCommand(OnSendMainFilter); SendTextFilterCommand = new RelayCommand(OnSendTextFilter); SendRadicalFilterCommand = new RelayCommand(OnSendRadicalFilter); SetRadicalSortModeCommand = new RelayCommand<RadicalSortModeEnum>(OnSetRadicalSortMode); RadicalStore.Instance.IssueWhenLoaded(OnRadicalsLoaded); }
public KanjiViewModel() : base(NavigationPageEnum.Kanji) { NavigationActor.Instance.KanjiVm = this; _kanjiFilter = new KanjiFilter(); KanjiFilterVm = new KanjiFilterViewModel(_kanjiFilter); KanjiListVm = new KanjiListViewModel(_kanjiFilter); KanjiFilterVm.FilterChanged += OnFilterChanged; KanjiListVm.KanjiSelected += OnKanjiSelected; ClearSelectedKanjiCommand = new RelayCommand(OnClearSelectedKanji); ClearFilterCommand = new RelayCommand(OnClearFilter); NavigateBackCommand = new RelayCommand(OnNavigateBack); _navigationHistory = new FixedSizeStack<KanjiNavigationEntry>( MaxNavigationHistorySize); }
public FilteredKanjiIterator(KanjiFilter filter) : base(filter) { _kanjiDao = new KanjiDao(); }
/// <summary> /// Navigates to the kanji referred by the given character. /// Filters using the referred vocab kanji writing string. /// Writes a navigation history entry to trace back to the /// navigation state active before the operation. /// </summary> /// <param name="character"> /// Character driving the navigation.</param> public void Navigate(KanjiWritingCharacter character) { if (KanjiDetailsVm != null) { // Temporarily unsubscribe the event. KanjiDetailsVm.KanjiNavigated -= OnKanjiNavigated; } // Add the current state to the navigation history. PushNavigationHistoryEntry(); // Create a new filter matching the vocab word selected. _kanjiFilter = new KanjiFilter() { TextFilter = character.OriginalVocab.KanjiWriting }; // Apply the filter KanjiFilterVm.SetFilter(_kanjiFilter); KanjiListVm.Navigate(_kanjiFilter, character.Kanji); // Create a new KanjiDetailsVm. // Do not use the SetKanjiDetailsVm method as to not dispose // the previous value. KanjiDetailsVm = new KanjiDetailsViewModel(new ExtendedKanji(character.Kanji)); // Re-subscribe the event. KanjiDetailsVm.KanjiNavigated += OnKanjiNavigated; }