diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index d96ccdcf4b..2c75cc0100 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -452,6 +452,8 @@ Editor::Editor () h->pack_start (edit_controls_vbox); controls_layout.add (*h); + ARDOUR_UI::instance()->tooltips().set_tip (*_group_tabs, _("Groups: context-click for possible operations")); + controls_layout.set_name ("EditControlsBase"); controls_layout.add_events (Gdk::SCROLL_MASK); controls_layout.signal_scroll_event().connect (mem_fun(*this, &Editor::control_layout_scroll), false); @@ -554,7 +556,13 @@ Editor::Editor () VPaned *editor_summary_pane = manage(new VPaned()); editor_summary_pane->pack1(edit_packer); - editor_summary_pane->pack2(*_summary); + + Frame* summary_frame = manage (new Frame); + summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN); + summary_frame->add (*_summary); + summary_frame->show (); + + editor_summary_pane->pack2(*summary_frame); edit_pane.pack1 (*editor_summary_pane, true, true); edit_pane.pack2 (the_notebook, false, true); diff --git a/gtk2_ardour/editor_route_groups.cc b/gtk2_ardour/editor_route_groups.cc index 7496d50ccb..2a07ca89c1 100644 --- a/gtk2_ardour/editor_route_groups.cc +++ b/gtk2_ardour/editor_route_groups.cc @@ -252,35 +252,7 @@ EditorRouteGroups::new_route_group () } void -EditorRouteGroups::new_from_selection () -{ - RouteGroup* g = new RouteGroup ( - *_session, - "", - RouteGroup::Active, - (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::Select) - ); - - RouteGroupDialog d (g, Gtk::Stock::NEW); - int const r = d.do_run (); - - if (r == Gtk::RESPONSE_OK) { - _session->add_route_group (g); - - for (TrackSelection::iterator i = _editor->get_selection().tracks.begin(); i != _editor->get_selection().tracks.end(); ++i) { - RouteTimeAxisView* rtv = dynamic_cast (*i); - if (rtv) { - rtv->route()->set_route_group (g, this); - } - } - - } else { - delete g; - } -} - -void -EditorRouteGroups::new_from_rec_enabled () +EditorRouteGroups::run_new_group_dialog (const RouteList& rl) { RouteGroup* g = new RouteGroup ( *_session, @@ -292,47 +264,78 @@ EditorRouteGroups::new_from_rec_enabled () RouteGroupDialog d (g, Gtk::Stock::NEW); int const r = d.do_run (); - if (r == Gtk::RESPONSE_OK) { + switch (r) { + case Gtk::RESPONSE_OK: + case Gtk::RESPONSE_ACCEPT: _session->add_route_group (g); - - for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) { - RouteTimeAxisView* rtv = dynamic_cast (*i); - if (rtv && rtv->route()->record_enabled()) { - rtv->route()->set_route_group (g, this); - } + for (RouteList::const_iterator i = rl.begin(); i != rl.end(); ++i) { + (*i)->set_route_group (g, this); } - - } else { + break; + default: delete g; } } +void +EditorRouteGroups::new_from_selection () +{ + if (_editor->get_selection().tracks.empty()) { + return; + } + + RouteList rl; + + for (TrackSelection::iterator i = _editor->get_selection().tracks.begin(); i != _editor->get_selection().tracks.end(); ++i) { + RouteTimeAxisView* rtv = dynamic_cast (*i); + if (rtv) { + rl.push_back (rtv->route()); + } + } + + if (rl.empty()) { + return; + } + + run_new_group_dialog (rl); +} + +void +EditorRouteGroups::new_from_rec_enabled () +{ + RouteList rl; + + for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) { + RouteTimeAxisView* rtv = dynamic_cast (*i); + if (rtv && rtv->route()->record_enabled()) { + rl.push_back (rtv->route()); + } + } + + if (rl.empty()) { + return; + } + + run_new_group_dialog (rl); +} + void EditorRouteGroups::new_from_soloed () { - RouteGroup* g = new RouteGroup ( - *_session, - "", - RouteGroup::Active, - (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit) - ); + RouteList rl; - RouteGroupDialog d (g, Gtk::Stock::NEW); - int const r = d.do_run (); - - if (r == Gtk::RESPONSE_OK) { - _session->add_route_group (g); - - for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) { - RouteTimeAxisView* rtv = dynamic_cast (*i); - if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) { - rtv->route()->set_route_group (g, this); - } + for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) { + RouteTimeAxisView* rtv = dynamic_cast (*i); + if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) { + rl.push_back (rtv->route()); } - - } else { - delete g; } + + if (rl.empty()) { + return; + } + + run_new_group_dialog (rl); } void diff --git a/gtk2_ardour/editor_route_groups.h b/gtk2_ardour/editor_route_groups.h index e5fc6d7c64..3c93b96ed4 100644 --- a/gtk2_ardour/editor_route_groups.h +++ b/gtk2_ardour/editor_route_groups.h @@ -84,6 +84,7 @@ private: void flags_changed (void*, ARDOUR::RouteGroup*); void set_activation (ARDOUR::RouteGroup *, bool); void remove_selected (); + void run_new_group_dialog (const ARDOUR::RouteList&); Gtk::Menu* _menu; Glib::RefPtr _model; diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 876cf86dfb..3c32439c03 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -334,16 +334,8 @@ MixerStrip::set_route (boost::shared_ptr rt) delete output_selector; output_selector = 0; - boost::shared_ptr send; + revert_to_default_display (); - if (_current_delivery && (send = boost::dynamic_pointer_cast(_current_delivery))) { - send->set_metering (false); - } - - _current_delivery = _route->main_outs (); - - panners.set_panner (rt->main_outs()->panner()); - gpm.set_controls (rt, rt->shared_peak_meter(), rt->amp()); processor_box.set_route (rt); if (set_color_from_route()) { @@ -1640,46 +1632,54 @@ MixerStrip::switch_io (boost::shared_ptr target) return; } - boost::shared_ptr send; - - if (_current_delivery && (send = boost::dynamic_pointer_cast(_current_delivery))) { - send->set_metering (false); - } - - _current_delivery = _route->internal_send_for (target); - - cerr << "internal send from " << _route->name() << " to " << target->name() << " = " - << _current_delivery << endl; - - if (_current_delivery) { - send = boost::dynamic_pointer_cast(_current_delivery); - send->set_metering (true); - _current_delivery->GoingAway.connect (mem_fun (*this, &MixerStrip::revert_to_default_display)); - gain_meter().set_controls (_route, send->meter(), send->amp()); - panner_ui().set_panner (_current_delivery->panner()); + boost::shared_ptr send = _route->internal_send_for (target); + if (send) { + show_send (send); } else { - _current_delivery = _route->main_outs (); - gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp()); - panner_ui().set_panner (_route->main_outs()->panner()); + revert_to_default_display (); } - - gain_meter().setup_meters (); - panner_ui().setup_pan (); } +void +MixerStrip::drop_send () +{ + boost::shared_ptr current_send; + + if (_current_delivery && (current_send = boost::dynamic_pointer_cast(_current_delivery))) { + current_send->set_metering (false); + } + + send_gone_connection.disconnect (); + +} + +void +MixerStrip::show_send (boost::shared_ptr send) +{ + assert (send != 0); + drop_send (); + + _current_delivery = send; + send->set_metering (true); + send_gone_connection = _current_delivery->GoingAway.connect (mem_fun (*this, &MixerStrip::revert_to_default_display)); + + gain_meter().set_controls (_route, send->meter(), send->amp()); + gain_meter().setup_meters (); + + panner_ui().set_panner (_current_delivery->panner()); + panner_ui().setup_pan (); +} void MixerStrip::revert_to_default_display () { - show_sends_button->set_active (false); - - boost::shared_ptr send; - - if (_current_delivery && (send = boost::dynamic_pointer_cast(_current_delivery))) { - send->set_metering (false); + if (show_sends_button) { + show_sends_button->set_active (false); } + drop_send (); + _current_delivery = _route->main_outs(); gain_meter().set_controls (_route, _route->shared_peak_meter(), _route->amp()); diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index fdcf85e1f3..e76f8170ee 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -97,6 +97,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox ARDOUR::RouteGroup* route_group() const; void set_route (boost::shared_ptr); void set_button_names (); + void show_send (boost::shared_ptr); sigc::signal WidthChanged; @@ -263,6 +264,9 @@ class MixerStrip : public RouteUI, public Gtk::EventBox boost::shared_ptr _current_delivery; void revert_to_default_display (); + void drop_send (); + sigc::connection send_gone_connection; + static int scrollbar_height; void update_io_button (boost::shared_ptr route, Width width, bool input_button); diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 7b784022fa..14b0f6599d 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -342,7 +342,7 @@ ProcessorBox::show_processor_menu (gint arg) aux_menu_item->set_submenu (*m); } else { /* stupid gtkmm: we need to pass a null reference here */ - aux_menu_item->set_submenu (*((Gtk::Menu *)0)); + gtk_menu_item_set_submenu (aux_menu_item->gobj(), 0); } } @@ -1442,8 +1442,7 @@ ProcessorBox::edit_processor (boost::shared_ptr processor) gidget = send_ui; #else if (_parent_strip) { - _parent_strip->gain_meter().set_controls (_route, send->meter(), send->amp()); - _parent_strip->panner_ui().set_panner (send->panner()); + _parent_strip->show_send (send); } #endif diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc index a23d1f4749..4856d87f08 100644 --- a/gtk2_ardour/route_group_dialog.cc +++ b/gtk2_ardour/route_group_dialog.cc @@ -75,6 +75,8 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, StockID const & s) _name.set_text (_group->name ()); _active.set_active (_group->is_active ()); + _name.signal_activate ().connect (sigc::bind (mem_fun (*this, &Dialog::response), RESPONSE_ACCEPT)); + _gain.set_active (_group->property (RouteGroup::Gain)); _relative.set_active (_group->is_relative()); _mute.set_active (_group->property (RouteGroup::Mute)); @@ -124,7 +126,7 @@ RouteGroupDialog::do_run () { int const r = run (); - if (r == Gtk::RESPONSE_OK) { + if (r == Gtk::RESPONSE_OK || r == Gtk::RESPONSE_ACCEPT) { _group->set_property (RouteGroup::Gain, _gain.get_active ()); _group->set_property (RouteGroup::Mute, _mute.get_active ()); _group->set_property (RouteGroup::Solo, _solo.get_active ()); diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index a3d8903f34..3494be2cf5 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -362,8 +362,6 @@ Delivery::state (bool full_state) node.add_property("type", "delivery"); } - std::cerr << "delivery " << _name << " storing role " << _role << " as " << enum_2_string (_role) << std::endl; - node.add_property("role", enum_2_string(_role)); node.add_child_nocopy (_panner->state (full_state)); diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc index b0d66e01ba..3039a7fc3b 100644 --- a/libs/ardour/send.cc +++ b/libs/ardour/send.cc @@ -81,7 +81,8 @@ Send::deactivate () { _amp->deactivate (); _meter->deactivate (); - + _meter->reset (); + Processor::deactivate (); }