/// <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();
        }
Example #2
0
        /// <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;
        }
Example #3
0
 public KanjiListViewModel(KanjiFilter filter)
     : base(filter)
 {
     KanjiSelectionCommand = new RelayCommand <ExtendedKanji>(OnKanjiSelected);
     _titleConverter       = new Converters.KanjiToStringConverter();
     _ordinalConverter     = new Converters.IntegerToOrdinalStringConverter();
 }
Example #4
0
 /// <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;
 }
Example #5
0
        /// <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();
        }
Example #8
0
        /// <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);
        }
Example #11
0
        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);
        }
Example #12
0
        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());
        }
        /// <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.
            }
        }
        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;
        }