diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-19 04:25:46 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-19 04:25:46 +0000 |
commit | b99b507be9cb290ff9fc2d6197af045964eb68a2 (patch) | |
tree | 4cacb127abbb64bce55fbf06f7184441691d851e /gtk2_ardour | |
parent | 2feede2e8ce393b8684638c526006dfb46ef4908 (diff) |
add track/bus now allows specifying aux or direct bus role; processor box menus sort of kindof allow New Aux -> Aux Bus
git-svn-id: svn://localhost/ardour2/branches/3.0@6128 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/actions.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/add_route_dialog.cc | 48 | ||||
-rw-r--r-- | gtk2_ardour/add_route_dialog.h | 10 | ||||
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 24 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 8 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 66 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 3 |
9 files changed, 122 insertions, 47 deletions
diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 1d70725163..f38a484b04 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -83,6 +83,7 @@ ActionManager::init () try { ui_manager->add_ui_from_file (ui_file.to_string()); + info << string_compose (_("Loading menus from %1"), ui_file.to_string()) << endmsg; loaded = true; } catch (Glib::MarkupError& err) { error << string_compose (_("badly formatted UI definition file: %1"), err.what()) << endmsg; diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 4c8c832044..42300f918b 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -52,12 +52,22 @@ static const char* track_mode_names[] = { 0 }; +static const char* bus_mode_names[] = { + N_("Aux"), + N_("Direct"), + 0 +}; + +std::vector<std::string> AddRouteDialog::channel_combo_strings; +std::vector<std::string> AddRouteDialog::track_mode_strings; +std::vector<std::string> AddRouteDialog::bus_mode_strings; + AddRouteDialog::AddRouteDialog (Session & s) : ArdourDialog (X_("add route dialog")) , _session (s) , routes_adjustment (1, 1, 128, 1, 4) , routes_spinner (routes_adjustment) - , track_mode_label (_("Track mode:")) + , mode_label (_("Track mode:")) { if (track_mode_strings.empty()) { track_mode_strings = I18N (track_mode_names); @@ -71,6 +81,10 @@ AddRouteDialog::AddRouteDialog (Session & s) } } + if (bus_mode_strings.empty()) { + bus_mode_strings = I18N (bus_mode_names); + } + set_name ("AddRouteDialog"); set_position (Gtk::WIN_POS_MOUSE); set_modal (true); @@ -82,14 +96,14 @@ AddRouteDialog::AddRouteDialog (Session & s) name_template_entry.set_name (X_("AddRouteDialogNameTemplateEntry")); routes_spinner.set_name (X_("AddRouteDialogSpinner")); channel_combo.set_name (X_("ChannelCountSelector")); - track_mode_combo.set_name (X_("ChannelCountSelector")); + mode_combo.set_name (X_("ChannelCountSelector")); refill_channel_setups (); refill_route_groups (); - set_popdown_strings (track_mode_combo, track_mode_strings, true); + set_popdown_strings (mode_combo, track_mode_strings, true); channel_combo.set_active_text (channel_combo_strings.front()); - track_mode_combo.set_active_text (track_mode_strings.front()); + mode_combo.set_active_text (track_mode_strings.front()); track_bus_combo.append_text (_("tracks")); track_bus_combo.append_text (_("busses")); @@ -139,9 +153,9 @@ AddRouteDialog::AddRouteDialog (Session & s) /* Track mode */ - track_mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); - table2->attach (track_mode_label, 1, 2, 1, 2, Gtk::FILL, Gtk::EXPAND, 0, 0); - table2->attach (track_mode_combo, 2, 3, 1, 2, Gtk::FILL, Gtk::EXPAND & Gtk::FILL, 0, 0); + mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); + table2->attach (mode_label, 1, 2, 1, 2, Gtk::FILL, Gtk::EXPAND, 0, 0); + table2->attach (mode_combo, 2, 3, 1, 2, Gtk::FILL, Gtk::EXPAND & Gtk::FILL, 0, 0); } @@ -180,8 +194,16 @@ AddRouteDialog::~AddRouteDialog () void AddRouteDialog::track_type_chosen () { - track_mode_label.set_sensitive (track ()); - track_mode_combo.set_sensitive (track ()); + if (track()) { + mode_label.set_text (_("Track mode:")); + set_popdown_strings (mode_combo, track_mode_strings); + mode_combo.set_active_text (track_mode_strings.front()); + } else { + mode_label.set_text (_("Bus type:")); + set_popdown_strings (mode_combo, bus_mode_strings); + mode_combo.set_active_text (bus_mode_strings.front()); + } + } bool @@ -190,6 +212,12 @@ AddRouteDialog::track () return track_bus_combo.get_active_row_number () == 0; } +bool +AddRouteDialog::aux () +{ + return !track() && mode_combo.get_active_row_number () == 0; +} + ARDOUR::DataType AddRouteDialog::type () { @@ -217,7 +245,7 @@ AddRouteDialog::mode () return ARDOUR::Normal; } - Glib::ustring str = track_mode_combo.get_active_text(); + Glib::ustring str = mode_combo.get_active_text(); if (str == _("Normal")) { return ARDOUR::Normal; } else if (str == _("Non Layered")){ diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index 691a1c549d..7af8b47d8d 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -48,6 +48,7 @@ class AddRouteDialog : public ArdourDialog bool track (); int channels (); int count (); + bool aux (); std::string name_template (); std::string track_template (); @@ -63,8 +64,8 @@ class AddRouteDialog : public ArdourDialog Gtk::Adjustment routes_adjustment; Gtk::SpinButton routes_spinner; Gtk::ComboBoxText channel_combo; - Gtk::Label track_mode_label; - Gtk::ComboBoxText track_mode_combo; + Gtk::Label mode_label; + Gtk::ComboBoxText mode_combo; Gtk::ComboBoxText route_group_combo; std::vector<ARDOUR::TemplateInfo> route_templates; @@ -90,8 +91,9 @@ class AddRouteDialog : public ArdourDialog typedef std::vector<ChannelSetup> ChannelSetups; ChannelSetups channel_setups; - std::vector<std::string> channel_combo_strings; - std::vector<std::string> track_mode_strings; + static std::vector<std::string> channel_combo_strings; + static std::vector<std::string> track_mode_strings; + static std::vector<std::string> bus_mode_strings; }; #endif /* __gtk_ardour_add_route_dialog_h__ */ diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index bd2c4dda62..4efc3fac15 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -457,6 +457,7 @@ <menuitem action='newplugin'/> <menuitem action='newinsert'/> <menuitem action='newsend'/> + <menuitem action='newaux'/> <menuitem action='newreturn'/> <separator/> <menuitem action='clear'/> @@ -512,27 +513,4 @@ <separator/> <menuitem action='addExternalAudioToRegionList'/> </popup> - <popup name='processormenu'> - <menuitem action='newplugin'/> - <menuitem action='newinsert'/> - <menuitem action='newsend'/> - <menuitem action='newreturn'/> - <separator/> - <menuitem action='clear'/> - <separator/> - <menuitem action='cut'/> - <menuitem action='copy'/> - <menuitem action='paste'/> - <menuitem action='delete'/> - <separator/> - <menuitem action='rename'/> - <separator/> - <menuitem action='selectall'/> - <menuitem action='deselectall'/> - <separator/> - <menuitem action='activate_all'/> - <menuitem action='deactivate_all'/> - <separator/> - <menuitem action='edit'/> - </popup> </ui> diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index f7c28b49f1..c05e826ada 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1295,7 +1295,7 @@ restart JACK with more ports.")); void -ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* route_group, uint32_t how_many) +ARDOUR_UI::session_add_audio_route (bool track, bool aux, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* route_group, uint32_t how_many) { list<boost::shared_ptr<AudioTrack> > tracks; RouteList routes; @@ -1320,7 +1320,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t } else { - routes = session->new_audio_route (input_channels, output_channels, route_group, how_many); + routes = session->new_audio_route (aux, input_channels, output_channels, route_group, how_many); if (routes.size() != how_many) { if (how_many == 1) { @@ -2977,6 +2977,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) uint32_t output_chan; string name_template = add_route_dialog->name_template (); bool track = add_route_dialog->track (); + bool aux = !track && add_route_dialog->aux(); RouteGroup* route_group = add_route_dialog->route_group (); AutoConnectOption oac = Config->get_output_auto_connect(); @@ -3002,7 +3003,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) if (track) { session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count); } else { - session_add_audio_bus (input_chan, output_chan, route_group, count); + session_add_audio_bus (aux, input_chan, output_chan, route_group, count); } } } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 4d8d057460..a05cca96bd 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -202,11 +202,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI void add_route (Gtk::Window* float_window); void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup* route_group, uint32_t how_many) { - session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many); + session_add_audio_route (true, false, input_channels, output_channels, mode, route_group, how_many); } - void session_add_audio_bus (int input_channels, int32_t output_channels, ARDOUR::RouteGroup* route_group, uint32_t how_many) { - session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many); + void session_add_audio_bus (bool aux, int input_channels, int32_t output_channels, ARDOUR::RouteGroup* route_group, uint32_t how_many) { + session_add_audio_route (false, aux, input_channels, output_channels, ARDOUR::Normal, route_group, how_many); } void session_add_midi_track (ARDOUR::RouteGroup* route_group, uint32_t how_many) { @@ -528,7 +528,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI void edit_metadata (); void import_metadata (); - void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup *, uint32_t how_many); + void session_add_audio_route (bool disk, bool aux, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup *, uint32_t how_many); void session_add_midi_route (bool disk, ARDOUR::RouteGroup *, uint32_t how_many); void set_transport_sensitivity (bool); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index ee93919ece..63838f4f06 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -220,6 +220,7 @@ ARDOUR_UI::install_actions () ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Key Bindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor)); ActionManager::register_toggle_action (common_actions, X_("ToggleBundleManager"), _("Bundle Manager"), mem_fun(*this, &ARDOUR_UI::toggle_bundle_manager)); +#if 0 act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, (ARDOUR::RouteGroup *) 0, 1)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, (ARDOUR::RouteGroup *) 0, 1)); @@ -228,6 +229,7 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); //act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus)); //ActionManager::session_sensitive_actions.push_back (act); +#endif act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string(""))); ActionManager::session_sensitive_actions.push_back (act); ActionManager::write_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 043395a0f1..e9d52016ec 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -289,6 +289,28 @@ ProcessorBox::build_send_action_menu () items.push_back (MenuElem (_("Show send controls"), mem_fun(*this, &ProcessorBox::show_send_controls))); } +Gtk::Menu* +ProcessorBox::build_possible_aux_menu () +{ + boost::shared_ptr<RouteList> rl = _session.get_routes_with_internal_returns(); + if (rl->empty()) { + return 0; + } + + using namespace Menu_Helpers; + Menu* menu = manage (new Menu); + MenuList& items = menu->items(); + + + for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) { + if (!(*r)->internal_send_for (*r)) { + items.push_back (MenuElem ((*r)->name(), bind (sigc::ptr_fun (ProcessorBox::rb_choose_aux), boost::weak_ptr<Route>(*r)))); + } + } + + return menu; +} + void ProcessorBox::show_send_controls () { @@ -312,6 +334,17 @@ ProcessorBox::show_processor_menu (gint arg) plugin_menu_item->set_submenu (*_get_plugin_selector()->plugin_menu()); } + Gtk::MenuItem* aux_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newaux")); + + if (aux_menu_item) { + Menu* m = build_possible_aux_menu(); + if (m) { + aux_menu_item->set_submenu (*m); + } else { + /* XXX WHAT?*/ + } + } + paste_action->set_sensitive (!_rr_selection.processors.empty()); processor_menu->popup (1, arg); @@ -780,6 +813,22 @@ ProcessorBox::return_io_finished (IOSelector::Result r, boost::weak_ptr<Processo } void +ProcessorBox::choose_aux (boost::weak_ptr<Route> wr) +{ + if (!_route) { + return; + } + + boost::shared_ptr<Route> target = wr.lock(); + + if (!target) { + return; + } + + _route->listen_via (target, PreFader, true, true); +} + +void ProcessorBox::redisplay_processors () { ENSURE_GUI_THREAD (mem_fun(*this, &ProcessorBox::redisplay_processors)); @@ -1485,9 +1534,10 @@ ProcessorBox::register_actions () act = ActionManager::register_action (popup_act_grp, X_("newsend"), _("New Send ..."), sigc::ptr_fun (ProcessorBox::rb_choose_send)); ActionManager::jack_sensitive_actions.push_back (act); - act = ActionManager::register_action (popup_act_grp, X_("newreturn"), _("New Return ..."), - sigc::ptr_fun (ProcessorBox::rb_choose_return)); - ActionManager::jack_sensitive_actions.push_back (act); + + ActionManager::register_action (popup_act_grp, X_("newaux"), _("New Aux Send ...")); + ActionManager::register_action (popup_act_grp, X_("newreturn"), _("New Return ..."), + sigc::ptr_fun (ProcessorBox::rb_choose_return)); ActionManager::register_action (popup_act_grp, X_("clear"), _("Clear (all)"), sigc::ptr_fun (ProcessorBox::rb_clear)); @@ -1575,6 +1625,16 @@ ProcessorBox::rb_choose_return () } void +ProcessorBox::rb_choose_aux (boost::weak_ptr<Route> wr) +{ + if (_current_processor_box == 0) { + return; + } + + _current_processor_box->choose_aux (wr); +} + +void ProcessorBox::rb_clear () { if (_current_processor_box == 0) { diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index f175448377..cf56299524 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -148,7 +148,9 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject Gtk::Menu * build_processor_menu (); void build_processor_tooltip (Gtk::EventBox&, std::string); void show_processor_menu (gint arg); + Gtk::Menu* build_possible_aux_menu(); + void choose_aux (boost::weak_ptr<ARDOUR::Route>); void choose_send (); void send_io_finished (IOSelector::Result, boost::weak_ptr<ARDOUR::Processor>, IOSelectorWindow*); void choose_return (); @@ -221,6 +223,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject static ProcessorBox* _current_processor_box; + static void rb_choose_aux (boost::weak_ptr<ARDOUR::Route>); static void rb_choose_plugin (); static void rb_choose_insert (); static void rb_choose_send (); |