X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fredirect_box.cc;h=9533cbf782ec2fd830c9403a25b70fca4e9cea0f;hb=cd9fdb935f08966cc8c7170a39870e8adcae69d8;hp=48dd82923731f9691d07a9675d0569dda7003336;hpb=af58fad8a99558d1c4ff688083476c5a0b873762;p=ardour.git diff --git a/gtk2_ardour/redirect_box.cc b/gtk2_ardour/redirect_box.cc index 48dd829237..9533cbf782 100644 --- a/gtk2_ardour/redirect_box.cc +++ b/gtk2_ardour/redirect_box.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -25,6 +24,8 @@ #include +#include + #include #include @@ -33,6 +34,7 @@ #include #include #include +#include #include #include @@ -43,8 +45,6 @@ #include #include #include -#include -#include #include "ardour_ui.h" #include "ardour_dialog.h" @@ -103,6 +103,7 @@ RedirectBox::RedirectBox (Placement pcmnt, Session& sess, boost::shared_ptrbutton == 1 && ev->type == GDK_2BUTTON_PRESS && ev->state == 0))) { + if (redirect && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS))) { if (_session.engine().connected()) { /* XXX giving an error message here is hard, because we may be in the midst of a button press */ @@ -337,7 +338,7 @@ RedirectBox::redirect_button_release_event (GdkEventButton *ev) show_redirect_menu(ev->time); ret = true; - } else if (redirect && ev->button == 2 && ev->state == GDK_BUTTON2_MASK) { + } else if (redirect && (ev->button == 2) && (ev->state == Gdk::BUTTON2_MASK)) { redirect->set_active (!redirect->active(), this); ret = true; @@ -398,16 +399,16 @@ RedirectBox::insert_plugin_chosen (boost::shared_ptr plugin) uint32_t err_streams; if (_route->add_redirect (redirect, this, &err_streams)) { - wierd_plugin_dialog (*plugin, err_streams, _route); + weird_plugin_dialog (*plugin, err_streams, _route); // XXX SHAREDPTR delete plugin here .. do we even need to care? } } } void -RedirectBox::wierd_plugin_dialog (Plugin& p, uint32_t streams, boost::shared_ptr io) +RedirectBox::weird_plugin_dialog (Plugin& p, uint32_t streams, boost::shared_ptr io) { - ArdourDialog dialog ("wierd plugin dialog"); + ArdourDialog dialog (_("ardour: weird plugin dialog")); Label label; /* i hate this kind of code */ @@ -451,8 +452,8 @@ RedirectBox::wierd_plugin_dialog (Plugin& p, uint32_t streams, boost::shared_ptr p.name(), p.get_info()->n_inputs, p.get_info()->n_outputs, - io->n_inputs(), - io->n_outputs(), + io->n_inputs().n_total(), + io->n_outputs().n_total(), streams)); } @@ -479,10 +480,11 @@ void RedirectBox::choose_send () { boost::shared_ptr send (new Send (_session, _placement)); + send->set_default_type(_route->default_type()); /* XXX need redirect lock on route */ - send->ensure_io (0, _route->max_redirect_outs(), false, this); + send->ensure_io (ChanCount::ZERO, _route->max_redirect_outs(), false, this); IOSelectorWindow *ios = new IOSelectorWindow (_session, send, false, true); @@ -625,7 +627,11 @@ RedirectBox::build_redirect_tooltip (EventBox& box, string start) for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { Gtk::TreeModel::Row row = *iter; tip += '\n'; - tip += row[columns.text]; + + /* don't use the column text, since it may be narrowed */ + + boost::shared_ptr r = row[columns.redirect]; + tip += r->name(); } ARDOUR_UI::instance()->tooltips().set_tip (box, tip); } @@ -702,7 +708,7 @@ RedirectBox::compute_redirect_sort_keys () /* now tell them about the problem */ - ArdourDialog dialog ("wierd plugin dialog"); + ArdourDialog dialog (_("ardour: weird plugin dialog")); Label label; label.set_text (_("\ @@ -758,15 +764,19 @@ RedirectBox::cut_redirects () no_redirect_redisplay = true; for (vector >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) { + // Do not cut inserts or sends + if (boost::dynamic_pointer_cast((*i)) != 0) { + void* gui = (*i)->get_gui (); - void* gui = (*i)->get_gui (); - - if (gui) { - static_cast(gui)->hide (); - } + if (gui) { + static_cast(gui)->hide (); + } - if (_route->remove_redirect (*i, this)) { - /* removal failed */ + if (_route->remove_redirect (*i, this)) { + /* removal failed */ + _rr_selection.remove (*i); + } + } else { _rr_selection.remove (*i); } @@ -788,10 +798,40 @@ RedirectBox::copy_redirects () } for (vector >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) { - copies.push_back (Redirect::clone (*i)); + // Do not copy inserts or sends + if (boost::dynamic_pointer_cast((*i)) != 0) { + copies.push_back (Redirect::clone (*i)); + } } _rr_selection.set (copies); + +} + +void +RedirectBox::delete_redirects () +{ + vector > to_be_deleted; + + get_selected_redirects (to_be_deleted); + + if (to_be_deleted.empty()) { + return; + } + + for (vector >::iterator i = to_be_deleted.begin(); i != to_be_deleted.end(); ++i) { + + void* gui = (*i)->get_gui (); + + if (gui) { + static_cast(gui)->hide (); + } + + _route->remove_redirect( *i, this); + } + + no_redirect_redisplay = false; + redisplay_redirects (this); } gint @@ -835,7 +875,6 @@ RedirectBox::rename_redirect (boost::shared_ptr redirect) } return; - } void @@ -920,8 +959,9 @@ RedirectBox::get_selected_redirects (vector >& redir { vector pathlist = redirect_display.get_selection()->get_selected_rows(); - for (vector::iterator iter = pathlist.begin(); iter != pathlist.end(); ++iter) - redirects.push_back ((*(model->get_iter(*iter)))[columns.redirect]); + for (vector::iterator iter = pathlist.begin(); iter != pathlist.end(); ++iter) { + redirects.push_back ((*(model->get_iter(*iter)))[columns.redirect]); + } } void @@ -955,21 +995,48 @@ could not match the configuration of this track."); void RedirectBox::all_redirects_active (bool state) { - _route->all_redirects_active (state); + _route->all_redirects_active (_placement, state); } void -RedirectBox::clear_redirects() +RedirectBox::all_plugins_active (bool state) +{ + if (state) { + // XXX not implemented + } else { + _route->disable_plugins (_placement); + } +} + +void +RedirectBox::ab_plugins () +{ + _route->ab_plugins (ab_direction); + ab_direction = !ab_direction; +} + +void +RedirectBox::clear_redirects () { string prompt; vector choices; if (boost::dynamic_pointer_cast(_route) != 0) { - prompt = _("Do you really want to remove all redirects from this track?\n" - "(this cannot be undone)"); + if (_placement == PreFader) { + prompt = _("Do you really want to remove all pre-fader redirects from this track?\n" + "(this cannot be undone)"); + } else { + prompt = _("Do you really want to remove all post-fader redirects from this track?\n" + "(this cannot be undone)"); + } } else { - prompt = _("Do you really want to remove all redirects from this bus?\n" - "(this cannot be undone)"); + if (_placement == PreFader) { + prompt = _("Do you really want to remove all pre-fader redirects from this bus?\n" + "(this cannot be undone)"); + } else { + prompt = _("Do you really want to remove all post-fader redirects from this bus?\n" + "(this cannot be undone)"); + } } choices.push_back (_("Cancel")); @@ -978,7 +1045,7 @@ RedirectBox::clear_redirects() Gtkmm2ext::Choice prompter (prompt, choices); if (prompter.run () == 1) { - _route->clear_redirects (this); + _route->clear_redirects (_placement, this); } } @@ -1008,11 +1075,12 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) if (send->get_gui() == 0) { - string title; - title = string_compose(_("ardour: %1"), send->name()); - send_ui = new SendUIWindow (send, _session); - send_ui->set_title (title); + + WindowTitle title(Glib::get_application_name()); + title += send->name(); + send_ui->set_title (title.get_string()); + send->set_gui (send_ui); } else { @@ -1023,6 +1091,7 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) send_ui->get_window()->raise (); } else { send_ui->show_all (); + send_ui->present (); } } else { @@ -1049,7 +1118,10 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) ARDOUR_UI::instance()->the_editor().ensure_float (*plugin_ui); } - plugin_ui->set_title (generate_redirect_title (plugin_insert)); + WindowTitle title(Glib::get_application_name()); + title += generate_redirect_title (plugin_insert); + plugin_ui->set_title (title.get_string()); + plugin_insert->set_gui (plugin_ui); // change window title when route name is changed @@ -1064,6 +1136,7 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) plugin_ui->get_window()->raise (); } else { plugin_ui->show_all (); + plugin_ui->present (); } #ifdef HAVE_AUDIOUNIT } else if (type == ARDOUR::AudioUnit) { @@ -1074,12 +1147,18 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) plugin_ui = reinterpret_cast (plugin_insert->get_gui()); } - // raise window, somehow + if (plugin_ui->is_visible()) { + plugin_ui->get_window()->raise (); + } else { + plugin_ui->show_all (); + plugin_ui->present (); + } #endif } else { warning << "Unsupported plugin sent to RedirectBox::edit_redirect()" << endmsg; return; } + } else if ((port_insert = boost::dynamic_pointer_cast (insert)) != 0) { if (!_session.engine().connected()) { @@ -1102,6 +1181,7 @@ RedirectBox::edit_redirect (boost::shared_ptr redirect) io_selector->get_window()->raise (); } else { io_selector->show_all (); + io_selector->present (); } } } @@ -1145,6 +1225,10 @@ RedirectBox::register_actions () ActionManager::plugin_selection_sensitive_actions.push_back(act); act = ActionManager::register_action (popup_act_grp, X_("copy"), _("Copy"), sigc::ptr_fun (RedirectBox::rb_copy)); ActionManager::plugin_selection_sensitive_actions.push_back(act); + + act = ActionManager::register_action (popup_act_grp, X_("delete"), _("Delete"), sigc::ptr_fun (RedirectBox::rb_delete)); + ActionManager::plugin_selection_sensitive_actions.push_back(act); // ?? + paste_action = ActionManager::register_action (popup_act_grp, X_("paste"), _("Paste"), sigc::ptr_fun (RedirectBox::rb_paste)); act = ActionManager::register_action (popup_act_grp, X_("rename"), _("Rename"), sigc::ptr_fun (RedirectBox::rb_rename)); ActionManager::plugin_selection_sensitive_actions.push_back(act); @@ -1159,6 +1243,9 @@ RedirectBox::register_actions () ActionManager::register_action (popup_act_grp, X_("activate_all"), _("Activate all"), sigc::ptr_fun (RedirectBox::rb_activate_all)); ActionManager::register_action (popup_act_grp, X_("deactivate_all"), _("Deactivate all"), sigc::ptr_fun (RedirectBox::rb_deactivate_all)); + ActionManager::register_action (popup_act_grp, X_("a_b_plugins"), _("A/B plugins"), sigc::ptr_fun (RedirectBox::rb_ab_plugins)); + ActionManager::register_action (popup_act_grp, X_("deactivate_plugins"), _("Deactivate plugins"), sigc::ptr_fun (RedirectBox::rb_deactivate_plugins)); + /* show editors */ act = ActionManager::register_action (popup_act_grp, X_("edit"), _("Edit"), sigc::ptr_fun (RedirectBox::rb_edit)); ActionManager::plugin_selection_sensitive_actions.push_back(act); @@ -1215,6 +1302,16 @@ RedirectBox::rb_cut () _current_redirect_box->cut_redirects (); } +void +RedirectBox::rb_delete () +{ + if (_current_redirect_box == 0) { + return; + } + + _current_redirect_box->delete_redirects (); +} + void RedirectBox::rb_copy () { @@ -1301,6 +1398,27 @@ RedirectBox::rb_deactivate_all () _current_redirect_box->all_redirects_active (false); } +void +RedirectBox::rb_deactivate_plugins () +{ + if (_current_redirect_box == 0) { + return; + } + _current_redirect_box->all_plugins_active (false); +} + + +void +RedirectBox::rb_ab_plugins () +{ + if (_current_redirect_box == 0) { + return; + } + + _current_redirect_box->ab_plugins (); +} + + void RedirectBox::rb_edit () { @@ -1316,8 +1434,12 @@ RedirectBox::route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::we { ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, wpi)); boost::shared_ptr pi (wpi.lock()); + + if (pi) { - plugin_ui->set_title (generate_redirect_title (pi)); + WindowTitle title(Glib::get_application_name()); + title += generate_redirect_title (pi); + plugin_ui->set_title (title.get_string()); } } @@ -1336,6 +1458,6 @@ RedirectBox::generate_redirect_title (boost::shared_ptr pi) maker += " ..."; } - return string_compose(_("ardour: %1: %2 (by %3)"), _route->name(), pi->name(), maker); + return string_compose(_("%1: %2 (by %3)"), _route->name(), pi->name(), maker); }