der Mouse wrote:
Dialog boxes
for "Ooops, the emulator died." or "are you sure you
want to destroy what you were working on", and so forth.
A good example of...well, not policy imposed by a toolkit, but
certainly promtped by one. It drives me absolutely up the wall to get
dialog boxes for things like those; I would say they belong as messages
to, or prompts-and-reads in, the emulator console.
Well, UI design, is a long and huge topic. The toolkit doesn't
generally enforce policy on UI design, typically, the vendor provides a
best practices spec. For example, back in the day, Apple had a very
nice little Hypercard tutorial called "Making it Macintosh" that showed
what they thought was the proper way to do things. These things can be
quite useful. For example they describe under which conditions to use a
list, radio boxes, etc.
In terms of what you want in an emulator, it all depends on how you
virtualize access to the hardware. You need some way to tell the
emulator what file to use as a virtual hard drive, where to direct
serial ports, how to deal with networking, etc. Each of these can fail
in their own way, and differently from the way the original hardware
would, so you need some way to interact with the end user. And that's
where the problem lies.
Not all users are a like. Some want as little UI as possible, others
want more. Some want a text log, others want to be notified. So it's
hard to balance things out.
Ideally, and this is a personal view, I'd like to be able to show the
user what the hardware looked like and let them drag and drop cables or
click on buttons. Granted, it's not the same as on the real hardware,
but it's a step closer than just providing display output and not much else.
I've avoided adding too many normal UI items in LisaEm, and stuck with
using the menus as much as possible as they're less intrusive. But
there are times when you need to be able to tell the user, "Hey this
disk here has a serial number, deserialize it?" - and I've found that in
the long run that kind of pop up dialog box when you've just seen a file
picker is annoying. So yeah, in the current version (not yet released),
that's been replaced with a menu command that deserializes disks. I
don't know if that's a better approach, but personally it's less annoying.
For other things, if the user runs without a ROM, I let them pick what
device to boot off. Sure, I could have written my own ROM or taken
screen shots of what it looks like with the ROM, but wanted to make it
clear when they're running with or without a ROM, so instead, I
presented a normal list picker, so it's clear they're interacting with
the emulator and not the Lisa ROM or the OS. Was this a good decision,
I don't know, but I'm comfortable with it and so far no one's complained.
Now when you run without a ROM and your OS can't boot (maybe because
you've tried to boot off a non-bootable device, etc.) I put up a dialog
box saying that it failed and put up the error code the OS returned.
Additionally, I keep a list of text descriptions for the failures and
say those as well. You don't get that when you run with the ROM, but
IMHO, it's helpful to know why something failed (so that as a
programmer, I can be alerted to why it failed, not so much for the end
user, although they benefit too.) So, in this case, a pop up dialog box
is useful.
Others have opted for a status display, maybe in the form of a bar, or
button bar or a status line or whatever. I have some of this too, but I
want to keep from being intrusive and I don't want this to be the UI
that controls the operation of the emulator. Rather, I want the user to
click on the floppy drive when inserting a disk - for example.
Sure, there are a lot of analogs you can't provide for that way, and
there are a lot of places inside LisaEm where I'd like to provide more
real-life like configs. But I am very much interested in the process of
making those decisions. Why use wxWidgets vs Qt vs GTK vs pure Xlib.
Why implement is menu items vs a button bar, vs simulating what it looks
like in real life. How to interact with the user, how to configure
things, etc.
Some of those decisions are personal, others are experiments, but most
are "what do other apps which don't annoy their users do?" (and not
necessarily other emulators.)