Skip to content

Commit

Permalink
Sorted classifications by alphabetical order: issue #28
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgeAlexandria committed Aug 22, 2018
1 parent 7009117 commit 2430daf
Showing 1 changed file with 20 additions and 13 deletions.
33 changes: 20 additions & 13 deletions src/common/CoCo.UI/ViewModels/LanguageViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Data;
using CoCo.UI.Data;

namespace CoCo.UI.ViewModels
{
public class LanguageViewModel : BaseViewModel, IClassificationProvider
{
private readonly ObservableCollection<ClassificationFormatViewModel> _classifications =
new ObservableCollection<ClassificationFormatViewModel>();

public LanguageViewModel(Language language, IResetValuesProvider resetValuesProvider)
{
Name = language.Name;
foreach (var classification in language.Classifications)
{
var classificationViewModel = new ClassificationFormatViewModel(classification, resetValuesProvider);
classificationViewModel.PropertyChanged += OnClassificationPropertyChanged;
Classifications.Add(classificationViewModel);
_classifications.Add(classificationViewModel);
}

Classifications = CollectionViewSource.GetDefaultView(_classifications);
Classifications.SortDescriptions.Add(
new SortDescription(nameof(ClassificationFormatViewModel.DisplayName), ListSortDirection.Ascending));

PresetsContainer = new PresetsViewModel(language.Presets, this, resetValuesProvider);
}

Expand All @@ -32,7 +40,7 @@ public LanguageViewModel(Language language, IResetValuesProvider resetValuesProv
{
// NOTE: 01 – all uncheked, 10 – all cheked, 11 – has different states
var flag = 0;
foreach (var item in Classifications)
foreach (var item in _classifications)
{
flag |= item.IsChecked ? 0b10 : 0b01;
}
Expand All @@ -51,25 +59,24 @@ public LanguageViewModel(Language language, IResetValuesProvider resetValuesProv
}

// TODO: add some mechanism to suspend notification at a few time
foreach (var item in Classifications)
foreach (var item in _classifications)
{
item.IsChecked = isCheked;
}
}
}

public ObservableCollection<ClassificationFormatViewModel> Classifications { get; } =
new ObservableCollection<ClassificationFormatViewModel>();
public ICollectionView Classifications { get; }

private ClassificationFormatViewModel _selectedClassification;

public ClassificationFormatViewModel SelectedClassification
{
get
{
if (_selectedClassification == null && Classifications.Count > 0)
if (_selectedClassification == null && _classifications.Count > 0)
{
SelectedClassification = Classifications[0];
SelectedClassification = _classifications[0];
}
return _selectedClassification;
}
Expand All @@ -79,7 +86,7 @@ public ClassificationFormatViewModel SelectedClassification
public Language ExtractData()
{
var language = new Language(Name);
foreach (var classificationViewModel in Classifications)
foreach (var classificationViewModel in _classifications)
{
language.Classifications.Add(classificationViewModel.ExtractData());
}
Expand All @@ -100,21 +107,21 @@ private void OnClassificationPropertyChanged(object sender, PropertyChangedEvent
}
}

ICollection<ClassificationFormatViewModel> IClassificationProvider.GetCurrentClassificaions() => Classifications;
ICollection<ClassificationFormatViewModel> IClassificationProvider.GetCurrentClassificaions() => _classifications;

void IClassificationProvider.SetCurrentClassificaions(ICollection<ClassificationFormatViewModel> classifications)
{
/// TODO: again bulk operation under a <see cref="ObservableCollection{T}"/>
while (Classifications.Count > 0)
while (_classifications.Count > 0)
{
Classifications[0].PropertyChanged -= OnClassificationPropertyChanged;
Classifications.RemoveAt(0);
_classifications[0].PropertyChanged -= OnClassificationPropertyChanged;
_classifications.RemoveAt(0);
}

foreach (var item in classifications)
{
item.PropertyChanged += OnClassificationPropertyChanged;
Classifications.Add(item);
_classifications.Add(item);
}
// NOTE: Reset selected classification from old items
SelectedClassification = null;
Expand Down

0 comments on commit 2430daf

Please sign in to comment.