nasa / openmct

A web based mission control framework.
https://nasa.github.io/openmct/
Other
12.07k stars 1.26k forks source link

[Timelines] Timeline Auto-follow Mode #1688

Closed charlesh88 closed 7 years ago

charlesh88 commented 7 years ago

Allow the Timeline view to follow the "current" time in whatever time system makes sense. Desired for WARP EOFY 2017 Capability Demo, stems from needs identified during RP15 DOT.

@VWoeltjen @costigan Updated UI now available at https://drive.google.com/open?id=0B0v27OM1JkSeR001RFJZMk43QVk starting on page 57.

Notes

charlesh88 commented 7 years ago

@costigan @larkin Please have a look and add any comments.

VWoeltjen commented 7 years ago
  • What to do if Timer is countdown? Does Time Conductor progress backwards?

"Countdown" timers are really counting up through negative durations. Don't think any difference is necessary here. Given the way SET is defined, a "countdown" timer would always be somewhere off the left edge of a timeline (once it's greater than SET 00:00:00, it becomes a "countup" timer)

  • Pausing or resetting a bound Timer would pause or restart time in the Time Conductor immediately and in all synced displays.

Ah, good case to consider. I think this will be one of the last things to implement; I'm curious to see what happens when this is not given any special attention. (If behavior is reasonable, I will likely want to punt this to a separate issue.)

  • All Timelines are in SET currently. Timers are in UTC. This would need to reconciled.

Timers are nice because they define a single reference time. If we presume this UTC time to be SET=0, that's all the reconciliation we need.

  • Allow Timeline to be unsynced and then resynced with the Time Conductor.
  • Timeline should display a "Follow" line 1 that is to the left of the right-most edge of the Gantt area. The user should be able to drag the line itself to set and persist a desired visual offset.
  • Pan should behave as in other objects, freezing the Timeline with a visual indication of that state as in other unsynced objects. Ideally, if the view is frozen and the Follow line is visible, it would continue to move relative to the Gantt area.

Agree on all of these; which are needed for demo? Would like to break down this implementation task a bit.

VWoeltjen commented 7 years ago

2) Allow the Time Conductor to use a specific Timer as its timebase, operating as if in real-time.

As I get into the details of implementing this, I realize it's a bit of a non sequitur. One of two things will be true:

The Timer is useful for the conversion from UTC to SET, which is only relevant to Timelines. I'm going to avoid sticking this in the time conductor for now; I'll use an indicator or something else simple, and we can review the UI later.

charlesh88 commented 7 years ago

Need to discuss:

Stashing WIP in my own topic branch for now, timeline-follow-1688-styling.

charlesh88 commented 7 years ago

@charlesh88 WIP in branch timeline-follow-1688-styling; image captures below based on that branch.

@VWoeltjen In my branch (and not yours) I'm seeing some weird behavior re. the Follow Line when zooming in the Timeline: when zooming out, I'll hit a threshold where suddenly the Follow Line is positioned incorrectly. In the sequence below, I zoom out from the initial condition of following the TC extents: all is well in images 1 -3, but you can see the Follow Line is clearly off in image 4. This always seems to occur when the text labels of each Gantt extent come fully back into view as I zoom out. Seems like there was some consequence to moving the Follow Line out of the ticks container in the markup.

screen shot 2017-09-18 at 3 19 03 pm screen shot 2017-09-18 at 3 19 08 pm screen shot 2017-09-18 at 3 19 15 pm screen shot 2017-09-18 at 3 20 01 pm

charlesh88 commented 7 years ago

Testing Notes

IMPORTANT: BUG #1741 SHOULD BE FIXED BEFORE WE TEST THIS

  1. Create a Timeline if you don't have one already. Make sure the Timeline is populated such that it starts at 00:00:00 and it's got some decent duration, more than 5 minutes or so.
  2. Create a Timer if you don't have one already.
  3. Create a new Display Layout and add both the Timer and the Timeline to it. Save the Layout and exit Edit mode.
  4. Set the Time Conductor to "Local Clock" mode, and change the Conductor's Start offset from -00:30:00 to -00:01:00: screen shot 2017-09-29 at 11 34 47 am
  5. In the Layout, restart the Timer so it begins again at 00:00:00. Click the Timer's context menu arrow, and select "Follow Timer" from the dropdown menu: screen shot 2017-09-29 at 11 30 50 am
  6. Observe: the Timeline should display a vertical blue "Follow Line" with a Timer icon at the top. The line will track across the Timeline, corresponding with the Timer's current time: screen shot 2017-09-29 at 11 31 59 am
  7. When the Follow Line tracks far enough to the right side of the Timeline, the line will become static, and the Timeline will begin to scroll to the left. screen shot 2017-09-29 at 11 53 35 am
  8. Change the zoom in the Timeline and observe: the blue Follow Line should continue to track the Timer. Additionally, the "Sync to Time Conductor Bounds" button will appear - click this button to resync the Timeline's bounds to the bounds of the Conductor.
  9. Pause the Timer, observe: tracking in the Time Conductor will also pause, and the Follow Line will remain visible.
jtrimble2100 commented 7 years ago

Works screen shot 2017-10-05 at 4 25 35 pm

fine, however... going from minus zoom then zooming back in can cause you to lose the line. It's still there, it's just not visible so some kind of UI element that recenters the line would be helpful. I found it by scrolling, but it was a bit dis-orienting to zoom in and lose it.

akhenry commented 7 years ago

Late to the party! Forgive me if I've misunderstood this and the following is total nonsense. A couple of thoughts -

  1. Why are we following timers? The time API should be the sole timing reference source. Two consequences of this are that -
  2. Timelines should support UTC and SET, and
  3. Time Conductor should support UTC and SET

In short, SET should be a time system. Both time conductor and timelines should follow it. For now it can be controlled by a local timer that can be started and stopped arbitrarily for testing purposes, but ultimately we're going to need an external reference for SET so everyone's seeing the same thing.

Having timelines following a local timer, while the conductor is following UTC in real-time mode is confusing to me.

Timelines don't currently support UTC, which is fine, we can just support following in timelines if the SET time system is active.

larkin commented 7 years ago

@akhenry timers are synchronized across clients and staked to the local clock such that everyone sees the same values so long as local clocks are synchronized, and everyone will see the timeline start/stop advancing with only a single person start/stopping the timer.

It doesn't follow the time conductor is because the procedure might not have started but there is still real-time data flowing and you don't want to stop seeing realtime. It's mainly just to coordinate execution.

And, moreso it's an experiment to support some simulations, and we'll learn more about how we think it should work from those simulations.

akhenry commented 6 years ago

@charlesh88 @vicfx Can we close this? Looks like Jay verified back in October, and we've run several demos using this functionality.

akhenry commented 6 years ago

Testers - please test general auto-follow functionality so we can remove the unverified label here :)

To setup a timeline to follow a timer -

  1. Choose a timer, and from the context menu select 'follow'.
  2. Navigate to a timeline (eg. WARP Demo 2017.ARC > Components > Timeline > Science Station 7)
  3. Start the timer (or restart at 0 if it's already running).
  4. Observe the time of interest line moving across the timeline.
charlesh88 commented 6 years ago

Testathon 03-30-2018: verified fixed.

psarram commented 6 years ago

Verified fixed in Testathon 3/30/18.