This PR is essentially just about tidying up the UI creation logic. It moves the actual menu creation and callback handling of the Ui class into the constructor, and creates this as pretty much the first thing in the lcl-init file.
My logic for this is that it makes sense to have as much of the UI in place before creating the rendering engine.
One of the major things it does is split the list of programs out of the program loader. They're now a separate module that the loader and the UI requires. This allows creation of the UI without needing the loader to be created, which is problematic because it requires the full livecodelabcore.
This PR is essentially just about tidying up the UI creation logic. It moves the actual menu creation and callback handling of the Ui class into the constructor, and creates this as pretty much the first thing in the lcl-init file.
My logic for this is that it makes sense to have as much of the UI in place before creating the rendering engine.
One of the major things it does is split the list of programs out of the program loader. They're now a separate module that the loader and the UI requires. This allows creation of the UI without needing the loader to be created, which is problematic because it requires the full livecodelabcore.
it also removes some crufty code amongst this.