+ DB db;
+
+ // State when doing a scrub operation on a timestamp with the mouse.
+ bool scrubbing = false;
+ int scrub_x_origin; // In pixels on the viewport.
+ int64_t scrub_pts_origin;
+
+ // Which element (e.g. pts_in on clip 4) we are scrubbing.
+ enum ScrubType { SCRUBBING_CLIP_LIST, SCRUBBING_PLAYLIST } scrub_type;
+ int scrub_row;
+ int scrub_column;
+
+ // Used to keep track of small mouse wheel motions on the camera index in the playlist.
+ int last_mousewheel_camera_row = -1;
+ int leftover_angle_degrees = 0;
+
+ // Some operations, notably scrubbing and scrolling, happen in so large increments
+ // that we want to group them instead of saving to disk every single time.
+ // If they happen (ie., we get a callback from the model that it's changed) while
+ // currently_deferring_model_changes, we fire off this timer. If it manages to elapse
+ // before some other event happens, we count the event. (If the other event is of the
+ // same kind, we just fire off the timer anew instead of taking any action.)
+ QTimer *defer_timeout;
+ std::string deferred_change_id;
+ StateProto deferred_state;
+
+ // Before a change that should be deferred (see above), currently_deferring_model_changes
+ // must be set to true, and current_change_id must be given contents describing what's
+ // changed to avoid accidental grouping.
+ bool currently_deferring_model_changes = false;
+ std::string current_change_id;