ViewPort.GetSelectionSpan needs to be decorator aware

This commit is contained in:
Benjamin Popp 2021-02-20 21:04:59 -06:00
parent 0e075a34b7
commit 31472fea77
2 changed files with 12 additions and 7 deletions

View File

@ -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; }

View File

@ -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;