I think everybody is going about this all wrong with mock-ups, the current problems with the menu are not because it doesn’t have icons and a background, it’s screwed up because it’s not extensible, it acts as file browser when launching applications and it's controls are awful. So with that in mind - however less sexy – here is something that is in my opinion something far more useful, requirements.
The program shall have 5 XML formatted configuration files; menu.xml, sounds.xml, music.xml, backgrounds.xml, layout.xml
Menu.xml:
It Shall store the hieratical information of the menu structure, metadata for the menu’s programs to be launched and the categories the programs are organized into
It Shall have two types of nodes; program & group
Program nodes shall store:
- A display name for the program to be launched
- The path to the program to be launch
- The clock speed at which the processor will be set to run the program at
- The path to a png icon of the program 48x48px in size
- The path to a png icon of the program 48x48px in size to be used when the program is selected
- The path to a png preview of the program 160*120px in size
- The name of the author of the program
- A short text description of the program
Group nodes shall store:
- The name of the group
- The path to a png icon of the group 48x48px in size
- The path to a png icon of the group 48x48px in size to be used when the group is selected
- The path to a png preview of the group 160*120px in size
- A short text description of the group
The hieratical structure of the XML file shall provide the parent to child relationship between nodes. Program nodes may not have child nodes, Program nodes must have a parent node that is a group node. The root node of the xml file shall be a group node with a display name of “Main Menu”.
sounds.xml:
Shall provide a list of events and the path to an ogg formatted sound files to be played when these events occur:
The events shall include
- Menu Startup
- Application Launched
- Returned to Menu
- Low Battery
- Cursor Moved
- Category Selected
sounds.xml shall also provide a volume level at which the sounds are played
music.xml
It Shall provide a path to a to a directory containing sound files to be used for background music, as well as options for how the music is played
Options shall include
- Play Order (alphabetical, reverse alphabetical, shuffle)
- Volume
- Fade in length (number of seconds the music should take to transition from silence to the desired volume)
- Persist Song location (yes/no option – if yes when the menu is exited to launch an application the location the song is at is saved, and resumed when the menu is next entered)
backgrounds.xml
Each node in this file shall represent a possible random background image that can be used by the program. The node shall store the path to the image as well as information about how the image is displayed. Options for how the image can be displayed shall include:
- display-type (tiled, or centered)
- display-effect (scroll-left, scroll-right, scroll-up, scroll-down, scroll-up-left, scroll-up-right, scroll-down-left, scroll-down-right, rotate-left, rotate-right)
layout.xml
This file shall describe where or if the various elements stored in menu.xml are displayed. Additionally it will define an overlay png file that will be displayed on top of the background. This png file should use the alpha channel to define lighter and darker areas of the screen. The following elements will be represented by nodes with the nodes attributes describing the elements position and if the element is selectable, and how scrolling should be implemented if the area is not large enough for it’s contents (vertical or horizontal).
- Parent Icon Area
- Current Icon Area
- Selected Items Display Name
- Selected Items Description
- Selected Items Author
- Selected Items Preview
The file shall also describe the location of “widgets” that display that status of the GP2X. These widgets shall include:
- Battery Status
- TV Status
- CPU Status
- Volume Status
- SD Card Status
Navigation:
The program shall select the nearest selectable item in the direction pushed on the stick, and will scroll any scrollable areas to accomplish this. When a button is pressed the application associated with the selected item is launched, or if a category is selected the current Icon Area contents are moved to the Parent Icon Area and the new icons are displayed in the Current Icon Area.
Putting it all together:
By writing a program that can read in these configuration files and appropriately render the result, a menu system is generated that extremely flexible. This system could render a menu that looks like the current menu, looks like parag0n mock-up, or something completely different such as just displaying the program’s large preview image centered on the screen and scrolling left or right to select other programs. The organization of the menu itself would also be completely up to the user. By keeping each of the configuration files completely separate users would be able to trade, mix and match these pieces to produce a unique creation.