1

I have a React+Bootstrap app which displays a timeline of events, to which the user can add a grid, with vertical markers at regular intervals. The default interval is 1 second, so a vertical line is added to the timeline for every second of its duration. The timeline is toggled on and off with an icon button on a toolbar. However I want my users to be able to change the grid interval to any size they like - 1ms, 5 mins, 4 hours... whatever. Currently I implement this with a split dropdown: clicking the button area itself toggles the grid on with the defaults, but when the user clicks the arrow part the dropdown displays a number input, showing the current interval size, which they can use to set their own interval. I find this an unsatisfactory solution for a few of reasons:

  1. The user can alter the timegrid interval size even when the grid is not displayed, which seems wrong to me.
  2. A split button doesn't actually seem to be quite the right choice for this anyway, since this is really a matter of configuration, rather than 'alternatives to a main choice'.
  3. When the user makes such a choice it should immediately be applied, but with a number input this doesn't really work, as the user might want to click the input a few times to get their desired value. Then the only way to apply that value would seem to be with an 'OK' button on the dropdown.

Are there any other alternatives to this way of doing it? I considered a popup configuration dialog, but I want my users to be able to quickly change the value for the interval, without having another dialog to content with. I also thought about allowing the user to drag the grid lines to stretch the intervals, but this would not cater for arbitrary interval values (the user would always have to drag the lines to get to a particular value, which would be particularly problematic for a large change). I also don't want to add another control to the toolbar when the grid is toggled on, as the grid button is surrounded by other essential controls on either side, so such an extra control would have to shift the others along to the right.

This is an essential part of my application, one which users are likely to use a lot, so I want to get it right. I'm honestly a little stumped on how to solve this, however. Any suggestions/observations most welcome.

N.B: I also considered making the grid a permanent fixture, but the type of data displayed on the timeline (events in a musical score, measured in absolute time onsets) make that a less attractive option.

1
  • Adding images of you have thought of can help us better understand your problem. Feb 13, 2019 at 6:51

1 Answer 1

2

Try adding interval controls only when a user asks to display them. Keep the fields open for input, and surface the option to save only after a user modifies the time interval grid.

I hope I understand your use case correctly, but here goes:

The initial display can be your default. If most users find it helpful, start with the checkbox enabled. That state also displays the current grid marker interval.

  • Once the user edits, the save/cancel controls can appear, and disappear after submission
  • That prevents your 1 item: displaying intervals when the feature is disabled.

enter image description here

2
  • I was working on saying exactly this. Well put. Feb 12, 2019 at 21:28
  • Thank you for that. Indeed this was my very first solution to the issue, quite a few iterations back. I suspect now it is the only reasonable solution; my only issue with it is that my controls live on a toolbar similar to that of a rich text editor, consisting of icons with tooltips and no text. I like the idea of adding this kind of control layer underneath the main toolbar... but feel uncomfortable about mixing pure icon and text controls in my UI.
    – ChrisM
    Feb 12, 2019 at 22:57

Your Answer

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

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