X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Froute_time_axis.cc;h=0c52b96dc3eb0aff504d403e9de5ee9418e0d219;hb=056ceba16a5ab45aabec0cd10ae3228881e640dc;hp=bb4737622facde069dbe20dc2733b0e1387bf243;hpb=f119387d767d9e8411556579e48022ed9b5d3974;p=ardour.git diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index bb4737622f..0c52b96dc3 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -133,7 +133,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh } mute_changed (0); - solo_changed (0); + update_solo_display (); timestretch_rect = 0; no_redraw = false; @@ -196,7 +196,10 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh _route->output()->changed.connect (*this, invalidator (*this), ui_bind (&RouteTimeAxisView::io_changed, this, _1, _2), gui_context()); controls_table.attach (*mute_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); - controls_table.attach (*solo_button, 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); + + if (!_route->is_master()) { + controls_table.attach (*solo_button, 7, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); + } controls_table.attach (route_group_button, 7, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); controls_table.attach (gm.get_gain_slider(), 0, 5, 1, 2, Gtk::SHRINK, Gtk::SHRINK, 0, 0); @@ -239,8 +242,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh track()->TrackModeChanged.connect (*this, invalidator (*this), boost::bind (&RouteTimeAxisView::track_mode_changed, this), gui_context()); track()->FreezeChange.connect (*this, invalidator (*this), boost::bind (&RouteTimeAxisView::map_frozen, this), gui_context()); - track()->DiskstreamChanged.connect (*this, invalidator (*this), boost::bind (&RouteTimeAxisView::diskstream_changed, this), gui_context()); - get_diskstream()->SpeedChanged.connect (*this, invalidator (*this), boost::bind (&RouteTimeAxisView::speed_changed, this), gui_context()); + track()->SpeedChanged.connect (*this, invalidator (*this), boost::bind (&RouteTimeAxisView::speed_changed, this), gui_context()); /* pick up the correct freeze state */ map_frozen (); @@ -506,19 +508,21 @@ RouteTimeAxisView::build_display_menu () alignment_items.push_back (RadioMenuElem (align_group, _("Align With Existing Material"), sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::set_align_style), ExistingMaterial))); align_existing_item = dynamic_cast(&alignment_items.back()); - if (get_diskstream()->alignment_style() == ExistingMaterial) + if (track()->alignment_style() == ExistingMaterial) { align_existing_item->set_active(); + } alignment_items.push_back (RadioMenuElem (align_group, _("Align With Capture Time"), sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::set_align_style), CaptureTime))); align_capture_item = dynamic_cast(&alignment_items.back()); - if (get_diskstream()->alignment_style() == CaptureTime) + if (track()->alignment_style() == CaptureTime) { align_capture_item->set_active(); + } if (!Profile->get_sae()) { items.push_back (MenuElem (_("Alignment"), *alignment_menu)); - get_diskstream()->AlignmentStyleChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteTimeAxisView::align_style_changed, this), gui_context()); + track()->AlignmentStyleChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteTimeAxisView::align_style_changed, this), gui_context()); RadioMenuItem::Group mode_group; items.push_back (RadioMenuElem (mode_group, _("Normal Mode"), sigc::bind ( @@ -553,7 +557,7 @@ RouteTimeAxisView::build_display_menu () _ignore_track_mode_change = false; } - get_diskstream()->AlignmentStyleChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteTimeAxisView::align_style_changed, this), gui_context()); + track()->AlignmentStyleChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteTimeAxisView::align_style_changed, this), gui_context()); color_mode_menu = build_color_mode_menu(); if (color_mode_menu) { @@ -897,8 +901,8 @@ RouteTimeAxisView::set_samples_per_unit (double spu) { double speed = 1.0; - if (get_diskstream() != 0) { - speed = get_diskstream()->speed(); + if (track()) { + speed = track()->speed(); } if (_view) { @@ -911,7 +915,7 @@ RouteTimeAxisView::set_samples_per_unit (double spu) void RouteTimeAxisView::align_style_changed () { - switch (get_diskstream()->alignment_style()) { + switch (track()->alignment_style()) { case ExistingMaterial: if (!align_existing_item->get_active()) { align_existing_item->set_active(); @@ -944,7 +948,7 @@ RouteTimeAxisView::set_align_style (AlignStyle style) } if (item->get_active()) { - get_diskstream()->set_align_style (style); + track()->set_align_style (style); } } @@ -954,15 +958,18 @@ RouteTimeAxisView::rename_current_playlist () ArdourPrompter prompter (true); string name; - boost::shared_ptr ds = get_diskstream(); - if (!ds || ds->destructive()) + boost::shared_ptr tr = track(); + if (!tr || tr->destructive()) { return; + } - boost::shared_ptr pl = ds->playlist(); - if (!pl) + boost::shared_ptr pl = tr->playlist(); + if (!pl) { return; + } - prompter.set_prompt (_("Name for playlist")); + prompter.set_title (_("Rename Playlist")); + prompter.set_prompt (_("New name for playlist:")); prompter.set_initial_text (pl->name()); prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT); prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false); @@ -1020,13 +1027,15 @@ RouteTimeAxisView::use_copy_playlist (bool prompt, vector ds = get_diskstream(); - if (!ds || ds->destructive()) + boost::shared_ptr tr = track (); + if (!tr || tr->destructive()) { return; + } - boost::shared_ptr pl = ds->playlist(); - if (!pl) + boost::shared_ptr pl = tr->playlist(); + if (!pl) { return; + } name = pl->name(); @@ -1045,7 +1054,8 @@ RouteTimeAxisView::use_copy_playlist (bool prompt, vectoruse_copy_playlist (); - ds->playlist()->set_name (name); + tr->use_copy_playlist (); + tr->playlist()->set_name (name); } } @@ -1072,13 +1082,15 @@ RouteTimeAxisView::use_new_playlist (bool prompt, vector ds = get_diskstream(); - if (!ds || ds->destructive()) + boost::shared_ptr tr = track (); + if (!tr || tr->destructive()) { return; + } - boost::shared_ptr pl = ds->playlist(); - if (!pl) + boost::shared_ptr pl = tr->playlist(); + if (!pl) { return; + } name = pl->name(); @@ -1095,7 +1107,8 @@ RouteTimeAxisView::use_new_playlist (bool prompt, vectoruse_new_playlist (); - ds->playlist()->set_name (name); + tr->use_new_playlist (); + tr->playlist()->set_name (name); } } void RouteTimeAxisView::clear_playlist () { - boost::shared_ptr ds = get_diskstream(); - if (!ds || ds->destructive()) + boost::shared_ptr tr = track (); + if (!tr || tr->destructive()) { return; + } - boost::shared_ptr pl = ds->playlist(); - if (!pl) + boost::shared_ptr pl = tr->playlist(); + if (!pl) { return; + } _editor.clear_playlist (pl); } @@ -1136,17 +1151,12 @@ RouteTimeAxisView::speed_changed () Gtkmm2ext::UI::instance()->call_slot (invalidator (*this), boost::bind (&RouteTimeAxisView::reset_samples_per_unit, this)); } -void -RouteTimeAxisView::diskstream_changed () -{ - Gtkmm2ext::UI::instance()->call_slot (invalidator (*this), boost::bind (&RouteTimeAxisView::update_diskstream_display, this)); -} - void RouteTimeAxisView::update_diskstream_display () { - if (!get_diskstream()) // bus + if (!track()) { return; + } map_frozen (); } @@ -1209,8 +1219,8 @@ RouteTimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, { double speed = 1.0; - if (get_diskstream() != 0) { - speed = get_diskstream()->speed(); + if (track() != 0) { + speed = track()->speed(); } nframes_t start_adjusted = session_frame_to_track_frame(start, speed); @@ -1288,10 +1298,10 @@ RouteTimeAxisView::name() const boost::shared_ptr RouteTimeAxisView::playlist () const { - boost::shared_ptr ds; + boost::shared_ptr tr; - if ((ds = get_diskstream()) != 0) { - return ds->playlist(); + if ((tr = track()) != 0) { + return tr->playlist(); } else { return boost::shared_ptr (); } @@ -1346,11 +1356,10 @@ RouteTimeAxisView::hide_click () boost::shared_ptr RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t dir) { - boost::shared_ptr stream; - boost::shared_ptr playlist; + boost::shared_ptr pl = playlist (); - if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) { - return playlist->find_next_region (pos, point, dir); + if (pl) { + return pl->find_next_region (pos, point, dir); } return boost::shared_ptr (); @@ -1359,11 +1368,10 @@ RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t d nframes64_t RouteTimeAxisView::find_next_region_boundary (nframes64_t pos, int32_t dir) { - boost::shared_ptr stream; - boost::shared_ptr playlist; + boost::shared_ptr pl = playlist (); - if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) { - return playlist->find_next_region_boundary (pos, dir); + if (pl) { + return pl->find_next_region_boundary (pos, dir); } return -1; @@ -1373,19 +1381,19 @@ bool RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op) { boost::shared_ptr what_we_got; - boost::shared_ptr ds = get_diskstream(); + boost::shared_ptr tr = track (); boost::shared_ptr playlist; bool ret = false; - if (ds == 0) { + if (tr == 0) { /* route is a bus, not a track */ return false; } - playlist = ds->playlist(); + playlist = tr->playlist(); TimeSelection time (selection.time); - float speed = ds->speed(); + float const speed = tr->speed(); if (speed != 1.0f) { for (TimeSelection::iterator i = time.begin(); i != time.end(); ++i) { (*i).start = session_frame_to_track_frame((*i).start, speed); @@ -1444,7 +1452,7 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size return false; } - boost::shared_ptr playlist = get_diskstream()->playlist(); + boost::shared_ptr pl = playlist (); PlaylistSelection::iterator p; for (p = selection.playlists.begin(); p != selection.playlists.end() && nth; ++p, --nth) {} @@ -1453,13 +1461,13 @@ RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size return false; } - if (get_diskstream()->speed() != 1.0f) { - pos = session_frame_to_track_frame(pos, get_diskstream()->speed() ); + if (track()->speed() != 1.0f) { + pos = session_frame_to_track_frame (pos, track()->speed()); } - playlist->clear_history (); - playlist->paste (*p, pos, times); - _session->add_command (new StatefulDiffCommand (playlist)); + pl->clear_history (); + pl->paste (*p, pos, times); + _session->add_command (new StatefulDiffCommand (pl)); return true; } @@ -1501,42 +1509,42 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu) delete playlist_menu; - vector > playlists, playlists_ds; - boost::shared_ptr ds = get_diskstream(); + vector > playlists, playlists_tr; + boost::shared_ptr tr = track(); RadioMenuItem::Group playlist_group; _session->playlists->get (playlists); /* find the playlists for this diskstream */ for (vector >::iterator i = playlists.begin(); i != playlists.end(); ++i) { - if (((*i)->get_orig_diskstream_id() == ds->id()) || (ds->playlist()->id() == (*i)->id())) { - playlists_ds.push_back(*i); + if (((*i)->get_orig_diskstream_id() == tr->diskstream_id()) || (tr->playlist()->id() == (*i)->id())) { + playlists_tr.push_back(*i); } } /* sort the playlists */ PlaylistSorter cmp; - sort(playlists_ds.begin(), playlists_ds.end(), cmp); + sort (playlists_tr.begin(), playlists_tr.end(), cmp); /* add the playlists to the menu */ - for (vector >::iterator i = playlists_ds.begin(); i != playlists_ds.end(); ++i) { + for (vector >::iterator i = playlists_tr.begin(); i != playlists_tr.end(); ++i) { playlist_items.push_back (RadioMenuElem (playlist_group, (*i)->name())); RadioMenuItem *item = static_cast(&playlist_items.back()); item->signal_toggled().connect(sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::use_playlist), item, boost::weak_ptr (*i))); - if (ds->playlist()->id() == (*i)->id()) { + if (tr->playlist()->id() == (*i)->id()) { item->set_active(); } } playlist_items.push_back (SeparatorElem()); - playlist_items.push_back (MenuElem (_("Rename"), sigc::mem_fun(*this, &RouteTimeAxisView::rename_current_playlist))); + playlist_items.push_back (MenuElem (_("Rename..."), sigc::mem_fun(*this, &RouteTimeAxisView::rename_current_playlist))); playlist_items.push_back (SeparatorElem()); if (!route_group() || !route_group()->is_active()) { - playlist_items.push_back (MenuElem (_("New"), sigc::bind(sigc::mem_fun(_editor, &PublicEditor::new_playlists), this))); - playlist_items.push_back (MenuElem (_("New Copy"), sigc::bind(sigc::mem_fun(_editor, &PublicEditor::copy_playlists), this))); + playlist_items.push_back (MenuElem (_("New..."), sigc::bind(sigc::mem_fun(_editor, &PublicEditor::new_playlists), this))); + playlist_items.push_back (MenuElem (_("New Copy..."), sigc::bind(sigc::mem_fun(_editor, &PublicEditor::copy_playlists), this))); } else { // Use a label which tells the user what is happening @@ -1549,7 +1557,7 @@ RouteTimeAxisView::build_playlist_menu (Gtk::Menu * menu) playlist_items.push_back (MenuElem (_("Clear Current"), sigc::bind(sigc::mem_fun(_editor, &PublicEditor::clear_playlists), this))); playlist_items.push_back (SeparatorElem()); - playlist_items.push_back (MenuElem(_("Select from all ..."), sigc::mem_fun(*this, &RouteTimeAxisView::show_playlist_selector))); + playlist_items.push_back (MenuElem(_("Select from all..."), sigc::mem_fun(*this, &RouteTimeAxisView::show_playlist_selector))); } void @@ -1571,13 +1579,12 @@ RouteTimeAxisView::use_playlist (RadioMenuItem *item, boost::weak_ptr boost::shared_ptr apl = boost::dynamic_pointer_cast (pl); if (apl) { - if (get_diskstream()->playlist() == apl) { + if (track()->playlist() == apl) { // exit when use_playlist is called by the creation of the playlist menu // or the playlist choice is unchanged return; } - get_diskstream()->use_playlist (apl); - + track()->use_playlist (apl); if (route_group() && route_group()->is_active()) { std::string group_string = "."+route_group()->name()+"."; @@ -1608,10 +1615,10 @@ RouteTimeAxisView::use_playlist (RadioMenuItem *item, boost::weak_ptr boost::shared_ptr ipl = session()->playlists->by_name(playlist_name); if (!ipl) { // No playlist for this track for this take yet, make it - track->diskstream()->use_new_playlist(); - track->diskstream()->playlist()->set_name(playlist_name); + track->use_new_playlist(); + track->playlist()->set_name(playlist_name); } else { - track->diskstream()->use_playlist(ipl); + track->use_playlist(ipl); } } }