the right-click menu was getting messed up since the textbox was going away whenever it lost focus... which happens every time we open a context menu. The new code now specifically keeps the TextBox around in situations where the contextmenu is opening.
When we extend a child array from a parent array expanding, it's possible to knock out another child of the same parent, which then needs to be re-added. Doing so makes us lose the pointers of that child, which is a metadata bug.
Just like with the constant, make sure that updating the child table length needs to check that all associated pointers exist.
These tables are first loaded with the wrong size and then updated once the constant is available. The tables need to clear correctly in the case of a conflict.
* do include a leading + for the first element if the stream allows for zero elements
* don't include a closing [] for the deep copied stream if there's already one in the stream
When upgrading from an older version, tablegroups get duplicated. Fix that.
* Using the same DefaultHash trick as with Lists, we can track which TableGroups have been edited by users. Remove all the TableGroups that haven't been edited during upgrade. Then add all the new TableGroups. Don't add a TableGroup that contains a Table that we've already added.
If the user modified a list or added new elements to it, don't modify the list during version upgrades. If the list has never been modified, go ahead and update the list based on the new default metadata.
This is implementing by storing a 'Default Hash' for lists. The user that modifies the list will leave the default hash alone, and the program can notice the mismatch and avoid updating the modified list.
* replace palette buttons with angle buttons
* replace prev/next commands with prev/next methods and CanExecute properties. Wrap these methods with Click handlers.
* In the click handlers, do some hacky logic to prevent auto-scrolling in response to the button getting enabled/disabled.
I may eventually rename PokemonModel to GbaModel or something. But it has a number of features (pointers, etc) that users want to use with other file types.
The logic to pull the data for this method used to actually load the entire model for Ruby/FireRed/Emerald. This is _very_ slow and made the tests start slowly, since enumerating them was such a cost.
The MemberData for this Theory now does all its work by looking only at tableReference, not actual models. This lets it load much faster.
Since it loads so fast, we can afford to check all 9 games that we support: R/S 1.0/1.1, FR/LG 1.0/1.1, and Emerald. So instead of only verifying R/FR/E, we can verify all 9.
Starting a test run or debug session is now much faster.
.gba files will continue to use <name>.toml for <name>.gba files. All other files will use <name>.<extension>.toml. This is to allow you to store metadata for both your .gba file and your .sav file if you want to. And maybe even an .ips or .ups if you get fancy.