ardour
mixer_strip.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2000-2006 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 #ifndef __ardour_mixer_strip__
20 #define __ardour_mixer_strip__
21 
22 #include <vector>
23 
24 #include <cmath>
25 
26 #include <gtkmm/eventbox.h>
27 #include <gtkmm/button.h>
28 #include <gtkmm/box.h>
29 #include <gtkmm/frame.h>
30 #include <gtkmm/button.h>
31 #include <gtkmm/label.h>
32 #include <gtkmm/togglebutton.h>
33 #include <gtkmm/menu.h>
34 #include <gtkmm/textview.h>
35 #include <gtkmm/adjustment.h>
36 
37 #include "gtkmm2ext/auto_spin.h"
38 #include "gtkmm2ext/click_box.h"
41 
42 #include "pbd/stateful.h"
43 
44 #include "ardour/types.h"
45 #include "ardour/ardour.h"
46 #include "ardour/processor.h"
47 
48 #include "pbd/fastlog.h"
49 
50 #include "ardour_knob.h"
51 #include "route_ui.h"
52 #include "gain_meter.h"
53 #include "panner_ui.h"
54 #include "enums.h"
55 #include "processor_box.h"
56 #include "visibility_group.h"
57 
58 namespace ARDOUR {
59  class Route;
60  class Send;
61  class Processor;
62  class Session;
63  class PortInsert;
64  class Bundle;
65  class Plugin;
66 }
67 namespace Gtk {
68  class Window;
69  class Style;
70 }
71 
72 class Mixer_UI;
73 class MotionController;
74 class RouteGroupMenu;
75 class ArdourWindow;
76 
77 class MixerStrip : public RouteUI, public Gtk::EventBox
78 {
79  public:
81  MixerStrip (Mixer_UI&, ARDOUR::Session*, bool in_mixer = true);
82  ~MixerStrip ();
83 
84  void set_width_enum (Width, void* owner);
85  Width get_width_enum () const { return _width; }
86  void* width_owner () const { return _width_owner; }
87 
88  GainMeter& gain_meter() { return gpm; }
89  PannerUI& panner_ui() { return panners; }
91 
92  void fast_update ();
93  void set_embedded (bool);
94 
96  void set_button_names ();
99 
104  return _current_delivery;
105  }
106 
107  bool mixer_owned () const {
108  return _mixer_owned;
109  }
110 
111  void hide_things ();
112 
113  sigc::signal<void> WidthChanged;
114 
116  PBD::Signal1<void, boost::weak_ptr<ARDOUR::Delivery> > DeliveryChanged;
117 
118  static PBD::Signal1<void,MixerStrip*> CatchDeletion;
119 
120  std::string state_id() const;
121 
122  void parameter_changed (std::string);
123  void route_active_changed ();
124 
125  void copy_processors ();
126  void cut_processors ();
127  void paste_processors ();
128  void select_all_processors ();
129  void deselect_all_processors ();
130  bool delete_processors (); //note: returns false if nothing was deleted
131  void toggle_processors ();
132  void ab_plugins ();
133 
134  void set_selected(bool yn);
135  bool is_selected() {return _selected;}
136 
138 
139  protected:
140  friend class Mixer_UI;
141  void set_packed (bool yn);
142  bool packed () { return _packed; }
143 
144  void set_stuff_from_route ();
145 
146  private:
148 
149  void init ();
150 
151  bool _embedded;
152  bool _packed;
156 
160  Gtk::HBox width_hide_box;
161  Gtk::EventBox* spacer;
162 
163  void hide_clicked();
164  bool width_button_pressed (GdkEventButton *);
165 
166  Gtk::Frame global_frame;
167  Gtk::VBox global_vpacker;
168 
172 
173  Glib::RefPtr<Gtk::SizeGroup> button_size_group;
174 
175  Gtk::Table rec_mon_table;
176  Gtk::Table solo_iso_table;
177  Gtk::Table mute_solo_table;
179 
181 
182  void meter_changed ();
183 
186 
187  void input_button_resized (Gtk::Allocation&);
188  void output_button_resized (Gtk::Allocation&);
189 
191  Gtk::HBox input_button_box;
192 
193  std::string longest_label;
194 
196  bool input_active_button_press (GdkEventButton*);
197  bool input_active_button_release (GdkEventButton*);
198 
199  gint mark_update_safe ();
201 
203 
205 
207 
208  void setup_comment_button ();
209 
212 
213  gint input_press (GdkEventButton *);
214  gint input_release (GdkEventButton *);
215 
216  gint output_press (GdkEventButton *);
217  gint output_release (GdkEventButton *);
218 
219  Gtk::Menu input_menu;
220  std::list<boost::shared_ptr<ARDOUR::Bundle> > input_menu_bundles;
222 
223  Gtk::Menu output_menu;
224  std::list<boost::shared_ptr<ARDOUR::Bundle> > output_menu_bundles;
226 
229 
230  void diskstream_changed ();
231  void io_changed_proxy ();
232 
233  Gtk::Menu *send_action_menu;
234  Gtk::MenuItem* rename_menu_item;
235  void build_send_action_menu ();
236 
237  void new_send ();
238  void show_send_controls ();
239 
242  void connect_to_pan ();
243  void update_panner_choices ();
244 
246  void update_input_display ();
247  void update_output_display ();
248 
249  void set_automated_controls_sensitivity (bool yn);
250 
251  Gtk::Menu* route_ops_menu;
252  void build_route_ops_menu ();
253  gboolean name_button_button_press (GdkEventButton*);
254  gboolean name_button_button_release (GdkEventButton*);
255  gboolean number_button_button_press (GdkEventButton*);
256  void list_route_operations ();
257 
258  bool select_route_group (GdkEventButton *);
259  void route_group_changed ();
260 
261  Gtk::Style *passthru_style;
262 
263  void route_color_changed ();
264  void show_passthru_color ();
265 
267  void name_button_resized (Gtk::Allocation&);
268  void name_changed ();
269  void update_speed_display ();
270  void map_frozen ();
272  void hide_redirect_editors ();
273 
275 
277 
278  void engine_running();
279  void engine_stopped();
280 
282 
284 
285  void drop_send ();
287 
288  void reset_strip_style ();
289 
290  void update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width width, bool input_button);
292 
293  bool mixer_strip_enter_event ( GdkEventCrossing * );
294  bool mixer_strip_leave_event ( GdkEventCrossing * );
295 
304  boost::optional<bool> override_solo_visibility () const;
305 
307 
310 
312  bool level_meter_button_press (GdkEventButton *);
313  void popup_level_meter_menu (GdkEventButton *);
314  void add_level_meter_item_point (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterPoint);
315  void add_level_meter_item_type (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterType);
319 
321 };
322 
323 #endif /* __ardour_mixer_strip__ */
void show_send_controls()
bool level_meter_button_press(GdkEventButton *)
ArdourKnob trim_control
Definition: mixer_strip.h:206
bool _suspend_menu_callbacks
Definition: mixer_strip.h:311
void hide_redirect_editors()
void select_all_processors()
GainMeter gpm
Definition: mixer_strip.h:170
void update_output_display()
void * _width_owner
Definition: mixer_strip.h:155
Gtk::Table bottom_button_table
Definition: mixer_strip.h:178
Gtk::Menu * route_ops_menu
Definition: mixer_strip.h:251
std::string longest_label
Definition: mixer_strip.h:193
PluginSelector * plugin_selector()
void bundle_input_chosen(boost::shared_ptr< ARDOUR::Bundle >)
Definition: mixer_strip.cc:990
void show_send(boost::shared_ptr< ARDOUR::Send >)
bool packed()
Definition: mixer_strip.h:142
gint output_press(GdkEventButton *)
Definition: mixer_strip.cc:807
Gtk::Table mute_solo_table
Definition: mixer_strip.h:177
Width _width
Definition: mixer_strip.h:154
void reset_strip_style()
void update_io_button(boost::shared_ptr< ARDOUR::Route > route, Width width, bool input_button)
void name_button_resized(Gtk::Allocation &)
ArdourButton _comment_button
Definition: mixer_strip.h:204
PBD::ScopedConnection _level_meter_connection
Definition: mixer_strip.h:318
ArdourButton input_button
Definition: mixer_strip.h:184
void midi_input_status_changed()
ArdourButton number_label
Definition: mixer_strip.h:159
GainMeter & gain_meter()
Definition: mixer_strip.h:88
Definition: ardour_ui.h:130
Gtk::Table solo_iso_table
Definition: mixer_strip.h:176
virtual void bus_send_display_changed(boost::shared_ptr< ARDOUR::Route >)
void revert_to_default_display()
void copy_processors()
bool mixer_strip_leave_event(GdkEventCrossing *)
Definition: mixer_strip.cc:421
gboolean number_button_button_press(GdkEventButton *)
void * width_owner() const
Definition: mixer_strip.h:86
boost::shared_ptr< ARDOUR::Delivery > current_delivery() const
Definition: mixer_strip.h:103
sigc::signal< void > WidthChanged
Definition: mixer_strip.h:113
void bundle_output_chosen(boost::shared_ptr< ARDOUR::Bundle >)
Gtk::Table rec_mon_table
Definition: mixer_strip.h:175
void route_color_changed()
void fast_update()
void popup_level_meter_menu(GdkEventButton *)
RouteGroupMenu * group_menu
Definition: mixer_strip.h:211
void parameter_changed(std::string)
void set_automated_controls_sensitivity(bool yn)
bool width_button_pressed(GdkEventButton *)
ArdourButton width_button
Definition: mixer_strip.h:158
bool ignore_speed_adjustment
Definition: mixer_strip.h:274
void build_send_action_menu()
gint input_press(GdkEventButton *)
Definition: mixer_strip.cc:905
void toggle_processors()
boost::optional< bool > override_solo_visibility() const
void init()
Definition: mixer_strip.cc:138
void set_current_delivery(boost::shared_ptr< ARDOUR::Delivery >)
void setup_comment_button()
void property_changed(const PBD::PropertyChange &)
void set_button_names()
void deselect_all_processors()
void new_send()
void show_passthru_color()
void set_route(boost::shared_ptr< ARDOUR::Route >)
Definition: mixer_strip.cc:440
void set_meter_point(ARDOUR::MeterPoint)
PBD::ScopedConnection send_gone_connection
Definition: mixer_strip.h:286
void diskstream_changed()
void connect_to_pan()
Gtk::Menu output_menu
Definition: mixer_strip.h:223
void set_embedded(bool)
void hide_processor_editor(boost::weak_ptr< ARDOUR::Processor > processor)
ArdourButton meter_point_button
Definition: mixer_strip.h:180
guint32 mode_switch_in_progress
Definition: mixer_strip.h:200
std::vector< boost::shared_ptr< Bundle > > BundleList
Definition: types.h:535
void add_level_meter_item_point(Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterPoint)
bool input_active_button_release(GdkEventButton *)
void meter_changed()
void engine_running()
MixerStrip(Mixer_UI &, ARDOUR::Session *, boost::shared_ptr< ARDOUR::Route >, bool in_mixer=true)
Definition: mixer_strip.cc:114
void set_meter_type(ARDOUR::MeterType)
MeterType
Definition: types.h:182
Definition: amp.h:29
Gtk::Frame global_frame
Definition: mixer_strip.h:166
gint mark_update_safe()
boost::shared_ptr< ARDOUR::Delivery > _current_delivery
Definition: route_ui.h:124
void route_group_changed()
void input_button_resized(Gtk::Allocation &)
ArdourButton output_button
Definition: mixer_strip.h:185
bool delete_processors()
Glib::RefPtr< Gtk::SizeGroup > button_size_group
Definition: mixer_strip.h:173
bool _embedded
Definition: mixer_strip.h:151
void cut_processors()
void maybe_add_bundle_to_input_menu(boost::shared_ptr< ARDOUR::Bundle >, ARDOUR::BundleList const &)
void add_input_port(ARDOUR::DataType)
std::string state_id() const
void set_packed(bool yn)
Definition: mixer_strip.cc:776
void map_frozen()
VisibilityGroup _visibility
Definition: mixer_strip.h:303
void output_button_resized(Gtk::Allocation &)
bool _packed
Definition: mixer_strip.h:152
PBD::ScopedConnectionList _config_connection
Definition: mixer_strip.h:306
void update_diskstream_display()
void build_route_ops_menu()
void ab_plugins()
static MixerStrip * entered_mixer_strip()
Definition: mixer_strip.h:137
void drop_send()
bool _selected
Definition: selectable.h:45
ArdourButton hide_button
Definition: mixer_strip.h:157
gint input_release(GdkEventButton *)
Definition: mixer_strip.cc:888
ProcessorBox processor_box
Definition: mixer_strip.h:169
Mixer_UI & _mixer
Definition: mixer_strip.h:147
void add_output_port(ARDOUR::DataType)
Gtk::HBox input_button_box
Definition: mixer_strip.h:191
PBD::ScopedConnection panstate_connection
Definition: mixer_strip.h:240
Gtk::MenuItem * rename_menu_item
Definition: mixer_strip.h:234
void port_connected_or_disconnected(boost::weak_ptr< ARDOUR::Port >, boost::weak_ptr< ARDOUR::Port >)
PBD::ScopedConnection panstyle_connection
Definition: mixer_strip.h:241
Gtk::Menu * send_action_menu
Definition: mixer_strip.h:233
bool select_route_group(GdkEventButton *)
void add_level_meter_item_type(Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterType)
gboolean name_button_button_press(GdkEventButton *)
gboolean name_button_button_release(GdkEventButton *)
void name_changed()
Gtk::VBox global_vpacker
Definition: mixer_strip.h:167
void set_width_enum(Width, void *owner)
Definition: mixer_strip.cc:689
void update_panner_choices()
void hide_clicked()
Width
Definition: enums.h:25
Gtk::HBox width_hide_box
Definition: mixer_strip.h:160
PBD::Signal1< void, boost::weak_ptr< ARDOUR::Delivery > > DeliveryChanged
Definition: mixer_strip.h:116
bool mixer_strip_enter_event(GdkEventCrossing *)
Definition: mixer_strip.cc:409
void hide_things()
void set_selected(bool yn)
void update_speed_display()
Width get_width_enum() const
Definition: mixer_strip.h:85
void io_changed_proxy()
void maybe_add_bundle_to_output_menu(boost::shared_ptr< ARDOUR::Bundle >, ARDOUR::BundleList const &)
static MixerStrip * _entered_mixer_strip
Definition: mixer_strip.h:276
Gtk::EventBox * spacer
Definition: mixer_strip.h:161
void update_input_display()
void list_route_operations()
std::string meter_point_string(ARDOUR::MeterPoint)
bool mixer_owned() const
Definition: mixer_strip.h:107
ArdourButton name_button
Definition: mixer_strip.h:202
void route_active_changed()
ArdourButton * midi_input_enable_button
Definition: mixer_strip.h:190
void set_stuff_from_route()
Definition: mixer_strip.cc:678
MeterPoint
Definition: types.h:174
PannerUI panners
Definition: mixer_strip.h:171
gint output_release(GdkEventButton *)
Definition: mixer_strip.cc:795
void paste_processors()
Gtk::Menu input_menu
Definition: mixer_strip.h:219
bool is_selected()
Definition: mixer_strip.h:135
static PBD::Signal1< void, MixerStrip * > CatchDeletion
Definition: mixer_strip.h:118
boost::shared_ptr< ARDOUR::Route > route() const
Definition: route_ui.h:76
ArdourButton group_button
Definition: mixer_strip.h:210
std::list< boost::shared_ptr< ARDOUR::Bundle > > output_menu_bundles
Definition: mixer_strip.h:224
PannerUI & panner_ui()
Definition: mixer_strip.h:89
Gtk::Style * passthru_style
Definition: mixer_strip.h:261
bool _mixer_owned
Definition: mixer_strip.h:153
std::list< boost::shared_ptr< ARDOUR::Bundle > > input_menu_bundles
Definition: mixer_strip.h:220
void engine_stopped()
bool input_active_button_press(GdkEventButton *)