From 31472fea77205bd09bfcb807f45acbf8dc56ef74 Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Sat, 20 Feb 2021 21:04:59 -0600 Subject: [PATCH] ViewPort.GetSelectionSpan needs to be decorator aware --- src/HexManiac.Core/ViewModels/DataFormats.cs | 8 ++++++-- src/HexManiac.Core/ViewModels/ViewPort.cs | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/HexManiac.Core/ViewModels/DataFormats.cs b/src/HexManiac.Core/ViewModels/DataFormats.cs index 12b636c5..7eebf794 100644 --- a/src/HexManiac.Core/ViewModels/DataFormats.cs +++ b/src/HexManiac.Core/ViewModels/DataFormats.cs @@ -149,7 +149,11 @@ namespace HavenSoft.HexManiac.Core.ViewModels.DataFormats { public void Visit(IDataFormatVisitor visitor, byte data) => visitor.Visit(this, data); } - public class Anchor : IDataFormat { + public interface IDataFormatDecorator : IDataFormat { + IDataFormat OriginalFormat { get; } + } + + public class Anchor : IDataFormatDecorator { public IDataFormat OriginalFormat { get; } public string Name { get; } public string Format { get; } @@ -165,7 +169,7 @@ namespace HavenSoft.HexManiac.Core.ViewModels.DataFormats { public void Visit(IDataFormatVisitor visitor, byte data) => visitor.Visit(this, data); } - public class SpriteDecorator : IDataFormat { + public class SpriteDecorator : IDataFormatDecorator { public IDataFormat OriginalFormat { get; } public IPixelViewModel Pixels { get; } public int CellWidth { get; } diff --git a/src/HexManiac.Core/ViewModels/ViewPort.cs b/src/HexManiac.Core/ViewModels/ViewPort.cs index cb5ba9ed..b50f3f04 100644 --- a/src/HexManiac.Core/ViewModels/ViewPort.cs +++ b/src/HexManiac.Core/ViewModels/ViewPort.cs @@ -889,7 +889,7 @@ namespace HavenSoft.HexManiac.Core.ViewModels { } public bool TryImport(LoadedFile file, IFileSystem fileSystem) { - if (file.Name.EndsWith(".hma")) { + if (file.Name.ToLower().EndsWith(".hma")) { var edit = Encoding.Default.GetString(file.Contents); Edit(edit); return true; @@ -1922,11 +1922,12 @@ namespace HavenSoft.HexManiac.Core.ViewModels { (Point, Point) pair(int start, int end) => (scroll.DataIndexToViewPoint(start), scroll.DataIndexToViewPoint(end)); - using (ModelCacheScope.CreateScope(Model)) { - if (run.CreateDataFormat(Model, index) is IDataFormatInstance instance) { - return pair(instance.Source, instance.Source + instance.Length - 1); - } + var format = run.CreateDataFormat(Model, index); + while (format is IDataFormatDecorator decorator) format = decorator.OriginalFormat; + if (format is IDataFormatInstance instance) { + return pair(instance.Source, instance.Source + instance.Length - 1); } + if (!(run is ITableRun array)) return (p, p); var naturalEnd = array.Start + array.ElementCount * array.ElementLength;