Open main menu
Open Task
Task Name Improve GUI Usability
Technical Contact(s) Johannes Schickel Eugene Sandulenko
Subsystem Generic

Background:

ScummVM's GUI delivers various functionality to smooth out the user's experience when playing games supported by ScummVM. A typical set of tasks include: the management of games, setting options for individual games, offering an uniform interface for saving and loading inside games. Since not all games and target platforms support all the possible features in ScummVM our GUI has to reflect that in an intuitive way to the user.

Consider the following example: A user wants to setup individual options for The Curse of Monkey Island. This game does not have any MIDI support nor does it support different graphic render modes. Currently we still show the "MIDI" and "MT-32" (both MIDI related) tabs in the options menu of the launcher for it. Albeit we disable all the widgets in the MIDI menu this is confusing for the user, especially since these settings are grayed out, it would be more intuitive if these tabs would be just not shown at all. Furthermore in the "Graphics" tab the user can still select a graphics render mode via the "Render mode" pop up menu. We might be able to disable the widget (and thus gray it out). This does not feel right though, a better solution would be to remove that widget from the "Graphics" tab in the options menu. The latter is currently not possible since the layout of all of our dialogs is done rather statically via a theme file, which just allows for adaptations of the existing widgets in a dialog to the screen resolution.

Another example is our global main menu for games. We have a "Help" button in it, which is just used by the SCUMM engine currently. This is unintuitive for the user, especially since the widget is always enabled and just opens a dialog which basically says that this will not show any help for all the other engines. The solution to this would be to only insert the "Help" button for the SCUMM engine. This again is not possible because of how we layout and implement dialogs currently.

This task thus is aimed to improve our GUI infrastructure, i.e. the design and implementation, to support for the aforementioned features (and possible other nice features).

The Task:

  • Get familiar with our current GUI design and implementation.
  • Collect a set of requirements we have on an improved GUI. All the requirements collected in this process should be put together in a document to allow for easy review and evaluation of your task later on.
  • Create a new design for the GUI code/infrastructure to allow for all the collected requirements. (This design should of course be easily adaptable to requirement changes while in the process of this task and later on).
  • Implement the new GUI infrastructure, this should be done by a mix of refactoring of the current codebase and implementation of new features.
  • Test all the changes.
  • Create a proper documentation, which allows (new) developers to get familiar with the GUI infrastructure and be able to maintain/use it.

It might be noteworthy that getting familiar with the current code and the requirements collection should be done before the GSoC working phase and ideally as part as of your application for this task.

Required Skills:

  • Advanced C++ skills.
  • Strong refactoring skills.
  • Knowledge of at least one widely used GUI toolkit.
  • Solid knowledge of object oriented design.