handle backspace during string

This commit is contained in:
Benjamin Popp
2018-12-18 07:20:32 -06:00
parent 73b618f65d
commit 04c53c806c
2 changed files with 21 additions and 2 deletions

View File

@@ -305,7 +305,12 @@ namespace HavenSoft.Gen3Hex.Core.ViewModels {
}
var run = Model.GetNextRun(index - 1) ?? new NoInfoRun(int.MaxValue);
if (run.Start <= index - 1 && run.Start + run.Length > index - 1) {
if (run is PCSRun pcs) {
for (int i = index - 1; i < run.Start + run.Length; i++) Model[i] = 0xFF;
var length = PCSString.ReadString(Model, run.Start);
Model.ObserveRunWritten(new PCSRun(run.Start, length, run.PointerSources));
RefreshBackingData();
} else if (run.Start <= index - 1 && run.Start + run.Length > index - 1) {
// I want to do a backspace at the end of this run
SelectionStart = scroll.DataIndexToViewPoint(run.Start);
var cellToText = new ConvertCellToText(Model, run.Start);

View File

@@ -186,7 +186,21 @@ namespace HavenSoft.Gen3Hex.Tests {
Assert.Equal(string.Empty, ((Anchor)viewPort[0, 0].Format).Format);
}
// test: backspace
[Fact]
public void UsingBackspaceMidStringMakesTheStringEndThere() {
var buffer = Enumerable.Repeat((byte)0xFF, 0x200).ToArray();
for (int i = 0; i < 0x10; i++) buffer[i] = 0x00;
var model = new PointerAndStringModel(buffer);
var viewPort = new ViewPort(new LoadedFile("test.txt", buffer), model) { Width = 0x10, Height = 0x10 };
// add an anchor with some data on the 2nd line
viewPort.SelectionStart = new Point(0, 1);
viewPort.Edit("^bob\"\" \"Hello World!\"");
viewPort.SelectionStart = new Point(6, 1);
viewPort.Edit(ConsoleKey.Backspace);
Assert.Equal("Hello\"", ((PCSString.Convert(model, 0x10, PCSString.ReadString(model, 0x10)))));
}
// TODO escape sequences