+ typedef std::pair<TimeAxisView*,XMLNode*> TAVState;
+
+ struct VisualState {
+ double y_position;
+ double frames_per_unit;
+ nframes64_t leftmost_frame;
+ Editing::ZoomFocus zoom_focus;
+ bool zoomed_to_region;
+ std::list<TAVState> track_states;
+ };
+
+ std::list<VisualState*> undo_visual_stack;
+ std::list<VisualState*> redo_visual_stack;
+ VisualState* current_visual_state (bool with_tracks = true);
+ void undo_visual_state ();
+ void redo_visual_state ();
+ void use_visual_state (VisualState&);
+ bool no_save_visual;
+ void swap_visual_state ();
+
+ std::vector<VisualState*> visual_states;
+ sigc::connection visual_state_op_connection;
+ void start_visual_state_op (uint32_t n);
+ void cancel_visual_state_op (uint32_t n);
+ bool end_visual_state_op (uint32_t n);
+
+ nframes64_t leftmost_frame;
+ double frames_per_unit;
+ Editing::ZoomFocus zoom_focus;
+
+ void set_frames_per_unit (double);
+ void post_zoom ();