From 8545fa95cb33cb52a3e2716f5b4dae25d88b06b3 Mon Sep 17 00:00:00 2001 From: Haven1433 Date: Thu, 1 Sep 2022 19:58:16 -0500 Subject: [PATCH] add right-click menu for controlling base-16/base-10 for length box --- src/HexManiac.Core/ViewModels/ViewPort.cs | 17 +++++++++++++++-- src/HexManiac.WPF/Controls/AngleTextBox.xaml.cs | 7 +++++++ src/HexManiac.WPF/Controls/TabView.xaml | 9 ++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/HexManiac.Core/ViewModels/ViewPort.cs b/src/HexManiac.Core/ViewModels/ViewPort.cs index 991d0450..fc3eca72 100644 --- a/src/HexManiac.Core/ViewModels/ViewPort.cs +++ b/src/HexManiac.Core/ViewModels/ViewPort.cs @@ -334,6 +334,13 @@ namespace HavenSoft.HexManiac.Core.ViewModels { get => selectedLength; set => Set(ref selectedLength, value, SelectedLengthChanged); } + + private bool base10SelectionLength; + public bool Base10SelectionLength { + get => base10SelectionLength; + set => Set(ref base10SelectionLength, value, arg => UpdateSelectedAddress()); + } + public string SelectedElementName => selectedElementName; private void UpdateSelectedAddress() { @@ -346,7 +353,8 @@ namespace HavenSoft.HexManiac.Core.ViewModels { Set(ref selectedElementName, elementName ?? string.Empty, nameof(SelectedElementName)); int length = Math.Abs(dataIndex1 - dataIndex2) + 1; - Set(ref selectedLength, length.ToString("X1"), nameof(SelectedLength)); + var lengthText = base10SelectionLength ? length.ToString() : length.ToString("X1"); + Set(ref selectedLength, lengthText, nameof(SelectedLength)); } private void SelectedAddressChanged(string old) { @@ -355,7 +363,12 @@ namespace HavenSoft.HexManiac.Core.ViewModels { } private void SelectedLengthChanged(string old) { - if (!selectedLength.TryParseHex(out int length)) return; + int length; + if (base10SelectionLength) { + if (!int.TryParse(selectedLength, out length)) return; + } else { + if (!selectedLength.TryParseHex(out length)) return; + } var left = Math.Min(ConvertViewPointToAddress(SelectionStart), ConvertViewPointToAddress(SelectionEnd)); SelectionStart = ConvertAddressToViewPoint(left); SelectionEnd = ConvertAddressToViewPoint(left + length - 1); diff --git a/src/HexManiac.WPF/Controls/AngleTextBox.xaml.cs b/src/HexManiac.WPF/Controls/AngleTextBox.xaml.cs index 52395711..51ec2015 100644 --- a/src/HexManiac.WPF/Controls/AngleTextBox.xaml.cs +++ b/src/HexManiac.WPF/Controls/AngleTextBox.xaml.cs @@ -17,6 +17,7 @@ namespace HavenSoft.HexManiac.WPF.Controls { public partial class AngleTextBox { private static readonly Thickness TextContentThickness = new(0, 1, 0, 1); + private ContextMenu menu; private bool keepTextBoxForContextMenu; public TextBox GetTextBox() { @@ -146,6 +147,12 @@ namespace HavenSoft.HexManiac.WPF.Controls { BorderThickness = TextContentThickness, VerticalAlignment = VerticalAlignment.Stretch, }; + if (ContextMenu != null) { + menu = ContextMenu; + ContextMenu = null; + } + if (menu != null) textBox.ContextMenu = menu; + if (DataContext is FieldArrayElementViewModel) textBox.InputBindings.Add( new KeyBinding { Key = Key.Enter, diff --git a/src/HexManiac.WPF/Controls/TabView.xaml b/src/HexManiac.WPF/Controls/TabView.xaml index 2f299412..a0c39fa9 100644 --- a/src/HexManiac.WPF/Controls/TabView.xaml +++ b/src/HexManiac.WPF/Controls/TabView.xaml @@ -44,7 +44,14 @@ - + + + + + + +