ardour
route_ui.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002 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 #ifndef __ardour_route_ui__
21 #define __ardour_route_ui__
22 
23 #include <list>
24 
25 #include "pbd/xml++.h"
26 #include "pbd/signals.h"
27 
28 #include <gtkmm/textview.h>
29 
30 #include "gtkmm2ext/widget_state.h"
31 
32 #include "ardour/ardour.h"
33 #include "ardour/mute_master.h"
34 #include "ardour/session_event.h"
35 #include "ardour/session.h"
36 #include "ardour/route.h"
37 #include "ardour/route_group.h"
38 #include "ardour/track.h"
39 
40 #include "axis_view.h"
41 #include "selectable.h"
42 
43 namespace ARDOUR {
44  class AudioTrack;
45  class MidiTrack;
46 }
47 
48 namespace Gtk {
49  class Menu;
50  class CheckMenuItem;
51  class Widget;
52 }
53 
54 class ArdourButton;
55 class ArdourWindow;
56 class IOSelectorWindow;
57 
58 class RouteUI : public virtual AxisView
59 {
60  public:
63 
64  virtual ~RouteUI();
65 
66  Gdk::Color color () const;
67 
69  virtual void set_button_names () = 0;
70 
71  bool is_track() const;
72  bool is_audio_track() const;
73  bool is_midi_track() const;
74  bool has_audio_outputs () const;
75 
78 
82 
83  std::string name() const;
84 
85  // protected: XXX sigh this should be here
86 
88 
89  void request_redraw ();
90 
91  virtual void set_color (const Gdk::Color & c);
92  void choose_color ();
93 
98 
99  Gtk::HBox _invert_button_box;
102  ArdourButton* rec_enable_button; /* audio tracks */
106 
107  Glib::RefPtr<Gdk::Pixbuf> solo_safe_pixbuf;
108 
111 
114 
115  void send_blink (bool);
116  sigc::connection send_blink_connection;
117 
118  sigc::connection rec_blink_connection;
119 
120  Gtk::Menu* mute_menu;
121  Gtk::Menu* solo_menu;
122  Gtk::Menu* sends_menu;
123 
125 
126  bool mute_press(GdkEventButton*);
127  bool mute_release(GdkEventButton*);
128  bool solo_press(GdkEventButton*);
129  bool solo_release(GdkEventButton*);
130  bool rec_enable_press(GdkEventButton*);
131  bool rec_enable_release(GdkEventButton*);
132  bool show_sends_press(GdkEventButton*);
133  bool show_sends_release(GdkEventButton*);
134 
135  bool monitor_release(GdkEventButton*, ARDOUR::MonitorChoice);
136  bool monitor_input_press(GdkEventButton*);
137  bool monitor_input_release(GdkEventButton*);
138  bool monitor_disk_press(GdkEventButton*);
139  bool monitor_disk_release(GdkEventButton*);
140  void monitoring_changed ();
142 
143  void edit_input_configuration ();
145 
146  void step_gain_up ();
147  void step_gain_down ();
148  void page_gain_up ();
149  void page_gain_down ();
150 
151  void build_sends_menu ();
153  void set_sends_gain_to_zero ();
154  void set_sends_gain_to_unity ();
155  void create_sends (ARDOUR::Placement, bool);
157 
158  void solo_changed(bool, void*);
160  void listen_changed(void*);
164 
165  void build_solo_menu ();
166 
167  void solo_isolated_toggle (void*, Gtk::CheckMenuItem*);
168  void toggle_solo_isolated (Gtk::CheckMenuItem*);
169 
170  bool solo_isolate_button_release (GdkEventButton*);
171  bool solo_safe_button_release (GdkEventButton*);
172 
173  void solo_safe_toggle (void*, Gtk::CheckMenuItem*);
174  void toggle_solo_safe (Gtk::CheckMenuItem*);
175 
176  Gtk::CheckMenuItem* pre_fader_mute_check;
177  Gtk::CheckMenuItem* post_fader_mute_check;
178  Gtk::CheckMenuItem* listen_mute_check;
179  Gtk::CheckMenuItem* main_mute_check;
180  Gtk::CheckMenuItem* solo_safe_check;
181  Gtk::CheckMenuItem* solo_isolated_check;
182 
183  void toggle_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*);
184  void muting_change ();
185  void build_mute_menu(void);
186  void init_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*);
187 
188  int set_color_from_route ();
189 
190  void route_rename();
191 
192  virtual void property_changed (const PBD::PropertyChange&);
193  void route_removed ();
194 
195  virtual void route_active_changed () {}
196  void set_route_active (bool, bool);
197 
198  Gtk::Menu* record_menu;
199  void build_record_menu ();
200 
201  Gtk::CheckMenuItem *step_edit_item;
202  void toggle_step_edit ();
203  virtual void step_edit_changed (bool);
204 
205  virtual void polarity_changed ();
206 
207  Gtk::CheckMenuItem *denormal_menu_item;
209  virtual void denormal_protection_changed ();
210 
211  void disconnect_input ();
212  void disconnect_output ();
213 
214  virtual void blink_rec_display (bool onoff);
215  void update_mute_display ();
216 
217  void update_solo_display ();
218 
219  virtual void map_frozen ();
220 
221  void adjust_latency ();
222  void save_as_template ();
224 
225  static Gtkmm2ext::ActiveState solo_active_state (boost::shared_ptr<ARDOUR::Route>);
226  static Gtkmm2ext::ActiveState solo_isolate_active_state (boost::shared_ptr<ARDOUR::Route>);
227  static Gtkmm2ext::ActiveState solo_safe_active_state (boost::shared_ptr<ARDOUR::Route>);
228  static Gtkmm2ext::ActiveState mute_active_state (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Route>);
229 
234  static PBD::Signal1<void, boost::shared_ptr<ARDOUR::Route> > BusSendDisplayChanged;
235 
237  void setup_comment_editor ();
238  void open_comment_editor ();
239  void toggle_comment_editor ();
240 
241  gint comment_key_release_handler (GdkEventKey*);
242  void comment_changed (void *src);
243  void comment_edited ();
245 
246  protected:
247 
249  Gtk::TextView* comment_area;
252 
255 
256  void init ();
257  void reset ();
258 
259  void self_delete ();
260  virtual void start_step_editing () {}
261  virtual void stop_step_editing() {}
262 
263  void set_invert_sensitive (bool);
264  bool verify_new_route_name (const std::string& name);
265 
266  void route_gui_changed (std::string);
267  virtual void route_color_changed () {}
268 
270 
271  private:
273  void parameter_changed (std::string const &);
274  void relabel_solo_button ();
275  void track_mode_changed ();
276 
277  std::string route_state_id () const;
278 
280  SoloMuteRelease (bool was_active)
281  : active (was_active)
282  , exclusive (false) {}
283 
288  bool active;
289  bool exclusive;
290  };
291 
294 
295  void setup_invert_buttons ();
296  void set_invert_button_state ();
297  void invert_menu_toggled (uint32_t);
298  bool invert_press (GdkEventButton *);
299  bool invert_release (GdkEventButton *, uint32_t i);
300 
302  std::vector<ArdourButton*> _invert_buttons;
303  Gtk::Menu* _invert_menu;
304 
307 
308  static uint32_t _max_invert_buttons;
309 };
310 
311 #endif /* __ardour_route_ui__ */
gint comment_key_release_handler(GdkEventKey *)
void set_route_active(bool, bool)
Definition: route_ui.cc:1687
Gdk::Color color() const
Definition: route_ui.cc:2138
void open_comment_editor()
Definition: route_ui.cc:1627
bool rec_enable_press(GdkEventButton *)
Definition: route_ui.cc:668
SoloMuteRelease(bool was_active)
Definition: route_ui.h:280
void track_mode_changed()
Definition: route_ui.cc:2119
Gtk::CheckMenuItem * pre_fader_mute_check
Definition: route_ui.h:176
virtual void denormal_protection_changed()
Definition: route_ui.cc:1712
virtual void start_step_editing()
Definition: route_ui.h:260
static uint32_t _max_invert_buttons
Definition: route_ui.h:308
int _i_am_the_modifier
Definition: route_ui.h:301
void build_record_menu()
Definition: route_ui.cc:862
void update_mute_display()
Definition: route_ui.cc:1228
boost::shared_ptr< ARDOUR::MidiTrack > midi_track() const
Definition: route_ui.cc:1762
virtual void route_color_changed()
Definition: route_ui.h:267
void open_remote_control_id_dialog()
Definition: route_ui.cc:1900
ArdourButton * show_sends_button
Definition: route_ui.h:103
virtual void processors_changed(ARDOUR::RouteProcessorChange)
Definition: route_ui.h:161
void toggle_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem *)
Definition: route_ui.cc:1369
void build_sends_menu()
Definition: route_ui.cc:942
bool is_midi_track() const
Definition: route_ui.cc:1756
sigc::connection rec_blink_connection
Definition: route_ui.h:118
void set_sends_gain_from_track()
Definition: route_ui.cc:1015
Gtk::HBox _invert_button_box
Definition: route_ui.h:99
boost::shared_ptr< ARDOUR::RouteList > routes
Definition: route_ui.h:284
void choose_color()
Definition: route_ui.cc:1479
bool is_audio_track() const
Definition: route_ui.cc:1744
void monitoring_changed()
Definition: route_ui.cc:746
void build_mute_menu(void)
Definition: route_ui.cc:1323
bool has_audio_outputs() const
Definition: route_ui.cc:1768
void edit_input_configuration()
Definition: route_ui.cc:486
Definition: ardour_ui.h:130
bool wait_for_release
Definition: route_ui.h:95
void route_rename()
Definition: route_ui.cc:1558
void update_monitoring_display()
Definition: route_ui.cc:752
Gtk::Menu * _invert_menu
Definition: route_ui.h:303
void setup_comment_editor()
Definition: route_ui.cc:1642
Gtk::CheckMenuItem * solo_safe_check
Definition: route_ui.h:180
Gtk::Menu * mute_menu
Definition: route_ui.h:120
boost::shared_ptr< ARDOUR::RouteList > routes_on
Definition: route_ui.h:285
void build_solo_menu()
Definition: route_ui.cc:1294
virtual void set_route(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:226
bool monitor_disk_press(GdkEventButton *)
Definition: route_ui.cc:800
boost::shared_ptr< ARDOUR::Route > route
Definition: route_ui.h:287
IOSelectorWindow * input_selector
Definition: route_ui.h:250
void page_gain_down()
Definition: route_ui.cc:1894
MonitorChoice
Definition: types.h:386
void set_sends_gain_to_unity()
Definition: route_ui.cc:1027
bool self_destruct
Definition: route_ui.h:254
Gtk::CheckMenuItem * step_edit_item
Definition: route_ui.h:201
void set_invert_sensitive(bool)
Definition: route_ui.cc:2092
void muting_change()
Definition: route_ui.cc:1379
void adjust_latency()
Definition: route_ui.cc:1799
Gtk::CheckMenuItem * post_fader_mute_check
Definition: route_ui.h:177
static void set_showing_sends_to(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:2152
bool ignore_toggle
Definition: route_ui.h:94
void disconnect_output()
Definition: route_ui.cc:1726
ArdourWindow * comment_window
Definition: route_ui.h:248
virtual ~RouteUI()
Definition: route_ui.cc:88
virtual void set_color(const Gdk::Color &c)
Definition: route_ui.cc:1493
virtual void step_edit_changed(bool)
Definition: route_ui.cc:900
void session_rec_enable_changed()
Definition: route_ui.cc:1245
virtual void route_active_changed()
Definition: route_ui.h:195
void save_as_template()
Definition: route_ui.cc:1805
Gtk::CheckMenuItem * listen_mute_check
Definition: route_ui.h:178
void step_gain_up()
Definition: route_ui.cc:1876
Gtk::Menu * solo_menu
Definition: route_ui.h:121
void relabel_solo_button()
Gtk::Menu * sends_menu
Definition: route_ui.h:122
bool monitor_input_release(GdkEventButton *)
Definition: route_ui.cc:794
ArdourButton * rec_enable_button
Definition: route_ui.h:102
void route_rec_enable_changed()
Definition: route_ui.cc:1238
boost::shared_ptr< ARDOUR::Route > _route
Definition: route_ui.h:87
void set_invert_button_state()
Definition: route_ui.cc:2003
bool show_sends_release(GdkEventButton *)
Definition: route_ui.cc:1070
IOSelectorWindow * output_selector
Definition: route_ui.h:251
ArdourButton * solo_button
Definition: route_ui.h:101
static Gtkmm2ext::ActiveState solo_isolate_active_state(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:1118
SoloMuteRelease * _solo_release
Definition: route_ui.h:292
void comment_changed(void *src)
Definition: route_ui.cc:1660
virtual void blink_rec_display(bool onoff)
Definition: route_ui.cc:1252
void reset()
Definition: route_ui.cc:206
bool monitor_disk_release(GdkEventButton *)
Definition: route_ui.cc:806
Gtk::Label monitor_disk_button_label
Definition: route_ui.h:113
ArdourButton * monitor_input_button
Definition: route_ui.h:104
bool solo_press(GdkEventButton *)
Definition: route_ui.cc:502
Definition: amp.h:29
void toggle_comment_editor()
Definition: route_ui.cc:1612
void request_redraw()
Definition: route_ui.cc:2100
void parameter_changed(std::string const &)
Definition: route_ui.cc:1854
void comment_edited()
boost::shared_ptr< ARDOUR::Track > track() const
Definition: route_ui.cc:1738
static Gtkmm2ext::ActiveState mute_active_state(ARDOUR::Session *, boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:1193
boost::shared_ptr< ARDOUR::Delivery > _current_delivery
Definition: route_ui.h:124
virtual void map_frozen()
Definition: route_ui.cc:1780
void setup_invert_buttons()
Definition: route_ui.cc:1955
static Gtkmm2ext::ActiveState solo_active_state(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:1090
std::string name() const
Definition: route_ui.cc:1774
static Gtkmm2ext::ActiveState solo_safe_active_state(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:1132
ARDOUR::RouteGroup * route_group() const
Definition: route_ui.cc:2171
void step_gain_down()
Definition: route_ui.cc:1888
bool multiple_mute_change
Definition: route_ui.h:96
void check_rec_enable_sensitivity()
Definition: route_ui.cc:1842
bool is_track() const
Definition: route_ui.cc:1732
bool solo_isolate_button_release(GdkEventButton *)
Definition: route_ui.cc:1412
void create_selected_sends(ARDOUR::Placement, bool)
Definition: route_ui.cc:994
void toggle_step_edit()
Definition: route_ui.cc:890
void toggle_denormal_protection()
Definition: route_ui.cc:1697
bool show_sends_press(GdkEventButton *)
Definition: route_ui.cc:1033
void toggle_solo_isolated(Gtk::CheckMenuItem *)
Definition: route_ui.cc:1458
void self_delete()
Definition: route_ui.cc:220
void create_sends(ARDOUR::Placement, bool)
Definition: route_ui.cc:988
virtual void property_changed(const PBD::PropertyChange &)
Definition: route_ui.cc:1604
ArdourButton * mute_button
Definition: route_ui.h:100
bool multiple_solo_change
Definition: route_ui.h:97
void init_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem *)
Definition: route_ui.cc:1363
void route_removed()
Gtk::CheckMenuItem * solo_isolated_check
Definition: route_ui.h:181
Gtk::CheckMenuItem * main_mute_check
Definition: route_ui.h:179
bool invert_press(GdkEventButton *)
Definition: route_ui.cc:2050
Gtk::Label monitor_input_button_label
Definition: route_ui.h:112
void solo_changed(bool, void *)
static boost::weak_ptr< ARDOUR::Route > _showing_sends_to
Definition: route_ui.h:306
bool solo_release(GdkEventButton *)
Definition: route_ui.cc:645
std::vector< ArdourButton * > _invert_buttons
Definition: route_ui.h:302
void solo_changed_so_update_mute()
Definition: route_ui.cc:1187
bool rec_enable_release(GdkEventButton *)
Definition: route_ui.cc:928
virtual void set_button_names()=0
virtual void stop_step_editing()
Definition: route_ui.h:261
void listen_changed(void *)
void edit_output_configuration()
Definition: route_ui.cc:456
bool invert_release(GdkEventButton *, uint32_t i)
Definition: route_ui.cc:2035
SoloMuteRelease * _mute_release
Definition: route_ui.h:293
void page_gain_up()
Definition: route_ui.cc:1882
bool monitor_input_press(GdkEventButton *)
Definition: route_ui.cc:788
Gtk::TextView * comment_area
Definition: route_ui.h:249
bool mute_press(GdkEventButton *)
Definition: route_ui.cc:335
bool solo_safe_button_release(GdkEventButton *)
Definition: route_ui.cc:1449
boost::shared_ptr< ARDOUR::AudioTrack > audio_track() const
Definition: route_ui.cc:1750
void solo_safe_toggle(void *, Gtk::CheckMenuItem *)
Gtk::Menu * record_menu
Definition: route_ui.h:198
void solo_isolated_toggle(void *, Gtk::CheckMenuItem *)
bool mute_release(GdkEventButton *)
Definition: route_ui.cc:443
void invert_menu_toggled(uint32_t)
Definition: route_ui.cc:2082
void comment_editor_done_editing()
Definition: route_ui.cc:1674
void disconnect_input()
Definition: route_ui.cc:1720
void route_gui_changed(std::string)
Definition: route_ui.cc:2109
ArdourButton * solo_isolated_led
Definition: route_ui.h:110
std::string route_state_id() const
Definition: route_ui.cc:1513
Placement
Definition: types.h:375
void toggle_solo_safe(Gtk::CheckMenuItem *)
Definition: route_ui.cc:1471
PBD::ScopedConnectionList route_connections
Definition: route_ui.h:253
boost::shared_ptr< ARDOUR::Route > route() const
Definition: route_ui.h:76
ArdourButton * solo_safe_led
Definition: route_ui.h:109
void set_sends_gain_to_zero()
Definition: route_ui.cc:1021
static PBD::Signal1< void, boost::shared_ptr< ARDOUR::Route > > BusSendDisplayChanged
Definition: route_ui.h:234
Glib::RefPtr< Gdk::Pixbuf > solo_safe_pixbuf
Definition: route_ui.h:107
Gtk::CheckMenuItem * denormal_menu_item
Definition: route_ui.h:207
int set_color_from_route()
Definition: route_ui.cc:1519
sigc::connection send_blink_connection
Definition: route_ui.h:116
bool ignore_comment_edit
Definition: route_ui.h:244
void send_blink(bool)
Definition: route_ui.cc:1076
void update_solo_display()
Definition: route_ui.cc:1146
bool monitor_release(GdkEventButton *, ARDOUR::MonitorChoice)
Definition: route_ui.cc:812
ArdourButton * monitor_disk_button
Definition: route_ui.h:105
RouteUI(ARDOUR::Session *)
Definition: route_ui.cc:73
virtual void polarity_changed()
Definition: route_ui.cc:325
virtual void bus_send_display_changed(boost::shared_ptr< ARDOUR::Route >)
Definition: route_ui.cc:2159
boost::shared_ptr< ARDOUR::RouteList > routes_off
Definition: route_ui.h:286
bool verify_new_route_name(const std::string &name)
Definition: route_ui.cc:1540
void init()
Definition: route_ui.cc:111