X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmonitor_section.h;h=e42063b38fc5d206b31ef0f151e2fd5c1ca8f0bc;hb=4050ca5633dda03679f9aa9fab87d3bbf517395b;hp=d543ea1acde83d9d708c78c00b71aab3473ad7f3;hpb=896a0a991cc44418f58903fe5dd1c58001c87314;p=ardour.git diff --git a/gtk2_ardour/monitor_section.h b/gtk2_ardour/monitor_section.h index d543ea1acd..e42063b38f 100644 --- a/gtk2_ardour/monitor_section.h +++ b/gtk2_ardour/monitor_section.h @@ -1,135 +1,201 @@ /* - Copyright (C) 2010 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2010-2018 Paul Davis + * Copyright (C) 2011 Carl Hetherington + * Copyright (C) 2014-2015 Ben Loftis + * Copyright (C) 2014-2019 Robin Gareus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef __gtk2_ardour_monitor_section_h__ +#define __gtk2_ardour_monitor_section_h__ #include +#include +#include #include +#include -#include "gtkmm2ext/bindable_button.h" +#include "gtkmm2ext/bindings.h" + +#include "widgets/ardour_button.h" +#include "widgets/ardour_knob.h" +#include "widgets/ardour_display.h" -#include "axis_view.h" #include "level_meter.h" #include "route_ui.h" +#include "monitor_selector.h" + +#include "processor_box.h" +#include "processor_selection.h" -namespace Gtkmm2ext { - class TearOff; +namespace ArdourWidgets { + class TearOff; } -class VolumeController; +class PluginSelector; -class MonitorSection : public RouteUI +class MonitorSection : public RouteUI, public Gtk::EventBox { - public: - MonitorSection (ARDOUR::Session*); - ~MonitorSection (); - - void set_session (ARDOUR::Session*); - static void setup_knob_images (); - - Gtkmm2ext::TearOff& tearoff() const { return *_tearoff; } - - private: - Gtk::VBox vpacker; - Gtk::HBox hpacker; - Gtk::Table main_table; - Gtk::VBox upper_packer; - Gtk::VBox lower_packer; - Gtkmm2ext::TearOff* _tearoff; - - struct ChannelButtonSet { - BindableToggleButton cut; - BindableToggleButton dim; - BindableToggleButton solo; - BindableToggleButton invert; - - ChannelButtonSet (); - }; - - typedef std::vector ChannelButtons; - ChannelButtons _channel_buttons; - - Gtk::Adjustment gain_adjustment; - VolumeController* gain_control; - Gtk::Adjustment dim_adjustment; - VolumeController* dim_control; - Gtk::Adjustment solo_boost_adjustment; - VolumeController* solo_boost_control; - Gtk::Adjustment solo_cut_adjustment; - VolumeController* solo_cut_control; - - void populate_buttons (); - void set_button_names (); - void map_state (); - - boost::shared_ptr _monitor; - boost::shared_ptr _route; - - static Glib::RefPtr monitor_actions; - void register_actions (); - - static Glib::RefPtr big_knob_pixbuf; - static Glib::RefPtr little_knob_pixbuf; - - void cut_channel (uint32_t); - void dim_channel (uint32_t); - void solo_channel (uint32_t); - void invert_channel (uint32_t); - void dim_all (); - void cut_all (); - void mono (); - void toggle_exclusive_solo (); - void toggle_mute_overrides_solo (); - void dim_level_changed (); - void solo_boost_changed (); - void gain_value_changed (); - - bool nonlinear_gain_printer (Gtk::SpinButton*); - bool linear_gain_printer (Gtk::SpinButton*); - - Gtk::RadioButtonGroup solo_model_group; - Gtk::RadioButton solo_in_place_button; - Gtk::RadioButton afl_button; - Gtk::RadioButton pfl_button; - Gtk::HBox solo_model_box; - - void solo_use_in_place (); - void solo_use_afl (); - void solo_use_pfl (); - - BindableToggleButton cut_all_button; - BindableToggleButton dim_all_button; - BindableToggleButton mono_button; - BindableToggleButton rude_solo_button; - BindableToggleButton rude_audition_button; - BindableToggleButton exclusive_solo_button; - BindableToggleButton solo_mute_override_button; - - void do_blink (bool); - void solo_blink (bool); - void audition_blink (bool); - bool cancel_solo (GdkEventButton*); - bool cancel_audition (GdkEventButton*); - void solo_cut_changed (); - void update_solo_model (); - void parameter_changed (std::string); - - PBD::ScopedConnection config_connection; - PBD::ScopedConnectionList control_connections; - - void assign_controllables (); +public: + MonitorSection (); + ~MonitorSection (); + + void set_session (ARDOUR::Session*); + + ArdourWidgets::TearOff& tearoff() const { return *_tearoff; } + + std::string state_id() const; + + PluginSelector* plugin_selector(); + + void use_others_actions (); + +private: + Gtk::HBox hpacker; + Gtk::VBox vpacker; + ArdourWidgets::TearOff* _tearoff; + + Gtk::HBox channel_table_packer; + Gtk::HBox table_hpacker; + Gtk::HBox master_packer; + Gtk::Table channel_table_header; + Gtk::Table *channel_table; + Gtk::ScrolledWindow channel_table_scroller; + Gtk::Viewport channel_table_viewport; + Glib::RefPtr channel_size_group; + + struct ChannelButtonSet { + ArdourWidgets::ArdourButton cut; + ArdourWidgets::ArdourButton dim; + ArdourWidgets::ArdourButton solo; + ArdourWidgets::ArdourButton invert; + + ChannelButtonSet (); + }; + + typedef std::vector ChannelButtons; + ChannelButtons _channel_buttons; + + ArdourWidgets::ArdourKnob* gain_control; + ArdourWidgets::ArdourKnob* dim_control; + ArdourWidgets::ArdourKnob* solo_boost_control; + ArdourWidgets::ArdourKnob* solo_cut_control; + + ArdourWidgets::ArdourDisplay* gain_display; + ArdourWidgets::ArdourDisplay* dim_display; + ArdourWidgets::ArdourDisplay* solo_boost_display; + ArdourWidgets::ArdourDisplay* solo_cut_display; + + std::list > output_menu_bundles; + Gtk::Menu output_menu; + MonitorSelectorWindow *_output_selector; + ArdourWidgets::ArdourButton* output_button; + + void maybe_add_bundle_to_output_menu (boost::shared_ptr, ARDOUR::BundleList const &); + void bundle_output_chosen (boost::shared_ptr); + void update_output_display (); + void disconnect_output (); + void edit_output_configuration (); + + void populate_buttons (); + void map_state (); + + boost::shared_ptr _monitor; + + Glib::RefPtr monitor_actions; + Glib::RefPtr solo_actions; + void register_actions (); + + void cut_channel (uint32_t); + void dim_channel (uint32_t); + void solo_channel (uint32_t); + void invert_channel (uint32_t); + void dim_all (); + void cut_all (); + void mono (); + void toggle_exclusive_solo (); + void set_button_names () {} + void toggle_mute_overrides_solo (); + void dim_level_changed (); + void solo_boost_changed (); + void gain_value_changed (); + gint output_press (GdkEventButton *); + gint output_release (GdkEventButton *); + + ArdourWidgets::ArdourButton solo_in_place_button; + ArdourWidgets::ArdourButton afl_button; + ArdourWidgets::ArdourButton pfl_button; + Gtk::VBox solo_model_box; + + void solo_use_in_place (); + void solo_use_afl (); + void solo_use_pfl (); + + ArdourWidgets::ArdourButton cut_all_button; + ArdourWidgets::ArdourButton dim_all_button; + ArdourWidgets::ArdourButton mono_button; + ArdourWidgets::ArdourButton rude_solo_button; + ArdourWidgets::ArdourButton rude_iso_button; + ArdourWidgets::ArdourButton rude_audition_button; + ArdourWidgets::ArdourButton exclusive_solo_button; + ArdourWidgets::ArdourButton solo_mute_override_button; + ArdourWidgets::ArdourButton toggle_processorbox_button; + + void do_blink (bool); + void solo_blink (bool); + void audition_blink (bool); + bool cancel_solo (GdkEventButton*); + bool cancel_isolate (GdkEventButton*); + bool cancel_audition (GdkEventButton*); + void update_solo_model (); + void parameter_changed (std::string); + void isolated_changed (); + + PBD::ScopedConnection config_connection; + PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList route_connections; + + bool _inhibit_solo_model_update; + + void assign_controllables (); + void unassign_controllables (); + + void port_connected_or_disconnected (boost::weak_ptr, boost::weak_ptr); + + void update_processor_box (); + + void route_property_changed (const PBD::PropertyChange&) {} + + ProcessorBox* insert_box; + ProcessorSelection _rr_selection; + void help_count_processors (boost::weak_ptr p, uint32_t* cnt) const; + uint32_t count_processors (); + + void processors_changed (ARDOUR::RouteProcessorChange); + Glib::RefPtr proctoggle; + bool _ui_initialized; + + Gtkmm2ext::Bindings* bindings; + + void load_bindings (); + bool enter_handler (GdkEventCrossing*); + bool leave_handler (GdkEventCrossing*); + + void toggle_use_monitor_section (); + void drop_route (); }; + +#endif /* __gtk2_ardour_monitor_section_h__ */