Fix block group browser not filtering

This commit is contained in:
azakhi 2018-09-03 11:26:13 +03:00
parent 7162e16b49
commit bdd121f48c
1 changed files with 43 additions and 98 deletions

View File

@ -84,7 +84,7 @@ namespace Filtration.ViewModels
void MoveBlockUp(IItemFilterBlockViewModelBase targetBlockViewModelBase); void MoveBlockUp(IItemFilterBlockViewModelBase targetBlockViewModelBase);
void MoveBlockDown(IItemFilterBlockViewModelBase targetBlockViewModelBase); void MoveBlockDown(IItemFilterBlockViewModelBase targetBlockViewModelBase);
void MoveBlockToBottom(IItemFilterBlockViewModelBase targetBlockViewModelBase); void MoveBlockToBottom(IItemFilterBlockViewModelBase targetBlockViewModelBase);
void ToggleSection(IItemFilterCommentBlockViewModel targetCommentBlockViewModelBase, bool updateViewModels = true); void ToggleSection(IItemFilterCommentBlockViewModel targetCommentBlockViewModelBase, bool deferPropertyChanged = false);
} }
internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel
@ -103,8 +103,6 @@ namespace Filtration.ViewModels
private IItemFilterBlockViewModelBase _selectedBlockViewModel; private IItemFilterBlockViewModelBase _selectedBlockViewModel;
private IItemFilterCommentBlockViewModel _sectionBrowserSelectedBlockViewModel; private IItemFilterCommentBlockViewModel _sectionBrowserSelectedBlockViewModel;
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels; private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels;
private ObservableCollection<IItemFilterBlockViewModelBase> _viewItemFilterBlockViewModels;
private ICollectionView _itemFilterBlockViewModelsCollectionView;
private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate; private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate;
private ICommandManager _scriptCommandManager; private ICommandManager _scriptCommandManager;
@ -164,8 +162,6 @@ namespace Filtration.ViewModels
icon.EndInit(); icon.EndInit();
IconSource = icon; IconSource = icon;
_viewItemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
_customSoundsAvailable = new ObservableCollection<string>(); _customSoundsAvailable = new ObservableCollection<string>();
var poeFolderFiles = Directory.GetFiles(persistenceService.DefaultPathOfExileDirectory() + "\\").Where( var poeFolderFiles = Directory.GetFiles(persistenceService.DefaultPathOfExileDirectory() + "\\").Where(
@ -217,7 +213,6 @@ namespace Filtration.ViewModels
ContentId = "ScriptContentId"; ContentId = "ScriptContentId";
CollapseAllSections(); CollapseAllSections();
UpdateBlockModelsForView();
} }
private void ItemFilterBlocksOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs) private void ItemFilterBlocksOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
@ -241,7 +236,7 @@ namespace Filtration.ViewModels
} }
} }
UpdateBlockModelsForView(); RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
} }
private void CustomSoundsAvailableOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs) private void CustomSoundsAvailableOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
@ -353,16 +348,34 @@ namespace Filtration.ViewModels
} }
} }
public ObservableCollection<IItemFilterBlockViewModelBase> ViewItemFilterBlockViewModels public ICollectionView ViewItemFilterBlockViewModels
{ {
get get
{ {
return _viewItemFilterBlockViewModels; ICollectionView filteredView = CollectionViewSource.GetDefaultView(ItemFilterBlockViewModels);
} filteredView.Filter = BlockFilter;
set
{ IItemFilterBlockViewModelBase previousBlock = null;
_viewItemFilterBlockViewModels = value; foreach (IItemFilterBlockViewModelBase block in filteredView)
RaisePropertyChanged(); {
if (block is IItemFilterBlockViewModel)
{
if (previousBlock is IItemFilterCommentBlockViewModel)
{
(previousBlock as IItemFilterCommentBlockViewModel).HasChild = true;
}
}
else if (block is IItemFilterCommentBlockViewModel)
{
(block as IItemFilterCommentBlockViewModel).HasChild = false;
}
previousBlock = block;
}
ICollectionView visibilityView = CollectionViewSource.GetDefaultView(filteredView.Cast<IItemFilterBlockViewModelBase>());
visibilityView.Filter = BlockVisibilityFilter;
return visibilityView;
} }
} }
@ -370,10 +383,6 @@ namespace Filtration.ViewModels
{ {
get get
{ {
_itemFilterBlockViewModelsCollectionView =
CollectionViewSource.GetDefaultView(_itemFilterBlockViewModels);
_itemFilterBlockViewModelsCollectionView.Filter = BlockFilter;
return _itemFilterBlockViewModels; return _itemFilterBlockViewModels;
} }
} }
@ -392,6 +401,11 @@ namespace Filtration.ViewModels
return ShowBlockBasedOnAdvanced(blockViewModel); return ShowBlockBasedOnAdvanced(blockViewModel);
} }
private bool BlockVisibilityFilter(object item)
{
return (bool)(item as IItemFilterBlockViewModelBase)?.IsVisible;
}
private bool ShowBlockBasedOnAdvanced(IItemFilterBlockViewModel blockViewModel) private bool ShowBlockBasedOnAdvanced(IItemFilterBlockViewModel blockViewModel)
{ {
if (ShowAdvanced) if (ShowAdvanced)
@ -414,7 +428,7 @@ namespace Filtration.ViewModels
set set
{ {
_blockFilterPredicate = value; _blockFilterPredicate = value;
RaisePropertyChanged(nameof(ItemFilterBlockViewModels)); RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
} }
} }
@ -436,7 +450,7 @@ namespace Filtration.ViewModels
{ {
_showAdvanced = value; _showAdvanced = value;
RaisePropertyChanged(); RaisePropertyChanged();
RaisePropertyChanged(nameof(ItemFilterBlockViewModels)); RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
} }
} }
@ -1353,124 +1367,55 @@ namespace Filtration.ViewModels
} }
} }
public void ToggleSection(IItemFilterCommentBlockViewModel targetCommentBlockViewModelBase, bool updateViewModels = true) public void ToggleSection(IItemFilterCommentBlockViewModel targetCommentBlockViewModelBase, bool deferPropertyChanged = false)
{ {
var newState = !targetCommentBlockViewModelBase.IsExpanded; var newState = !targetCommentBlockViewModelBase.IsExpanded;
targetCommentBlockViewModelBase.IsExpanded = newState; targetCommentBlockViewModelBase.IsExpanded = newState;
var sectionIndex = ItemFilterBlockViewModels.IndexOf(targetCommentBlockViewModelBase); var sectionIndex = ItemFilterBlockViewModels.IndexOf(targetCommentBlockViewModelBase);
var viewIndex = ViewItemFilterBlockViewModels.IndexOf(targetCommentBlockViewModelBase);
for (int i = sectionIndex + 1; i < ItemFilterBlockViewModels.Count; i++) for (int i = sectionIndex + 1; i < ItemFilterBlockViewModels.Count; i++)
{ {
var block = ItemFilterBlockViewModels[i] as IItemFilterBlockViewModel; var block = ItemFilterBlockViewModels[i] as IItemFilterBlockViewModel;
if (block != null) if (block != null)
{ {
if (newState)
viewIndex++;
if (newState == block.IsVisible)
{
continue;
}
if(updateViewModels)
{
if(newState)
{
if(viewIndex < ViewItemFilterBlockViewModels.Count)
{
ViewItemFilterBlockViewModels.Insert(viewIndex, block);
}
else
{
ViewItemFilterBlockViewModels.Add(block);
}
}
else
{
ViewItemFilterBlockViewModels.RemoveAt(viewIndex + 1);
}
}
block.IsVisible = newState; block.IsVisible = newState;
} }
else else
break; break;
} }
}
private void UpdateBlockModelsForView() if (!deferPropertyChanged)
{ RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
ObservableCollection<IItemFilterBlockViewModelBase> blocksForView = new ObservableCollection<IItemFilterBlockViewModelBase>();
for (var i = 0; i < ItemFilterBlockViewModels.Count; i++)
{
var block = ItemFilterBlockViewModels[i];
if (block.IsVisible)
{
blocksForView.Add(block);
var blockAsComment = block as IItemFilterCommentBlockViewModel;
if(blockAsComment != null && i < (ItemFilterBlockViewModels.Count - 1))
{
var followingBlock = ItemFilterBlockViewModels[i + 1] as IItemFilterBlockViewModel;
if(followingBlock != null)
{
blockAsComment.HasChild = true;
}
else
{
blockAsComment.HasChild = false;
}
}
}
}
ViewItemFilterBlockViewModels = blocksForView;
} }
private void CollapseAllSections() private void CollapseAllSections()
{ {
ObservableCollection<IItemFilterBlockViewModelBase> blocksForView = new ObservableCollection<IItemFilterBlockViewModelBase>();
for (int i = 0; i < ItemFilterBlockViewModels.Count; i++) for (int i = 0; i < ItemFilterBlockViewModels.Count; i++)
{ {
var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel; var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel;
if (block != null) if (block != null)
{ {
blocksForView.Add(block);
if(block.IsExpanded) if(block.IsExpanded)
{ {
ToggleSection(block, false); ToggleSection(block, true);
} }
} }
} }
if (SelectedBlockViewModel == null && blocksForView.Count > 0) RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
{
SelectedBlockViewModel = blocksForView[0];
}
ViewItemFilterBlockViewModels = blocksForView;
} }
private void ExpandAllSections() private void ExpandAllSections()
{ {
ObservableCollection<IItemFilterBlockViewModelBase> blocksForView = new ObservableCollection<IItemFilterBlockViewModelBase>();
for (int i = 0; i < ItemFilterBlockViewModels.Count; i++) for (int i = 0; i < ItemFilterBlockViewModels.Count; i++)
{ {
blocksForView.Add(ItemFilterBlockViewModels[i]);
var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel; var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel;
if (block != null && !block.IsExpanded) if (block != null && !block.IsExpanded)
{ {
ToggleSection(block, false); ToggleSection(block, true);
} }
} }
if(SelectedBlockViewModel == null && blocksForView.Count > 0) RaisePropertyChanged(nameof(ViewItemFilterBlockViewModels));
{
SelectedBlockViewModel = blocksForView[0];
}
ViewItemFilterBlockViewModels = blocksForView;
} }
} }
} }