ardour
monitor_section.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2010 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 <gtkmm/box.h>
21 #include <gtkmm/table.h>
22 
24 
25 #include "ardour_button.h"
26 #include "ardour_knob.h"
27 #include "ardour_display.h"
28 #include "axis_view.h"
29 #include "level_meter.h"
30 #include "route_ui.h"
31 #include "monitor_selector.h"
32 
33 namespace Gtkmm2ext {
34  class TearOff;
35  class MotionFeedback;
36 }
37 
38 class VolumeController;
39 
40 class MonitorSection : public RouteUI
41 {
42  public:
44  ~MonitorSection ();
45 
47 
48  Gtkmm2ext::TearOff& tearoff() const { return *_tearoff; }
49 
50  std::string state_id() const;
51 
52  private:
53  Gtk::VBox vpacker;
54  Gtk::HBox hpacker;
55  Gtk::VBox upper_packer;
56  Gtk::VBox lower_packer;
58 
60  Gtk::HBox table_hpacker;
61  Gtk::Table channel_table;
63  Gtk::ScrolledWindow channel_table_scroller;
64  Gtk::Viewport channel_table_viewport;
65  Glib::RefPtr<Gtk::SizeGroup> channel_size_group;
66 
72 
74  };
75 
76  typedef std::vector<ChannelButtonSet*> ChannelButtons;
77  ChannelButtons _channel_buttons;
78 
83 
88 
89  std::list<boost::shared_ptr<ARDOUR::Bundle> > output_menu_bundles;
90  Gtk::Menu output_menu;
93 
96  void output_button_resized (Gtk::Allocation&);
97  void update_output_display ();
98  void disconnect_output ();
100 
101  void populate_buttons ();
102  void map_state ();
103 
106 
107  static Glib::RefPtr<Gtk::ActionGroup> monitor_actions;
108  void register_actions ();
109 
110  void cut_channel (uint32_t);
111  void dim_channel (uint32_t);
112  void solo_channel (uint32_t);
113  void invert_channel (uint32_t);
114  void dim_all ();
115  void cut_all ();
116  void mono ();
117  void toggle_exclusive_solo ();
118  void set_button_names () {}
120  void dim_level_changed ();
121  void solo_boost_changed ();
122  void gain_value_changed ();
123  gint output_press (GdkEventButton *);
124  gint output_release (GdkEventButton *);
125 
129  Gtk::HBox solo_model_box;
130 
131  void solo_use_in_place ();
132  void solo_use_afl ();
133  void solo_use_pfl ();
134 
143 
144  void do_blink (bool);
145  void solo_blink (bool);
146  void audition_blink (bool);
147  bool cancel_solo (GdkEventButton*);
148  bool cancel_isolate (GdkEventButton*);
149  bool cancel_audition (GdkEventButton*);
150  void update_solo_model ();
151  void parameter_changed (std::string);
152  void isolated_changed ();
153 
157 
159 
160  void assign_controllables ();
162 };
Gtk::HBox channel_table_packer
void toggle_exclusive_solo()
ArdourButton exclusive_solo_button
Gtk::HBox table_hpacker
ArdourKnob * dim_control
ArdourButton rude_solo_button
Gtk::HBox hpacker
void update_output_display()
std::vector< ChannelButtonSet * > ChannelButtons
boost::shared_ptr< ARDOUR::Route > _route
void dim_channel(uint32_t)
void toggle_mute_overrides_solo()
void cut_channel(uint32_t)
ArdourKnob * solo_cut_control
ArdourButton solo_mute_override_button
Gtk::Viewport channel_table_viewport
void dim_level_changed()
Gtk::VBox lower_packer
Gtk::Table channel_table
Gtkmm2ext::TearOff & tearoff() const
ArdourButton cut_all_button
void isolated_changed()
Gtk::Table channel_table_header
Gtk::HBox solo_model_box
Gtkmm2ext::TearOff * _tearoff
ArdourKnob * gain_control
ChannelButtons _channel_buttons
bool cancel_isolate(GdkEventButton *)
void edit_output_configuration()
MonitorSelectorWindow * _output_selector
ArdourKnob * solo_boost_control
std::vector< boost::shared_ptr< Bundle > > BundleList
Definition: types.h:535
ArdourButton dim_all_button
std::string state_id() const
Glib::RefPtr< Gtk::SizeGroup > channel_size_group
void gain_value_changed()
ArdourButton mono_button
void output_button_resized(Gtk::Allocation &)
void solo_blink(bool)
bool cancel_solo(GdkEventButton *)
Gtk::VBox vpacker
boost::shared_ptr< ARDOUR::MonitorProcessor > _monitor
void solo_boost_changed()
ArdourDisplay * gain_display
gint output_release(GdkEventButton *)
std::list< boost::shared_ptr< ARDOUR::Bundle > > output_menu_bundles
ArdourButton afl_button
ArdourButton rude_iso_button
void solo_channel(uint32_t)
gint output_press(GdkEventButton *)
static Glib::RefPtr< Gtk::ActionGroup > monitor_actions
void parameter_changed(std::string)
ArdourDisplay * dim_display
ArdourDisplay * solo_boost_display
Gtk::VBox upper_packer
bool cancel_audition(GdkEventButton *)
ArdourButton rude_audition_button
PBD::ScopedConnectionList control_connections
void port_connected_or_disconnected(boost::weak_ptr< ARDOUR::Port >, boost::weak_ptr< ARDOUR::Port >)
ArdourButton * output_button
void maybe_add_bundle_to_output_menu(boost::shared_ptr< ARDOUR::Bundle >, ARDOUR::BundleList const &)
ArdourButton solo_in_place_button
void set_session(ARDOUR::Session *)
ArdourDisplay * solo_cut_display
void invert_channel(uint32_t)
Gtk::ScrolledWindow channel_table_scroller
MonitorSection(ARDOUR::Session *)
Gtk::Menu output_menu
void audition_blink(bool)
PBD::ScopedConnection config_connection
PBD::ScopedConnection _output_changed_connection
bool _inhibit_solo_model_update
void bundle_output_chosen(boost::shared_ptr< ARDOUR::Bundle >)
ArdourButton pfl_button