Merge libs/ardour and gtk2_ardour with 2.0-ongoing R2837.
[ardour.git] / gtk2_ardour / editor_audiotrack.cc
1 /*
2     Copyright (C) 2000-2007 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 */
19
20 #include <ardour/location.h>
21 #include <ardour/audio_diskstream.h>
22
23 #include "ardour_ui.h"
24 #include "editor.h"
25 #include "editing.h"
26 #include "audio_time_axis.h"
27 #include "route_time_axis.h"
28 #include "audio_region_view.h"
29 #include "selection.h"
30
31 #include "i18n.h"
32
33 using namespace ARDOUR;
34 using namespace PBD;
35
36 void
37 Editor::set_show_waveforms (bool yn)
38 {
39         AudioTimeAxisView* atv;
40
41         if (_show_waveforms != yn) {
42                 _show_waveforms = yn;
43                 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
44                         if ((atv = dynamic_cast<AudioTimeAxisView*>(*i)) != 0) {
45                                 atv->set_show_waveforms (yn);
46                         }
47                 }
48         }
49 }
50
51 void
52 Editor::set_show_waveforms_recording (bool yn)
53 {
54         AudioTimeAxisView* atv;
55
56         if (_show_waveforms_recording != yn) {
57                 _show_waveforms_recording = yn;
58                 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
59                         if ((atv = dynamic_cast<AudioTimeAxisView*>(*i)) != 0) {
60                                 atv->set_show_waveforms_recording (yn);
61                         }
62                 }
63         }
64 }
65
66 gint
67 Editor::start_updating ()
68 {
69         RouteTimeAxisView* rtv;
70
71         //cerr << "Editor::start_updating () called" << endl;//DEBUG
72         if (is_mapped() && session) {
73                 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
74                         if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
75                                 rtv->reset_meter ();
76                         }
77                 }
78         }
79
80         if (!meters_running) {
81                 fast_screen_update_connection = ARDOUR_UI::SuperRapidScreenUpdate.connect (mem_fun(*this, &Editor::fast_update_strips));
82                 meters_running = true;
83         }
84     return 0;
85 }
86
87 gint
88 Editor::stop_updating ()
89 {
90         RouteTimeAxisView* rtv;
91         
92         meters_running = false;
93         fast_screen_update_connection.disconnect();
94         //cerr << "Editor::stop_updating () called" << endl;//DEBUG
95         if (is_mapped() && session) {
96                 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
97                         if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
98                                 rtv->hide_meter ();
99                         }
100                 }
101         }
102
103     return 0;
104 }
105
106 void
107 Editor::toggle_meter_updating()
108 {
109         if (Config->get_show_track_meters()) {
110                 start_updating();
111         } else {
112                 stop_updating ();
113         }
114 }
115
116 void
117 Editor::fast_update_strips ()
118 {
119         RouteTimeAxisView* rtv;
120
121         if (is_mapped() && session) {
122                 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
123                         if ((rtv = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
124                                 rtv->fast_update ();
125                         }
126                 }
127         }
128 }
129