I've been working on, more for a hobbyist sake (and my personal use), a music player program. Actually playing the files is not at issue, but what is more at issue is the layout of the functions. The main things I wanted to accomplish in terms of requirements, which will hopefully help guide in what I'm asking:

  1. Minimally intrusive. More or less, the program sits in the notification area and only shows forms when certain functions require it. A popup menu controls the player.
  2. Able to take a collection of music files and select specific files based on certain criteria and play them continually until the user stops the program.
  3. Able to select/load specific files on demand.
  4. Offer certain controls related to the player itself and the ability to skip tracks when they are played.

While I have it more or less functional, minus a few crashes that need to get fixed, the whole layout of the functions seems a bit awkward and I've been struggling to think of a better way to handle it:

Jukebox Controls - related to #2 (Load collection, settings, start, stop set).

File Controls - related to #3 (Load/Previous/Next)

Player Controls - related to #4.

Now, for a number of reasons, this layout is striking me as awkward, both in terms of coding the functions (the actual player code has an "open" and "playing" event that's a little different depending on what part is in operation) and using the program. This seems to especially happen when it comes to using the file controls for the same general functions in the Jukebox set of functions. I thought about completely disabling the other group of functions when the other is in use (i.e. "File Controls" is grayed out while "Jukebox" function is in use) and duplicating the "Next" function, but that seems a bit awkward, too.

Since I'm more or less at a loss thinking of a way to do this that seems "natural", I thought I'd ask here. Does anyone have any suggestions on how to change the layout of the menu to make things act smoother?

Edit: As I wrote before, the program operates in the system notification area using a popup menu. There's really not much to see for a screen shot. But I restated the popup menu structure a little more literally here:

Program layout

  • 4
    Any screenshots of your current design for better undestanding of your question?
    – Serg
    Jul 19, 2013 at 6:15
  • @Serg Not really much to see in a screenshot. But I put a more graphical statement of the popup menu in the main post.
    – Glenn1234
    Jul 19, 2013 at 23:36
  • So Jukebox Controls control the application itself. Is this right? How do Load Media and File>Load differ from one another? Jul 23, 2013 at 5:33
  • @JessicaYang Load Media is for function #2, File>Load is for function #3. The main reason for the app is the functionality under "Jukebox Controls", but I want to retain the ability to load specific songs should the user do it.
    – Glenn1234
    Jul 23, 2013 at 16:01

2 Answers 2


Let's look at some functions you said the player has:

Able to take a collection of music files and select specific files based on certain criteria and play them continually until the user stops the program. (Currently under Jukebox Controls)


Able to select/load specific files on demand. (Currently under File Controls)

These two both implement the basic functionality of 'load some music so I can start listening to it', and you've already noted that it seems kind of awkward to have two sets of similar options, so why has this happened? My guess is that your current menu design was built around the implementation model of your program: how you, as the dev, know how the music player actually works.

However, the user doesn't care if you have two functions called loadFileset() and loadOneFile() in your code. In fact, you could have loadWavFile() and loadOggFile() and a million other functions and the user wouldn't care nor want to see them in the UI. My guess is someone using this really just wants to load some music and be able to start listening to their favorite songs. And that's what you need to design for.

Actual suggestions: to me, at least, your functions seem to fall into three logical groups:

  1. Load Music
  2. Play Music
  3. Settings (and stuff like About and Exit and whatever)

I would start reorganizing/thinking about my menu items from there. I hope your code is easy to rewrite!

I would also argue that prev/next belong with the player controls instead of file controls. When playing music, files become tracks to users - they're no longer just a bunch of .mp3 and .wma and .ogg files in a directory; they all become pieces of music and should be treated accordingly.

Background reading on implementation, representation and mental models: http://www.uxpassion.com/blog/strategy-concepts/implementation-mental-representation-models-ux-user-experience. Although the diagram there is definitely stolen from somewhere - I can't remember which book...possibly About Face 3 by Alan Cooper. (can someone else verify?)

  • Thanks for your comments. While it's taken a while for me to get back to this project, it's helped in how to handle the menus.
    – Glenn1234
    Oct 2, 2013 at 6:06
  • that's great! what did you end up using? Oct 8, 2013 at 20:10
  • I removed the "Load specific file on demand" functions and then flattening the popup menu so there's only one level relating to the "randomly play stuff" functions. The "load specific file" functions weren't that important to the intent of the program and were better done with a standard player. I might add a "force specific music next" function later if it proves useful, but the menu is functioning much better now.
    – Glenn1234
    Oct 9, 2013 at 1:19

In fact you have two entities - Jukebox and Player. Files is one of the sources for Jukebox while loading and playlist item for Player. Also, Player command are used more often than Jukebox. So your menu could be as follows:


Play / Pause





Load (Media or File)



PS. Sorry, I didn't understand Start/Stop Jukebox commands.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.