From 4e770751826e5d453853f84cb41f8bb5aee03f3a Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 27 Jun 2015 22:24:35 +0100 Subject: [PATCH] Fixed memory leaks --- .../Translators/BlockGroupHierarchyBuilder.cs | 6 ++++++ .../Translators/ItemFilterScriptTranslator.cs | 3 ++- .../Translators/ThemeComponentListBuilder.cs | 8 +++++++- .../UserControls/ItemPreviewControl.xaml.cs | 15 ++++++++++----- .../ViewModels/AvalonDockWorkspaceViewModel.cs | 4 ++++ Filtration/ViewModels/ItemFilterBlockViewModel.cs | 10 ++++++++-- Filtration/ViewModels/MainWindowViewModel.cs | 8 +++----- Filtration/ViewModels/StartPageViewModel.cs | 3 ++- .../Views/AvalonDock/AvalonDockWorkspaceView.xaml | 4 ++-- 9 files changed, 44 insertions(+), 17 deletions(-) diff --git a/Filtration/Translators/BlockGroupHierarchyBuilder.cs b/Filtration/Translators/BlockGroupHierarchyBuilder.cs index 51487a7..1ece508 100644 --- a/Filtration/Translators/BlockGroupHierarchyBuilder.cs +++ b/Filtration/Translators/BlockGroupHierarchyBuilder.cs @@ -8,6 +8,7 @@ namespace Filtration.Translators internal interface IBlockGroupHierarchyBuilder { void Initialise(ItemFilterBlockGroup rootBlockGroup); + void Cleanup(); ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable groupStrings); } @@ -20,6 +21,11 @@ namespace Filtration.Translators _rootBlockGroup = rootBlockGroup; } + public void Cleanup() + { + _rootBlockGroup = null; + } + public ItemFilterBlockGroup IntegrateStringListIntoBlockGroupHierarchy(IEnumerable groupStrings) { if (_rootBlockGroup == null) diff --git a/Filtration/Translators/ItemFilterScriptTranslator.cs b/Filtration/Translators/ItemFilterScriptTranslator.cs index 80bfe9b..bc0f61e 100644 --- a/Filtration/Translators/ItemFilterScriptTranslator.cs +++ b/Filtration/Translators/ItemFilterScriptTranslator.cs @@ -70,7 +70,8 @@ namespace Filtration.Translators } script.ThemeComponents = _themeComponentListBuilder.GetComponents(); - + _blockGroupHierarchyBuilder.Cleanup(); + _themeComponentListBuilder.Cleanup(); return script; } diff --git a/Filtration/Translators/ThemeComponentListBuilder.cs b/Filtration/Translators/ThemeComponentListBuilder.cs index 616b64e..79a46af 100644 --- a/Filtration/Translators/ThemeComponentListBuilder.cs +++ b/Filtration/Translators/ThemeComponentListBuilder.cs @@ -12,6 +12,7 @@ namespace Filtration.Translators void Initialise(); ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor); List GetComponents(); + void Cleanup(); } internal class ThemeComponentListBuilder : IThemeComponentListBuilder @@ -27,7 +28,12 @@ namespace Filtration.Translators { _themeComponents = new List(); } - + + public void Cleanup() + { + _themeComponents = null; + } + public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, Color componentColor) { if (ComponentExists(componentType, componentName)) diff --git a/Filtration/UserControls/ItemPreviewControl.xaml.cs b/Filtration/UserControls/ItemPreviewControl.xaml.cs index 2a753d4..9b0ee7c 100644 --- a/Filtration/UserControls/ItemPreviewControl.xaml.cs +++ b/Filtration/UserControls/ItemPreviewControl.xaml.cs @@ -1,4 +1,5 @@ -using System.Windows; +using System; +using System.Windows; using System.Windows.Media; namespace Filtration.UserControls @@ -10,6 +11,7 @@ namespace Filtration.UserControls InitializeComponent(); // ReSharper disable once PossibleNullReferenceException (Content as FrameworkElement).DataContext = this; + } public static readonly DependencyProperty TextColorProperty = DependencyProperty.Register( @@ -35,9 +37,9 @@ namespace Filtration.UserControls public static readonly DependencyProperty BlockFontSizeProperty = DependencyProperty.Register( "BlockFontSize", - typeof(int), + typeof(double), typeof(ItemPreviewControl), - new FrameworkPropertyMetadata() + new FrameworkPropertyMetadata((double)19) ); public Color TextColor @@ -58,9 +60,12 @@ namespace Filtration.UserControls set { SetValue(BorderColorProperty, value); } } - public int BlockFontSize + public double BlockFontSize { - get { return (int)GetValue(BlockFontSizeProperty); } + get + { + return (double)GetValue(BlockFontSizeProperty); + } set { SetValue(BlockFontSizeProperty, value); } } } diff --git a/Filtration/ViewModels/AvalonDockWorkspaceViewModel.cs b/Filtration/ViewModels/AvalonDockWorkspaceViewModel.cs index e629d4b..d6b0f0f 100644 --- a/Filtration/ViewModels/AvalonDockWorkspaceViewModel.cs +++ b/Filtration/ViewModels/AvalonDockWorkspaceViewModel.cs @@ -145,6 +145,10 @@ namespace Filtration.ViewModels } _openDocuments.Remove(document); + if (_activeDocument == document) + { + _activeDocument = null; + } } public void SwitchActiveDocument(IDocument document) diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs index cf2d5a5..bd9d4da 100644 --- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs @@ -275,10 +275,16 @@ namespace Filtration.ViewModels get { return Block.HasBlockItemOfType(); } } - public int DisplayFontSize + public double DisplayFontSize { // Dividing by 1.8 roughly scales in-game font sizes down to WPF sizes - get { return HasFontSize ? (int)(BlockItems.OfType().First().Value / 1.8) : 19; } + get + { + var fontSize = HasFontSize ? (BlockItems.OfType().First().Value / 1.8) : 19; + + return fontSize; + + } } public bool HasSound diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index 8f5992e..b0984f0 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -98,8 +98,6 @@ namespace Filtration.ViewModels { case "ActiveDocumentChanged": { - _activeDocument = _avalonDockWorkspaceViewModel.ActiveDocument; - CopyScriptCommand.RaiseCanExecuteChanged(); SaveCommand.RaiseCanExecuteChanged(); SaveAsCommand.RaiseCanExecuteChanged(); @@ -178,7 +176,7 @@ namespace Filtration.ViewModels get { { - var isScript = _activeDocument is ItemFilterScriptViewModel; + var isScript = AvalonDockWorkspaceViewModel.ActiveDocument is ItemFilterScriptViewModel; return isScript; } } @@ -191,12 +189,12 @@ namespace Filtration.ViewModels public bool ActiveDocumentIsTheme { - get { { return _activeDocument is ThemeViewModel; } } + get { { return AvalonDockWorkspaceViewModel.ActiveDocument is ThemeViewModel; } } } private bool ActiveDocumentIsEditable() { - return _activeDocument is IEditableDocument; + return AvalonDockWorkspaceViewModel.ActiveDocument is IEditableDocument; } public bool ShowAdvancedStatus diff --git a/Filtration/ViewModels/StartPageViewModel.cs b/Filtration/ViewModels/StartPageViewModel.cs index 7fa2248..8318082 100644 --- a/Filtration/ViewModels/StartPageViewModel.cs +++ b/Filtration/ViewModels/StartPageViewModel.cs @@ -30,7 +30,8 @@ namespace Filtration.ViewModels { throw new System.NotImplementedException(); } - + + private static void OnOpenScriptCommand() { Messenger.Default.Send(new NotificationMessage("OpenScript")); diff --git a/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml b/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml index 9b4a2ab..b53ee20 100644 --- a/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml +++ b/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml @@ -24,9 +24,9 @@ AllowMixedOrientation="True" DocumentsSource="{Binding OpenDocuments}" ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}" > - +