diff --git a/Filtration/App.xaml b/Filtration/App.xaml index 606edc7..9f53d04 100644 --- a/Filtration/App.xaml +++ b/Filtration/App.xaml @@ -5,9 +5,7 @@ <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> - <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Buttons.xaml" /> - <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.TextBox.xaml" /> - <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.Toolbar.xaml" /> + <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Steel.xaml" /> diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index f204f13..0e1ebd0 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -68,6 +68,7 @@ <HintPath>..\packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Layout.Toolkit.dll</HintPath> </Reference> <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> <Reference Include="System.Xml" /> <Reference Include="System.Core" /> <Reference Include="System.Xaml"> diff --git a/Filtration/ViewModels/LootFilterScriptViewModel.cs b/Filtration/ViewModels/LootFilterScriptViewModel.cs index a944f6c..f3338ae 100644 --- a/Filtration/ViewModels/LootFilterScriptViewModel.cs +++ b/Filtration/ViewModels/LootFilterScriptViewModel.cs @@ -1,4 +1,6 @@ -using System.Collections.ObjectModel; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Windows; @@ -24,6 +26,8 @@ namespace Filtration.ViewModels AddSectionAboveCommand = new RelayCommand(OnAddSectionAboveCommand, () => SelectedBlockViewModel != null); + SectionBrowserSelectionChangedCommand = new RelayCommand<EventArgs>(OnSectionBrowserSelectionChanged); + _lootFilterBlockViewModelFactory = lootFilterBlockViewModelFactory; LootFilterBlockViewModels = new ObservableCollection<ILootFilterBlockViewModel>(); @@ -37,9 +41,22 @@ namespace Filtration.ViewModels 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 ObservableCollection<ILootFilterBlockViewModel> LootFilterBlockViewModels { get; private set; } + public IEnumerable<ILootFilterBlockViewModel> LootFilterSectionViewModels + { + get { return LootFilterBlockViewModels.Where(b => b.Block.GetType() == typeof (LootFilterSection)); } + } + + public ILootFilterBlockViewModel SectionBrowserSelectedViewModel { get; set; } + + private void OnSectionBrowserSelectionChanged(EventArgs e) + { + + } + public string Description { get { return Script.Description; } @@ -119,6 +136,7 @@ namespace Filtration.ViewModels Script.LootFilterBlocks.Insert(0, block); LootFilterBlockViewModels.Move(currentIndex, 0); _isDirty = true; + RaisePropertyChanged("LootFilterSectionViewModels"); } } @@ -134,6 +152,7 @@ namespace Filtration.ViewModels Script.LootFilterBlocks.Insert(blockPos - 1, block); LootFilterBlockViewModels.Move(currentIndex, currentIndex - 1); _isDirty = true; + RaisePropertyChanged("LootFilterSectionViewModels"); } } @@ -149,6 +168,7 @@ namespace Filtration.ViewModels Script.LootFilterBlocks.Insert(blockPos + 1, block); LootFilterBlockViewModels.Move(currentIndex, currentIndex + 1); _isDirty = true; + RaisePropertyChanged("LootFilterSectionViewModels"); } } @@ -163,6 +183,7 @@ namespace Filtration.ViewModels Script.LootFilterBlocks.Add(block); LootFilterBlockViewModels.Move(currentIndex, LootFilterBlockViewModels.Count - 1); _isDirty = true; + RaisePropertyChanged("LootFilterSectionViewModels"); } } @@ -206,6 +227,7 @@ namespace Filtration.ViewModels Script.LootFilterBlocks.Insert(Script.LootFilterBlocks.IndexOf(SelectedBlockViewModel.Block), newSection); LootFilterBlockViewModels.Insert(LootFilterBlockViewModels.IndexOf(SelectedBlockViewModel), vm); _isDirty = true; + RaisePropertyChanged("LootFilterSectionViewModels"); } private void OnDeleteBlock() diff --git a/Filtration/Views/LootFilterScriptView.xaml b/Filtration/Views/LootFilterScriptView.xaml index adf084e..a123ce9 100644 --- a/Filtration/Views/LootFilterScriptView.xaml +++ b/Filtration/Views/LootFilterScriptView.xaml @@ -3,10 +3,13 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" + xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight" xmlns:views="clr-namespace:Filtration.Views" xmlns:viewModels="clr-namespace:Filtration.ViewModels" xmlns:userControls="clr-namespace:Filtration.UserControls" xmlns:fa="http://schemas.fontawesome.io/icons/" + xmlns:command="http://www.galasoft.ch/mvvmlight" mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=viewModels:LootFilterScriptViewModel}" d:DesignHeight="300" d:DesignWidth="600"> @@ -47,27 +50,27 @@ </StackPanel> </Border> <Border Grid.Row="1" BorderThickness="2" BorderBrush="SlateGray" CornerRadius="4" Margin="5,5,5,5"> - <DockPanel> + <DockPanel LastChildFill="True"> <ToolBarTray DockPanel.Dock="Top"> - <ToolBarTray.Resources> - <Style TargetType="{x:Type fa:ImageAwesome}"> - <Style.Setters> - <Setter Property="Width" Value="15" /> - <Setter Property="Height" Value="15" /> - </Style.Setters> - </Style> - </ToolBarTray.Resources> - <ToolBar> - <Button ToolTip="Add Block" Command="{Binding AddBlockAboveCommand}"> - <fa:ImageAwesome Icon="Plus" /> - </Button> - <Button ToolTip="Add Section" Command="{Binding AddSectionAboveCommand}"> - <fa:ImageAwesome Icon="ListUl" /> - </Button> - <Button ToolTip="Delete Block/Section" Command="{Binding DeleteBlockCommand}"> - <fa:ImageAwesome Icon="Minus" /> - </Button> - </ToolBar> + <ToolBarTray.Resources> + <Style TargetType="{x:Type fa:ImageAwesome}"> + <Style.Setters> + <Setter Property="Width" Value="15" /> + <Setter Property="Height" Value="15" /> + </Style.Setters> + </Style> + </ToolBarTray.Resources> + <ToolBar> + <Button ToolTip="Add Block" Command="{Binding AddBlockAboveCommand}"> + <fa:ImageAwesome Icon="Plus" /> + </Button> + <Button ToolTip="Add Section" Command="{Binding AddSectionAboveCommand}"> + <fa:ImageAwesome Icon="ListUl" /> + </Button> + <Button ToolTip="Delete Block/Section" Command="{Binding DeleteBlockCommand}"> + <fa:ImageAwesome Icon="Minus" /> + </Button> + </ToolBar> <ToolBar> <Button ToolTip="Move Block to Top" Command="{Binding MoveBlockToTopCommand}"> <fa:ImageAwesome Icon="AngleDoubleUp" /> @@ -82,16 +85,31 @@ <fa:ImageAwesome Icon="AngleDoubleDown" /> </Button> </ToolBar> - </ToolBarTray> - <userControls:AutoScrollingListBox ItemsSource="{Binding LootFilterBlockViewModels}" - DockPanel.Dock="Bottom" - Margin="5,5,5,5" - HorizontalContentAlignment="Stretch" - BorderThickness="0" - ScrollViewer.HorizontalScrollBarVisibility="Disabled" - VirtualizingStackPanel.VirtualizationMode="Recycling" - ItemTemplateSelector="{StaticResource BlockTemplateSelector}" - SelectedItem="{Binding SelectedBlockViewModel}"> + </ToolBarTray> + <Expander DockPanel.Dock="Left" ExpandDirection="Right" MaxWidth="200" HorizontalAlignment="Left" > + <Expander.Header> + <TextBlock Text="Section Browser"> + <TextBlock.LayoutTransform> + <RotateTransform Angle="-90"/> + </TextBlock.LayoutTransform> + </TextBlock> + </Expander.Header> + <ListBox ItemsSource="{Binding LootFilterSectionViewModels}" SelectedItem="{Binding SectionBrowserSelectedViewModel}" x:Name="SectionBrowserListBox" SelectionChanged="SectionBrowserListBox_OnSelectionChanged" > + <ListBox.ItemTemplate> + <DataTemplate> + <TextBlock Text="{Binding BlockDescription}" ToolTip="{Binding BlockDescription}" /> + </DataTemplate> + </ListBox.ItemTemplate> + </ListBox> + </Expander> + <userControls:AutoScrollingListBox ItemsSource="{Binding LootFilterBlockViewModels}" + Margin="5,5,5,5" + HorizontalContentAlignment="Stretch" + BorderThickness="0" + ScrollViewer.HorizontalScrollBarVisibility="Disabled" + VirtualizingStackPanel.VirtualizationMode="Recycling" + ItemTemplateSelector="{StaticResource BlockTemplateSelector}" + SelectedItem="{Binding SelectedBlockViewModel}" x:Name="BlocksListBox"> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="BorderBrush" Value="Red"/> @@ -103,19 +121,19 @@ </Style> </ListBox.ItemContainerStyle> <ListBox.Resources> - <Style TargetType="ListBoxItem"> - <Style.Resources> - <!-- SelectedItem with focus --> - <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> - <!-- SelectedItem without focus --> - <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> - <!-- SelectedItem text foreground --> - <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> - </Style.Resources> - <Setter Property="FocusVisualStyle" Value="{x:Null}" /> - </Style> - </ListBox.Resources> - </userControls:AutoScrollingListBox> + <Style TargetType="ListBoxItem"> + <Style.Resources> + <!-- SelectedItem with focus --> + <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> + <!-- SelectedItem without focus --> + <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> + <!-- SelectedItem text foreground --> + <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> + </Style.Resources> + <Setter Property="FocusVisualStyle" Value="{x:Null}" /> + </Style> + </ListBox.Resources> + </userControls:AutoScrollingListBox> </DockPanel> </Border> </Grid> diff --git a/Filtration/Views/LootFilterScriptView.xaml.cs b/Filtration/Views/LootFilterScriptView.xaml.cs index fb362d1..270b8cd 100644 --- a/Filtration/Views/LootFilterScriptView.xaml.cs +++ b/Filtration/Views/LootFilterScriptView.xaml.cs @@ -1,4 +1,6 @@ -namespace Filtration.Views +using System.Windows.Controls; + +namespace Filtration.Views { public partial class LootFilterScriptView { @@ -6,5 +8,10 @@ { InitializeComponent(); } + + private void SectionBrowserListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + BlocksListBox.ScrollIntoView(((ListBox)sender).SelectedItem); + } } }