Various changes to context menus and toolbars

This commit is contained in:
Ben
2015-06-05 23:20:47 +01:00
parent 7f06f271cc
commit 7b5d92bf66
9 changed files with 192 additions and 99 deletions

View File

@@ -15,7 +15,7 @@ namespace Filtration.ViewModels
{
internal interface ILootFilterBlockViewModel
{
void Initialise(LootFilterBlock lootFilterBlock);
void Initialise(LootFilterBlock lootFilterBlock, LootFilterScriptViewModel parentScriptViewModel);
bool IsDirty { get; set; }
LootFilterBlock Block { get; }
}
@@ -25,6 +25,7 @@ namespace Filtration.ViewModels
private readonly ILootFilterBlockTranslator _translator;
private readonly IStaticDataService _staticDataService;
private readonly MediaPlayer _mediaPlayer = new MediaPlayer();
private LootFilterScriptViewModel _parentScriptViewModel;
private bool _displaySettingsPopupOpen;
@@ -33,7 +34,11 @@ namespace Filtration.ViewModels
_translator = translator;
_staticDataService = staticDataService;
CopyBlockCommand = new RelayCommand(OnCopyConditionCommand);
AddBlockCommand = new RelayCommand(OnAddBlockCommand);
AddSectionCommand = new RelayCommand(OnAddSectionCommand);
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand);
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand);
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand);
AddFilterBlockItemCommand = new RelayCommand<Type>(OnAddFilterBlockItemCommand);
AddAudioVisualBlockItemCommand = new RelayCommand<Type>(OnAddAudioVisualBlockItemCommand);
RemoveFilterBlockItemCommand = new RelayCommand<ILootFilterBlockItem>(OnRemoveFilterBlockItemCommand);
@@ -41,13 +46,15 @@ namespace Filtration.ViewModels
PlaySoundCommand = new RelayCommand(OnPlaySoundCommand, () => HasSound);
}
public void Initialise(LootFilterBlock lootFilterBlock)
public void Initialise(LootFilterBlock lootFilterBlock, LootFilterScriptViewModel parentScriptViewModel)
{
if (lootFilterBlock == null)
if (lootFilterBlock == null || parentScriptViewModel == null)
{
throw new ArgumentNullException("lootFilterBlock");
}
_parentScriptViewModel = parentScriptViewModel;
Block = lootFilterBlock;
lootFilterBlock.BlockItems.CollectionChanged += OnBlockItemsCollectionChanged;
@@ -58,6 +65,11 @@ namespace Filtration.ViewModels
}
public RelayCommand CopyBlockCommand { get; private set; }
public RelayCommand AddBlockCommand { get; private set; }
public RelayCommand AddSectionCommand { get; private set; }
public RelayCommand DeleteBlockCommand { get; private set; }
public RelayCommand MoveBlockUpCommand { get; private set; }
public RelayCommand MoveBlockDownCommand { get; private set; }
public RelayCommand<Type> AddFilterBlockItemCommand { get; private set; }
public RelayCommand<Type> AddAudioVisualBlockItemCommand { get; private set; }
public RelayCommand<ILootFilterBlockItem> RemoveFilterBlockItemCommand { get; private set; }
@@ -264,6 +276,31 @@ namespace Filtration.ViewModels
IsDirty = true;
}
private void OnAddBlockCommand()
{
_parentScriptViewModel.AddBlock(this);
}
private void OnAddSectionCommand()
{
_parentScriptViewModel.AddSection(this);
}
private void OnDeleteBlockCommand()
{
_parentScriptViewModel.DeleteBlock(this);
}
private void OnMoveBlockUpCommand()
{
_parentScriptViewModel.MoveBlockUp(this);
}
private void OnMoveBlockDownCommand()
{
_parentScriptViewModel.MoveBlockDown(this);
}
private bool AddBlockItemAllowed(Type type)
{
var blockItem = (ILootFilterBlockItem)Activator.CreateInstance(type);

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
@@ -16,26 +15,25 @@ namespace Filtration.ViewModels
string Description { get; set; }
void Initialise(LootFilterScript lootFilterScript);
void RemoveDirtyFlag();
void AddSection(ILootFilterBlockViewModel blockViewModel);
void AddBlock(ILootFilterBlockViewModel blockViewModel);
}
internal class LootFilterScriptViewModel : FiltrationViewModelBase, ILootFilterScriptViewModel
{
private readonly ILootFilterBlockViewModelFactory _lootFilterBlockViewModelFactory;
private bool _isDirty;
private ILootFilterBlockViewModel _selectedBlockViewModel;
public LootFilterScriptViewModel(ILootFilterBlockViewModelFactory lootFilterBlockViewModelFactory )
{
DeleteBlockCommand = new RelayCommand(OnDeleteBlock, () => SelectedBlockViewModel != null);
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, () => SelectedBlockViewModel != null);
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => SelectedBlockViewModel != null);
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => SelectedBlockViewModel != null);
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand, () => SelectedBlockViewModel != null);
MoveBlockToBottomCommand = new RelayCommand(OnMoveBlockToBottomCommand, () => SelectedBlockViewModel != null);
AddBlockAboveCommand = new RelayCommand(OnAddBlockAboveCommand, () => SelectedBlockViewModel != null || LootFilterBlockViewModels.Count == 0);
AddBlockBelowCommand = new RelayCommand(OnAddBlockBelowCommand, () => SelectedBlockViewModel != null);
AddSectionAboveCommand = new RelayCommand(OnAddSectionAboveCommand, () => SelectedBlockViewModel != null);
SectionBrowserSelectionChangedCommand = new RelayCommand<EventArgs>(OnSectionBrowserSelectionChanged);
AddBlockCommand = new RelayCommand(OnAddBlockCommand, () => SelectedBlockViewModel != null);
AddSectionCommand = new RelayCommand(OnAddSectionCommand, () => SelectedBlockViewModel != null);
_lootFilterBlockViewModelFactory = lootFilterBlockViewModelFactory;
LootFilterBlockViewModels = new ObservableCollection<ILootFilterBlockViewModel>();
@@ -47,10 +45,8 @@ namespace Filtration.ViewModels
public RelayCommand MoveBlockUpCommand { get; private set; }
public RelayCommand MoveBlockDownCommand { get; private set; }
public RelayCommand MoveBlockToBottomCommand { get; private set; }
public RelayCommand AddBlockAboveCommand { get; private set; }
public RelayCommand AddBlockBelowCommand { get; private set; }
public RelayCommand AddSectionAboveCommand { get; private set; }
public RelayCommand<EventArgs> SectionBrowserSelectionChangedCommand { get; private set; }
public RelayCommand AddBlockCommand { get; private set; }
public RelayCommand AddSectionCommand { get; private set; }
public ObservableCollection<ILootFilterBlockViewModel> LootFilterBlockViewModels { get; private set; }
@@ -61,11 +57,6 @@ namespace Filtration.ViewModels
public ILootFilterBlockViewModel SectionBrowserSelectedViewModel { get; set; }
private void OnSectionBrowserSelectionChanged(EventArgs e)
{
}
public string Description
{
get { return Script.Description; }
@@ -77,7 +68,15 @@ namespace Filtration.ViewModels
}
}
public LootFilterBlockViewModel SelectedBlockViewModel { get; set; }
public ILootFilterBlockViewModel SelectedBlockViewModel
{
get { return _selectedBlockViewModel; }
set
{
_selectedBlockViewModel = value;
RaisePropertyChanged();
}
}
public LootFilterScript Script { get; private set; }
@@ -105,7 +104,7 @@ namespace Filtration.ViewModels
CleanChildren();
IsDirty = false;
}
public string DisplayName
{
get { return !string.IsNullOrEmpty(Filename) ? Filename : Description; }
@@ -129,7 +128,7 @@ namespace Filtration.ViewModels
foreach (var block in Script.LootFilterBlocks)
{
var vm = _lootFilterBlockViewModelFactory.Create();
vm.Initialise(block);
vm.Initialise(block, this);
LootFilterBlockViewModels.Add(vm);
}
}
@@ -151,11 +150,16 @@ namespace Filtration.ViewModels
private void OnMoveBlockUpCommand()
{
var currentIndex = LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel);
MoveBlockUp(SelectedBlockViewModel);
}
public void MoveBlockUp(ILootFilterBlockViewModel blockViewModel)
{
var currentIndex = LootFilterBlockViewModels.IndexOf(blockViewModel);
if (currentIndex > 0)
{
var block = SelectedBlockViewModel.Block;
var block = blockViewModel.Block;
var blockPos = Script.LootFilterBlocks.IndexOf(block);
Script.LootFilterBlocks.RemoveAt(blockPos);
Script.LootFilterBlocks.Insert(blockPos - 1, block);
@@ -167,11 +171,16 @@ namespace Filtration.ViewModels
private void OnMoveBlockDownCommand()
{
var currentIndex = LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel);
MoveBlockDown(SelectedBlockViewModel);
}
public void MoveBlockDown(ILootFilterBlockViewModel blockViewModel)
{
var currentIndex = LootFilterBlockViewModels.IndexOf(blockViewModel);
if (currentIndex < LootFilterBlockViewModels.Count - 1)
{
var block = SelectedBlockViewModel.Block;
var block = blockViewModel.Block;
var blockPos = Script.LootFilterBlocks.IndexOf(block);
Script.LootFilterBlocks.RemoveAt(blockPos);
Script.LootFilterBlocks.Insert(blockPos + 1, block);
@@ -196,16 +205,21 @@ namespace Filtration.ViewModels
}
}
private void OnAddBlockAboveCommand()
private void OnAddBlockCommand()
{
AddBlock(SelectedBlockViewModel);
}
public void AddBlock(ILootFilterBlockViewModel blockViewModel)
{
var vm = _lootFilterBlockViewModelFactory.Create();
var newBlock = new LootFilterBlock();
vm.Initialise(newBlock);
vm.Initialise(newBlock, this);
if (LootFilterBlockViewModels.Count > 0)
{
Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(SelectedBlockViewModel.Block), newBlock);
LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel), vm);
Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(blockViewModel.Block) + 1, newBlock);
LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(blockViewModel) + 1, vm);
}
else
{
@@ -213,41 +227,42 @@ namespace Filtration.ViewModels
LootFilterBlockViewModels.Add(vm);
}
SelectedBlockViewModel = vm;
_isDirty = true;
}
private void OnAddBlockBelowCommand()
private void OnAddSectionCommand()
{
var vm = _lootFilterBlockViewModelFactory.Create();
var newBlock = new LootFilterBlock();
vm.Initialise(newBlock);
Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(SelectedBlockViewModel.Block) + 1, newBlock);
LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel) + 1, vm);
_isDirty = true;
AddSection(SelectedBlockViewModel);
}
private void OnAddSectionAboveCommand()
public void AddSection(ILootFilterBlockViewModel blockViewModel)
{
var vm = _lootFilterBlockViewModelFactory.Create();
var newSection = new LootFilterSection { Description = "New Section" };
vm.Initialise(newSection);
vm.Initialise(newSection, this);
Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(SelectedBlockViewModel.Block), newSection);
LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel), vm);
Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(blockViewModel.Block) + 1, newSection);
LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(blockViewModel) + 1, vm);
_isDirty = true;
SelectedBlockViewModel = vm;
RaisePropertyChanged("LootFilterSectionViewModels");
}
private void OnDeleteBlock()
private void OnDeleteBlockCommand()
{
DeleteBlock(SelectedBlockViewModel);
}
public void DeleteBlock(ILootFilterBlockViewModel blockViewModel)
{
var result = MessageBox.Show("Are you sure you wish to delete this block?", "Delete Confirmation",
MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
Script.LootFilterBlocks.Remove(SelectedBlockViewModel.Block);
LootFilterBlockViewModels.Remove(SelectedBlockViewModel);
Script.LootFilterBlocks.Remove(blockViewModel.Block);
LootFilterBlockViewModels.Remove(blockViewModel);
_isDirty = true;
}
SelectedBlockViewModel = null;