X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Froute_params_ui.cc;h=d1a79de8afbda689bc542c7ce27231a17f9d3399;hb=965c295451916cf7f04d33fbf41ff2beb573439b;hp=7b6f00d76b2ca5844847a33c944f37f9934dc3bc;hpb=b09ab546542040b1d468c9925c60bda2dfd80da8;p=ardour.git diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc index 7b6f00d76b..d1a79de8af 100644 --- a/gtk2_ardour/route_params_ui.cc +++ b/gtk2_ardour/route_params_ui.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 @@ -23,6 +22,7 @@ #include #include #include +#include #include #include @@ -52,20 +52,17 @@ #include "i18n.h" using namespace ARDOUR; +using namespace PBD; using namespace Gtk; +using namespace Gtkmm2ext; using namespace sigc; -RouteParams_UI::RouteParams_UI (AudioEngine& eng) +RouteParams_UI::RouteParams_UI () : ArdourDialog ("track/bus inspector"), - engine (eng), - _route(0), track_menu(0) { pre_redirect_box = 0; post_redirect_box = 0; - _route = 0; - _pre_redirect = 0; - _post_redirect = 0; _input_iosel = 0; _output_iosel = 0; _active_pre_view = 0; @@ -140,8 +137,11 @@ RouteParams_UI::RouteParams_UI (AudioEngine& eng) set_name ("RouteParamsWindow"); set_default_size (620,370); - set_title (_("ardour: track/bus inspector")); - set_wmclass (_("ardour_route_parameters"), "Ardour"); + set_wmclass (X_("ardour_route_parameters"), "Ardour"); + + WindowTitle title(Glib::get_application_name()); + title += _("Track/Bus Inspector"); + set_title (title.get_string()); // events route_display.get_selection()->signal_changed().connect(mem_fun(*this, &RouteParams_UI::route_selected)); @@ -162,42 +162,46 @@ RouteParams_UI::~RouteParams_UI () } void -RouteParams_UI::add_route (Route* route) +RouteParams_UI::add_routes (Session::RouteList& routes) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::add_route), route)); + ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::add_routes), routes)); - if (route->hidden()) { - return; - } + for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) { + boost::shared_ptr route = (*x); - TreeModel::Row row = *(route_display_model->append()); - row[route_display_columns.text] = route->name(); - row[route_display_columns.route] = route; - - //route_select_list.rows().back().select (); - - route->name_changed.connect (bind (mem_fun(*this, &RouteParams_UI::route_name_changed), route)); - route->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::route_removed), route)); + if (route->hidden()) { + return; + } + + TreeModel::Row row = *(route_display_model->append()); + row[route_display_columns.text] = route->name(); + row[route_display_columns.route] = route; + + //route_select_list.rows().back().select (); + + route->name_changed.connect (bind (mem_fun(*this, &RouteParams_UI::route_name_changed), route)); + route->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::route_removed), route)); + } } void -RouteParams_UI::route_name_changed (void *src, Route *route) +RouteParams_UI::route_name_changed (void *src, boost::shared_ptr route) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::route_name_changed), src, route)); bool found = false ; TreeModel::Children rows = route_display_model->children(); for(TreeModel::Children::iterator iter = rows.begin(); iter != rows.end(); ++iter) { - if((*iter)[route_display_columns.route] == route) { + boost::shared_ptr r =(*iter)[route_display_columns.route]; + if (r == route) { (*iter)[route_display_columns.text] = route->name() ; found = true ; break; } } - if(!found) - { + if(!found) { error << _("route display list item for renamed route not found!") << endmsg; } @@ -216,8 +220,11 @@ RouteParams_UI::setup_redirect_boxes() cleanup_redirect_boxes(); // construct new redirect boxes - pre_redirect_box = new RedirectBox(PreFader, *session, *_route, *_plugin_selector, _rr_selection); - post_redirect_box = new RedirectBox(PostFader, *session, *_route, *_plugin_selector, _rr_selection); + pre_redirect_box = new RedirectBox(PreFader, *session, *_plugin_selector, _rr_selection); + post_redirect_box = new RedirectBox(PostFader, *session, *_plugin_selector, _rr_selection); + + pre_redirect_box->set_route (_route); + post_redirect_box->set_route (_route); pre_redir_hpane.pack1 (*pre_redirect_box); post_redir_hpane.pack1 (*post_redirect_box); @@ -255,13 +262,13 @@ RouteParams_UI::setup_io_frames() cleanup_io_frames(); // input - _input_iosel = new IOSelector (*session, *_route, true); + _input_iosel = new IOSelector (*session, _route, true); _input_iosel->redisplay (); input_frame.add (*_input_iosel); input_frame.show_all(); // output - _output_iosel = new IOSelector (*session, *_route, false); + _output_iosel = new IOSelector (*session, _route, false); _output_iosel->redisplay (); output_frame.add (*_output_iosel); output_frame.show_all(); @@ -290,9 +297,9 @@ void RouteParams_UI::cleanup_pre_view (bool stopupdate) { if (_active_pre_view) { - PluginUI * plugui = 0; + GenericPluginUI * plugui = 0; - if (stopupdate && (plugui = dynamic_cast(_active_pre_view)) != 0) { + if (stopupdate && (plugui = dynamic_cast(_active_pre_view)) != 0) { plugui->stop_updating (0); } @@ -307,9 +314,9 @@ void RouteParams_UI::cleanup_post_view (bool stopupdate) { if (_active_post_view) { - PluginUI * plugui = 0; + GenericPluginUI * plugui = 0; - if (stopupdate && (plugui = dynamic_cast(_active_post_view)) != 0) { + if (stopupdate && (plugui = dynamic_cast(_active_post_view)) != 0) { plugui->stop_updating (0); } _post_plugin_conn.disconnect(); @@ -321,36 +328,31 @@ RouteParams_UI::cleanup_post_view (bool stopupdate) void -RouteParams_UI::route_removed (Route *route) +RouteParams_UI::route_removed (boost::shared_ptr route) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::route_removed), route)); - /* - route_select_list.freeze (); - route_select_list.clear (); - session->foreach_route (this, &RouteParams_UI::add_route); - route_select_list.thaw (); - */ TreeModel::Children rows = route_display_model->children(); TreeModel::Children::iterator ri; for(TreeModel::Children::iterator iter = rows.begin(); iter != rows.end(); ++iter) { - if((*iter)[route_display_columns.route] == route) { + boost::shared_ptr r =(*iter)[route_display_columns.route]; + + if (r == route) { route_display_model->erase(iter); break; } } - if (route == _route) - { + if (route == _route) { cleanup_io_frames(); cleanup_pre_view(); cleanup_post_view(); cleanup_redirect_boxes(); - _route = 0; - _pre_redirect = 0; - _post_redirect = 0; + _route.reset ((Route*) 0); + _pre_redirect.reset ((Redirect*) 0); + _post_redirect.reset ((Redirect*) 0); update_title(); } } @@ -363,9 +365,10 @@ RouteParams_UI::set_session (Session *sess) route_display_model->clear(); if (session) { - session->foreach_route (this, &RouteParams_UI::add_route); - session->going_away.connect (mem_fun(*this, &ArdourDialog::session_gone)); - session->RouteAdded.connect (mem_fun(*this, &RouteParams_UI::add_route)); + boost::shared_ptr r = session->get_routes(); + add_routes (*r); + session->GoingAway.connect (mem_fun(*this, &ArdourDialog::session_gone)); + session->RouteAdded.connect (mem_fun(*this, &RouteParams_UI::add_routes)); start_updating (); } else { stop_updating (); @@ -389,9 +392,9 @@ RouteParams_UI::session_gone () cleanup_post_view(); cleanup_redirect_boxes(); - _route = 0; - _pre_redirect = 0; - _post_redirect = 0; + _route.reset ((Route*) 0); + _pre_redirect.reset ((Redirect*) 0); + _post_redirect.reset ((Redirect*) 0); update_title(); ArdourDialog::session_gone(); @@ -405,7 +408,7 @@ RouteParams_UI::route_selected() TreeModel::iterator iter = selection->get_selected(); // only used with Gtk::SELECTION_SINGLE if(iter) { //If anything is selected - Route* route = (*iter)[route_display_columns.route] ; + boost::shared_ptr route = (*iter)[route_display_columns.route] ; if (_route == route) { // do nothing @@ -446,9 +449,9 @@ RouteParams_UI::route_selected() cleanup_post_view(); cleanup_redirect_boxes(); - _route = 0; - _pre_redirect = 0; - _post_redirect = 0; + _route.reset ((Route*) 0); + _pre_redirect.reset ((Redirect*) 0); + _post_redirect.reset ((Redirect *) 0); track_input_label.set_text(_("NO TRACK")); update_title(); } @@ -467,7 +470,7 @@ RouteParams_UI::route_selected() // cleanup_post_view(); // cleanup_redirect_boxes(); -// _route = 0; +// _route.reset ((Route*)0); // _pre_redirect = 0; // _post_redirect = 0; // track_input_label.set_text(_("NO TRACK")); @@ -494,8 +497,8 @@ RouteParams_UI::redirects_changed (void *src) cleanup_pre_view(); cleanup_post_view(); - _pre_redirect = 0; - _post_redirect = 0; + _pre_redirect.reset ((Redirect*) 0); + _post_redirect.reset ((Redirect*) 0); //update_title(); } @@ -511,36 +514,36 @@ RouteParams_UI::show_track_menu() track_menu->set_name ("ArdourContextMenu"); track_menu->items().push_back (MenuElem (_("Add Track/Bus"), - mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::add_route))); + bind (mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::add_route), (Gtk::Window*) 0))); } - track_menu->popup (1, 0); + track_menu->popup (1, gtk_get_current_event_time()); } void -RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement place) +RouteParams_UI::redirect_selected (boost::shared_ptr redirect, ARDOUR::Placement place) { - Insert *insert; + boost::shared_ptr insert; if ((place == PreFader && _pre_redirect == redirect) || (place == PostFader && _post_redirect == redirect)){ return; } - if ((insert = dynamic_cast (redirect)) == 0) { - - Send *send; + if ((insert = boost::dynamic_pointer_cast (redirect)) == 0) { - if ((send = dynamic_cast (redirect)) != 0) { + boost::shared_ptr send; + + if ((send = boost::dynamic_pointer_cast (redirect)) != 0) { /* its a send */ - SendUI *send_ui = new SendUI (*send, *session); + SendUI *send_ui = new SendUI (send, *session); if (place == PreFader) { cleanup_pre_view(); - _pre_plugin_conn = send->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away)); + _pre_plugin_conn = send->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect)); _active_pre_view = send_ui; pre_redir_hpane.add2 (*_active_pre_view); @@ -548,7 +551,7 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement } else { cleanup_post_view(); - _post_plugin_conn = send->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away)); + _post_plugin_conn = send->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect)); _active_post_view = send_ui; post_redir_hpane.add2 (*_active_post_view); @@ -559,16 +562,16 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement } else { /* its an insert, though we don't know what kind yet. */ - PluginInsert *plugin_insert; - PortInsert *port_insert; + boost::shared_ptr plugin_insert; + boost::shared_ptr port_insert; - if ((plugin_insert = dynamic_cast (insert)) != 0) { + if ((plugin_insert = boost::dynamic_pointer_cast (insert)) != 0) { - PluginUI *plugin_ui = new PluginUI (session->engine(), *plugin_insert, true); + GenericPluginUI *plugin_ui = new GenericPluginUI (plugin_insert, true); if (place == PreFader) { cleanup_pre_view(); - _pre_plugin_conn = plugin_insert->plugin().GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), PreFader)); + _pre_plugin_conn = plugin_insert->plugin()->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), PreFader)); plugin_ui->start_updating (0); _active_pre_view = plugin_ui; pre_redir_hpane.pack2 (*_active_pre_view); @@ -576,20 +579,20 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement } else { cleanup_post_view(); - _post_plugin_conn = plugin_insert->plugin().GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), PostFader)); + _post_plugin_conn = plugin_insert->plugin()->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), PostFader)); plugin_ui->start_updating (0); _active_post_view = plugin_ui; post_redir_hpane.pack2 (*_active_post_view); post_redir_hpane.show_all(); } - } else if ((port_insert = dynamic_cast (insert)) != 0) { + } else if ((port_insert = boost::dynamic_pointer_cast (insert)) != 0) { - PortInsertUI *portinsert_ui = new PortInsertUI (*session, *port_insert); + PortInsertUI *portinsert_ui = new PortInsertUI (*session, port_insert); if (place == PreFader) { cleanup_pre_view(); - _pre_plugin_conn = port_insert->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away)); + _pre_plugin_conn = port_insert->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect)); _active_pre_view = portinsert_ui; pre_redir_hpane.pack2 (*_active_pre_view); portinsert_ui->redisplay(); @@ -597,7 +600,7 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement } else { cleanup_post_view(); - _post_plugin_conn = port_insert->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away)); + _post_plugin_conn = port_insert->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect)); _active_post_view = portinsert_ui; post_redir_hpane.pack2 (*_active_post_view); portinsert_ui->redisplay(); @@ -609,8 +612,7 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement if (place == PreFader) { _pre_redirect = redirect; - } - else { + } else { _post_redirect = redirect; } @@ -619,54 +621,36 @@ RouteParams_UI::redirect_selected (ARDOUR::Redirect *redirect, ARDOUR::Placement } void -RouteParams_UI::redirect_unselected (ARDOUR::Redirect *redirect) +RouteParams_UI::plugin_going_away (Placement place) { - // not called anymore - - if (redirect == _pre_redirect) { - cleanup_pre_view(); - _pre_redirect = 0; - } - else if (redirect == _post_redirect) { - cleanup_post_view(); - _post_redirect = 0; - } -} - - - -void -RouteParams_UI::plugin_going_away (Plugin *plugin, Placement place) -{ - ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), plugin, place)); + ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), place)); // delete the current view without calling finish if (place == PreFader) { cleanup_pre_view (false); - _pre_redirect = 0; + _pre_redirect.reset ((Redirect*) 0); } else { cleanup_post_view (false); - _post_redirect = 0; + _post_redirect.reset ((Redirect*) 0); } } void -RouteParams_UI::redirect_going_away (ARDOUR::Redirect *plugin) +RouteParams_UI::redirect_going_away (boost::shared_ptr redirect) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), plugin)); + ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect)); printf ("redirect going away\n"); // delete the current view without calling finish - if (plugin == _pre_redirect) { + if (redirect == _pre_redirect) { cleanup_pre_view (false); - _pre_redirect = 0; - } - else if (plugin == _post_redirect) { + _pre_redirect.reset ((Redirect*) 0); + } else if (redirect == _post_redirect) { cleanup_post_view (false); - _post_redirect = 0; + _post_redirect.reset ((Redirect*) 0); } } @@ -674,29 +658,33 @@ RouteParams_UI::redirect_going_away (ARDOUR::Redirect *plugin) void RouteParams_UI::update_title () { - if (_route) { - string title; - title += _route->name(); -// title += ": "; - -// if (_redirect && (_current_view == PLUGIN_CONFIG_VIEW || _current_view == SEND_CONFIG_VIEW)) { -// title += _redirect->name(); -// } -// else if (_current_view == INPUT_CONFIG_VIEW) { -// title += _("INPUT"); -// } -// else if (_current_view == OUTPUT_CONFIG_VIEW) { -// title += _("OUTPUT"); -// } + WindowTitle title(Glib::get_application_name()); + title += _("Track/Bus Inspector"); + + if (_route) { + + // title += ": "; + + // if (_redirect && (_current_view == PLUGIN_CONFIG_VIEW || _current_view == SEND_CONFIG_VIEW)) { + // title += _redirect->name(); + // } + // else if (_current_view == INPUT_CONFIG_VIEW) { + // title += _("INPUT"); + // } + // else if (_current_view == OUTPUT_CONFIG_VIEW) { + // title += _("OUTPUT"); + // } + + title_label.set_text(_route->name()); - title_label.set_text(title); + title += _route->name(); - title = _("ardour: track/bus inspector: ") + title; - set_title(title); + set_title(title.get_string()); } else { title_label.set_text(_("No Route Selected")); - set_title(_("ardour: track/bus/inspector: no route selected")); + title += _("No Route Selected"); + set_title(title.get_string()); } }