I'm trying to write an input widget that allows to set a timer, having visually defined sections for seconds, minutes, hours and, possibly, days.
Right now it fundamentally is a personal project for my own usage, so my query is mostly out of curiosity, but I may decide to release it publicly at some point.
I wasn't satisfied with what the toolkit I'm using (Qt) could provide (QDateTimeEdit), so I decided to write my own.
While some touch-based devices use clock-face looking widgets, I don't feel them as immediate as they should: they may be fine for touch-only devices, but they are terrible on desktop.
Coming from old-fashioned desktop experience, I am bound to spinbox-like controls: a widget that shows the current value, and allows its editing through:
- primary mouse button, by clicking the "arrow buttons" shown on the side;
- direct keyboard input;
- mouse wheel or similar "slide" input;
My attempt is to use separated spinboxes for each field, so that the user can easily click/wheel a field in order to change the related value.
In this case, the first two aspects are, in theory, quite intuitive:
- the "up arrow" will increase the current field value and, possibly, the "parent" one:
00:00:59
would become00:01:00
if the arrow is near the second section; - typing the value automatically sets the value of the field or the overall timeout (I think I can solve that by managing keyboard focus, but this is not really the point here);
Then I wanted to add support for the mouse wheel or similar events, and here comes the problem. As we all know, the wheel/slide behaviour has become ambiguous in the last years (and for good reasons): depending on the platform, or even the user configuration, we could have opposite results, and swiping/scrolling for a numeric control is not always intuitive.
I thought about adding a "hint" about the direction, showing where the greater or smaller value will be; here you can see a possible attempt (don't mind the appearance and the right side rectangle, it's just a test):
The above follows the concept of "up", showing greater values above the current one. But I'm not sure about its intuitiveness, especially considering that we're talking about time and a time out, and that, depending on the configuration the "up arrow button" may be opposite to the wheel/slide behavior:
- should a greater time out be shown above or below?
- should the greater/smaller timeout follow the same direction of the wheel?
- should the direction respect the wheel or the arrow buttons?
I've seen completely opposite display modes on touch devices (eg. vertically displaying 59, 00, 01
or 01, 00, 59
), but those are normally more intuitive: swiping up or down scrolls the displayed value. Mouse wheel events and arrow button clicks are different beasts.
I know that similar questions have been asked before, but in my research I've only found possible suggestions about what the arrow button or wheel/slide interaction may do, and showing a hint may result in unexpected behaviour: the visual hint may show higher values, following the arrow direction, or it may be the opposite following the wheel one.
I also know that similar issues have been raised before with related controls, most importantly the different behaviour between a spinbox and a combobox having similar values but using completely opposite logical orders: an "up action" on a spinbox increases the displayed value, while the same on a combobox (or its popup) may result in the opposite.
Furthermore, time is a very relative dimension: "up" or "down" may be perceived in different ways, and using time values for a timer (which fundamentally is the negative of a time perception) makes things even more confusing.