diff --git a/Filtration/Converters/ActiveDocumentConverter.cs b/Filtration/Converters/ActiveDocumentConverter.cs
index 9d5939f..96c4019 100644
--- a/Filtration/Converters/ActiveDocumentConverter.cs
+++ b/Filtration/Converters/ActiveDocumentConverter.cs
@@ -9,7 +9,7 @@ namespace Filtration.Converters
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
- if (value is ItemFilterScriptViewModel)
+ if (value is IDocument)
return value;
return Binding.DoNothing;
@@ -17,7 +17,7 @@ namespace Filtration.Converters
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
- if (value is ItemFilterScriptViewModel)
+ if (value is IDocument)
return value;
return Binding.DoNothing;
diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj
index 2f534f8..6578693 100644
--- a/Filtration/Filtration.csproj
+++ b/Filtration/Filtration.csproj
@@ -170,7 +170,9 @@
ItemPreviewControl.xaml
+
+
@@ -178,8 +180,13 @@
+
+
+
+ BlockGroupBrowserView.xaml
+
ItemFilterBlockDisplaySettingsView.xaml
@@ -199,15 +206,18 @@
AboutWindow.xaml
-
-
-
+
+
+
ReplaceColorsWindow.xaml
SectionBrowserView.xaml
+
+ StartPageView.xaml
+
@@ -217,6 +227,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -282,6 +296,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
@@ -338,6 +356,7 @@
+
Always
diff --git a/Filtration/Models/ItemFilterBlockGroup.cs b/Filtration/Models/ItemFilterBlockGroup.cs
index 39acf0f..218123e 100644
--- a/Filtration/Models/ItemFilterBlockGroup.cs
+++ b/Filtration/Models/ItemFilterBlockGroup.cs
@@ -16,10 +16,15 @@ namespace Filtration.Models
var currentBlockGroup = this;
var outputString = GroupName;
- while (currentBlockGroup.ParentGroup.ParentGroup != null)
+
+ // TODO: This is retarded, fix this.
+ if (currentBlockGroup.ParentGroup != null)
{
- outputString = currentBlockGroup.ParentGroup.GroupName + " - " + outputString;
- currentBlockGroup = currentBlockGroup.ParentGroup;
+ while (currentBlockGroup.ParentGroup.ParentGroup != null)
+ {
+ outputString = currentBlockGroup.ParentGroup.GroupName + " - " + outputString;
+ currentBlockGroup = currentBlockGroup.ParentGroup;
+ }
}
return outputString;
diff --git a/Filtration/Resources/Icons/block_group_browser_icon.png b/Filtration/Resources/Icons/block_group_browser_icon.png
new file mode 100644
index 0000000..f688ab4
Binary files /dev/null and b/Filtration/Resources/Icons/block_group_browser_icon.png differ
diff --git a/Filtration/ViewModels/IDocument.cs b/Filtration/ViewModels/IDocument.cs
new file mode 100644
index 0000000..0b7051d
--- /dev/null
+++ b/Filtration/ViewModels/IDocument.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Filtration.ViewModels
+{
+ interface IDocument
+ {
+ bool IsScript { get; }
+ }
+}
diff --git a/Filtration/ViewModels/ItemFilterScriptViewModel.cs b/Filtration/ViewModels/ItemFilterScriptViewModel.cs
index f56fe65..8e0cec7 100644
--- a/Filtration/ViewModels/ItemFilterScriptViewModel.cs
+++ b/Filtration/ViewModels/ItemFilterScriptViewModel.cs
@@ -18,7 +18,9 @@ namespace Filtration.ViewModels
string DisplayName { get; }
void Initialise(ItemFilterScript itemFilterScript);
IItemFilterBlockViewModel SelectedBlockViewModel { get; set; }
+ IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel { get; set; }
void RemoveDirtyFlag();
+ IEnumerable BlockGroups { get; }
IEnumerable ItemFilterSectionViewModels { get; }
void AddSection(IItemFilterBlockViewModel targetBlockViewModel);
void AddBlock(IItemFilterBlockViewModel targetBlockViewModel);
@@ -26,15 +28,18 @@ namespace Filtration.ViewModels
void PasteBlock(IItemFilterBlockViewModel targetBlockViewModel);
}
- internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel
+ internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel, IDocument
{
private readonly IItemFilterBlockViewModelFactory _itemFilterBlockViewModelFactory;
private readonly IItemFilterBlockTranslator _blockTranslator;
+ private readonly IMainWindowViewModel _mainWindowViewModel;
private bool _isDirty;
private IItemFilterBlockViewModel _selectedBlockViewModel;
+ private IItemFilterBlockViewModel _sectionBrowserSelectedBlockViewModel;
- public ItemFilterScriptViewModel(IItemFilterBlockViewModelFactory itemFilterBlockViewModelFactory, IItemFilterBlockTranslator blockTranslator)
+ public ItemFilterScriptViewModel(IItemFilterBlockViewModelFactory itemFilterBlockViewModelFactory, IItemFilterBlockTranslator blockTranslator, IMainWindowViewModel mainWindowViewModel)
{
+ CloseCommand = new RelayCommand(OnCloseCommand);
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, () => SelectedBlockViewModel != null);
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => SelectedBlockViewModel != null);
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => SelectedBlockViewModel != null);
@@ -46,10 +51,16 @@ namespace Filtration.ViewModels
PasteBlockCommand = new RelayCommand(OnPasteBlockCommand, () => SelectedBlockViewModel != null);
_itemFilterBlockViewModelFactory = itemFilterBlockViewModelFactory;
_blockTranslator = blockTranslator;
+ _mainWindowViewModel = mainWindowViewModel;
ItemFilterBlockViewModels = new ObservableCollection();
-
}
+ public bool IsScript
+ {
+ get { return true; }
+ }
+
+ public RelayCommand CloseCommand { get; private set; }
public RelayCommand DeleteBlockCommand { get; private set; }
public RelayCommand MoveBlockToTopCommand { get; private set; }
public RelayCommand MoveBlockUpCommand { get; private set; }
@@ -66,9 +77,7 @@ namespace Filtration.ViewModels
{
get { return ItemFilterBlockViewModels.Where(b => b.Block.GetType() == typeof (ItemFilterSection)); }
}
-
- public IItemFilterBlockViewModel SectionBrowserSelectedViewModel { get; set; }
-
+
public string Description
{
get { return Script.Description; }
@@ -90,8 +99,24 @@ namespace Filtration.ViewModels
}
}
+ public IItemFilterBlockViewModel SectionBrowserSelectedBlockViewModel
+ {
+ get { return _sectionBrowserSelectedBlockViewModel; }
+ set
+ {
+ _sectionBrowserSelectedBlockViewModel = value;
+ SelectedBlockViewModel = value;
+ RaisePropertyChanged();
+ }
+ }
+
public ItemFilterScript Script { get; private set; }
+ public IEnumerable BlockGroups
+ {
+ get { return Script.ItemFilterBlockGroups; }
+ }
+
public bool IsDirty
{
get { return _isDirty || HasDirtyChildren; }
@@ -153,6 +178,10 @@ namespace Filtration.ViewModels
ContentId = "testcontentid";
}
+ private void OnCloseCommand()
+ {
+ _mainWindowViewModel.Close(this);
+ }
private void OnCopyBlockCommand()
{
CopyBlock(SelectedBlockViewModel);
diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs
index f9332a1..40b36d0 100644
--- a/Filtration/ViewModels/MainWindowViewModel.cs
+++ b/Filtration/ViewModels/MainWindowViewModel.cs
@@ -10,7 +10,6 @@ using Filtration.Services;
using Filtration.Translators;
using Filtration.Views;
using GalaSoft.MvvmLight.CommandWpf;
-using Xceed.Wpf.AvalonDock.Layout;
using Clipboard = System.Windows.Clipboard;
using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
@@ -18,9 +17,13 @@ namespace Filtration.ViewModels
{
internal interface IMainWindowViewModel
{
- IItemFilterScriptViewModel ActiveDocument { get; set; }
+ IDocument ActiveDocument { get; set; }
+ IItemFilterScriptViewModel ActiveScriptViewModel { get; }
event EventHandler ActiveDocumentChanged;
void LoadScriptFromFile(string path);
+ RelayCommand OpenScriptCommand { get; }
+ RelayCommand NewScriptCommand { get; }
+ void Close(IDocument scriptToClose);
}
internal class MainWindowViewModel : FiltrationViewModelBase, IMainWindowViewModel
@@ -32,38 +35,52 @@ namespace Filtration.ViewModels
private readonly IItemFilterPersistenceService _persistenceService;
private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator;
private readonly IReplaceColorsViewModel _replaceColorsViewModel;
- private IItemFilterScriptViewModel _activeDocument;
- private readonly ObservableCollection _scriptViewModels;
- private readonly SectionBrowserViewModel _sectionBrowserViewModel;
+ private IDocument _activeDocument;
+ private IItemFilterScriptViewModel _activeScriptViewModel;
+ private readonly ObservableCollection _openDocuments;
+ private readonly ISectionBrowserViewModel _sectionBrowserViewModel;
+ private readonly IBlockGroupBrowserViewModel _blockGroupBrowserViewModel;
+ private readonly IStartPageViewModel _startPageViewModel;
public MainWindowViewModel(IItemFilterScriptViewModelFactory itemFilterScriptViewModelFactory,
IItemFilterPersistenceService persistenceService,
IItemFilterScriptTranslator itemFilterScriptTranslator,
- IReplaceColorsViewModel replaceColorsViewModel)
+ IReplaceColorsViewModel replaceColorsViewModel,
+ ISectionBrowserViewModel sectionBrowserViewModel,
+ IBlockGroupBrowserViewModel blockGroupBrowserViewModel,
+ IStartPageViewModel startPageViewModel)
{
_itemFilterScriptViewModelFactory = itemFilterScriptViewModelFactory;
_persistenceService = persistenceService;
_itemFilterScriptTranslator = itemFilterScriptTranslator;
_replaceColorsViewModel = replaceColorsViewModel;
- _sectionBrowserViewModel = new SectionBrowserViewModel();
- _sectionBrowserViewModel.Initialise(this);
+ _sectionBrowserViewModel = sectionBrowserViewModel;
+ _blockGroupBrowserViewModel = blockGroupBrowserViewModel;
+ _startPageViewModel = startPageViewModel;
- _scriptViewModels = new ObservableCollection();
+ _sectionBrowserViewModel.Initialise(this);
+ _blockGroupBrowserViewModel.Initialise(this);
+ _startPageViewModel.Initialise(this);
+
+ _openDocuments = new ObservableCollection();
OpenAboutWindowCommand = new RelayCommand(OnOpenAboutWindowCommand);
OpenScriptCommand = new RelayCommand(OnOpenScriptCommand);
- SaveScriptCommand = new RelayCommand(OnSaveScriptCommand, () => ActiveDocument != null);
- SaveScriptAsCommand = new RelayCommand(OnSaveScriptAsCommand, () => ActiveDocument != null);
- CopyScriptCommand = new RelayCommand(OnCopyScriptCommand, () => ActiveDocument != null);
- CopyBlockCommand = new RelayCommand(OnCopyBlockCommand, () => ActiveDocument != null && ActiveDocument.SelectedBlockViewModel != null);
- PasteCommand = new RelayCommand(OnPasteCommand, () => ActiveDocument != null && ActiveDocument.SelectedBlockViewModel != null);
+ SaveScriptCommand = new RelayCommand(OnSaveScriptCommand, () => ActiveDocument != null && ActiveDocument.IsScript);
+ SaveScriptAsCommand = new RelayCommand(OnSaveScriptAsCommand, () => ActiveDocument != null && ActiveDocument.IsScript);
+ CopyScriptCommand = new RelayCommand(OnCopyScriptCommand, () => ActiveDocument != null && ActiveDocument.IsScript);
+ CopyBlockCommand = new RelayCommand(OnCopyBlockCommand, () => ActiveDocument != null && ActiveDocument.IsScript && ((IItemFilterScriptViewModel)ActiveDocument).SelectedBlockViewModel != null);
+ PasteCommand = new RelayCommand(OnPasteCommand, () => ActiveDocument != null && ActiveDocument.IsScript && ((IItemFilterScriptViewModel)ActiveDocument).SelectedBlockViewModel != null);
NewScriptCommand = new RelayCommand(OnNewScriptCommand);
- CloseScriptCommand = new RelayCommand(OnCloseScriptCommand, v => ActiveDocument != null);
- ReplaceColorsCommand = new RelayCommand(OnReplaceColorsCommand, () => ActiveDocument != null);
+ CloseScriptCommand = new RelayCommand(OnCloseScriptCommand, v => ActiveDocument != null && ActiveDocument.IsScript);
+ ReplaceColorsCommand = new RelayCommand(OnReplaceColorsCommand, () => ActiveDocument != null && ActiveDocument.IsScript);
//LoadScriptFromFile("C:\\ThioleLootFilter.txt");
SetItemFilterScriptDirectory();
+
+ _openDocuments.Add(_startPageViewModel);
+ ActiveDocument = startPageViewModel;
}
public RelayCommand OpenScriptCommand { get; private set; }
@@ -73,38 +90,30 @@ namespace Filtration.ViewModels
public RelayCommand PasteCommand { get; private set; }
public RelayCommand CopyScriptCommand { get; private set; }
public RelayCommand NewScriptCommand { get; private set; }
- public RelayCommand CloseScriptCommand { get; private set; }
+ public RelayCommand CloseScriptCommand { get; private set; }
public RelayCommand OpenAboutWindowCommand { get; private set; }
public RelayCommand ReplaceColorsCommand { get; private set; }
- public ObservableCollection ScriptViewModels
+ public ObservableCollection OpenDocuments
{
- get { return _scriptViewModels; }
+ get { return _openDocuments; }
}
- private List _tools;
+ private List _tools;
- public IEnumerable Tools
+ public IEnumerable Tools
{
get
{
if (_tools == null)
{
- _tools = new List { _sectionBrowserViewModel };
+ _tools = new List {_sectionBrowserViewModel, _blockGroupBrowserViewModel};
}
return _tools;
}
}
- public SectionBrowserViewModel SectionBrowserViewModel
- {
- get
- {
- return _sectionBrowserViewModel;
- }
- }
-
public string WindowTitle
{
get
@@ -115,14 +124,19 @@ namespace Filtration.ViewModels
}
}
- [DoNotWire]
- public IItemFilterScriptViewModel ActiveDocument
+ public IDocument ActiveDocument
{
get { return _activeDocument; }
set
{
_activeDocument = value;
RaisePropertyChanged();
+
+ if (value.IsScript)
+ {
+ _activeScriptViewModel = (IItemFilterScriptViewModel)value;
+ }
+
if (ActiveDocumentChanged != null)
{
ActiveDocumentChanged(this, EventArgs.Empty);
@@ -134,6 +148,12 @@ namespace Filtration.ViewModels
}
}
+ public IItemFilterScriptViewModel ActiveScriptViewModel
+ {
+ get { return _activeScriptViewModel; }
+ }
+
+
public event EventHandler ActiveDocumentChanged;
public bool NoScriptsOpen
@@ -175,8 +195,9 @@ namespace Filtration.ViewModels
var newViewModel = _itemFilterScriptViewModelFactory.Create();
newViewModel.Initialise(_loadedScript);
- ScriptViewModels.Add(newViewModel);
- ActiveDocument = newViewModel;
+ _activeScriptViewModel = newViewModel;
+ OpenDocuments.Add((IDocument)newViewModel);
+ ActiveDocument = (IDocument)newViewModel;
}
private void SetItemFilterScriptDirectory()
@@ -206,7 +227,7 @@ namespace Filtration.ViewModels
{
if (!ValidateScript()) return;
- if (string.IsNullOrEmpty(ActiveDocument.Script.FilePath))
+ if (string.IsNullOrEmpty(_activeScriptViewModel.Script.FilePath))
{
OnSaveScriptAsCommand();
return;
@@ -214,8 +235,8 @@ namespace Filtration.ViewModels
try
{
- _persistenceService.SaveItemFilterScript(ActiveDocument.Script);
- ActiveDocument.RemoveDirtyFlag();
+ _persistenceService.SaveItemFilterScript(_activeScriptViewModel.Script);
+ _activeScriptViewModel.RemoveDirtyFlag();
}
catch (Exception e)
{
@@ -240,31 +261,31 @@ namespace Filtration.ViewModels
if (result != DialogResult.OK) return;
- var previousFilePath = ActiveDocument.Script.FilePath;
+ var previousFilePath = _activeScriptViewModel.Script.FilePath;
try
{
- ActiveDocument.Script.FilePath = saveDialog.FileName;
- _persistenceService.SaveItemFilterScript(ActiveDocument.Script);
- ActiveDocument.RemoveDirtyFlag();
+ _activeScriptViewModel.Script.FilePath = saveDialog.FileName;
+ _persistenceService.SaveItemFilterScript(_activeScriptViewModel.Script);
+ _activeScriptViewModel.RemoveDirtyFlag();
}
catch (Exception e)
{
MessageBox.Show(@"Error saving filter file - " + e.Message, @"Save Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
- ActiveDocument.Script.FilePath = previousFilePath;
+ _activeScriptViewModel.Script.FilePath = previousFilePath;
}
}
private void OnReplaceColorsCommand()
{
- _replaceColorsViewModel.Initialise(ActiveDocument.Script);
+ _replaceColorsViewModel.Initialise(_activeScriptViewModel.Script);
var replaceColorsWindow = new ReplaceColorsWindow {DataContext = _replaceColorsViewModel};
replaceColorsWindow.ShowDialog();
}
private bool ValidateScript()
{
- var result = ActiveDocument.Script.Validate();
+ var result = _activeScriptViewModel.Script.Validate();
if (result.Count == 0) return true;
@@ -283,17 +304,17 @@ namespace Filtration.ViewModels
private void OnCopyScriptCommand()
{
- Clipboard.SetText(_itemFilterScriptTranslator.TranslateItemFilterScriptToString(_activeDocument.Script));
+ Clipboard.SetText(_itemFilterScriptTranslator.TranslateItemFilterScriptToString(_activeScriptViewModel.Script));
}
private void OnCopyBlockCommand()
{
- _activeDocument.CopyBlock(_activeDocument.SelectedBlockViewModel);
+ _activeScriptViewModel.CopyBlock(_activeScriptViewModel.SelectedBlockViewModel);
}
private void OnPasteCommand()
{
- _activeDocument.PasteBlock(_activeDocument.SelectedBlockViewModel);
+ _activeScriptViewModel.PasteBlock(_activeScriptViewModel.SelectedBlockViewModel);
}
private void OnNewScriptCommand()
@@ -302,40 +323,66 @@ namespace Filtration.ViewModels
var newViewModel = _itemFilterScriptViewModelFactory.Create();
newViewModel.Initialise(newScript);
newViewModel.Description = "New Script";
- ScriptViewModels.Add(newViewModel);
- ActiveDocument = newViewModel;
+ _activeScriptViewModel = newViewModel;
+ OpenDocuments.Add((IDocument)newViewModel);
+ ActiveDocument = (IDocument)newViewModel;
}
- private void OnCloseScriptCommand(IItemFilterScriptViewModel scriptViewModel)
+ private void OnCloseScriptCommand(IDocument documentToClose)
{
- ActiveDocument = scriptViewModel;
- if (!ActiveDocument.IsDirty)
+ Close(documentToClose);
+ }
+
+ public void Close(IDocument documentToClose)
+ {
+ ActiveDocument = documentToClose;
+ if (ActiveDocument.IsScript)
{
- ScriptViewModels.Remove(ActiveDocument);
- }
- else
- {
- var result = MessageBox.Show(@"Want to save your changes to this script?",
- @"Filtration", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
- switch (result)
+ if (!_activeScriptViewModel.IsDirty)
{
- case DialogResult.Yes:
+ RemoveDocument(ActiveDocument);
+ }
+ else
+ {
+ var result = MessageBox.Show(@"Want to save your changes to this script?",
+ @"Filtration", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
+ switch (result)
{
- OnSaveScriptCommand();
- ScriptViewModels.Remove(ActiveDocument);
- break;
- }
- case DialogResult.No:
- {
- ScriptViewModels.Remove(ActiveDocument);
- break;
- }
- case DialogResult.Cancel:
- {
- break;
+ case DialogResult.Yes:
+ {
+ OnSaveScriptCommand();
+ RemoveDocument(ActiveDocument);
+ break;
+ }
+ case DialogResult.No:
+ {
+ RemoveDocument(ActiveDocument);
+ break;
+ }
+ case DialogResult.Cancel:
+ {
+ return;
+ }
}
}
}
+ else
+ {
+ RemoveDocument(documentToClose);
+ }
+
}
+
+ private void RemoveDocument(IDocument documentToRemove)
+ {
+ if (documentToRemove.IsScript)
+ {
+ _sectionBrowserViewModel.ClearDown();
+ }
+
+ OpenDocuments.Remove(documentToRemove);
+ }
+
+
}
}
diff --git a/Filtration/ViewModels/SectionBrowserViewModel.cs b/Filtration/ViewModels/SectionBrowserViewModel.cs
index d043ebf..f564205 100644
--- a/Filtration/ViewModels/SectionBrowserViewModel.cs
+++ b/Filtration/ViewModels/SectionBrowserViewModel.cs
@@ -1,32 +1,38 @@
using System;
using System.Collections.Generic;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
namespace Filtration.ViewModels
{
- internal interface ISectionBrowserViewModel
+ internal interface ISectionBrowserViewModel : IToolViewModel
{
+ void ClearDown();
}
internal class SectionBrowserViewModel : ToolViewModel, ISectionBrowserViewModel
{
- private IMainWindowViewModel _mainWindowViewModel;
private IEnumerable _sectionBlockViewModels;
private IItemFilterBlockViewModel _selectedSectionBlockViewModel;
public SectionBrowserViewModel() : base("Section Browser")
{
-
ContentId = ToolContentId;
- }
-
- public void Initialise(IMainWindowViewModel mainWindowViewModel)
- {
- _mainWindowViewModel = mainWindowViewModel;
- _mainWindowViewModel.ActiveDocumentChanged += OnActiveDocumentChanged;
+ var icon = new BitmapImage();
+ icon.BeginInit();
+ icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/add_section_icon.png");
+ icon.EndInit();
+ IconSource = icon;
}
public const string ToolContentId = "SectionBrowserTool";
+ public override void Initialise(IMainWindowViewModel mainWindowViewModel)
+ {
+ base.Initialise(mainWindowViewModel);
+ MainWindowViewModel.ActiveDocumentChanged += OnActiveDocumentChanged;
+ }
+
public IEnumerable SectionBlockViewModels
{
get { return _sectionBlockViewModels; }
@@ -43,13 +49,30 @@ namespace Filtration.ViewModels
set
{
_selectedSectionBlockViewModel = value;
+ if (MainWindowViewModel.ActiveDocument.IsScript)
+ {
+ MainWindowViewModel.ActiveScriptViewModel.SectionBrowserSelectedBlockViewModel = value;
+ }
RaisePropertyChanged();
}
}
private void OnActiveDocumentChanged(object sender, EventArgs e)
{
- SectionBlockViewModels = _mainWindowViewModel.ActiveDocument != null ? _mainWindowViewModel.ActiveDocument.ItemFilterSectionViewModels : null;
+ if (MainWindowViewModel.ActiveScriptViewModel != null && MainWindowViewModel.ActiveDocument.IsScript)
+ {
+ SectionBlockViewModels = MainWindowViewModel.ActiveScriptViewModel.ItemFilterSectionViewModels;
+ }
+ else
+ {
+ ClearDown();
+ }
+ }
+
+ public void ClearDown()
+ {
+ SectionBlockViewModels = null;
+ SelectedSectionBlockViewModel = null;
}
}
}
diff --git a/Filtration/ViewModels/StartPageViewModel.cs b/Filtration/ViewModels/StartPageViewModel.cs
new file mode 100644
index 0000000..2b6ab9b
--- /dev/null
+++ b/Filtration/ViewModels/StartPageViewModel.cs
@@ -0,0 +1,29 @@
+using GalaSoft.MvvmLight.CommandWpf;
+
+namespace Filtration.ViewModels
+{
+ internal interface IStartPageViewModel : IDocument
+ {
+ void Initialise(IMainWindowViewModel mainWindowViewModel);
+ }
+
+ internal class StartPageViewModel : PaneViewModel, IStartPageViewModel
+ {
+ private IMainWindowViewModel _mainWindowViewModel;
+
+ public StartPageViewModel()
+ {
+ Title = "Start Page";
+ }
+
+ public void Initialise(IMainWindowViewModel mainWindowViewModel)
+ {
+ _mainWindowViewModel = mainWindowViewModel;
+ }
+
+ public RelayCommand OpenScriptCommand { get { return _mainWindowViewModel.OpenScriptCommand; } }
+ public RelayCommand NewScriptCommand { get { return _mainWindowViewModel.NewScriptCommand; } }
+
+ public bool IsScript { get { return false; } }
+ }
+}
diff --git a/Filtration/ViewModels/ToolViewModel.cs b/Filtration/ViewModels/ToolViewModel.cs
index f9c3fda..bba616c 100644
--- a/Filtration/ViewModels/ToolViewModel.cs
+++ b/Filtration/ViewModels/ToolViewModel.cs
@@ -1,6 +1,11 @@
namespace Filtration.ViewModels
{
- class ToolViewModel : PaneViewModel
+ internal interface IToolViewModel
+ {
+ void Initialise(IMainWindowViewModel mainWindowViewModel);
+ }
+
+ class ToolViewModel : PaneViewModel, IToolViewModel
{
public ToolViewModel(string name)
{
@@ -23,5 +28,12 @@
}
}
}
+
+ protected IMainWindowViewModel MainWindowViewModel { get; private set; }
+
+ public virtual void Initialise(IMainWindowViewModel mainWindowViewModel)
+ {
+ MainWindowViewModel = mainWindowViewModel;
+ }
}
}
diff --git a/Filtration/Views/AttachedProperties/SelectingItemAttachedProperty.cs b/Filtration/Views/AttachedProperties/SelectingItemAttachedProperty.cs
new file mode 100644
index 0000000..4d5e8f6
--- /dev/null
+++ b/Filtration/Views/AttachedProperties/SelectingItemAttachedProperty.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using Filtration.ViewModels;
+
+namespace Filtration.Views.AttachedProperties
+{
+ internal class SelectingItemAttachedProperty
+ {
+ public static readonly DependencyProperty SelectingItemProperty = DependencyProperty.RegisterAttached(
+ "SelectingItem",
+ typeof(IItemFilterBlockViewModel),
+ typeof(SelectingItemAttachedProperty),
+ new PropertyMetadata(default(IItemFilterBlockViewModel), OnSelectingItemChanged));
+
+ public static IItemFilterBlockViewModel GetSelectingItem(DependencyObject target)
+ {
+ return (IItemFilterBlockViewModel)target.GetValue(SelectingItemProperty);
+ }
+
+ public static void SetSelectingItem(DependencyObject target, IItemFilterBlockViewModel value)
+ {
+ target.SetValue(SelectingItemProperty, value);
+ }
+
+ static void OnSelectingItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
+ {
+ var listBox = sender as ListBox;
+ if (listBox == null || listBox.SelectedItem == null)
+ {
+ return;
+ }
+
+ listBox.Dispatcher.InvokeAsync(() =>
+ {
+ listBox.UpdateLayout();
+ listBox.ScrollIntoView(listBox.SelectedItem);
+ });
+ }
+ }
+}
diff --git a/Filtration/Views/LayoutInitializer.cs b/Filtration/Views/AvalonDock/LayoutInitializer.cs
similarity index 53%
rename from Filtration/Views/LayoutInitializer.cs
rename to Filtration/Views/AvalonDock/LayoutInitializer.cs
index ec2696d..9452a37 100644
--- a/Filtration/Views/LayoutInitializer.cs
+++ b/Filtration/Views/AvalonDock/LayoutInitializer.cs
@@ -1,7 +1,7 @@
using System.Linq;
using Xceed.Wpf.AvalonDock.Layout;
-namespace Filtration.Views
+namespace Filtration.Views.AvalonDock
{
class LayoutInitializer : ILayoutUpdateStrategy
{
@@ -15,12 +15,29 @@ namespace Filtration.Views
destinationContainer.FindParent() != null)
return false;
- var toolsPane = layout.Descendents().OfType().FirstOrDefault(d => d.Name == "ToolsPane");
- if (toolsPane != null)
- {
- toolsPane.Children.Add(anchorableToShow);
- return true;
- }
+ //if (anchorableToShow.ContentId == "SectionBrowserTool")
+ //{
+ // var toolsPane = layout.Descendents().OfType().FirstOrDefault(d => d.Name == "SectionBrowserPane");
+ // if (toolsPane != null)
+ // {
+ // anchorableToShow.CanHide = false;
+ // toolsPane.Children.Add(anchorableToShow);
+ // return true;
+ // }
+ //}
+
+ //if (anchorableToShow.ContentId == "BlockGroupBrowserTool")
+ //{
+ // var toolsPane = layout.Descendents().OfType().FirstOrDefault(d => d.Name == "BlockGroupBrowserPane");
+ // if (toolsPane != null)
+ // {
+ // anchorableToShow.CanHide = false;
+ // toolsPane.Children.Add(anchorableToShow);
+ // return true;
+ // }
+ //}
+
+
return false;
diff --git a/Filtration/Views/PanesStyleSelector.cs b/Filtration/Views/AvalonDock/PanesStyleSelector.cs
similarity index 73%
rename from Filtration/Views/PanesStyleSelector.cs
rename to Filtration/Views/AvalonDock/PanesStyleSelector.cs
index ea96fe7..d3e7df7 100644
--- a/Filtration/Views/PanesStyleSelector.cs
+++ b/Filtration/Views/AvalonDock/PanesStyleSelector.cs
@@ -2,12 +2,12 @@
using System.Windows.Controls;
using Filtration.ViewModels;
-namespace Filtration.Views
+namespace Filtration.Views.AvalonDock
{
class PanesStyleSelector : StyleSelector
{
public Style ToolStyle { get; set; }
- public Style ScriptStyle { get; set; }
+ public Style DocumentStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
@@ -16,11 +16,11 @@ namespace Filtration.Views
return ToolStyle;
}
- if (item is IItemFilterScriptViewModel)
+ if (item is IDocument)
{
- return ScriptStyle;
+ return DocumentStyle;
}
-
+
return base.SelectStyle(item, container);
}
}
diff --git a/Filtration/Views/PanesTemplateSelector.cs b/Filtration/Views/AvalonDock/PanesTemplateSelector.cs
similarity index 66%
rename from Filtration/Views/PanesTemplateSelector.cs
rename to Filtration/Views/AvalonDock/PanesTemplateSelector.cs
index 6803e8c..8baab8d 100644
--- a/Filtration/Views/PanesTemplateSelector.cs
+++ b/Filtration/Views/AvalonDock/PanesTemplateSelector.cs
@@ -3,15 +3,14 @@ using System.Windows.Controls;
using Filtration.ViewModels;
using Xceed.Wpf.AvalonDock.Layout;
-namespace Filtration.Views
+namespace Filtration.Views.AvalonDock
{
class PanesTemplateSelector : DataTemplateSelector
{
public DataTemplate ItemFilterScriptTemplate { get; set; }
-
+ public DataTemplate BlockGroupBrowserTemplate { get; set; }
public DataTemplate SectionBrowserTemplate { get; set; }
-
-
+ public DataTemplate StartPageTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
@@ -27,6 +26,16 @@ namespace Filtration.Views
return SectionBrowserTemplate;
}
+ if (item is BlockGroupBrowserViewModel)
+ {
+ return BlockGroupBrowserTemplate;
+ }
+
+ if (item is StartPageViewModel)
+ {
+ return StartPageTemplate;
+ }
+
return base.SelectTemplate(item, container);
}
}
diff --git a/Filtration/Views/BlockGroupBrowserView.xaml b/Filtration/Views/BlockGroupBrowserView.xaml
new file mode 100644
index 0000000..6d33536
--- /dev/null
+++ b/Filtration/Views/BlockGroupBrowserView.xaml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Filtration/Views/BlockGroupBrowserView.xaml.cs b/Filtration/Views/BlockGroupBrowserView.xaml.cs
new file mode 100644
index 0000000..cceb3f2
--- /dev/null
+++ b/Filtration/Views/BlockGroupBrowserView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Filtration.Views
+{
+ ///
+ /// Interaction logic for BlockGroupBrowserView.xaml
+ ///
+ public partial class BlockGroupBrowserView : UserControl
+ {
+ public BlockGroupBrowserView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Filtration/Views/ItemFilterScriptView.xaml b/Filtration/Views/ItemFilterScriptView.xaml
index a8288f5..65b6823 100644
--- a/Filtration/Views/ItemFilterScriptView.xaml
+++ b/Filtration/Views/ItemFilterScriptView.xaml
@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:views="clr-namespace:Filtration.Views"
+ xmlns:attachedProperties="clr-namespace:Filtration.Views.AttachedProperties"
xmlns:viewModels="clr-namespace:Filtration.ViewModels"
xmlns:userControls="clr-namespace:Filtration.UserControls"
mc:Ignorable="d"
@@ -87,6 +88,7 @@
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ItemTemplateSelector="{StaticResource BlockTemplateSelector}"
+ attachedProperties:SelectingItemAttachedProperty.SelectingItem="{Binding SectionBrowserSelectedBlockViewModel}"
SelectedItem="{Binding SelectedBlockViewModel}" x:Name="BlocksListBox">
diff --git a/Filtration/Views/ItemFilterScriptView.xaml.cs b/Filtration/Views/ItemFilterScriptView.xaml.cs
index 76ed7e6..9d85b97 100644
--- a/Filtration/Views/ItemFilterScriptView.xaml.cs
+++ b/Filtration/Views/ItemFilterScriptView.xaml.cs
@@ -1,6 +1,4 @@
-using System.Windows.Controls;
-
-namespace Filtration.Views
+namespace Filtration.Views
{
public partial class ItemFilterScriptView
{
@@ -8,11 +6,5 @@ namespace Filtration.Views
{
InitializeComponent();
}
-
- private void SectionBrowserListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- var listBox = (ListBox) sender;
- BlocksListBox.ScrollIntoView(listBox.SelectedItem);
- }
}
}
diff --git a/Filtration/Views/MainWindow.xaml b/Filtration/Views/MainWindow.xaml
index a8f20d3..9345e3d 100644
--- a/Filtration/Views/MainWindow.xaml
+++ b/Filtration/Views/MainWindow.xaml
@@ -9,6 +9,7 @@
xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:converters="clr-namespace:Filtration.Converters"
xmlns:views="clr-namespace:Filtration.Views"
+ xmlns:viewsAvalonDock="clr-namespace:Filtration.Views.AvalonDock"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:MainWindowViewModel}"
Title="{Binding WindowTitle}" Height="707" Width="930" BorderThickness="1" BorderBrush="Black">
@@ -50,26 +51,37 @@
-
-
+
+
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
-
-
- Welcome to Filtration, to get started either
- create a new script or open an existing script
diff --git a/Filtration/Views/SectionBrowserView.xaml b/Filtration/Views/SectionBrowserView.xaml
index 30ff345..072f36a 100644
--- a/Filtration/Views/SectionBrowserView.xaml
+++ b/Filtration/Views/SectionBrowserView.xaml
@@ -11,7 +11,6 @@
diff --git a/Filtration/Views/StartPageView.xaml b/Filtration/Views/StartPageView.xaml
new file mode 100644
index 0000000..8e3793c
--- /dev/null
+++ b/Filtration/Views/StartPageView.xaml
@@ -0,0 +1,14 @@
+
+
+
+ Welcome to Filtration, to get started either
+ create a new script or open an existing script
+
+
+
diff --git a/Filtration/Views/StartPageView.xaml.cs b/Filtration/Views/StartPageView.xaml.cs
new file mode 100644
index 0000000..b5b2ba0
--- /dev/null
+++ b/Filtration/Views/StartPageView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Filtration.Views
+{
+ ///
+ /// Interaction logic for StartPageView.xaml
+ ///
+ public partial class StartPageView : UserControl
+ {
+ public StartPageView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Filtration/WindsorInstallers/ViewModelsInstaller.cs b/Filtration/WindsorInstallers/ViewModelsInstaller.cs
index 7be569e..0495abd 100644
--- a/Filtration/WindsorInstallers/ViewModelsInstaller.cs
+++ b/Filtration/WindsorInstallers/ViewModelsInstaller.cs
@@ -30,11 +30,21 @@ namespace Filtration.WindsorInstallers
.ImplementedBy()
.LifeStyle.Singleton);
+ container.Register(
+ Component.For()
+ .ImplementedBy()
+ .LifeStyle.Singleton);
+
container.Register(
Component.For()
.ImplementedBy()
.LifeStyle.Singleton);
+ container.Register(
+ Component.For()
+ .ImplementedBy()
+ .LifeStyle.Singleton);
+
container.AddFacility();
container.Register(
Component.For().AsFactory());