X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_routes.cc;h=f6a5cffb0b25a3802e263ec77006719c42b1f226;hb=f974ff594a132fe651a6e620bab3e6f913d697a3;hp=45b9797f78d9b51e0d59793fc1f3095958462e0f;hpb=506b478fe7717c849e2aac60137d65fce90dc2ad;p=ardour.git diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 45b9797f78..f6a5cffb0b 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -42,6 +42,8 @@ #include "gtkmm2ext/cell_renderer_pixbuf_toggle.h" #include "gtkmm2ext/treeutils.h" +#include "widgets/tooltips.h" + #include "actions.h" #include "ardour_ui.h" #include "audio_time_axis.h" @@ -54,7 +56,6 @@ #include "mixer_strip.h" #include "plugin_setup_dialog.h" #include "route_sorter.h" -#include "tooltips.h" #include "vca_time_axis.h" #include "utils.h" @@ -62,6 +63,7 @@ using namespace std; using namespace ARDOUR; +using namespace ArdourWidgets; using namespace ARDOUR_UI_UTILS; using namespace PBD; using namespace Gtk; @@ -193,7 +195,7 @@ EditorRoutes::EditorRoutes (Editor* e) TreeViewColumn* solo_isolate_state_column = manage (new TreeViewColumn("SI", *solo_iso_renderer)); solo_isolate_state_column->add_attribute(solo_iso_renderer->property_state(), _columns.solo_isolate_state); - solo_isolate_state_column->add_attribute(solo_iso_renderer->property_visible(), _columns.solo_visible); + solo_isolate_state_column->add_attribute(solo_iso_renderer->property_visible(), _columns.solo_lock_iso_visible); solo_isolate_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED); solo_isolate_state_column->set_alignment(ALIGN_CENTER); solo_isolate_state_column->set_expand(false); @@ -208,7 +210,7 @@ EditorRoutes::EditorRoutes (Editor* e) TreeViewColumn* solo_safe_state_column = manage (new TreeViewColumn(_("SS"), *solo_safe_renderer)); solo_safe_state_column->add_attribute(solo_safe_renderer->property_state(), _columns.solo_safe_state); - solo_safe_state_column->add_attribute(solo_safe_renderer->property_visible(), _columns.solo_visible); + solo_safe_state_column->add_attribute(solo_safe_renderer->property_visible(), _columns.solo_lock_iso_visible); solo_safe_state_column->set_sizing(TREE_VIEW_COLUMN_FIXED); solo_safe_state_column->set_alignment(ALIGN_CENTER); solo_safe_state_column->set_expand(false); @@ -302,6 +304,7 @@ EditorRoutes::EditorRoutes (Editor* e) active_col->set_sizing (TREE_VIEW_COLUMN_FIXED); active_col->set_fixed_width (30); active_col->set_alignment (ALIGN_CENTER); + active_col->add_attribute (active_cell->property_visible(), _columns.no_vca); _model->signal_row_deleted().connect (sigc::mem_fun (*this, &EditorRoutes::row_deleted)); _model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered)); @@ -420,13 +423,13 @@ EditorRoutes::on_tv_rec_enable_changed (std::string const & path_string) Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView* tv = row[_columns.tv]; - RouteTimeAxisView *rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac = rtv->route()->rec_enable_control(); + boost::shared_ptr ac = stv->stripable()->rec_enable_control(); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -438,13 +441,13 @@ EditorRoutes::on_tv_rec_safe_toggled (std::string const & path_string) { Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView* tv = row[_columns.tv]; - RouteTimeAxisView *rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac (rtv->route()->rec_safe_control()); + boost::shared_ptr ac (stv->stripable()->rec_safe_control()); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -458,13 +461,13 @@ EditorRoutes::on_tv_mute_enable_toggled (std::string const & path_string) Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView *tv = row[_columns.tv]; - RouteTimeAxisView *rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac (rtv->route()->mute_control()); + boost::shared_ptr ac (stv->stripable()->mute_control()); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -478,13 +481,13 @@ EditorRoutes::on_tv_solo_enable_toggled (std::string const & path_string) Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView *tv = row[_columns.tv]; - RouteTimeAxisView* rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac (rtv->route()->solo_control()); + boost::shared_ptr ac (stv->stripable()->solo_control()); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -498,13 +501,13 @@ EditorRoutes::on_tv_solo_isolate_toggled (std::string const & path_string) Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView *tv = row[_columns.tv]; - RouteTimeAxisView* rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac (rtv->route()->solo_isolate_control()); + boost::shared_ptr ac (stv->stripable()->solo_isolate_control()); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -518,13 +521,13 @@ EditorRoutes::on_tv_solo_safe_toggled (std::string const & path_string) Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string)); TimeAxisView *tv = row[_columns.tv]; - RouteTimeAxisView* rtv = dynamic_cast (tv); + StripableTimeAxisView* stv = dynamic_cast (tv); - if (!rtv) { + if (!stv || !stv->stripable()) { return; } - boost::shared_ptr ac (rtv->route()->solo_safe_control()); + boost::shared_ptr ac (stv->stripable()->solo_safe_control()); if (ac) { ac->set_value (!ac->get_value(), Controllable::UseGroup); @@ -546,10 +549,10 @@ EditorRoutes::build_menu () items.push_back (MenuElem (_("Hide All"), sigc::mem_fun (*this, &EditorRoutes::hide_all_routes))); items.push_back (MenuElem (_("Show All Audio Tracks"), sigc::mem_fun (*this, &EditorRoutes::show_all_audiotracks))); items.push_back (MenuElem (_("Hide All Audio Tracks"), sigc::mem_fun (*this, &EditorRoutes::hide_all_audiotracks))); - items.push_back (MenuElem (_("Show All Audio Busses"), sigc::mem_fun (*this, &EditorRoutes::show_all_audiobus))); - items.push_back (MenuElem (_("Hide All Audio Busses"), sigc::mem_fun (*this, &EditorRoutes::hide_all_audiobus))); items.push_back (MenuElem (_("Show All Midi Tracks"), sigc::mem_fun (*this, &EditorRoutes::show_all_miditracks))); items.push_back (MenuElem (_("Hide All Midi Tracks"), sigc::mem_fun (*this, &EditorRoutes::hide_all_miditracks))); + items.push_back (MenuElem (_("Show All Busses"), sigc::mem_fun (*this, &EditorRoutes::show_all_audiobus))); + items.push_back (MenuElem (_("Hide All Busses"), sigc::mem_fun (*this, &EditorRoutes::hide_all_audiobus))); items.push_back (MenuElem (_("Only Show Tracks with Regions Under Playhead"), sigc::mem_fun (*this, &EditorRoutes::show_tracks_with_regions_at_playhead))); } @@ -744,6 +747,7 @@ EditorRoutes::time_axis_views_added (list tavs) row[_columns.is_track] = false; row[_columns.is_input_active] = false; row[_columns.is_midi] = false; + row[_columns.no_vca] = false; } else if (rtav) { @@ -751,6 +755,7 @@ EditorRoutes::time_axis_views_added (list tavs) midi_trk= boost::dynamic_pointer_cast (stripable); row[_columns.is_track] = (boost::dynamic_pointer_cast (stripable) != 0); + row[_columns.no_vca] = true; if (midi_trk) { row[_columns.is_input_active] = midi_trk->input_active (); @@ -772,7 +777,8 @@ EditorRoutes::time_axis_views_added (list tavs) row[_columns.stripable] = stripable; row[_columns.mute_state] = RouteUI::mute_active_state (_session, stripable); row[_columns.solo_state] = RouteUI::solo_active_state (stripable); - row[_columns.solo_visible] = true; + row[_columns.solo_visible] = !stripable->is_master (); + row[_columns.solo_lock_iso_visible] = row[_columns.solo_visible] && row[_columns.no_vca]; row[_columns.solo_isolate_state] = RouteUI::solo_isolate_active_state (stripable); row[_columns.solo_safe_state] = RouteUI::solo_safe_active_state (stripable); row[_columns.name_editable] = true; @@ -1461,9 +1467,6 @@ EditorRoutes::selection_filter (Glib::RefPtr const& model, TreeModel: TreeModel::iterator iter = model->get_iter (path); if (iter) { boost::shared_ptr stripable = (*iter)[_columns.stripable]; - if (boost::dynamic_pointer_cast (stripable)) { - return false; - } } return true; @@ -1474,7 +1477,7 @@ EditorRoutes::initial_display () { if (!_session) { - _model->clear (); + clear (); return; } @@ -1483,16 +1486,7 @@ EditorRoutes::initial_display () StripableList s; - RouteList r (*_session->get_routes()); - for (RouteList::iterator ri = r.begin(); ri != r.end(); ++ri) { - s.push_back (*ri); - } - - VCAList v (_session->vca_manager().vcas()); - for (VCAList::iterator vi = v.begin(); vi != v.end(); ++vi) { - s.push_back (*vi); - } - + _session->get_stripables (s); _editor->add_stripables (s); sync_treeview_from_presentation_info (Properties::order); @@ -1779,7 +1773,7 @@ EditorRoutes::solo_changed_so_update_mute () void EditorRoutes::show_tracks_with_regions_at_playhead () { - boost::shared_ptr const r = _session->get_routes_with_regions_at (_session->transport_frame ()); + boost::shared_ptr const r = _session->get_routes_with_regions_at (_session->transport_sample ()); set show; for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {