diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/SConscript | 1 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/audio_streamview.cc | 29 | ||||
-rw-r--r-- | gtk2_ardour/audio_streamview.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/audio_time_axis.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 10 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 114 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 30 | ||||
-rw-r--r-- | gtk2_ardour/editor_region_list.cc | 26 | ||||
-rw-r--r-- | gtk2_ardour/editor_tempodisplay.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/midi_streamview.cc | 149 | ||||
-rw-r--r-- | gtk2_ardour/midi_streamview.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 85 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/streamview.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/streamview.h | 4 |
22 files changed, 221 insertions, 292 deletions
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index 8fb9a0717b..9035666bbb 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -168,6 +168,7 @@ region_gain_line.cc region_selection.cc region_view.cc audio_region_view.cc +midi_region_view.cc tape_region_view.cc route_params_ui.cc route_redirect_selection.cc diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 0e94259194..34718dfb1c 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -248,7 +248,7 @@ ARDOUR_UI::set_engine (AudioEngine& e) if (AudioSource::start_peak_thread ()) { throw failed_constructor(); } - + /* start the time-of-day-clock */ update_wall_clock (); diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 2e82d48ff3..523395c503 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -56,7 +56,7 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) { crossfades_visible = true; - if (tv.is_audio_track()) + if (tv.is_track()) stream_base_color = color_map[cAudioTrackBase]; else stream_base_color = color_map[cAudioBusBase]; @@ -67,7 +67,6 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) _amplitude_above_axis = 1.0; use_rec_regions = tv.editor.show_waveforms_recording (); - last_rec_peak_frame = 0; } AudioStreamView::~AudioStreamView () @@ -393,10 +392,10 @@ AudioStreamView::setup_rec_box () AudioRegion::SourceList sources; - for (list<sigc::connection>::iterator prc = peak_ready_connections.begin(); prc != peak_ready_connections.end(); ++prc) { + for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin(); prc != rec_data_ready_connections.end(); ++prc) { (*prc).disconnect(); } - peak_ready_connections.clear(); + rec_data_ready_connections.clear(); // FIXME AudioDiskstream* ads = dynamic_cast<AudioDiskstream*>(_trackview.get_diskstream()); @@ -406,7 +405,7 @@ AudioStreamView::setup_rec_box () AudioSource *src = (AudioSource *) ads->write_source (n); if (src) { sources.push_back (src); - peak_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), src))); + rec_data_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), src))); } } @@ -492,14 +491,14 @@ AudioStreamView::setup_rec_box () /* disconnect rapid update */ screen_update_connection.disconnect(); - for (list<sigc::connection>::iterator prc = peak_ready_connections.begin(); prc != peak_ready_connections.end(); ++prc) { + for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin(); prc != rec_data_ready_connections.end(); ++prc) { (*prc).disconnect(); } - peak_ready_connections.clear(); + rec_data_ready_connections.clear(); rec_updating = false; rec_active = false; - last_rec_peak_frame = 0; + last_rec_data_frame = 0; /* remove temp regions */ for (list<Region*>::iterator iter=rec_regions.begin(); iter != rec_regions.end(); ) @@ -547,15 +546,15 @@ AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, ENSURE_GUI_THREAD(bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), start, cnt, src)); - if (rec_peak_ready_map.size() == 0 || start+cnt > last_rec_peak_frame) { - last_rec_peak_frame = start + cnt; + if (rec_data_ready_map.size() == 0 || start+cnt > last_rec_data_frame) { + last_rec_data_frame = start + cnt; } - rec_peak_ready_map[src] = true; + rec_data_ready_map[src] = true; - if (rec_peak_ready_map.size() == _trackview.get_diskstream()->n_channels().get(DataType::AUDIO)) { + if (rec_data_ready_map.size() == _trackview.get_diskstream()->n_channels().get(DataType::AUDIO)) { this->update_rec_regions (); - rec_peak_ready_map.clear(); + rec_data_ready_map.clear(); } } @@ -587,9 +586,9 @@ AudioStreamView::update_rec_regions () if (region == rec_regions.back() && rec_active) { - if (last_rec_peak_frame > region->start()) { + if (last_rec_data_frame > region->start()) { - jack_nframes_t nlen = last_rec_peak_frame - region->start(); + jack_nframes_t nlen = last_rec_data_frame - region->start(); if (nlen != region->length()) { diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h index 05ce8125f6..979240bd50 100644 --- a/gtk2_ardour/audio_streamview.h +++ b/gtk2_ardour/audio_streamview.h @@ -94,17 +94,11 @@ class AudioStreamView : public StreamView void color_handler (ColorID id, uint32_t val); - double _amplitude_above_axis; typedef list<CrossfadeView*> CrossfadeViewList; CrossfadeViewList crossfade_views; bool crossfades_visible; - - list<sigc::connection> peak_ready_connections; - jack_nframes_t last_rec_peak_frame; - map<ARDOUR::Source*, bool> rec_peak_ready_map; - }; #endif /* __ardour_audio_streamview_h__ */ diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 893bcc21c0..7f6bc50222 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -117,7 +117,7 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, boost::sh _route->panner().Changed.connect (mem_fun(*this, &AudioTimeAxisView::update_pans)); - if (is_audio_track()) { + if (is_track()) { controls_ebox.set_name ("AudioTrackControlsBaseUnselected"); controls_base_selected_name = "AudioTrackControlsBaseSelected"; diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 513251085c..b991982855 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1178,8 +1178,8 @@ Editor::connect_to_session (Session *t) session_connections.push_back (session->TransportStateChange.connect (mem_fun(*this, &Editor::map_transport_state))); session_connections.push_back (session->PositionChanged.connect (mem_fun(*this, &Editor::map_position_change))); session_connections.push_back (session->RouteAdded.connect (mem_fun(*this, &Editor::handle_new_route))); - session_connections.push_back (session->AudioRegionAdded.connect (mem_fun(*this, &Editor::handle_new_audio_region))); - session_connections.push_back (session->AudioRegionRemoved.connect (mem_fun(*this, &Editor::handle_audio_region_removed))); + session_connections.push_back (session->RegionAdded.connect (mem_fun(*this, &Editor::handle_new_region))); + session_connections.push_back (session->RegionRemoved.connect (mem_fun(*this, &Editor::handle_region_removed))); session_connections.push_back (session->DurationChanged.connect (mem_fun(*this, &Editor::handle_new_duration))); session_connections.push_back (session->edit_group_added.connect (mem_fun(*this, &Editor::add_edit_group))); session_connections.push_back (session->edit_group_removed.connect (mem_fun(*this, &Editor::edit_groups_changed))); @@ -1327,10 +1327,10 @@ Editor::connect_to_session (Session *t) for (i = rows.begin(); i != rows.end(); ++i) { TimeAxisView *tv = (*i)[route_display_columns.tv]; - AudioTimeAxisView *atv; + RouteTimeAxisView *rtv; - if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) { - if (atv->route()->master()) { + if ((rtv = dynamic_cast<RouteTimeAxisView*>(tv)) != 0) { + if (rtv->route()->master()) { route_list_display.get_selection()->unselect (i); } } diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index b3735cf42a..3f2a278f09 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -832,14 +832,14 @@ class Editor : public PublicEditor int ensure_cursor (jack_nframes_t* pos); - void handle_new_audio_region (ARDOUR::AudioRegion *); - void handle_audio_region_removed (ARDOUR::AudioRegion *); - void add_audio_region_to_region_display (ARDOUR::AudioRegion *); + void handle_new_region (ARDOUR::Region *); + void handle_region_removed (ARDOUR::Region *); + void add_region_to_region_display (ARDOUR::Region *); void region_hidden (ARDOUR::Region*); void redisplay_regions (); - void insert_into_tmp_audio_regionlist(ARDOUR::AudioRegion *); + void insert_into_tmp_regionlist(ARDOUR::Region *); - list<ARDOUR::AudioRegion *> tmp_audio_region_list; + list<ARDOUR::Region *> tmp_region_list; void cut_copy (Editing::CutCopyOp); void cut_copy_points (Editing::CutCopyOp); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 754706ad9f..de256ce0e6 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -176,8 +176,9 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track, /* import thread finished - see if we should build a new track */ if (!import_status.new_regions.empty()) { - AudioRegion& region (*import_status.new_regions.front()); - finish_bringing_in_audio (region, region.n_channels(), region.n_channels(), track, pos, mode); + AudioRegion* const aregion = dynamic_cast<AudioRegion*>(import_status.new_regions.front()); + assert(aregion); + finish_bringing_in_audio (*aregion, aregion->n_channels(), aregion->n_channels(), track, pos, mode); } track_canvas.get_window()->set_cursor (*current_canvas_cursor); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index e8ba2b8a60..2f3aab1eb6 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -426,7 +426,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context, guint info, guint time) { TimeAxisView* tvp; - AudioTimeAxisView* tv; + RouteTimeAxisView* tv; double cy; vector<ustring> paths; string spath; @@ -462,7 +462,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context, jack_nframes_t pos = 0; do_embed (paths, false, ImportAsTrack, 0, pos, false); - } else if ((tv = dynamic_cast<AudioTimeAxisView*>(tvp)) != 0) { + } else if ((tv = dynamic_cast<RouteTimeAxisView*>(tvp)) != 0) { /* check that its an audio track, not a bus */ @@ -486,9 +486,9 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context, for (uint32_t i = 0; i < sr->cnt; ++i) { Region* r = reinterpret_cast<Region*> (sr->ptr[i]); - AudioRegion* ar; - if ((ar = dynamic_cast<AudioRegion*>(r)) != 0) { + AudioRegion* ar = dynamic_cast<AudioRegion*>(r); + if (ar) { insert_region_list_drag (*ar, x, y); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index a05dcba9e3..f459f24341 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2682,7 +2682,7 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event) TimeAxisView* tvp = clicked_trackview; RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -2711,11 +2711,11 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event) start_grab(event); TimeAxisView* tv = &clicked_regionview->get_time_axis_view(); - RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(tv); + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(tv); double speed = 1.0; - if (atv && atv->is_audio_track()) { - speed = atv->get_diskstream()->speed(); + if (rtv && rtv->is_track()) { + speed = rtv->get_diskstream()->speed(); } drag_info.last_trackview = &clicked_regionview->get_time_axis_view(); @@ -2746,7 +2746,7 @@ Editor::start_region_brush_grab (ArdourCanvas::Item* item, GdkEvent* event) TimeAxisView* tvp = clicked_trackview; RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -2796,7 +2796,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) rv = (*i); Playlist* to_playlist = rv->region().playlist(); - RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(&rv->get_time_axis_view()); + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&rv->get_time_axis_view()); insert_result = affected_playlists.insert (to_playlist); if (insert_result.second) { @@ -2805,7 +2805,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) latest_regionview = 0; - sigc::connection c = atv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view)); + sigc::connection c = rtv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view)); /* create a new region with the same name. */ @@ -2821,7 +2821,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) newregion->set_locked (false); - to_playlist->add_region (*newregion, (jack_nframes_t) (rv->region().position() * atv->get_diskstream()->speed())); + to_playlist->add_region (*newregion, (jack_nframes_t) (rv->region().position() * rtv->get_diskstream()->speed())); c.disconnect (); @@ -2847,15 +2847,15 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) /* Which trackview is this ? */ TimeAxisView* tvp = trackview_by_y_position (drag_info.current_pointer_y); - AudioTimeAxisView* tv = dynamic_cast<AudioTimeAxisView*>(tvp); + RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); /* The region motion is only processed if the pointer is over an audio track. */ - if (!tv || !tv->is_audio_track()) { + if (!tv || !tv->is_track()) { /* To make sure we hide the verbose canvas cursor when the mouse is - not held over and audiotrack. + not held over a track. */ hide_verbose_canvas_cursor (); return; @@ -2883,30 +2883,30 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { TimeAxisView *tracklist_timeview; tracklist_timeview = (*i); - AudioTimeAxisView* atv2 = dynamic_cast<AudioTimeAxisView*>(tracklist_timeview); + RouteTimeAxisView* rtv2 = dynamic_cast<RouteTimeAxisView*>(tracklist_timeview); list<TimeAxisView*> children_list; /* zeroes are audio tracks. ones are other types. */ - if (!atv2->hidden()) { + if (!rtv2->hidden()) { - if (visible_y_high < atv2->order) { - visible_y_high = atv2->order; + if (visible_y_high < rtv2->order) { + visible_y_high = rtv2->order; } - if (visible_y_low > atv2->order) { - visible_y_low = atv2->order; + if (visible_y_low > rtv2->order) { + visible_y_low = rtv2->order; } - if (!atv2->is_audio_track()) { - tracks = tracks |= (0x01 << atv2->order); + if (!rtv2->is_track()) { + tracks = tracks |= (0x01 << rtv2->order); } - height_list[atv2->order] = (*i)->height; + height_list[rtv2->order] = (*i)->height; children = 1; - if ((children_list = atv2->get_child_list()).size() > 0) { + if ((children_list = rtv2->get_child_list()).size() > 0) { for (list<TimeAxisView*>::iterator j = children_list.begin(); j != children_list.end(); ++j) { - tracks = tracks |= (0x01 << (atv2->order + children)); - height_list[atv2->order + children] = (*j)->height; + tracks = tracks |= (0x01 << (rtv2->order + children)); + height_list[rtv2->order + children] = (*j)->height; numtracks++; children++; } @@ -2941,27 +2941,27 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) rv2->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); rv2->get_canvas_group()->i2w (ix1, iy1); TimeAxisView* tvp2 = trackview_by_y_position (iy1); - RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2); + RouteTimeAxisView* rtv2 = dynamic_cast<RouteTimeAxisView*>(tvp2); - if (atv2->order != original_pointer_order) { + if (rtv2->order != original_pointer_order) { /* this isn't the pointer track */ if (canvas_pointer_y_span > 0) { /* moving up the canvas */ - if ((atv2->order - canvas_pointer_y_span) >= visible_y_low) { + if ((rtv2->order - canvas_pointer_y_span) >= visible_y_low) { int32_t visible_tracks = 0; while (visible_tracks < canvas_pointer_y_span ) { visible_tracks++; - while (height_list[atv2->order - (visible_tracks - n)] == 0) { + while (height_list[rtv2->order - (visible_tracks - n)] == 0) { /* we're passing through a hidden track */ n--; } } - if (tracks[atv2->order - (canvas_pointer_y_span - n)] != 0x00) { + if (tracks[rtv2->order - (canvas_pointer_y_span - n)] != 0x00) { clamp_y_axis = true; } @@ -2973,7 +2973,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) /*moving down the canvas*/ - if ((atv2->order - (canvas_pointer_y_span - n)) <= visible_y_high) { // we will overflow + if ((rtv2->order - (canvas_pointer_y_span - n)) <= visible_y_high) { // we will overflow int32_t visible_tracks = 0; @@ -2981,11 +2981,11 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) while (visible_tracks > canvas_pointer_y_span ) { visible_tracks--; - while (height_list[atv2->order - (visible_tracks - n)] == 0) { + while (height_list[rtv2->order - (visible_tracks - n)] == 0) { n++; } } - if ( tracks[atv2->order - ( canvas_pointer_y_span - n)] != 0x00) { + if ( tracks[rtv2->order - ( canvas_pointer_y_span - n)] != 0x00) { clamp_y_axis = true; } @@ -2998,9 +2998,9 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) } else { /* this is the pointer's track */ - if ((atv2->order - pointer_y_span) > visible_y_high) { // we will overflow + if ((rtv2->order - pointer_y_span) > visible_y_high) { // we will overflow clamp_y_axis = true; - } else if ((atv2->order - pointer_y_span) < visible_y_low) { // we will underflow + } else if ((rtv2->order - pointer_y_span) < visible_y_low) { // we will underflow clamp_y_axis = true; } } @@ -3136,14 +3136,14 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); rv->get_canvas_group()->i2w (ix1, iy1); TimeAxisView* tvp2 = trackview_by_y_position (iy1); - AudioTimeAxisView* canvas_atv = dynamic_cast<AudioTimeAxisView*>(tvp2); - AudioTimeAxisView* temp_atv; + RouteTimeAxisView* canvas_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2); + RouteTimeAxisView* temp_rtv; if ((pointer_y_span != 0) && !clamp_y_axis) { y_delta = 0; int32_t x = 0; for (j = height_list.begin(); j!= height_list.end(); j++) { - if (x == canvas_atv->order) { + if (x == canvas_rtv->order) { /* we found the track the region is on */ if (x != original_pointer_order) { /*this isn't from the same track we're dragging from */ @@ -3181,14 +3181,14 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) /* find out where we'll be when we move and set height accordingly */ tvp2 = trackview_by_y_position (iy1 + y_delta); - temp_atv = dynamic_cast<AudioTimeAxisView*>(tvp2); - rv->set_height (temp_atv->height); + temp_rtv = dynamic_cast<RouteTimeAxisView*>(tvp2); + rv->set_height (temp_rtv->height); /* if you un-comment the following, the region colours will follow the track colours whilst dragging, personally, i think this can confuse things, but never mind. */ - //const GdkColor& col (temp_atv->view->get_region_color()); + //const GdkColor& col (temp_rtv->view->get_region_color()); //rv->set_color (const_cast<GdkColor&>(col)); break; } @@ -3229,9 +3229,9 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) the motion is done. */ - AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (&rv->get_time_axis_view()); - if (atv && atv->is_audio_track()) { - AudioPlaylist* pl = dynamic_cast<AudioPlaylist*>(atv->get_diskstream()->playlist()); + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&rv->get_time_axis_view()); + if (rtv && rtv->is_track()) { + Playlist* pl = dynamic_cast<Playlist*>(rtv->get_diskstream()->playlist()); if (pl) { /* only freeze and capture state once */ @@ -3300,7 +3300,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event /* adjust for track speed */ speed = 1.0; - atv = dynamic_cast<AudioTimeAxisView*> (drag_info.last_trackview); + atv = dynamic_cast<RouteTimeAxisView*> (drag_info.last_trackview); if (atv && atv->get_diskstream()) { speed = atv->get_diskstream()->speed(); } @@ -3348,7 +3348,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event (*i)->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); (*i)->get_canvas_group()->i2w (ix1, iy1); TimeAxisView* tvp2 = trackview_by_y_position (iy1); - AudioTimeAxisView* atv2 = dynamic_cast<AudioTimeAxisView*>(tvp2); + RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2); from_playlist = (*i)->region().playlist(); to_playlist = atv2->playlist(); @@ -3383,7 +3383,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event (*i)->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); (*i)->get_canvas_group()->i2w (ix1, iy1); TimeAxisView* tvp2 = trackview_by_y_position (iy1); - AudioTimeAxisView* atv2 = dynamic_cast<AudioTimeAxisView*>(tvp2); + RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2); from_playlist = (*i)->region().playlist(); to_playlist = atv2->playlist(); @@ -3418,7 +3418,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event if (regionview_x_movement) { double ownspeed = 1.0; - AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (&(rv->get_time_axis_view())); + RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*> (&(rv->get_time_axis_view())); if (atv && atv->get_diskstream()) { ownspeed = atv->get_diskstream()->speed(); @@ -3467,9 +3467,9 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event) if (Keyboard::modifier_state_contains (event->state, Keyboard::Control)) { TimeAxisView* tv = &rv.get_time_axis_view(); - AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(tv); + RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(tv); double speed = 1.0; - if (atv && atv->is_audio_track()) { + if (atv && atv->is_track()) { speed = atv->get_diskstream()->speed(); } @@ -3904,9 +3904,9 @@ Editor::start_trim (ArdourCanvas::Item* item, GdkEvent* event) { double speed = 1.0; TimeAxisView* tvp = clicked_trackview; - AudioTimeAxisView* tv = dynamic_cast<AudioTimeAxisView*>(tvp); + RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -3967,7 +3967,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); pair<set<Playlist*>::iterator,bool> insert_result; - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -4093,7 +4093,7 @@ Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool l TimeAxisView* tvp = clicked_trackview; RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -4131,9 +4131,9 @@ Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left double speed = 1.0; TimeAxisView* tvp = clicked_trackview; - AudioTimeAxisView* tv = dynamic_cast<AudioTimeAxisView*>(tvp); + RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -4165,9 +4165,9 @@ Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_d double speed = 1.0; TimeAxisView* tvp = clicked_trackview; - AudioTimeAxisView* tv = dynamic_cast<AudioTimeAxisView*>(tvp); + RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); - if (tv && tv->is_audio_track()) { + if (tv && tv->is_track()) { speed = tv->get_diskstream()->speed(); } @@ -4824,7 +4824,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos) RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*>(&arv->get_time_axis_view()); - if (atv == 0 || !atv->is_audio_track()) { + if (atv == 0 || !atv->is_track()) { return; } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 9b69026a01..30e19c484c 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2275,6 +2275,8 @@ Editor::new_region_from_selection () void Editor::separate_region_from_selection () { + // FIXME: TYPE + bool doing_undo = false; if (selection->time.empty()) { @@ -2321,6 +2323,8 @@ Editor::separate_region_from_selection () void Editor::separate_regions_using_location (Location& loc) { + // FIXME: TYPE + bool doing_undo = false; if (loc.is_mark()) { @@ -2391,15 +2395,12 @@ Editor::crop_region_to_selection () for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { - AudioTimeAxisView* atv; + RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*i); - if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) { + if (rtv && rtv->is_track()) { - if (atv->is_audio_track()) { - - if ((playlist = atv->playlist()) != 0) { - playlists.push_back (playlist); - } + if ((playlist = rtv->playlist()) != 0) { + playlists.push_back (playlist); } } } @@ -2460,8 +2461,7 @@ Editor::region_fill_track () // FIXME AudioRegion* const ar = dynamic_cast<AudioRegion*>(®ion); - if (!ar) - continue; + assert(ar); Playlist* pl = region.playlist(); @@ -2475,7 +2475,7 @@ Editor::region_fill_track () return; } - XMLNode &before = pl->get_state(); + XMLNode &before = pl->get_state(); pl->add_region (*(new AudioRegion (*ar)), ar->last_frame(), times); session->add_command (new MementoCommand<Playlist>(*pl, before, pl->get_state())); } @@ -2486,7 +2486,7 @@ Editor::region_fill_track () void Editor::region_fill_selection () { - if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_audio_track()) { + if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_audio_track()) { return; } @@ -2613,7 +2613,7 @@ Editor::align_relative (RegionPoint what) } struct RegionSortByTime { - bool operator() (const AudioRegionView* a, const AudioRegionView* b) { + bool operator() (const RegionView* a, const RegionView* b) { return a->region().position() < b->region().position(); } }; @@ -2781,11 +2781,11 @@ Editor::trim_region_from_edit_cursor () void Editor::unfreeze_route () { - if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_audio_track()) { + if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_track()) { return; } - clicked_audio_trackview->audio_track()->unfreeze (); + clicked_audio_trackview->track()->unfreeze (); } void* @@ -2812,7 +2812,7 @@ Editor::freeze_progress_timeout (void *arg) void Editor::freeze_route () { - if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_audio_track()) { + if (clicked_audio_trackview == 0 || !clicked_audio_trackview->is_track()) { return; } diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc index 5cf099433b..7df91cfa4f 100644 --- a/gtk2_ardour/editor_region_list.cc +++ b/gtk2_ardour/editor_region_list.cc @@ -48,22 +48,22 @@ using namespace Glib; using namespace Editing; void -Editor::handle_audio_region_removed (AudioRegion* region) +Editor::handle_region_removed (Region* region) { - ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_audio_region_removed), region)); + ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_region_removed), region)); redisplay_regions (); } void -Editor::handle_new_audio_region (AudioRegion *region) +Editor::handle_new_region (Region *region) { - ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_audio_region), region)); + ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_region), region)); /* don't copy region - the one we are being notified about belongs to the session, and so it will never be edited. */ - add_audio_region_to_region_display (region); + add_region_to_region_display (region); } void @@ -75,7 +75,7 @@ Editor::region_hidden (Region* r) } void -Editor::add_audio_region_to_region_display (AudioRegion *region) +Editor::add_region_to_region_display (Region *region) { string str; TreeModel::Row row; @@ -206,14 +206,14 @@ Editor::region_list_selection_changed() } void -Editor::insert_into_tmp_audio_regionlist(AudioRegion* region) +Editor::insert_into_tmp_regionlist(Region* region) { /* keep all whole files at the beginning */ if (region->whole_file()) { - tmp_audio_region_list.push_front (region); + tmp_region_list.push_front (region); } else { - tmp_audio_region_list.push_back (region); + tmp_region_list.push_back (region); } } @@ -229,11 +229,11 @@ Editor::redisplay_regions () sorting. */ - tmp_audio_region_list.clear(); - session->foreach_audio_region (this, &Editor::insert_into_tmp_audio_regionlist); + tmp_region_list.clear(); + session->foreach_region (this, &Editor::insert_into_tmp_regionlist); - for (list<AudioRegion*>::iterator r = tmp_audio_region_list.begin(); r != tmp_audio_region_list.end(); ++r) { - add_audio_region_to_region_display (*r); + for (list<Region*>::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) { + add_region_to_region_display (*r); } region_list_display.set_model (region_list_model); diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 9f7fe7cf09..2e4e092ebd 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -134,10 +134,10 @@ Editor::hide_measures () ArdourCanvas::SimpleLine * Editor::get_time_line () { - ArdourCanvas::SimpleLine *line; + ArdourCanvas::SimpleLine *line; if (free_measure_lines.empty()) { - line = new ArdourCanvas::SimpleLine (*time_line_group); + line = new ArdourCanvas::SimpleLine (*time_line_group); used_measure_lines.push_back (line); } else { line = free_measure_lines.front(); @@ -194,6 +194,7 @@ Editor::draw_measures () double x1, x2, y1, y2; track_canvas.get_scroll_region (x1, y1, x2, y2); + y2 = 1000000000.0f; for (i = all_bbt_points->begin(); i != all_bbt_points->end(); ++i) { diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d716a5605a..2e102b4f70 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -68,7 +68,8 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd) // FIXME: Some redundancy here with RegionView::init. Need to figure out // where order is important and where it isn't... - RegionView::init(basic_color, wfd); + // FIXME + RegionView::init(basic_color, /*wfd*/false); compute_colors (basic_color); @@ -108,6 +109,7 @@ MidiRegionView::show_region_editor () GhostRegion* MidiRegionView::add_ghost (AutomationTimeAxisView& atv) { + throw; // FIXME return NULL; } diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 60372e640f..5f939ab583 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -29,11 +29,11 @@ #include <ardour/midi_diskstream.h> #include <ardour/midi_track.h> //#include <ardour/playlist_templates.h> -#include <ardour/source.h> +#include <ardour/midi_source.h> #include "midi_streamview.h" #include "region_view.h" -//#include "midi_regionview.h" +#include "midi_region_view.h" #include "midi_time_axis.h" #include "canvas-simplerect.h" #include "region_selection.h" @@ -52,55 +52,26 @@ using namespace Editing; MidiStreamView::MidiStreamView (MidiTimeAxisView& tv) : StreamView (tv) { - region_color = _trackview.color(); - - if (tv.is_midi_track()) + if (tv.is_track()) stream_base_color = color_map[cMidiTrackBase]; else stream_base_color = color_map[cMidiBusBase]; - - /* set_position() will position the group */ - - canvas_group = new ArdourCanvas::Group(*_trackview.canvas_display); - - canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group); - canvas_rect->property_x1() = 0.0; - canvas_rect->property_y1() = 0.0; - canvas_rect->property_x2() = 1000000.0; - canvas_rect->property_y2() = (double) tv.height; - canvas_rect->property_outline_color_rgba() = color_map[cMidiTrackOutline]; - canvas_rect->property_outline_what() = (guint32) (0x1|0x2|0x8); // outline ends and bottom + canvas_rect->property_fill_color_rgba() = stream_base_color; + canvas_rect->property_outline_color_rgba() = color_map[cAudioTrackOutline]; - canvas_rect->signal_event().connect (bind (mem_fun (_trackview.editor, &PublicEditor::canvas_stream_view_event), canvas_rect, &_trackview)); - - _samples_per_unit = _trackview.editor.get_current_zoom(); - - if (_trackview.is_midi_track()) { - _trackview.midi_track()->DiskstreamChanged.connect (mem_fun (*this, &MidiStreamView::diskstream_changed)); - _trackview.session().TransportStateChange.connect (mem_fun (*this, &MidiStreamView::transport_changed)); - _trackview.get_diskstream()->RecordEnableChanged.connect (mem_fun (*this, &MidiStreamView::rec_enable_changed)); - _trackview.session().RecordStateChanged.connect (mem_fun (*this, &MidiStreamView::sess_rec_enable_changed)); - } - - rec_updating = false; - rec_active = false; - use_rec_regions = tv.editor.show_waveforms_recording (); - - ColorChanged.connect (mem_fun (*this, &MidiStreamView::color_handler)); + //use_rec_regions = tv.editor.show_waveforms_recording (); + use_rec_regions = true; } MidiStreamView::~MidiStreamView () { - undisplay_diskstream (); - delete canvas_group; } void MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves) { -#if 0 ENSURE_GUI_THREAD (bind (mem_fun (*this, &MidiStreamView::add_region_view), r)); MidiRegion* region = dynamic_cast<MidiRegion*> (r); @@ -122,30 +93,25 @@ MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves) } } - /* FIXME - switch (_trackview.midi_track()->mode()) { - case Normal: - region_view = new MidiRegionView (canvas_group, _trackview, *region, - _samples_per_unit, region_color); - break; - case Destructive: - region_view = new TapeMidiRegionView (canvas_group, _trackview, *region, - _samples_per_unit, region_color); - break; - } - */ + // can't we all just get along? + assert(_trackview.midi_track()->mode() != Destructive); + region_view = new MidiRegionView (canvas_group, _trackview, *region, - _samples_per_unit, region_color); + _samples_per_unit, region_color); region_view->init (region_color, wait_for_waves); region_views.push_front (region_view); + /* follow global waveform setting */ + + // FIXME + //region_view->set_waveform_visible(_trackview.editor.show_waveforms()); + /* catch regionview going away */ region->GoingAway.connect (mem_fun (*this, &MidiStreamView::remove_region_view)); RegionViewAdded (region_view); -#endif } // FIXME: code duplication with AudioStreamVIew @@ -183,26 +149,30 @@ MidiStreamView::redisplay_diskstream () void MidiStreamView::setup_rec_box () { -#if 0 // cerr << _trackview.name() << " streamview SRB\n"; if (_trackview.session().transport_rolling()) { - // cerr << "\trolling\n"; + cerr << "\tSHOW: rolling\n"; if (!rec_active && _trackview.session().record_status() == Session::Recording && _trackview.get_diskstream()->record_enabled()) { - if (_trackview.midi_track()->mode() == Normal && use_rec_regions && rec_regions.size() == rec_rects.size()) { + if (use_rec_regions && rec_regions.size() == rec_rects.size()) { /* add a new region, but don't bother if they set use_rec_regions mid-record */ MidiRegion::SourceList sources; // FIXME - MidiDiskstream* ads = dynamic_cast<MidiDiskstream*>(_trackview.get_diskstream()); - assert(ads); + MidiDiskstream* mds = dynamic_cast<MidiDiskstream*>(_trackview.get_diskstream()); + assert(mds); + + sources.push_back((Source*)mds->write_source()); + + // FIXME + rec_data_ready_connections.push_back (mds->write_source()->ViewDataRangeReady.connect (bind (mem_fun (*this, &MidiStreamView::rec_data_range_ready), mds->write_source()))); // handle multi @@ -222,30 +192,17 @@ MidiStreamView::setup_rec_box () /* start a new rec box */ - MidiTrack* at; - - at = _trackview.midi_track(); /* we know what it is already */ - MidiDiskstream& ds = at->midi_diskstream(); + MidiTrack* mt = _trackview.midi_track(); /* we know what it is already */ + MidiDiskstream& ds = mt->midi_diskstream(); jack_nframes_t frame_pos = ds.current_capture_start (); gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos); gdouble xend; uint32_t fill_color; - switch (_trackview.midi_track()->mode()) { - case Normal: - xend = xstart; - fill_color = color_map[cRecordingRectFill]; - break; - - case Destructive: - xend = xstart + 2; - fill_color = color_map[cRecordingRectFill]; - /* make the recording rect translucent to allow - the user to see the peak data coming in, etc. - */ - fill_color = UINT_RGBA_CHANGE_A (fill_color, 120); - break; - } + assert(_trackview.midi_track()->mode() == Normal); + + xend = xstart; + fill_color = color_map[cRecordingRectFill]; ArdourCanvas::SimpleRect * rec_rect = new Gnome::Canvas::SimpleRect (*canvas_group); rec_rect->property_x1() = xstart; @@ -267,10 +224,16 @@ MidiStreamView::setup_rec_box () rec_updating = true; rec_active = true; + // Show, damn you! + rec_rect->show(); + rec_rect->raise_to_top(); + } else if (rec_active && (_trackview.session().record_status() != Session::Recording || !_trackview.get_diskstream()->record_enabled())) { + cerr << "NO SHOW 1\n"; + screen_update_connection.disconnect(); rec_active = false; rec_updating = false; @@ -279,21 +242,21 @@ MidiStreamView::setup_rec_box () } else { - // cerr << "\tNOT rolling, rec_rects = " << rec_rects.size() << " rec_regions = " << rec_regions.size() << endl; + cerr << "\tNOT rolling, rec_rects = " << rec_rects.size() << " rec_regions = " << rec_regions.size() << endl; if (!rec_rects.empty() || !rec_regions.empty()) { /* disconnect rapid update */ screen_update_connection.disconnect(); - for (list<sigc::connection>::iterator prc = peak_ready_connections.begin(); prc != peak_ready_connections.end(); ++prc) { + for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin(); prc != rec_data_ready_connections.end(); ++prc) { (*prc).disconnect(); } - peak_ready_connections.clear(); + rec_data_ready_connections.clear(); rec_updating = false; rec_active = false; - last_rec_peak_frame = 0; + last_rec_data_frame = 0; /* remove temp regions */ for (list<Region*>::iterator iter=rec_regions.begin(); iter != rec_regions.end(); ) @@ -324,15 +287,14 @@ MidiStreamView::setup_rec_box () } } -#endif } void MidiStreamView::update_rec_regions () { -#if 0 if (use_rec_regions) { + uint32_t n = 0; for (list<Region*>::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) { @@ -356,9 +318,9 @@ MidiStreamView::update_rec_regions () if (region == rec_regions.back() && rec_active) { - if (last_rec_peak_frame > region->start()) { + if (last_rec_data_frame > region->start()) { - jack_nframes_t nlen = last_rec_peak_frame - region->start(); + jack_nframes_t nlen = last_rec_data_frame - region->start(); if (nlen != region->length()) { @@ -408,7 +370,28 @@ MidiStreamView::update_rec_regions () iter = tmp; } } -#endif +} + +void +MidiStreamView::rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, Source * src) +{ + // this is called from the butler thread for now + // yeah we need a "peak" building thread or something. whatever. :) + + ENSURE_GUI_THREAD(bind (mem_fun (*this, &MidiStreamView::rec_data_range_ready), start, cnt, src)); + + //cerr << "REC DATA: " << start << " --- " << cnt << endl; + + if (rec_data_ready_map.size() == 0 || start+cnt > last_rec_data_frame) { + last_rec_data_frame = start + cnt; + } + + rec_data_ready_map[src] = true; + + if (rec_data_ready_map.size() == _trackview.get_diskstream()->n_channels().get(DataType::MIDI)) { + this->update_rec_regions (); + rec_data_ready_map.clear(); + } } void diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h index 0b13f9fd7f..107a804db8 100644 --- a/gtk2_ardour/midi_streamview.h +++ b/gtk2_ardour/midi_streamview.h @@ -62,7 +62,7 @@ class MidiStreamView : public StreamView private: void setup_rec_box (); - void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src); + void rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src); void update_rec_regions (); void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves); diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 041eebff10..9300986960 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -98,26 +98,27 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session& sess, boost::shar /* map current state of the route */ - //redirects_changed (0); + redirects_changed (0); ensure_xml_node (); set_state (*xml_node); - //_route.redirects_changed.connect (mem_fun(*this, &MidiTimeAxisView::redirects_changed)); + _route->redirects_changed.connect (mem_fun(*this, &MidiTimeAxisView::redirects_changed)); - if (is_midi_track()) { + if (is_track()) { controls_ebox.set_name ("MidiTrackControlsBaseUnselected"); controls_base_selected_name = "MidiTrackControlsBaseSelected"; controls_base_unselected_name = "MidiTrackControlsBaseUnselected"; /* ask for notifications of any new RegionViews */ - //view->MidiRegionViewAdded.connect (mem_fun(*this, &MidiTimeAxisView::region_view_added)); - //view->attach (); + _view->RegionViewAdded.connect (mem_fun(*this, &MidiTimeAxisView::region_view_added)); + _view->attach (); } else { /* bus */ + throw; // what the? controls_ebox.set_name ("MidiBusControlsBaseUnselected"); controls_base_selected_name = "MidiBusControlsBaseSelected"; controls_base_unselected_name = "MidiBusControlsBaseUnselected"; @@ -174,75 +175,6 @@ MidiTimeAxisView::set_state (const XMLNode& node) } } -void -MidiTimeAxisView::build_display_menu () -{ - using namespace Menu_Helpers; - - /* get the size menu ready */ - - build_size_menu (); - - /* prepare it */ - - TimeAxisView::build_display_menu (); - - /* now fill it with our stuff */ - - MenuList& items = display_menu->items(); - display_menu->set_name ("ArdourContextMenu"); - - items.push_back (MenuElem (_("Height"), *size_menu)); - items.push_back (MenuElem (_("Color"), mem_fun(*this, &MidiTimeAxisView::select_track_color))); - - - items.push_back (SeparatorElem()); - - build_remote_control_menu (); - items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu)); - - automation_action_menu = manage (new Menu); - MenuList& automation_items = automation_action_menu->items(); - automation_action_menu->set_name ("ArdourContextMenu"); - - automation_items.push_back (SeparatorElem()); - - automation_items.push_back (MenuElem (_("Plugins"), subplugin_menu)); - - if (is_midi_track()) { - - Menu* alignment_menu = manage (new Menu); - MenuList& alignment_items = alignment_menu->items(); - alignment_menu->set_name ("ArdourContextMenu"); - - RadioMenuItem::Group align_group; - - alignment_items.push_back (RadioMenuElem (align_group, _("Align with existing material"), bind (mem_fun(*this, &MidiTimeAxisView::set_align_style), ExistingMaterial))); - align_existing_item = dynamic_cast<RadioMenuItem*>(&alignment_items.back()); - if (get_diskstream()->alignment_style() == ExistingMaterial) { - align_existing_item->set_active(); - } - alignment_items.push_back (RadioMenuElem (align_group, _("Align with capture time"), bind (mem_fun(*this, &MidiTimeAxisView::set_align_style), CaptureTime))); - align_capture_item = dynamic_cast<RadioMenuItem*>(&alignment_items.back()); - if (get_diskstream()->alignment_style() == CaptureTime) { - align_capture_item->set_active(); - } - - items.push_back (MenuElem (_("Alignment"), *alignment_menu)); - - get_diskstream()->AlignmentStyleChanged.connect (mem_fun(*this, &MidiTimeAxisView::align_style_changed)); - } - - items.push_back (SeparatorElem()); - items.push_back (CheckMenuElem (_("Active"), mem_fun(*this, &RouteUI::toggle_route_active))); - route_active_menu_item = dynamic_cast<CheckMenuItem *> (&items.back()); - route_active_menu_item->set_active (_route->active()); - - items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Remove"), mem_fun(*this, &RouteUI::remove_this_route))); - -} - // FIXME: duplicated in audio_time_axis.cc /*static string legalize_for_xml_node (string str) @@ -267,7 +199,7 @@ MidiTimeAxisView::route_active_changed () { RouteUI::route_active_changed (); - if (is_midi_track()) { + if (is_track()) { if (_route->active()) { controls_ebox.set_name ("MidiTrackControlsBaseUnselected"); controls_base_selected_name = "MidiTrackControlsBaseSelected"; @@ -278,6 +210,9 @@ MidiTimeAxisView::route_active_changed () controls_base_unselected_name = "MidiTrackControlsBaseInactiveUnselected"; } } else { + + throw; // wha? + if (_route->active()) { controls_ebox.set_name ("BusControlsBaseUnselected"); controls_base_selected_name = "BusControlsBaseSelected"; diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h index be01e16d26..df1c964fee 100644 --- a/gtk2_ardour/midi_time_axis.h +++ b/gtk2_ardour/midi_time_axis.h @@ -74,14 +74,10 @@ class MidiTimeAxisView : public RouteTimeAxisView XMLNode* get_child_xml_node (const string & childname); private: - void region_view_added (RegionView*) {} - void route_active_changed (); //void redirects_changed (void *); FIXME? - void build_display_menu (); - void add_redirect_to_subplugin_menu (ARDOUR::Redirect *); Gtk::Menu subplugin_menu; diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index e90355fd0a..6b3c2a820c 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -300,10 +300,10 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } else { - reversibly_apply_audio_track_boolean ("rec-enable change", &AudioTrack::set_record_enable, !audio_track()->record_enabled(), this); + reversibly_apply_track_boolean ("rec-enable change", &Track::set_record_enable, !track()->record_enabled(), this); ignore_toggle = true; - rec_enable_button->set_active(audio_track()->record_enabled()); + rec_enable_button->set_active(track()->record_enabled()); ignore_toggle = false; } @@ -593,6 +593,17 @@ RouteUI::reversibly_apply_audio_track_boolean (string name, void (AudioTrack::*f } void +RouteUI::reversibly_apply_track_boolean (string name, void (Track::*func)(bool, void *), bool yn, void *arg) +{ + _session.begin_reversible_command (name); + XMLNode &before = track()->get_state(); + bind (mem_fun (*track(), func), yn, arg)(); + XMLNode &after = track()->get_state(); + _session.add_command (new MementoCommand<Track>(*track(), before, after)); + _session.commit_reversible_command (); +} + +void RouteUI::set_mix_group_mute(boost::shared_ptr<Route> route, bool yn) { RouteGroup* mix_group; diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 643c39b960..156063a8e5 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -156,6 +156,7 @@ class RouteUI : public virtual AxisView void reversibly_apply_route_boolean (string name, void (ARDOUR::Route::*func)(bool, void*), bool, void *); void reversibly_apply_audio_track_boolean (string name, void (ARDOUR::AudioTrack::*func)(bool, void*), bool, void *); + void reversibly_apply_track_boolean (string name, void (ARDOUR::Track::*func)(bool, void*), bool, void *); }; #endif /* __ardour_route_ui__ */ diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index d1d163d7a2..82f941f9bd 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -56,6 +56,7 @@ StreamView::StreamView (RouteTimeAxisView& tv) , use_rec_regions(tv.editor.show_waveforms_recording()) , region_color(_trackview.color()) , stream_base_color(0xFFFFFFFF) + , last_rec_data_frame(0) { /* set_position() will position the group */ diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 5a0e10974f..bee51e8835 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -144,6 +144,10 @@ protected: vector<sigc::connection> playlist_connections; sigc::connection playlist_change_connection; + + list<sigc::connection> rec_data_ready_connections; + jack_nframes_t last_rec_data_frame; + map<ARDOUR::Source*, bool> rec_data_ready_map; }; #endif /* __ardour_streamview_h__ */ |