make strip-as-GUI-for-send work for metering too ; frame around session summary widget ; tooltip for editor group tabs ; route group dialog name entry is now activatable (return == click on ok)

git-svn-id: svn://localhost/ardour2/branches/3.0@6137 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-11-20 15:26:34 +00:00
parent 648450781b
commit 8f7f171877
9 changed files with 120 additions and 104 deletions

View 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);

View File

@ -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<RouteTimeAxisView*> (*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<RouteTimeAxisView*> (*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<RouteTimeAxisView*> (*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<RouteTimeAxisView*> (*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<RouteTimeAxisView*> (*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<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

View 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;

View 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;
if (_current_delivery && (send = boost::dynamic_pointer_cast<Send>(_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<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());
boost::shared_ptr<Send> 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<Send> current_send;
if (_current_delivery && (current_send = boost::dynamic_pointer_cast<Send>(_current_delivery))) {
current_send->set_metering (false);
}
send_gone_connection.disconnect ();
}
void
MixerStrip::show_send (boost::shared_ptr<Send> 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> 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());

View 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);

View 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

View 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 ());

View 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));

View File

@ -81,7 +81,8 @@ Send::deactivate ()
{
_amp->deactivate ();
_meter->deactivate ();
_meter->reset ();
Processor::deactivate ();
}