Altair messes this up, because in that fangame, the egg moves were edited but the limiter wasn't. So the two lengths don't match, and the egg-moves were filled with "00 00".
To support other ROMs with this kind of problem, accept early exits from the format searcher.
The Egg Move stream has 2 types of data in it, each of which is 2 bytes long. Either it's a pokemon, or it's a move. (There's also the end, FF FF). This is the initial test to show that we can read an egg move stream from a format.
* 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.
these operations were previously in the view. They didn't belong there. There is now a simple helper object (IContextItem) that is used to transfer info from the ViewModel to the View, so the View can build up the menu based on directions from the ViewModel. This should make further ContextMenu extending easier, and now possible to test.
Pull the completion code into a new type.
This is actualy way better organized now. But a lot of code had to move, so I'm not confident that I didn't introduce any bugs.
Some of these methods belonged as extension methods on IDataModel. They're only used in the ViewPort, but don't really do anything ViewPort specific... they act on a Model, with a few parameters. So make them called that way.
For a long time now, MainWindow has housed basically all the xaml for the entire application. It got too big. It now houses all the xaml for the view of the EditorViewModel (basically the viewmodel of the overall appliaction) while the tab content has been moved to a TabView (which has the ViewPort for a viewmodel). The TabView contains the HexElement, along with all the goods that wrap around it (the column/row headers, the address bar at the bottom, various scroll bars, the tools). Several of the methods were able to move from the main window to the TabView.
the theme selector was still a bit confusing, with both a light and dark mode. It's difficult (and not really neccissary) to get them both to look good at the same time. So now there's just one theme, the text is more clear, and I added swatches for selecting the primary text / background colors.
undo seemed to jump around in unexpected ways. The jump is now primarily based on data changes, not format changes. This means that adding/removing a pointer to a table will no longe jump to the table as the primary thing that changed.