* update the TabView to use the MethodCommand and delete the explicit command in the FieldArrayElementViewModel
* Raise CanAcceptChanged whenever the viewmodel gets updated/copied
* CanAccept can return false, by calling Selection.Goto's CanExecute method.
* Selection.CanExecute can return false if asked to jump to null.
Changing the lower limit to 4 breaks some tests, because coercing multiple table elements into a single line no longer works correctly. Lower the limit to 1 and rely on the logic from the rest of the limit to force at least 4 elements per line.
During paste operations, we don't actually need autocomplete. It's important to keep the options in mind, but we can delay evaluation until they're actually used.
Change autocomplete related methods to return lazy IEnumerable objects instead of returning a pre-populated read-only list. Add a LazyList<T> class that can handle the once-time evaluation logic. If no element of the list is ever checked, then the auto-complete code never runs.
Change ViewPort's UpdateToolsFromSelection tha happens when the selection changes. Only evaluate it after the edit operation is complete.
When this flag is active (single instance for the entire app, but propagated down to the ScrollRegion for use), the scroll region will respond differently to questions about its min/max scroll and the data length. This makes it possible to focus in on a single table that you're editing.
* This hides the "hex" part of the hex editor for simple use cases, and makes the right scrollbar actually useful for editing tables.
* It also makes it easier to focus in on individual tables and streams when jumping around with pointers.
Allow @anchor(length) to create a new anchor in a location with at least (length) freespace. Length is in hex.
Allow thumb branch instructions to include an offset.
Allow goto instructions to include an offset.
If there's no data format, Home/End jump to the start/end of the line.
If there's a data format, Home/End jump to the start/ed of that format.
This is useful for quickly jumping to the end of a table, or selecting an entire table, or selecting an entire string/image/etc.
model.GetNewPointerAutocompleteOptions assumes that there's a leading character (probably `<` or `@`) that must be stripped off before looking for matches. So add a leading character, else the first character entered by the user doesn't count towards matching.
Add 3 new properties to the ViewModel:
* Auto Adjust Data Width, which allows the selection to adjust the width after a goto based on the width of the target data.
* Allow Multiple Elements per Line, which allows the selection to adjust the width in multiples of the desired width, to better utilize the availabe space.
* Stretch Data, which signals the view that it should make cells wider if possible, up to twice their normal width.
All 3 of these preference are stored at the Editor level.
Add default styles for Toggle Buttons, Expanders, and Tooltips, since all 3 of those are now needed.
The hex content normally jumps to a table when you select the table with the table tool. However, it doesn't jump if the table is already selected. The user experienced confusion, wanting to jump to the start of the table using the table drop-down, but they couldn't because they were already looking at that table.
in some cases, auto-moving runs and then updating the selection was really slow. For example, updating pokenames (and related tables). This was due to a bug where the scroll value was being updated incorrectly, resulting in excessive horizontal panning to align the data.
`Goto -> table` will currently adjust the data alignment to make the table rows line up in a useful way. However, getting the alignment back to normal after that requires doing another goto, which isn't intuitive.
make it possible to reset the alignment to default via a button.
* Introduced a base class for view model tests that includes some standard useful setup code. It can also be used via composition.
* Updated ViewPortEditTests to use the new utility to clean up the tests somewhat.
* Added a new test to express the desired behavior for copy/paste related to bit arrays.
* Fixed logic in ContinueCellEdit/BitArray to allow spaces in typed bit array text
* Fixed logic in CompleteEditOperation/BitArray to parse bit arrays correctly
* Fixed a selection bug where goto would format for table width even if you go to a location _before_ the start of that table.
* code quality improvements
* fix a crash when backspacing egg formats
* fix a crash when backspacing all the way to empty
* fix data corruption when edit-exiting multi-byte formats
*
* Don't offer table tool in context menu of loose text
* Yield buttons for IContextItems with commands
* Ctrl+Click on pointer out of range returns an error
* Auto-moving a parent table that's being extended notifies about the move.
hide the start screen while there are any tabs
Allow Horizontal Scrolling of the data area insetad of wrapping for wide tables.
Notify on width change only after scrolling is complete when jumping to anchors.
Fix a bug where scrolled table headers didn't display correctly.
- trying to edit a pointer but not starting with '<' now auto-inserts the leading '<'
- trying to complete a pointer without the closing '>' now auto-inserts the trailing '>'
- trying to make a pointer content with just two hex characters interprets as a hex byte
- goto with <> braces strips the braces
- goto with leading 8 or 9 (such as 8123456) subtracts 8000000
- right-click on text has a copy option
- enter, clicking off, or arrow keys now commit instead of reject
- copying an unnamed anchor names the anchor
- pasting an anchor with a used name renames the new anchor