One of the flaws in Wesnoth's UI is that afyer you've been playing for
a while, the load-game dialog tends to list huge piles of autosaves
that are no longer really interesting; almost always you want to
reload the most recent save in a campaign.
About 18 months ago I floated a proposal to change the UI for loading
savegames so game saves are grouped into threads. Typically a thread would
be a sequence of saves that are a continuous history of a campaign,
though deleting saves in the middle could break a campaign into any
number of disjoint threads.
The UI would then turn into a two-level interface. Normally all you'd
see would be a list of the most recent saves in each thread; there
would be a way to descend into threads and see all saves in them in
the relatively unusual case that you want to go back in time within a
thread.
I am ready to implement this feature. In fact, I already have the
machinery for the lower half working in trunk. Thanks to YogiHH's
cleanup of the savegame code, I have been able to implement a "parent"
field in savefiles. Code can use these to run back down the ancestry
chain from any given save. Savefiles with no parent are thread roots,
usually the first autosave of a campaign - but as long as you have old
savefiles without a parent field in them, all of these will also be
treated as thread roots.
Furthermore, I have working code in dialogs.cpp::load_game_dialog()
that inverts the parent relation, creating a parent_to_child map.
Savefiles with no child are thread tips and usually the files users
will be interested in reloading.
This is all the infrastructure needed to support an improved,
thread-aware load-game dialog. The question, now, is what to do
with it at the presentation/UI level.
Here's the approach I favor:
Make the load dialog look something like a file manager, with
thread-tip saves behaving something like folders. That is, each
save gets an icon to its left. The icon may be
1. Blank, indicating a non-tip savefile
2. "+" (or variant) indicating a tip save for which all the ancestors
are visible in the list.
3. "-" (or variant) indicating a tip save for which ancestors are
not shown.
The default presentation would be to show only tip saves, all marked "-".
If you clicked on a "-", it would change to "+" and all the ancestor
saves associated with this tip would be displayed. If you clicked on
a "+", the ancestor-save lines corresponding to that that tip save
would be removed from the visible list and the icon would change to "-".
Clicking on a blank would have no effect.
Obviously this means the save list would have to be refreshed
whenever a - was toggled to + or vice-versa.
Less obviously, I think this facility would make both the
sort-by-name/sort-by-date toggle and the filter box pretty much
pointless, and they should probably be removed to simplify the code
and the UI.
Comments? Criticism? Technical issues? Alternate proposals? All
offers of help cheerfully accepted; I'd really rather not write more
C++ than I absolutely have to.
--
<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
The right of self-defense is the first law of nature: in most
governments it has been the study of rulers to confine this right
within the narrowest limits possible. Wherever standing armies
are kept up, and when the right of the people to keep and bear
arms is, under any color or pretext whatsoever, prohibited,
liberty, if not already annihilated, is on the brink of
destruction."
-- Henry St. George Tucker (in Blackstone's Commentaries)
_______________________________________________
Wesnoth-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-dev