make strip-as-GUI-for-send work for metering too ; frame around session summary widge...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 20 Nov 2009 15:26:34 +0000 (15:26 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 20 Nov 2009 15:26:34 +0000 (15:26 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6137 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor_route_groups.cc
gtk2_ardour/editor_route_groups.h
gtk2_ardour/mixer_strip.cc
gtk2_ardour/mixer_strip.h
gtk2_ardour/processor_box.cc
gtk2_ardour/route_group_dialog.cc
libs/ardour/delivery.cc
libs/ardour/send.cc

index d96ccdcf4b9abdfa74c8355e124bbfbeb038db41..2c75cc01009fb04ca468193644c1de0284c14d78 100644 (file)
@@ -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);
index 7496d50ccb5dab5a419e92b77bce32471994cb3d..2a07ca89c1cf8fefdbd0ff5f2af4ede1ab861ac4 100644 (file)
@@ -252,87 +252,90 @@ EditorRouteGroups::new_route_group ()
 }
 
 void
-EditorRouteGroups::new_from_selection ()
+EditorRouteGroups::run_new_group_dialog (const RouteList& rl)
 {
        RouteGroup* g = new RouteGroup (
                *_session,
                "",
                RouteGroup::Active,
-               (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::Select)
+               (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::RecEnable)
                );
 
        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 (TrackSelection::iterator i = _editor->get_selection().tracks.begin(); i != _editor->get_selection().tracks.end(); ++i) {
-                       RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
-                       if (rtv) {
-                               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_rec_enabled ()
+EditorRouteGroups::new_from_selection ()
 {
-       RouteGroup* g = new RouteGroup (
-               *_session,
-               "",
-               RouteGroup::Active,
-               (RouteGroup::Property) (RouteGroup::Mute | RouteGroup::Solo | RouteGroup::Edit | RouteGroup::RecEnable)
-               );
+       if (_editor->get_selection().tracks.empty()) {
+               return;
+       }
 
-       RouteGroupDialog d (g, Gtk::Stock::NEW);
-       int const r = d.do_run ();
+       RouteList rl;
 
-       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<RouteTimeAxisView*> (*i);
-                       if (rtv && rtv->route()->record_enabled()) {
-                               rtv->route()->set_route_group (g, this);
-                       }
+       for (TrackSelection::iterator i = _editor->get_selection().tracks.begin(); i != _editor->get_selection().tracks.end(); ++i) {
+               RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+               if (rtv) {
+                       rl.push_back (rtv->route());
                }
+       }
 
-       } else {
-               delete g;
+       if (rl.empty()) {
+               return;
        }
+
+       run_new_group_dialog (rl);
 }
 
 void
-EditorRouteGroups::new_from_soloed ()
+EditorRouteGroups::new_from_rec_enabled ()
 {
-       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 ();
+       for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
+               RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+               if (rtv && rtv->route()->record_enabled()) {
+                       rl.push_back (rtv->route());
+               }
+       }
 
-       if (r == Gtk::RESPONSE_OK) {
-               _session->add_route_group (g);
+       if (rl.empty()) {
+               return;
+       }
 
-               for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
-                       RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
-                       if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) {
-                               rtv->route()->set_route_group (g, this);
-                       }
+       run_new_group_dialog (rl);
+}
+
+void
+EditorRouteGroups::new_from_soloed ()
+{
+       RouteList rl;
+
+       for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
+               RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*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
index e5fc6d7c643c4bc7ac9d39f92cebe506318e0949..3c93b96ed420616a59d1abfbe616dc9d8b5136d9 100644 (file)
@@ -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<Gtk::ListStore> _model;
index 876cf86dfbebbe5be4a1e1e2e4adc3efba0a2f66..3c32439c0367bba0f1482d10cf156f26e686efcd 100644 (file)
@@ -334,16 +334,8 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
        delete output_selector;
        output_selector = 0;
 
-       boost::shared_ptr<Send> send;
+       revert_to_default_display ();
 
-       if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_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<Route> target)
                return;
        }
 
-       boost::shared_ptr<Send> send;
+       boost::shared_ptr<Send> send = _route->internal_send_for (target);
 
-       if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_current_delivery))) {
-               send->set_metering (false);
+       if (send) {
+               show_send (send);
+       } else {
+               revert_to_default_display ();
        }
+}
 
-       _current_delivery = _route->internal_send_for (target);
+void
+MixerStrip::drop_send ()
+{
+       boost::shared_ptr<Send> current_send;
 
-       cerr << "internal send from " << _route->name() << " to " << target->name() << " = "
-            << _current_delivery << endl;
+       if (_current_delivery && (current_send = boost::dynamic_pointer_cast<Send>(_current_delivery))) {
+               current_send->set_metering (false);
+       }
+
+       send_gone_connection.disconnect ();
+       
+}
 
-       if (_current_delivery) {
-               send = boost::dynamic_pointer_cast<Send>(_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());
+void
+MixerStrip::show_send (boost::shared_ptr<Send> send)
+{
+       assert (send != 0);
+       drop_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());
-       }
+       _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> send;
-
-       if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_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());
index fdcf85e1f3f994b9939eeea47c150382f5a6718a..e76f8170eeb0cb2f90e540555f0af723c2c34ab9 100644 (file)
@@ -97,6 +97,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
        ARDOUR::RouteGroup* route_group() const;
        void set_route (boost::shared_ptr<ARDOUR::Route>);
        void set_button_names ();
+       void show_send (boost::shared_ptr<ARDOUR::Send>);
 
        sigc::signal<void>      WidthChanged;
 
@@ -263,6 +264,9 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
        boost::shared_ptr<ARDOUR::Delivery> _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<ARDOUR::Route> route, Width width, bool input_button);
index 7b784022fa750a028af71466bfe21d4e5653f124..14b0f6599df2e07a530a5c8a9faa16218270fc84 100644 (file)
@@ -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> 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
 
index a23d1f47496be7b4325535989dd0da0c2f8cd0cf..4856d87f08e6fc2bf8ea3aca3c0f89b86a0a94a0 100644 (file)
@@ -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 ());
index a3d8903f34156bc66edf9f55f4079e0fd07ea02d..3494be2cf5c35bfacb0a20c0006f2a3b5ece68ab 100644 (file)
@@ -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));
 
index b0d66e01ba6669fb48ef853edf9b560ca1e3f0e2..3039a7fc3b30907f0e0005a8bbe07bc94e5e3567 100644 (file)
@@ -81,7 +81,8 @@ Send::deactivate ()
 {
        _amp->deactivate ();
        _meter->deactivate ();
-
+       _meter->reset ();
+       
        Processor::deactivate ();
 }