Last week I had a little more time for Doomsday and managed to make progress with the UI. DaniJ worked on fixing the build for non-Windows platforms in addition to continuing savegame related refactoring.
Currently the driving force behind my UI related tasks is to get rid of the old GUI code in Doomsday. The final remaining bit is the multiplayer connection screen that allows finding servers and seeing information about them. My plan has been to integrate this functionality into the Game Selection menu that appears when no games are loaded (and in a separate Games dialog via the DE menu when a game is loaded).
Last week I continued this by adding a way to filter the set of visible games and specify a sort order for them. The Game Selection menu currently looks like this:
In addition to the filtering elements in the top, you'll note some changes since the previous post
: foldable containers now have a visual indicator next to the title. I've long intended to add this, however I'm not 100% happy with the appearance yet.
I also made a significant improvement to the UI framework in that it now has a built-in mechanism for automatically saving and restoring the state of UI widgets. I've taken this into use for the new game filter/sort settings and for the console history visual width (that you can drag with the mouse). The mechanism is closely related to how libdeng2 stores its configuration in the persist.pack
file in your runtime folder: the package now also contains a file called UIState
, where widgets can save their state as they see fit.
I then started work on a dialog for connecting to a multiplayer server whose network address is entered manually. I chose to add a separate dialog for this as I felt that the Game Selection menu was already getting rather complicated and I didn't want to add to its complexity. Going forward, we will continue to (re)evaluate what makes the most sense for the UI and will revise the design as necessary. For the time being, priority number one is to implement all the needed functionality so we can move ahead and drop the remainder of the old GUI code.
Meanwhile, DaniJ sorted out the gcc/clang build failures after his game plugin C-to-C++ conversions and refactoring. We also bumped into a compatibility issue with having Python 3 as the system default; our build scripts implicitly assume that version 2 is the default. We made a few modifications that allow the scripts to work on Unix based systems even when the default is version 3. At some point in the future, we will consider porting all the scripts to Python 3.
Next I will merge all my recent changes to the master and continue working on the manual MP connect dialog.