editor window layout changes, and lots more
[ardour.git] / gtk2_ardour / editor.h
1 /*
2     Copyright (C) 2000-2003 Paul Davis 
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18     $Id$
19 */
20
21 #ifndef __ardour_editor_h__
22 #define __ardour_editor_h__
23
24 #include <list>
25 #include <map>
26 #include <set>
27 #include <string>
28 #include <sys/time.h>
29
30 #include <libgnomecanvasmm/canvas.h>
31 #include <libgnomecanvasmm/group.h>
32 #include <libgnomecanvasmm/line.h>
33
34 #include <cmath>
35
36 #include <sndfile.h>
37
38 #include <gtkmm/layout.h>
39 #include <gtkmm/comboboxtext.h>
40
41 #include <gtkmm2ext/selector.h>
42 #include <gtkmm2ext/click_box.h>
43
44 #include <ardour/stateful.h>
45 #include <ardour/session.h>
46 #include <ardour/tempo.h>
47 #include <ardour/location.h>
48 #include <ardour/region.h>
49
50 #include "audio_clock.h"
51 #include "gtk-custom-ruler.h"
52 #include "ardour_dialog.h"
53 #include "public_editor.h"
54 #include "editing.h"
55 #include "enums.h"
56 #include "region_selection.h"
57 #include "canvas.h"
58
59 namespace Gtkmm2ext {
60         class TearOff;
61 }
62
63 namespace LinuxAudioSystems {
64         class AudioEngine;
65 }
66
67 namespace ARDOUR {
68         class DiskStream;
69         class RouteGroup;
70         class Source;
71         class Playlist;
72         class Region;
73         class Location;
74         class TempoSection;
75         class NamedSelection;
76         class Session;
77         class AudioFilter;
78         class Crossfade;
79 }
80
81 namespace LADSPA {
82         class Plugin;
83 }
84
85 class TimeAxisView;
86 class AudioTimeAxisView;
87 class AutomationTimeAxisView;
88 class AudioRegionView;
89 class CrossfadeView;
90 class PluginSelector;
91 class PlaylistSelector;
92 class Marker;
93 class GroupedButtons;
94 class AutomationLine;
95 class UIExportSpecification;
96 class ExportDialog;
97 class Selection;
98 class TimeSelection;
99 class TrackSelection;
100 class AutomationSelection;
101 class MixerStrip;
102 class StreamView;
103 class ControlPoint;
104
105 /* <CMT Additions> */
106 class ImageFrameView;
107 class ImageFrameTimeAxisView;
108 class ImageFrameTimeAxis;
109 class MarkerTimeAxis ;
110 class MarkerView ;
111 class ImageFrameSocketHandler ;
112 class TimeAxisViewItem ;
113 /* </CMT Additions> */
114
115
116 class Editor : public PublicEditor
117 {
118   public:
119         Editor (ARDOUR::AudioEngine&);
120         ~Editor ();
121
122         void             connect_to_session (ARDOUR::Session *);
123         ARDOUR::Session* current_session() const { return session; }
124
125         jack_nframes_t leftmost_position() const { return leftmost_frame; }
126         jack_nframes_t current_page_frames() const {
127                 return (jack_nframes_t) floor (canvas_width * frames_per_unit);
128         }
129
130         void set_snap_to (Editing::SnapType);
131         void set_snap_mode (Editing::SnapMode);
132         void set_snap_threshold (double pixel_distance) {snap_threshold = pixel_distance;}
133
134         void undo (uint32_t n = 1);
135         void redo (uint32_t n = 1);
136
137         XMLNode& get_state ();
138         int set_state (const XMLNode& );
139
140         void set_mouse_mode (Editing::MouseMode, bool force=true);
141         void step_mouse_mode (bool next);
142         Editing::MouseMode current_mouse_mode () { return mouse_mode; }
143
144         void add_imageframe_time_axis(std::string track_name, void*) ;
145         void add_imageframe_marker_time_axis(std::string track_name, TimeAxisView* marked_track, void*) ;
146         void connect_to_image_compositor() ;
147         void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) ;
148         TimeAxisView* get_named_time_axis(std::string name) ;
149         /* </CMT Additions> */
150
151         void consider_auditioning (ARDOUR::Region&);
152         void hide_a_region (ARDOUR::Region&);
153         void remove_a_region (ARDOUR::Region&);
154
155         /* option editor-access */
156
157         void set_show_waveforms (bool yn);
158         bool show_waveforms() const { return _show_waveforms; }
159
160         void set_show_waveforms_recording (bool yn);
161         bool show_waveforms_recording() const { return _show_waveforms_recording; }
162         
163         /* things that need to be public to be used in the main menubar */
164
165         void new_region_from_selection ();
166         void separate_region_from_selection ();
167         void toggle_playback (bool with_abort);
168
169         /* undo related */
170
171         void set_edit_menu (Gtk::Menu&);
172
173         jack_nframes_t unit_to_frame (double unit) {
174                 return (jack_nframes_t) rint (unit * frames_per_unit);
175         }
176         
177         double frame_to_unit (jack_nframes_t frame) {
178                 return rint ((double) frame / (double) frames_per_unit);
179         }
180
181         double frame_to_unit (double frame) {
182                 return rint (frame / frames_per_unit);
183         }
184
185         /* NOTE: these functions assume that the "pixel" coordinate is
186            the result of using the world->canvas affine transform on a
187            world coordinate. These coordinates already take into
188            account any scrolling carried out by adjusting the
189            xscroll_adjustment.  
190         */
191
192         jack_nframes_t pixel_to_frame (double pixel) {
193                 
194                 /* pixel can be less than zero when motion events
195                    are processed. since we've already run the world->canvas
196                    affine, that means that the location *really* is "off
197                    to the right" and thus really is "before the start".
198                 */
199
200                 if (pixel >= 0) {
201                         return (jack_nframes_t) rint (pixel * frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit);
202                 } else {
203                         return 0;
204                 }
205         }
206
207         gulong frame_to_pixel (jack_nframes_t frame) {
208                 return (gulong) rint ((frame / (frames_per_unit *  GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit)));
209         }
210
211         /* selection */
212
213         Selection& get_selection() const { return *selection; }
214         Selection& get_cut_buffer() const { return *cut_buffer; }
215
216         void play_selection ();
217         void select_all_in_track (bool add);
218         void select_all (bool add);
219         void invert_selection_in_track ();
220         void invert_selection ();
221
222         /* tempo */
223
224         void set_show_measures (bool yn);
225         bool show_measures () const { return _show_measures; }
226
227         /* export */
228
229         /* these initiate export ... */
230         
231         void export_session();
232         void export_selection();
233
234         /* this is what actually does it */
235         
236         void export_audiofile (ARDOUR::AudioExportSpecification&);
237
238         /* */
239
240         void add_toplevel_controls (Gtk::Container&);
241
242         void      set_zoom_focus (Editing::ZoomFocus);
243         Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
244         gdouble   get_current_zoom () { return frames_per_unit; }
245
246         void temporal_zoom_step (bool coarser);
247
248         /* stuff that AudioTimeAxisView and related classes use */
249
250         PlaylistSelector& playlist_selector() const;
251         void route_name_changed (TimeAxisView *);
252         gdouble        frames_per_unit;
253         jack_nframes_t leftmost_frame;
254         void clear_playlist (ARDOUR::Playlist&);
255
256         TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
257
258         Width editor_mixer_strip_width;
259         void show_editor_mixer (bool yn);
260         void set_selected_mixer_strip (TimeAxisView&);
261         void unselect_strip_in_display (TimeAxisView& tv);
262         void select_strip_in_display (TimeAxisView* tv);
263
264         /* nudge is initiated by transport controls owned by ARDOUR_UI */
265
266         void nudge_forward (bool next);
267         void nudge_backward (bool next);
268
269         /* nudge initiated from context menu */
270
271         void nudge_forward_capture_offset ();
272         void nudge_backward_capture_offset ();
273
274         /* playhead/screen stuff */
275         
276         void set_follow_playhead (bool yn);
277         void toggle_follow_playhead ();
278         bool follow_playhead() const { return _follow_playhead; }
279
280         /* xfades */
281
282         void toggle_xfades_active();
283         void toggle_xfade_visibility ();
284         void set_xfade_visibility (bool yn);
285         bool xfade_visibility() const { return _xfade_visibility; }
286
287         /* redirect shared ops menu. caller must free returned menu */
288
289         Gtk::Menu* redirect_menu ();
290
291         /* floating windows/transient */
292
293         void ensure_float (Gtk::Window&);
294
295         void show_window ();
296         
297         void scroll_tracks_down_line ();
298         void scroll_tracks_up_line ();
299
300         bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; }
301         void prepare_for_cleanup ();
302
303         void reposition_x_origin (jack_nframes_t sample);
304
305   protected:
306         void map_transport_state ();
307         void map_position_change (jack_nframes_t);
308
309         void on_realize();
310
311   private:
312         
313         ARDOUR::Session     *session;
314         ARDOUR::AudioEngine& engine;
315         bool                 constructed;
316
317         PlaylistSelector* _playlist_selector;
318
319         enum ItemType {
320                 RegionItem,
321                 StreamItem,
322                 PlayheadCursorItem,
323                 EditCursorItem,
324                 MarkerItem,
325                 MarkerBarItem,
326                 RangeMarkerBarItem,
327                 TransportMarkerBarItem,
328                 SelectionItem,
329                 GainControlPointItem,
330                 GainLineItem,
331                 GainAutomationControlPointItem,
332                 GainAutomationLineItem,
333                 PanAutomationControlPointItem,
334                 PanAutomationLineItem,
335                 RedirectAutomationControlPointItem,
336                 RedirectAutomationLineItem,
337                 MeterMarkerItem,
338                 TempoMarkerItem,
339                 MeterBarItem,
340                 TempoBarItem,
341                 AudioRegionViewNameHighlight,
342                 AudioRegionViewName,
343                 StartSelectionTrimItem,
344                 EndSelectionTrimItem,
345                 AutomationTrackItem,
346                 FadeInItem,
347                 FadeInHandleItem,
348                 FadeOutItem,
349                 FadeOutHandleItem,
350
351                 /* <CMT Additions> */
352                 MarkerViewItem,
353                 MarkerTimeAxisItem,
354                 MarkerViewHandleStartItem,
355                 MarkerViewHandleEndItem,
356                 ImageFrameItem,
357                 ImageFrameTimeAxisItem,
358                 ImageFrameHandleStartItem,
359                 ImageFrameHandleEndItem,
360                 /* </CMT Additions> */
361
362                 CrossfadeViewItem,
363                 
364                 /* don't remove this */
365
366                 NoItem
367         };
368
369         void          set_frames_per_unit (double);
370         void          frames_per_unit_modified ();
371
372         Editing::MouseMode mouse_mode;
373         void      mouse_insert (GdkEventButton *);
374
375         void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*);
376
377         Gtk::Notebook the_notebook;
378         Gtk::HPaned   edit_pane;
379
380         Gtk::EventBox meter_base;
381         Gtk::HBox     meter_box;
382         Gtk::EventBox marker_base;
383         Gtk::HBox     marker_box;
384         Gtk::VBox     scrollers_rulers_markers_box;
385
386         void location_changed (ARDOUR::Location *);
387         void location_flags_changed (ARDOUR::Location *, void *);
388         void refresh_location_display ();
389         void refresh_location_display_s (ARDOUR::Change);
390         void refresh_location_display_internal (ARDOUR::Locations::LocationList&);
391         void add_new_location (ARDOUR::Location *);
392         void location_gone (ARDOUR::Location *);
393         void remove_marker (ArdourCanvas::Item&, GdkEvent*);
394         gint really_remove_marker (ARDOUR::Location* loc);
395
396         uint32_t location_marker_color;
397         uint32_t location_range_color;
398         uint32_t location_loop_color;
399         uint32_t location_punch_color;
400         uint32_t location_cd_marker_color;
401
402         struct LocationMarkers {
403             Marker* start;
404             Marker* end;
405
406             ~LocationMarkers ();
407
408             void hide();
409             void show ();
410             void set_name (const string&);
411             void set_position (jack_nframes_t start, jack_nframes_t end = 0);
412             void set_color_rgba (uint32_t);
413         };
414
415         LocationMarkers  *find_location_markers (ARDOUR::Location *);
416         ARDOUR::Location* find_location_from_marker (Marker *, bool& is_start);
417
418         typedef std::map<ARDOUR::Location*,LocationMarkers *> LocationMarkerMap;
419         LocationMarkerMap location_markers;
420
421         void hide_marker (ArdourCanvas::Item*, GdkEvent*);
422         void clear_marker_display ();
423         void mouse_add_new_marker (jack_nframes_t where);
424
425         TimeAxisView*      clicked_trackview;
426         AudioTimeAxisView* clicked_audio_trackview;
427         AudioRegionView*   clicked_regionview;
428         AudioRegionView*   latest_regionview;
429         uint32_t           clicked_selection;
430         CrossfadeView*     clicked_crossfadeview;
431         ControlPoint*      clicked_control_point;
432
433         void catch_vanishing_audio_regionview (AudioRegionView *);
434         void set_selected_control_point_from_click (bool add = false, bool with_undo = true, bool no_remove=false);
435         void set_selected_track_from_click (bool add = false, bool with_undo = true, bool no_remove=false);
436         void set_selected_regionview_from_click (bool add = false, bool no_track_remove=false);
437         void set_selected_regionview_from_region_list (ARDOUR::Region& region, bool add = false);
438         bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, ARDOUR::Region*);
439         void collect_new_region_view (AudioRegionView *);
440
441         Gtk::Menu track_context_menu;
442         Gtk::Menu track_region_context_menu;
443         Gtk::Menu track_selection_context_menu;
444         Gtk::Menu track_crossfade_context_menu;
445
446         Gtk::MenuItem* region_edit_menu_split_item;
447         Gtk::MenuItem* region_edit_menu_split_multichannel_item;
448         Gtk::Menu * track_region_edit_playlist_menu;
449         Gtk::Menu * track_edit_playlist_submenu;
450         Gtk::Menu * track_selection_edit_playlist_submenu;
451         
452         void popup_track_context_menu (int, int, ItemType, bool, jack_nframes_t);
453         Gtk::Menu* build_track_context_menu (jack_nframes_t);
454         Gtk::Menu* build_track_bus_context_menu (jack_nframes_t);
455         Gtk::Menu* build_track_region_context_menu (jack_nframes_t frame);
456         Gtk::Menu* build_track_crossfade_context_menu (jack_nframes_t);
457         Gtk::Menu* build_track_selection_context_menu (jack_nframes_t);
458         void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&);
459         void add_bus_context_items (Gtk::Menu_Helpers::MenuList&);
460         void add_region_context_items (StreamView*, ARDOUR::Region*, Gtk::Menu_Helpers::MenuList&);
461         void add_crossfade_context_items (StreamView*, ARDOUR::Crossfade*, Gtk::Menu_Helpers::MenuList&, bool many);
462         void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
463
464         void handle_new_route (ARDOUR::Route&);
465         void handle_new_route_p (ARDOUR::Route*);
466         void remove_route (TimeAxisView *);
467         bool route_removal;
468
469         Gtk::HBox           global_hpacker;
470         Gtk::VBox           global_vpacker;
471         Gtk::VBox           vpacker;
472
473         Gdk::Cursor*          current_canvas_cursor;
474
475         ArdourCanvas::CanvasAA track_canvas;
476         ArdourCanvas::CanvasAA time_canvas;
477
478         ArdourCanvas::Text* first_action_message;
479         ArdourCanvas::Text* verbose_canvas_cursor;
480         bool                 verbose_cursor_visible;
481
482         void session_control_changed (ARDOUR::Session::ControlType);
483         void queue_session_control_changed (ARDOUR::Session::ControlType);
484
485         
486         bool track_canvas_motion (GdkEvent*);
487
488         void set_verbose_canvas_cursor (string, double x, double y);
489         void set_verbose_canvas_cursor_text (string);
490         void show_verbose_canvas_cursor();
491         void hide_verbose_canvas_cursor();
492
493         bool verbose_cursor_on; // so far unused
494
495         void flush_track_canvas ();
496         void flush_time_canvas ();
497
498         Gtk::EventBox      time_canvas_event_box;
499         Gtk::EventBox      track_canvas_event_box;
500         Gtk::EventBox      time_button_event_box;
501
502         ArdourCanvas::Group      *minsec_group;
503         ArdourCanvas::Group      *bbt_group;
504         ArdourCanvas::Group      *smpte_group;
505         ArdourCanvas::Group      *frame_group;
506         ArdourCanvas::Group      *tempo_group;
507         ArdourCanvas::Group      *meter_group;
508         ArdourCanvas::Group      *marker_group;
509         ArdourCanvas::Group      *range_marker_group;
510         ArdourCanvas::Group      *transport_marker_group;
511         
512         enum {
513                 ruler_metric_smpte = 0,
514                 ruler_metric_bbt = 1,
515                 ruler_metric_frames = 2,
516                 ruler_metric_minsec = 3,
517
518                 ruler_time_tempo = 4,
519                 ruler_time_meter = 5,
520                 ruler_time_marker = 6,
521                 ruler_time_range_marker = 7,
522                 ruler_time_transport_marker = 8,
523         };
524
525         static GtkCustomMetric ruler_metrics[4];
526         bool                   ruler_shown[9];
527         bool                   no_ruler_shown_update;
528         
529         gint ruler_button_press (GdkEventButton*);
530         gint ruler_button_release (GdkEventButton*);
531         gint ruler_mouse_motion (GdkEventMotion*);
532
533         gint ruler_pressed_button;
534         Gtk::Widget * ruler_grabbed_widget;
535         
536         void initialize_rulers ();
537         void update_just_smpte ();
538         void update_fixed_rulers ();
539         void update_tempo_based_rulers (); 
540         void popup_ruler_menu (jack_nframes_t where = 0, ItemType type = RegionItem);
541         void update_ruler_visibility ();
542         void ruler_toggled (int);
543         gint ruler_label_button_release (GdkEventButton*);
544         void store_ruler_visibility ();
545         void restore_ruler_visibility ();
546         
547         static gint _metric_get_smpte (GtkCustomRulerMark **, gdouble, gdouble, gint);
548         static gint _metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint);
549         static gint _metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint);
550         static gint _metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint);
551         
552         gint metric_get_smpte (GtkCustomRulerMark **, gdouble, gdouble, gint);
553         gint metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint);
554         gint metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint);
555         gint metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint);
556
557         GtkWidget          *_smpte_ruler;
558         GtkWidget          *_bbt_ruler;
559         GtkWidget          *_frames_ruler;
560         GtkWidget          *_minsec_ruler;
561         Gtk::Widget        *smpte_ruler;
562         Gtk::Widget        *bbt_ruler;
563         Gtk::Widget        *frames_ruler;
564         Gtk::Widget        *minsec_ruler;
565         static Editor      *ruler_editor;
566
567         static const double timebar_height;
568         guint32 visible_timebars;
569         Gtk::Menu          *editor_ruler_menu;
570         
571         ArdourCanvas::SimpleRect* tempo_bar;
572         ArdourCanvas::SimpleRect* meter_bar;
573         ArdourCanvas::SimpleRect* marker_bar;
574         ArdourCanvas::SimpleRect* range_marker_bar;
575         ArdourCanvas::SimpleRect* transport_marker_bar;
576
577         
578         ArdourCanvas::SimpleLine* tempo_line;
579         ArdourCanvas::SimpleLine* meter_line;
580         ArdourCanvas::SimpleLine* marker_line;
581         ArdourCanvas::SimpleLine* range_marker_line;
582         ArdourCanvas::SimpleLine* transport_marker_line;
583
584         Gtk::Label  minsec_label;
585         Gtk::Label  bbt_label;
586         Gtk::Label  smpte_label;
587         Gtk::Label  frame_label;
588         Gtk::Label  tempo_label;
589         Gtk::Label  meter_label;
590         Gtk::Label  mark_label;
591         Gtk::Label  range_mark_label;
592         Gtk::Label  transport_mark_label;
593         
594
595         Gtk::VBox          time_button_vbox;
596         Gtk::HBox          time_button_hbox;
597
598         struct Cursor {
599             Editor&               editor;
600             ArdourCanvas::Points  points;
601             ArdourCanvas::Line    canvas_item;
602             jack_nframes_t        current_frame;
603             double                length;
604
605             Cursor (Editor&, const string& color, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*));
606             ~Cursor ();
607
608             void set_position (jack_nframes_t);
609             void set_length (double units);
610             void set_y_axis (double position);
611         };
612
613         friend struct Cursor; /* it needs access to several private
614                                  fields. XXX fix me.
615                               */
616
617         Cursor* playhead_cursor;
618         Cursor* edit_cursor;
619         ArdourCanvas::Group* cursor_group;
620
621         void    cursor_to_next_region_point (Cursor*, ARDOUR::RegionPoint);
622         void    cursor_to_previous_region_point (Cursor*, ARDOUR::RegionPoint);
623         void    cursor_to_region_point (Cursor*, ARDOUR::RegionPoint, int32_t dir);
624         void    cursor_to_selection_start (Cursor *);
625         void    cursor_to_selection_end   (Cursor *);
626
627         ARDOUR::Region* find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0);
628
629         vector<jack_nframes_t> region_boundary_cache;
630         void build_region_boundary_cache ();
631
632         Gtk::VBox           trackview_vpacker;
633
634         Gtk::HBox           top_hbox;
635         Gtk::HBox           bottom_hbox;
636         
637         Gtk::Table          edit_packer;
638         Gtk::Frame          edit_frame;
639         Gtk::VScrollbar     edit_vscrollbar;
640
641         Gtk::Adjustment     vertical_adjustment;
642         Gtk::Adjustment     horizontal_adjustment;
643
644         Gtk::Layout         controls_layout;
645
646         Gtk::HScrollbar     edit_hscrollbar;
647         bool                edit_hscroll_dragging;
648         
649         bool hscrollbar_button_press (GdkEventButton*);
650         bool hscrollbar_button_release (GdkEventButton*);
651         void hscrollbar_allocate (Gtk::Allocation &alloc);
652
653         double canvas_width;
654         double canvas_height;
655
656         bool track_canvas_map_handler (GdkEventAny*);
657         bool time_canvas_map_handler (GdkEventAny*);
658
659         gint edit_controls_button_release (GdkEventButton*);
660         Gtk::Menu *edit_controls_left_menu;
661         Gtk::Menu *edit_controls_right_menu;
662
663         void track_canvas_scroller_realized ();
664         void time_canvas_scroller_realized ();
665
666         Gtk::VBox           track_canvas_vbox;
667         Gtk::VBox           time_canvas_vbox;
668         Gtk::VBox           edit_controls_vbox;
669         Gtk::HBox           edit_controls_hbox;
670
671         void tie_vertical_scrolling ();
672         void canvas_horizontally_scrolled ();
673         void reposition_and_zoom (jack_nframes_t sample, double fpu);
674         gint deferred_reposition_and_zoom (jack_nframes_t sample, double fpu);
675         void end_location_changed (ARDOUR::Location*);
676         bool repos_zoom_queued;
677         bool no_zoom_repos_update;
678         bool no_tempo_map_update;
679
680         struct RegionListDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
681             RegionListDisplayModelColumns() {
682                     add (name);
683                     add (region);
684             }
685             Gtk::TreeModelColumn<Glib::ustring> name;
686             Gtk::TreeModelColumn<ARDOUR::Region*> region;
687         };
688             
689         RegionListDisplayModelColumns    region_list_columns;
690         Gtk::TreeView                    region_list_display;
691         Glib::RefPtr<Gtk::TreeStore>     region_list_model;
692         Glib::RefPtr<Gtk::TreeModelSort> region_list_sort_model;
693         Glib::RefPtr<Gtk::Action>        toggle_full_region_list_action;
694
695         void region_list_selection_changed ();
696
697         Gtk::Menu          *region_list_menu;
698         Gtk::ScrolledWindow region_list_scroller;
699         Gtk::Frame          region_list_frame;
700
701         bool region_list_display_key_press (GdkEventKey *);
702         bool region_list_display_key_release (GdkEventKey *);
703         bool region_list_display_button_press (GdkEventButton *);
704         bool region_list_display_button_release (GdkEventButton *);
705         void region_list_clear ();
706         void region_list_selection_mapover (sigc::slot<void,ARDOUR::Region&>);
707         void build_region_list_menu ();
708
709         Gtk::CheckMenuItem* toggle_auto_regions_item;
710         Gtk::CheckMenuItem* toggle_full_region_list_item;
711
712         Gtk::MenuItem* import_audio_item;
713         Gtk::MenuItem* embed_audio_item;
714
715         bool show_automatic_regions_in_region_list;
716         Editing::RegionListSortType region_list_sort_type;
717
718         void reset_region_list_sort_direction (bool);
719         void reset_region_list_sort_type (Editing::RegionListSortType);
720
721         void toggle_full_region_list ();
722         void toggle_show_auto_regions ();
723
724         int region_list_sorter (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
725
726         /* named selections */
727
728         struct NamedSelectionDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
729             NamedSelectionDisplayModelColumns() { 
730                     add (text);
731                     add (selection);
732             }
733             Gtk::TreeModelColumn<Glib::ustring>  text;
734             Gtk::TreeModelColumn<ARDOUR::NamedSelection*>    selection;
735         };
736
737         NamedSelectionDisplayModelColumns named_selection_columns;
738         Glib::RefPtr<Gtk::TreeStore>     named_selection_model;
739
740         Gtk::TreeView          named_selection_display;
741         Gtk::ScrolledWindow named_selection_scroller;
742
743         void name_selection();
744         void named_selection_name_chosen ();
745         void create_named_selection (string);
746         void paste_named_selection (float times);
747
748         void handle_new_named_selection ();
749         void add_named_selection_to_named_selection_display (ARDOUR::NamedSelection&);
750         void redisplay_named_selections ();
751
752         gint named_selection_display_button_press (GdkEventButton *ev);
753         void named_selection_display_selection_changed ();
754
755         /* track views */
756         int track_spacing;
757         TrackViewList  track_views;
758         TimeAxisView     *trackview_by_y_position (double ypos);
759
760         static Gdk::Cursor* cross_hair_cursor;
761         static Gdk::Cursor* trimmer_cursor;
762         static Gdk::Cursor* selector_cursor;
763         static Gdk::Cursor* grabber_cursor;
764         static Gdk::Cursor* zoom_cursor;
765         static Gdk::Cursor* time_fx_cursor;
766         static Gdk::Cursor* fader_cursor;
767         static Gdk::Cursor* speaker_cursor;
768         static Gdk::Cursor* wait_cursor;
769         static Gdk::Cursor* timebar_cursor;
770
771         static void build_cursors ();
772
773         sigc::connection scroll_connection;
774         jack_nframes_t last_update_frame;
775         void center_screen (jack_nframes_t);
776         void center_screen_internal (jack_nframes_t, float);
777         
778         void update_current_screen ();
779         sigc::connection slower_update_connection;
780         void update_slower ();
781         
782         gint show_track_context_menu (GdkEventButton *);
783         void hide_track_context_menu ();
784
785         void session_going_away ();
786
787         jack_nframes_t cut_buffer_start;
788         jack_nframes_t cut_buffer_length;
789
790         bool typed_event (ArdourCanvas::Item*, GdkEvent*, ItemType);
791         bool button_press_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
792         bool button_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
793         bool motion_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
794         bool enter_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
795         bool leave_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
796         
797         /* KEYMAP HANDLING */
798
799         void register_actions ();
800
801         int ensure_cursor (jack_nframes_t* pos);
802
803         void fake_handle_new_audio_region (ARDOUR::AudioRegion *);
804         void handle_new_audio_region (ARDOUR::AudioRegion *);
805         void fake_handle_audio_region_removed (ARDOUR::AudioRegion *);
806         void handle_audio_region_removed (ARDOUR::AudioRegion *);
807         void add_audio_region_to_region_display (ARDOUR::AudioRegion *);
808         void region_hidden (ARDOUR::Region*);
809         void redisplay_regions ();
810         void insert_into_tmp_audio_regionlist(ARDOUR::AudioRegion *);
811
812         list<ARDOUR::AudioRegion *> tmp_audio_region_list;
813
814         void cut_copy (Editing::CutCopyOp);
815         void cut_copy_points (Editing::CutCopyOp);
816         void cut_copy_regions (Editing::CutCopyOp);
817         void cut_copy_ranges (Editing::CutCopyOp);
818
819         void mouse_paste ();
820         void paste_internal (jack_nframes_t position, float times);
821
822         /* EDITING OPERATIONS */
823         
824         void toggle_region_mute ();
825         void toggle_region_opaque ();
826         void raise_region ();
827         void raise_region_to_top ();
828         void lower_region ();
829         void lower_region_to_bottom ();
830         void split_region ();
831         void split_region_at (jack_nframes_t);
832         void split_regions_at (jack_nframes_t, AudioRegionSelection&);
833         void crop_region_to_selection ();
834         void set_region_sync_from_edit_cursor ();
835         void remove_region_sync();
836         void align_selection (ARDOUR::RegionPoint, jack_nframes_t position);
837         void align_selection_relative (ARDOUR::RegionPoint point, jack_nframes_t position);
838         void align_region (ARDOUR::Region&, ARDOUR::RegionPoint point, jack_nframes_t position);
839         void align_region_internal (ARDOUR::Region&, ARDOUR::RegionPoint point, jack_nframes_t position);
840         void remove_some_regions ();
841         void remove_clicked_region ();
842         void destroy_clicked_region ();
843         void edit_region ();
844         void duplicate_some_regions (AudioRegionSelection&, float times);
845         void duplicate_selection (float times);
846         void region_fill_selection ();
847
848         void region_fill_track ();
849         void audition_playlist_region_standalone (ARDOUR::AudioRegion&);
850         void audition_playlist_region_via_route (ARDOUR::AudioRegion&, ARDOUR::Route&);
851         void split_multichannel_region();
852         void reverse_region ();
853         void normalize_region ();
854         void denormalize_region ();
855
856         void audition_region_from_region_list ();
857         void hide_region_from_region_list ();
858         void remove_region_from_region_list ();
859
860         void align (ARDOUR::RegionPoint);
861         void align_relative (ARDOUR::RegionPoint);
862         void naturalize ();
863
864         void cut ();
865         void copy ();
866         void paste (float times);
867
868         int  get_prefix (float&, bool&);
869
870         void keyboard_paste ();
871         void keyboard_duplicate_region ();
872         void keyboard_duplicate_selection ();
873         void keyboard_nudge ();
874         void keyboard_insert_region_list_selection ();
875
876         void region_from_selection ();
877         void create_region_from_selection (std::vector<ARDOUR::AudioRegion*>&);
878
879         bool region_renamed;
880         void rename_region ();
881         void rename_region_finished (bool);
882
883         void play_from_start ();
884         void play_from_edit_cursor ();
885         void play_selected_region ();
886         void audition_selected_region ();
887         void toggle_loop_playback ();
888         void loop_selected_region ();
889         void play_location (ARDOUR::Location&);
890         void loop_location (ARDOUR::Location&);
891
892         Editing::ZoomFocus zoom_focus;
893
894         void temporal_zoom_selection ();
895         void temporal_zoom_session ();
896         void temporal_zoom (gdouble scale);
897         void temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, string op);
898         void temporal_zoom_to_frame (bool coarser, jack_nframes_t frame);
899
900         void amplitude_zoom (gdouble scale);
901         void amplitude_zoom_step (bool in);
902
903         void insert_region_list_drag (ARDOUR::AudioRegion&);
904         void insert_region_list_selection (float times);
905
906         void insert_sndfile (bool as_tracks);
907         void embed_audio ();    // inserts into region list
908         int  reject_because_rate_differs (string path, SF_INFO& finfo, string action, bool multiple_pending);
909
910         void do_embed_sndfiles (vector<string> paths, bool split);
911         void embed_sndfile (string path, bool split, bool multiple_files, bool& check_sr);
912
913         void do_insert_sndfile (vector<string> path, bool multi, jack_nframes_t frame);
914         void insert_paths_as_new_tracks (std::vector<std::string> paths, bool multi); // inserts files as new tracks
915         void insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jack_nframes_t& frame, bool prompt=true);
916         static void* _insert_sndfile_thread (void*);
917         void*  insert_sndfile_thread (void*);
918
919         /* generic interthread progress window */
920         
921         ArdourDialog* interthread_progress_window;
922         Gtk::Label interthread_progress_label;
923         Gtk::VBox interthread_progress_vbox;
924         Gtk::ProgressBar interthread_progress_bar;
925         Gtk::Button interthread_cancel_button;
926         Gtk::Label interthread_cancel_label;
927         sigc::connection  interthread_progress_connection;
928         void interthread_cancel_clicked ();
929         void build_interthread_progress_window ();
930         ARDOUR::InterThreadInfo* current_interthread_info;
931
932         /* import specific info */
933
934         ARDOUR::Session::import_status import_status;
935         gint import_progress_timeout (void *);
936         static void *_import_thread (void *);
937         void* import_thread ();
938         void catch_new_audio_region (ARDOUR::AudioRegion*);
939         ARDOUR::AudioRegion* last_audio_region;
940
941         /* to support this ... */
942
943         void import_audio (bool as_tracks);
944         void do_import (vector<string> paths, bool split, bool as_tracks);
945
946         void move_to_start ();
947         void move_to_end ();
948         void goto_frame ();
949         void center_playhead ();
950         void center_edit_cursor ();
951         void edit_cursor_backward ();
952         void edit_cursor_forward ();
953         void playhead_backward ();
954         void playhead_forward ();
955         void scroll_backward (float pages=0.8f);
956         void scroll_forward (float pages=0.8f);
957         void scroll_tracks_down ();
958         void scroll_tracks_up ();
959         void delete_sample_forward ();
960         void delete_sample_backward ();
961         void delete_screen ();
962         void search_backwards ();
963         void search_forwards ();
964         void set_mark ();
965         void clear_markers ();
966         void clear_ranges ();
967         void clear_locations ();
968         void jump_forward_to_mark ();
969         void jump_backward_to_mark ();
970         void cursor_align (bool playhead_to_edit);
971
972         void remove_last_capture ();
973
974         void set_selection_from_range (ARDOUR::Location&);
975         void set_selection_from_punch ();
976         void set_selection_from_loop ();
977
978         void add_location_from_selection ();
979         void set_route_loop_selection ();
980
981         void add_location_from_playhead_cursor ();
982
983         void reverse_selection ();
984         void edit_envelope ();
985
986         void start_scrolling ();
987         void stop_scrolling ();
988
989         void keyboard_selection_begin ();
990         void keyboard_selection_finish (bool add);
991         bool have_pending_keyboard_selection;
992         jack_nframes_t pending_keyboard_selection_start;
993
994         ARDOUR::AudioRegion* select_region_for_operation (int dir, TimeAxisView **tv);
995         void extend_selection_to_end_of_region (bool next);
996         void extend_selection_to_start_of_region (bool previous);
997
998         Editing::SnapType snap_type;
999         Editing::SnapMode snap_mode;
1000         double snap_threshold;
1001
1002         void soundfile_chosen_for_insert (string selection, bool split_channels);
1003         void soundfile_chosen_for_embed (string selection, bool split_channels);
1004         void soundfile_chosen_for_import (string selection, bool split_channels);
1005
1006         void handle_gui_changes (string, void *);
1007
1008         void    hide_all_tracks (bool with_select);
1009
1010         void route_display_selection_changed ();
1011         void redisplay_route_list();
1012         gint route_list_reordered ();
1013         bool ignore_route_list_reorder;
1014         void queue_route_list_reordered ();
1015
1016         struct DragInfo {
1017           ArdourCanvas::Item* item;
1018             void* data;
1019             jack_nframes_t last_frame_position;
1020             int32_t pointer_frame_offset;
1021             jack_nframes_t grab_frame;
1022             jack_nframes_t last_pointer_frame;
1023             jack_nframes_t current_pointer_frame;
1024             double grab_x, grab_y;
1025             double cumulative_x_drag;
1026             double cumulative_y_drag;
1027             double current_pointer_x;
1028             double current_pointer_y;
1029           void (Editor::*motion_callback)(ArdourCanvas::Item*, GdkEvent*);
1030           void (Editor::*finished_callback)(ArdourCanvas::Item*, GdkEvent*);
1031             TimeAxisView* last_trackview;
1032             bool x_constrained;
1033             bool copy;
1034             bool was_rolling;
1035             bool first_move;
1036             bool move_threshold_passsed;
1037             bool want_move_threshold;
1038             bool brushing;
1039             ARDOUR::Location* copied_location;
1040         } drag_info;
1041
1042         struct LineDragInfo {
1043             uint32_t before;
1044             uint32_t after;
1045         };
1046
1047         LineDragInfo current_line_drag_info;
1048
1049         void start_grab (GdkEvent*, Gdk::Cursor* cursor = 0);
1050         bool end_grab (ArdourCanvas::Item*, GdkEvent*);
1051
1052         Gtk::Menu fade_context_menu;
1053         void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
1054
1055         void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
1056         void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
1057         void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1058         void fade_out_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1059         void fade_in_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1060         void fade_out_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1061         
1062         std::set<ARDOUR::Playlist*> motion_frozen_playlists;
1063         void region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1064         void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1065         void region_copy_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1066
1067         void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1068         void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1069         void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1070         void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1071         void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1072         void control_point_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1073         void line_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1074         void line_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1075
1076         void tempo_marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1077         void tempo_marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1078         void meter_marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1079         void meter_marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1080
1081         gint mouse_rename_region (ArdourCanvas::Item*, GdkEvent*);
1082
1083         void start_region_grab (ArdourCanvas::Item*, GdkEvent*);
1084         void start_region_copy_grab (ArdourCanvas::Item*, GdkEvent*);
1085         void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
1086         void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
1087         void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
1088         void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
1089         void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
1090         void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
1091         void start_line_grab_from_line (ArdourCanvas::Item*, GdkEvent*);
1092         void start_line_grab (AutomationLine *, GdkEvent*);
1093         void start_tempo_marker_grab (ArdourCanvas::Item*, GdkEvent*);
1094         void start_meter_marker_grab (ArdourCanvas::Item*, GdkEvent*);
1095
1096         void region_view_item_click (AudioRegionView&, GdkEventButton*);
1097
1098         void remove_gain_control_point (ArdourCanvas::Item*, GdkEvent*);
1099         void remove_control_point (ArdourCanvas::Item*, GdkEvent*);
1100
1101         void mouse_brush_insert_region (AudioRegionView*, jack_nframes_t pos);
1102         void brush (jack_nframes_t);
1103
1104         void show_verbose_time_cursor (jack_nframes_t frame, double offset = 0, double xpos=-1, double ypos=-1);
1105         void show_verbose_duration_cursor (jack_nframes_t start, jack_nframes_t end, double offset = 0, double xpos=-1, double ypos=-1);
1106
1107         /* Canvas event handlers */
1108
1109         bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
1110         bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
1111         bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
1112         bool canvas_selection_start_trim_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
1113         bool canvas_selection_end_trim_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
1114         bool canvas_crossfade_view_event (GdkEvent* event,ArdourCanvas::Item*, CrossfadeView*);
1115         bool canvas_fade_in_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1116         bool canvas_fade_in_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1117         bool canvas_fade_out_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1118         bool canvas_fade_out_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1119         bool canvas_region_view_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1120         bool canvas_region_view_name_highlight_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1121         bool canvas_region_view_name_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
1122         bool canvas_stream_view_event (GdkEvent* event,ArdourCanvas::Item*, AudioTimeAxisView*);
1123         bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, Marker*);
1124         bool canvas_zoom_rect_event (GdkEvent* event,ArdourCanvas::Item*);
1125         bool canvas_tempo_marker_event (GdkEvent* event,ArdourCanvas::Item*, TempoMarker*);
1126         bool canvas_meter_marker_event (GdkEvent* event,ArdourCanvas::Item*, MeterMarker*);
1127         bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*) ;
1128
1129         bool canvas_tempo_bar_event (GdkEvent* event, ArdourCanvas::Item*);
1130         bool canvas_meter_bar_event (GdkEvent* event, ArdourCanvas::Item*);
1131         bool canvas_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
1132         bool canvas_range_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
1133         bool canvas_transport_marker_bar_event (GdkEvent* event, ArdourCanvas::Item*);
1134
1135         bool canvas_imageframe_item_view_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
1136         bool canvas_imageframe_view_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameTimeAxis*);
1137         bool canvas_imageframe_start_handle_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
1138         bool canvas_imageframe_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,ImageFrameView*);
1139         bool canvas_marker_time_axis_view_event(GdkEvent* event, ArdourCanvas::Item*,MarkerTimeAxis*);
1140         bool canvas_markerview_item_view_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
1141         bool canvas_markerview_start_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
1142         bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*);
1143
1144         /* non-public event handlers */
1145
1146         bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
1147         bool canvas_edit_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
1148         bool track_canvas_event (GdkEvent* event, ArdourCanvas::Item*);
1149
1150         bool track_canvas_button_press_event (GdkEventButton *);
1151         bool track_canvas_button_release_event (GdkEventButton *);
1152         
1153         void track_canvas_allocate (Gtk::Allocation alloc);
1154         void time_canvas_allocate (Gtk::Allocation alloc);
1155
1156         void set_edit_cursor (GdkEvent* event);
1157         void set_playhead_cursor (GdkEvent* event);
1158
1159         void kbd_driver (sigc::slot<void,GdkEvent*>, bool use_track_canvas = true, bool use_time_canvas = true, bool can_select = true);
1160         void kbd_set_playhead_cursor ();
1161         void kbd_set_edit_cursor ();
1162         void kbd_split ();
1163         void kbd_align (ARDOUR::RegionPoint);
1164         void kbd_align_relative (ARDOUR::RegionPoint);
1165         void kbd_brush ();
1166         void kbd_audition ();
1167
1168         void kbd_do_split (GdkEvent*);
1169         void kbd_do_align (GdkEvent*, ARDOUR::RegionPoint);
1170         void kbd_do_align_relative (GdkEvent*, ARDOUR::RegionPoint);
1171         void kbd_do_brush (GdkEvent*);
1172         void kbd_do_audition (GdkEvent*);
1173
1174         void fake_handle_new_duration ();
1175         void handle_new_duration ();
1176         void initialize_canvas ();
1177         void reset_scrolling_region (Gtk::Allocation* alloc = 0);
1178         void scroll_canvas ();
1179
1180         /* display control */
1181         
1182         bool _show_measures;
1183         bool _show_waveforms;
1184         bool _follow_playhead;
1185         bool _show_waveforms_recording;
1186         
1187         void add_bbt_marks (ARDOUR::TempoMap::BBTPointList&);
1188
1189         ARDOUR::TempoMap::BBTPointList *current_bbt_points;
1190         
1191         typedef vector<ArdourCanvas::SimpleLine*> TimeLineList;
1192         TimeLineList free_measure_lines;
1193         TimeLineList used_measure_lines;
1194
1195         ArdourCanvas::Group* time_line_group;
1196         ArdourCanvas::SimpleLine* get_time_line ();
1197         void hide_measures ();
1198         void draw_measures ();
1199         void draw_time_bars ();
1200
1201         void new_tempo_section ();
1202
1203         void mouse_add_new_tempo_event (jack_nframes_t where);
1204         void mouse_add_new_meter_event (jack_nframes_t where);
1205
1206         void remove_tempo_marker (ArdourCanvas::Item*);
1207         void remove_meter_marker (ArdourCanvas::Item*);
1208         gint real_remove_tempo_marker (ARDOUR::TempoSection*);
1209         gint real_remove_meter_marker (ARDOUR::MeterSection*);
1210         
1211         void edit_tempo_section (ARDOUR::TempoSection*);
1212         void edit_meter_section (ARDOUR::MeterSection*);
1213         void edit_tempo_marker (ArdourCanvas::Item*);
1214         void edit_meter_marker (ArdourCanvas::Item*);
1215         
1216         void marker_menu_edit ();
1217         void marker_menu_remove ();
1218         void marker_menu_rename ();
1219         void marker_menu_hide ();
1220         void marker_menu_loop_range ();
1221         void marker_menu_play_from ();
1222         void marker_menu_set_playhead ();
1223         void marker_menu_set_from_playhead ();
1224         void marker_menu_set_from_selection ();
1225         void new_transport_marker_menu_set_loop ();
1226         void new_transport_marker_menu_set_punch ();
1227         void update_loop_range_view (bool visibility=false);
1228         void update_punch_range_view (bool visibility=false);
1229         gint new_transport_marker_menu_popdown (GdkEventAny*);
1230         void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
1231         void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
1232         void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
1233         void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
1234         void build_marker_menu ();
1235         void build_tm_marker_menu ();
1236         void build_transport_marker_menu ();
1237         void build_new_transport_marker_menu ();
1238
1239         Gtk::Menu* tm_marker_menu;
1240         Gtk::Menu* marker_menu;
1241         Gtk::Menu* transport_marker_menu;
1242         Gtk::Menu* new_transport_marker_menu;
1243         ArdourCanvas::Item* marker_menu_item;
1244
1245         typedef list<Marker*> Marks;
1246         Marks metric_marks;
1247
1248         void remove_metric_marks ();
1249         void draw_metric_marks (const ARDOUR::Metrics& metrics);
1250
1251         void tempo_map_changed (ARDOUR::Change);
1252         void redisplay_tempo ();
1253         
1254         void snap_to (jack_nframes_t& first, int32_t direction = 0, bool for_mark = false);
1255         uint32_t bbt_beat_subdivision;
1256
1257         /* toolbar */
1258         
1259         Gtk::ToggleButton        editor_mixer_button;
1260
1261         void editor_mixer_button_toggled ();
1262
1263         AudioClock               selection_start_clock;
1264         Gtk::Label               selection_start_clock_label;
1265         AudioClock               selection_end_clock;
1266         Gtk::Label               selection_end_clock_label;
1267         AudioClock               edit_cursor_clock;
1268         Gtk::Label               edit_cursor_clock_label;
1269         AudioClock               zoom_range_clock;
1270         Gtk::Button              zoom_in_button;
1271         Gtk::Button              zoom_out_button;
1272         Gtk::Button              zoom_out_full_button;
1273         Gtk::Button              zoom_onetoone_button;
1274
1275         Gtk::VBox                toolbar_clock_vbox;
1276         Gtk::VBox                toolbar_selection_clock_vbox; 
1277         Gtk::Table               toolbar_selection_clock_table;
1278         Gtk::Label               toolbar_selection_cursor_label;
1279         
1280         Gtk::Table               mouse_mode_button_table;
1281         Gtkmm2ext::TearOff*       mouse_mode_tearoff;
1282         Gtk::ToggleButton        mouse_select_button;
1283         Gtk::ToggleButton        mouse_move_button;
1284         Gtk::ToggleButton        mouse_gain_button;
1285         Gtk::ToggleButton        mouse_zoom_button;
1286         Gtk::ToggleButton        mouse_timefx_button;
1287         Gtk::ToggleButton        mouse_audition_button;
1288         GroupedButtons          *mouse_mode_button_set;
1289         void                     mouse_mode_toggled (Editing::MouseMode m);
1290         bool                     ignore_mouse_mode_toggle;
1291
1292         gint                     mouse_select_button_release (GdkEventButton*);
1293
1294         Gtk::VBox                automation_box;
1295         Gtk::Button              automation_mode_button;
1296         Gtk::ToggleButton        global_automation_button;
1297
1298         Gtk::ComboBoxText edit_mode_selector;
1299         Gtk::Label               edit_mode_label;
1300         Gtk::VBox                edit_mode_box;
1301
1302         void edit_mode_selection_done ();
1303
1304         Gtk::ComboBoxText snap_type_selector;
1305         Gtk::Label               snap_type_label;
1306         Gtk::VBox                snap_type_box;
1307
1308         void snap_type_selection_done ();
1309
1310         Gtk::ComboBoxText               snap_mode_selector;
1311         Gtk::Label               snap_mode_label;
1312         Gtk::VBox                snap_mode_box;
1313
1314         void snap_mode_selection_done ();
1315         
1316         Gtk::ComboBoxText zoom_focus_selector;
1317         Gtk::Label               zoom_focus_label;
1318         Gtk::VBox                zoom_focus_box;
1319         
1320         void zoom_focus_selection_done ();
1321
1322         Gtk::Label          zoom_indicator_label;
1323         Gtk::HBox           zoom_indicator_box;
1324         Gtk::VBox           zoom_indicator_vbox;
1325
1326         void                update_zoom_indicator ();
1327         void                zoom_adjustment_changed();
1328
1329         void                edit_cursor_clock_changed();
1330         
1331         void setup_toolbar ();
1332
1333         Gtkmm2ext::TearOff*       tools_tearoff;
1334         Gtk::HBox                toolbar_hbox;
1335         Gtk::EventBox            toolbar_base;
1336         Gtk::Frame               toolbar_frame;
1337
1338         /* selection process */
1339
1340         Selection* selection;
1341         Selection* cut_buffer;
1342
1343         void time_selection_changed ();
1344         void track_selection_changed ();
1345         void region_selection_changed ();
1346         void point_selection_changed ();
1347         void audio_track_selection_changed ();
1348         void line_selection_changed ();
1349
1350         enum SelectionOp {
1351                 CreateSelection,
1352                 SelectionStartTrim,
1353                 SelectionEndTrim,
1354                 SelectionMove
1355         } selection_op;
1356
1357         void start_selection_op (ArdourCanvas::Item* item, GdkEvent* event, SelectionOp);
1358         void drag_selection (ArdourCanvas::Item* item, GdkEvent* event);
1359         void end_selection_op (ArdourCanvas::Item* item, GdkEvent* event);
1360         void cancel_selection ();
1361
1362         void region_selection_op (void (ARDOUR::Region::*pmf)(void));
1363         void region_selection_op (void (ARDOUR::Region::*pmf)(void*), void*);
1364         void region_selection_op (void (ARDOUR::Region::*pmf)(bool), bool);
1365
1366         bool audio_region_selection_covers (jack_nframes_t where);
1367
1368         /* transport range select process */
1369         enum RangeMarkerOp {
1370                 CreateRangeMarker,
1371                 CreateTransportMarker
1372         } range_marker_op;
1373
1374         void start_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event, RangeMarkerOp);
1375         void drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event);
1376         void end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event);
1377
1378         ArdourCanvas::SimpleRect*  range_bar_drag_rect;
1379         ArdourCanvas::SimpleRect*  transport_bar_drag_rect;
1380         ArdourCanvas::Line*        marker_drag_line;
1381         ArdourCanvas::Points       marker_drag_line_points;
1382         ArdourCanvas::SimpleRect*  range_marker_drag_rect;
1383
1384         void update_marker_drag_item (ARDOUR::Location *);
1385         
1386         ArdourCanvas::SimpleRect     *transport_bar_range_rect;
1387         ArdourCanvas::SimpleRect     *transport_bar_preroll_rect;
1388         ArdourCanvas::SimpleRect     *transport_bar_postroll_rect;
1389         ArdourCanvas::SimpleRect     *transport_loop_range_rect;
1390         ArdourCanvas::SimpleRect     *transport_punch_range_rect;
1391         ArdourCanvas::SimpleLine     *transport_punchin_line;
1392         ArdourCanvas::SimpleLine     *transport_punchout_line;
1393         ArdourCanvas::SimpleRect     *transport_preroll_rect;
1394         ArdourCanvas::SimpleRect     *transport_postroll_rect;
1395
1396         ARDOUR::Location*  transport_loop_location();
1397         ARDOUR::Location*  transport_punch_location();
1398
1399         ARDOUR::Location   *temp_location;
1400         
1401         /* object rubberband select process */
1402         
1403         void start_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event);
1404         void drag_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event);
1405         void end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event);
1406
1407         bool select_all_within (jack_nframes_t start, jack_nframes_t end, gdouble topy, gdouble boty, bool add);
1408         
1409         ArdourCanvas::SimpleRect   *rubberband_rect;
1410         
1411         /* mouse zoom process */
1412
1413         void start_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event);
1414         void drag_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event);
1415         void end_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event);
1416
1417         ArdourCanvas::SimpleRect   *zoom_rect;
1418         void reposition_zoom_rect (jack_nframes_t start, jack_nframes_t end);
1419         
1420         /* diskstream/route display management */
1421
1422         struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
1423             RouteDisplayModelColumns() { 
1424                     add (text);
1425                     add (tv);
1426             }
1427             Gtk::TreeModelColumn<Glib::ustring>  text;
1428             Gtk::TreeModelColumn<TimeAxisView*>    tv;
1429         };
1430
1431         RouteDisplayModelColumns    route_display_columns;
1432         Glib::RefPtr<Gtk::ListStore> route_display_model;
1433         Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
1434
1435         gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
1436         Gtk::TreeView          route_list; //GTK2FIX rename to route_display
1437         Gtk::ScrolledWindow route_list_scroller;
1438         Gtk::Menu          *route_list_menu;
1439
1440         void route_list_column_click ();
1441         void build_route_list_menu ();
1442         void select_all_routes ();
1443         void unselect_all_routes ();
1444         void select_all_audiotracks ();
1445         void unselect_all_audiotracks ();
1446         void select_all_audiobus ();
1447         void unselect_all_audiobus ();
1448
1449         /* edit group management */
1450
1451         struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
1452                 GroupListModelColumns () {
1453                        add (is_active);
1454                        add (text);
1455                        add (routegroup);
1456                 }
1457                 Gtk::TreeModelColumn<bool> is_active;
1458                 Gtk::TreeModelColumn<std::string> text;
1459                 Gtk::TreeModelColumn<ARDOUR::RouteGroup*>   routegroup;
1460         };
1461
1462         GroupListModelColumns group_columns;
1463         Glib::RefPtr<Gtk::ListStore> group_model;
1464         Glib::RefPtr<Gtk::TreeSelection> group_selection;
1465
1466         Gtk::Button         edit_group_list_button;
1467         Gtk::Label          edit_group_list_button_label;
1468         Gtk::TreeView       edit_group_list;
1469         Gtk::ScrolledWindow edit_group_list_scroller;
1470         Gtk::Menu          *edit_group_list_menu;
1471         Gtk::VBox           edit_group_vbox;
1472
1473         void edit_group_list_column_click (gint);
1474         void build_edit_group_list_menu ();
1475         void select_all_edit_groups ();
1476         void unselect_all_edit_groups ();
1477         void new_edit_group ();
1478         void edit_group_list_button_clicked ();
1479         gint edit_group_list_button_press_event (GdkEventButton* ev);
1480         void edit_group_selection_changed ();
1481         void fake_add_edit_group (ARDOUR::RouteGroup* group);
1482         void add_edit_group (ARDOUR::RouteGroup* group);
1483         void group_flags_changed (void*, ARDOUR::RouteGroup*);
1484
1485         Gtk::VBox           list_vpacker;
1486
1487         /* autoscrolling */
1488
1489         int autoscroll_timeout_tag;
1490         int autoscroll_direction;
1491         uint32_t autoscroll_cnt;
1492         jack_nframes_t autoscroll_distance;
1493      
1494         static gint _autoscroll_canvas (void *);
1495         gint autoscroll_canvas ();
1496         void start_canvas_autoscroll (int direction);
1497         void stop_canvas_autoscroll ();
1498         void maybe_autoscroll (GdkEvent*);
1499
1500         /* trimming */
1501         enum TrimOp {
1502                 StartTrim,
1503                 EndTrim,
1504                 ContentsTrim,
1505         } trim_op;
1506
1507         void start_trim (ArdourCanvas::Item*, GdkEvent*);
1508         void point_trim (GdkEvent*);
1509         void trim_motion_callback (ArdourCanvas::Item*, GdkEvent*);
1510         void single_contents_trim (AudioRegionView&, jack_nframes_t, bool, bool, bool);
1511         void single_start_trim (AudioRegionView&, jack_nframes_t, bool, bool);
1512         void single_end_trim (AudioRegionView&, jack_nframes_t, bool, bool);
1513
1514         void trim_finished_callback (ArdourCanvas::Item*, GdkEvent*);
1515         void thaw_region_after_trim (AudioRegionView& rv);
1516         
1517         void trim_region_to_edit_cursor ();
1518         void trim_region_from_edit_cursor ();
1519
1520         bool show_gain_after_trim;
1521
1522         /* Drag-n-Drop */
1523
1524         int convert_drop_to_paths (std::vector<std::string>& paths,
1525                                    GdkDragContext     *context,
1526                                    gint                x,
1527                                    gint                y,
1528                                    GtkSelectionData   *data,
1529                                    guint               info,
1530                                    guint               time);
1531
1532         void  track_canvas_drag_data_received  (GdkDragContext     *context,
1533                                                 gint                x,
1534                                                 gint                y,
1535                                                 GtkSelectionData   *data,
1536                                                 guint               info,
1537                                                 guint               time);
1538
1539         void  region_list_display_drag_data_received  (GdkDragContext     *context,
1540                                                        gint                x,
1541                                                        gint                y,
1542                                                        GtkSelectionData   *data,
1543                                                        guint               info,
1544                                                        guint               time);
1545         
1546         /* audio export */
1547
1548         ExportDialog *export_dialog;
1549         void export_range (jack_nframes_t start, jack_nframes_t end);
1550
1551         int  write_region_selection(AudioRegionSelection&);
1552         bool write_region (string path, ARDOUR::AudioRegion&);
1553         void export_region ();
1554         void bounce_region_selection ();
1555         void bounce_range_selection ();
1556         void external_edit_region ();
1557
1558         int write_audio_selection (TimeSelection&);
1559         bool write_audio_range (ARDOUR::Playlist&, uint32_t channels, list<ARDOUR::AudioRange>&);
1560
1561         void write_selection ();
1562
1563         /* history */
1564
1565         UndoAction get_memento() const;
1566
1567         void begin_reversible_command (string cmd_name);
1568         void commit_reversible_command ();
1569
1570         /* visual history */
1571
1572         UndoHistory visual_history;
1573         UndoCommand current_visual_command;
1574
1575         void begin_reversible_visual_command (string cmd_name);
1576         void commit_reversible_visual_command ();
1577
1578         void update_title ();   
1579         void update_title_s (string snapshot_name);
1580
1581         struct State {
1582             Selection* selection;
1583             double     frames_per_unit;
1584
1585             State();
1586             ~State();
1587         };
1588
1589         void store_state (State&) const;
1590         void restore_state (State *);
1591
1592         void instant_save ();
1593
1594         ARDOUR::AudioRegion* last_audition_region;
1595         
1596         /* freeze operations */
1597
1598         ARDOUR::InterThreadInfo freeze_status;
1599         gint freeze_progress_timeout (void *);
1600         static void* _freeze_thread (void*);
1601         void* freeze_thread ();
1602
1603         void freeze_route ();
1604         void unfreeze_route ();
1605
1606         /* edit-group solo + mute */
1607
1608         void set_edit_group_solo (ARDOUR::Route&, bool);
1609         void set_edit_group_mute (ARDOUR::Route&, bool);
1610
1611         /* duplication */
1612
1613         void duplicate_dialog (bool for_region);
1614         
1615         /* edit menu */
1616
1617         Gtk::Menu* edit_menu;
1618         bool edit_menu_map_handler (GdkEventAny*);
1619
1620         jack_nframes_t event_frame (GdkEvent*, double* px = 0, double* py = 0);
1621
1622         void time_fx_motion (ArdourCanvas::Item*, GdkEvent*);
1623         void start_time_fx (ArdourCanvas::Item*, GdkEvent*);
1624         void end_time_fx (ArdourCanvas::Item*, GdkEvent*);
1625
1626         struct TimeStretchDialog : public ArdourDialog {
1627             ARDOUR::Session::TimeStretchRequest request;
1628             Editor&               editor;
1629             AudioRegionSelection  regions;
1630             Gtk::ProgressBar      progress_bar;
1631             Gtk::ToggleButton     quick_button;
1632             Gtk::ToggleButton     antialias_button;
1633             Gtk::Button           cancel_button;
1634             Gtk::Button           action_button;
1635             Gtk::HBox             lower_button_box;
1636             Gtk::HBox             upper_button_box;
1637             Gtk::VBox             packer;
1638             int                   status;
1639
1640             TimeStretchDialog (Editor& e);
1641
1642             gint update_progress ();
1643             sigc::connection first_cancel;
1644             sigc::connection first_delete;
1645             void cancel_timestretch_in_progress ();
1646             gint delete_timestretch_in_progress (GdkEventAny*);
1647         };
1648
1649         /* "whats mine is yours" */
1650
1651         friend class TimeStretchDialog;
1652
1653         TimeStretchDialog* current_timestretch;
1654
1655         static void* timestretch_thread (void *arg);
1656         int run_timestretch (AudioRegionSelection&, float fraction);
1657         void do_timestretch (TimeStretchDialog&);
1658
1659         /* editor-mixer strip */
1660
1661         MixerStrip *current_mixer_strip;
1662         Gtk::VBox current_mixer_strip_vbox;
1663         void cms_deleted ();
1664         void current_mixer_strip_hidden ();
1665         void current_mixer_strip_removed ();
1666
1667         void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
1668         void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
1669
1670         /* nudging tracks */
1671
1672         void nudge_track (bool use_edit_cursor, bool forwards);
1673
1674         /* xfades */
1675
1676         bool _xfade_visibility;
1677         
1678         /* <CMT Additions> */
1679         void handle_new_imageframe_time_axis_view(std::string track_name, void* src) ;
1680         void handle_new_imageframe_marker_time_axis_view(std::string track_name, TimeAxisView* marked_track) ;
1681
1682         void start_imageframe_grab(ArdourCanvas::Item*, GdkEvent*) ;
1683         void start_markerview_grab(ArdourCanvas::Item*, GdkEvent*) ;
1684
1685         void imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent*) ;
1686         void markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent*) ;
1687         void timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent*) ;
1688
1689         gint canvas_imageframe_item_view_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
1690         gint canvas_imageframe_view_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameTimeAxis* ifta);
1691         gint canvas_imageframe_start_handle_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
1692         gint canvas_imageframe_end_handle_event(ArdourCanvas::Item* item, GdkEvent* event, ImageFrameView* ifv);
1693
1694         gint canvas_marker_time_axis_view_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerTimeAxis* mta);
1695         gint canvas_markerview_item_view_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
1696         gint canvas_markerview_start_handle_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
1697         gint canvas_markerview_end_handle_event(ArdourCanvas::Item* item, GdkEvent* event, MarkerView* mv);
1698
1699         void imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
1700         void imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
1701         void imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
1702         void imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
1703         void imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
1704         void imageframe_end_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
1705         
1706         void markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
1707         void markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) ;
1708         void markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
1709         void markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
1710         void markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) ;
1711         void markerview_end_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) ;
1712
1713         void popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_frame) ;
1714         void popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_frame) ;
1715
1716         ImageFrameSocketHandler* image_socket_listener ;
1717         /* </CMT Additions> */
1718
1719         void toggle_xfade_active (ARDOUR::Crossfade*);
1720         void toggle_xfade_length (ARDOUR::Crossfade*);
1721         void edit_xfade (ARDOUR::Crossfade*);
1722         void remove_xfade ();
1723         void xfade_edit_left_region ();
1724         void xfade_edit_right_region ();
1725
1726         static const int32_t default_width = 995;
1727         static const int32_t default_height = 765;
1728
1729         /* nudge */
1730
1731         Gtk::Button      nudge_forward_button;
1732         Gtk::Button      nudge_backward_button;
1733         Gtk::HBox        nudge_hbox;
1734         Gtk::VBox        nudge_vbox;
1735         Gtk::Label       nudge_label;
1736         AudioClock       nudge_clock;
1737
1738         jack_nframes_t get_nudge_distance (jack_nframes_t pos, jack_nframes_t& next);
1739         
1740         /* audio filters */
1741
1742         void apply_filter (ARDOUR::AudioFilter&, string cmd);
1743
1744         /* handling cleanup */
1745
1746         int playlist_deletion_dialog (ARDOUR::Playlist*);
1747
1748         vector<sigc::connection> session_connections;
1749
1750         /* tracking step changes of track height */
1751
1752         TimeAxisView* current_stepping_trackview;
1753         struct timeval last_track_height_step_timestamp;
1754         gint track_height_step_timeout();
1755         sigc::connection step_timeout;
1756
1757         TimeAxisView* entered_track;
1758         AudioRegionView* entered_regionview;
1759         bool clear_entered_track;
1760         gint left_track_canvas (GdkEventCrossing*);
1761         void set_entered_track (TimeAxisView*);
1762         void set_entered_regionview (AudioRegionView*);
1763         gint left_automation_track ();
1764
1765         bool _new_regionviews_show_envelope;
1766
1767         void toggle_gain_envelope_visibility ();
1768         void toggle_gain_envelope_active ();
1769         
1770         typedef std::map<Editing::ColorID,std::string> ColorStyleMap;
1771         void init_colormap ();
1772
1773         bool on_key_press_event (GdkEventKey*);
1774 };
1775
1776 #endif /* __ardour_editor_h__ */