summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r--gtk2_ardour/editor.cc130
1 files changed, 80 insertions, 50 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index da1385bbe7..75648f0486 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -270,8 +270,6 @@ Editor::Editor ()
cut_buffer = new Selection (this);
clicked_regionview = 0;
- clicked_axisview = 0;
- clicked_routeview = 0;
clicked_crossfadeview = 0;
clicked_control_point = 0;
last_update_frame = 0;
@@ -330,8 +328,6 @@ Editor::Editor ()
leftmost_frame = 0;
ignore_mouse_mode_toggle = false;
ignore_midi_edit_mode_toggle = false;
- current_stepping_trackview = 0;
- entered_track = 0;
entered_regionview = 0;
entered_marker = 0;
clear_entered_track = false;
@@ -753,7 +749,7 @@ Editor::set_entered_regionview (RegionView* rv)
}
void
-Editor::set_entered_track (TimeAxisView* tav)
+Editor::set_entered_track (TimeAxisViewPtr tav)
{
if (entered_track) {
entered_track->exited ();
@@ -782,10 +778,10 @@ Editor::show_window ()
to be re-hidden
*/
- TimeAxisView *tv;
+ TimeAxisViewPtr tv;
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- tv = (static_cast<TimeAxisView*>(*i));
+ tv = (static_cast<TimeAxisViewPtr>(*i));
tv->reset_height ();
}
}
@@ -1176,7 +1172,7 @@ Editor::connect_to_session (Session *t)
session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
+ (static_cast<TimeAxisViewPtr>(*i))->set_samples_per_unit (frames_per_unit);
}
start_scrolling ();
@@ -1498,7 +1494,7 @@ Editor::build_track_region_context_menu (nframes64_t frame)
MenuList& edit_items = track_region_context_menu.items();
edit_items.clear();
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (clicked_axisview);
+ RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView> (clicked_axisview);
if (rtv) {
boost::shared_ptr<Diskstream> ds;
@@ -1535,7 +1531,7 @@ Editor::build_track_crossfade_context_menu (nframes64_t frame)
MenuList& edit_items = track_crossfade_context_menu.items();
edit_items.clear ();
- AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_axisview);
+ AudioTimeAxisViewPtr atv = boost::dynamic_pointer_cast<AudioTimeAxisView> (clicked_axisview);
if (atv) {
boost::shared_ptr<Diskstream> ds;
@@ -2502,18 +2498,18 @@ Editor::get_state ()
* TimeAxisView may be 0. Layer index is the layer number if the TimeAxisView is valid and is
* in stacked region display mode, otherwise 0.
*/
-std::pair<TimeAxisView *, layer_t>
+std::pair<TimeAxisViewPtr, layer_t>
Editor::trackview_by_y_position (double y)
{
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
- std::pair<TimeAxisView*, int> const r = (*iter)->covers_y_position (y);
+ std::pair<TimeAxisViewPtr, int> const r = (*iter)->covers_y_position (y);
if (r.first) {
return r;
}
}
- return std::make_pair ( (TimeAxisView *) 0, 0);
+ return std::make_pair (TimeAxisViewPtr (), 0);
}
void
@@ -3690,7 +3686,7 @@ Editor::mouse_select_button_release (GdkEventButton* ev)
}
Editor::TrackViewList *
-Editor::get_valid_views (TimeAxisView* track, RouteGroup* group)
+Editor::get_valid_views (TimeAxisViewPtr track, RouteGroup* group)
{
TrackViewList::iterator i;
@@ -4090,8 +4086,13 @@ Editor::restore_editing_space ()
*/
void
-Editor::new_playlists (TimeAxisView* v)
+Editor::new_playlists (boost::weak_ptr<TimeAxisView> w)
{
+ TimeAxisViewPtr v = w.lock ();
+ if (!v) {
+ return;
+ }
+
begin_reversible_command (_("new playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
session->get_playlists(playlists);
@@ -4106,8 +4107,13 @@ Editor::new_playlists (TimeAxisView* v)
*/
void
-Editor::copy_playlists (TimeAxisView* v)
+Editor::copy_playlists (boost::weak_ptr<TimeAxisView> w)
{
+ TimeAxisViewPtr v = w.lock ();
+ if (!v) {
+ return;
+ }
+
begin_reversible_command (_("copy playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
session->get_playlists(playlists);
@@ -4121,8 +4127,13 @@ Editor::copy_playlists (TimeAxisView* v)
*/
void
-Editor::clear_playlists (TimeAxisView* v)
+Editor::clear_playlists (boost::weak_ptr<TimeAxisView> w)
{
+ TimeAxisViewPtr v = w.lock ();
+ if (!v) {
+ return;
+ }
+
begin_reversible_command (_("clear playlists"));
vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
session->get_playlists(playlists);
@@ -4131,21 +4142,21 @@ Editor::clear_playlists (TimeAxisView* v)
}
void
-Editor::mapped_use_new_playlist (RouteTimeAxisView& atv, uint32_t sz, vector<boost::shared_ptr<ARDOUR::Playlist> > const & playlists)
+Editor::mapped_use_new_playlist (RouteTimeAxisViewPtr atv, uint32_t sz, vector<boost::shared_ptr<ARDOUR::Playlist> > const & playlists)
{
- atv.use_new_playlist (sz > 1 ? false : true, playlists);
+ atv->use_new_playlist (sz > 1 ? false : true, playlists);
}
void
-Editor::mapped_use_copy_playlist (RouteTimeAxisView& atv, uint32_t sz, vector<boost::shared_ptr<ARDOUR::Playlist> > const & playlists)
+Editor::mapped_use_copy_playlist (RouteTimeAxisViewPtr atv, uint32_t sz, vector<boost::shared_ptr<ARDOUR::Playlist> > const & playlists)
{
- atv.use_copy_playlist (sz > 1 ? false : true, playlists);
+ atv->use_copy_playlist (sz > 1 ? false : true, playlists);
}
void
-Editor::mapped_clear_playlist (RouteTimeAxisView& atv, uint32_t sz)
+Editor::mapped_clear_playlist (RouteTimeAxisViewPtr atv, uint32_t sz)
{
- atv.clear_playlist ();
+ atv->clear_playlist ();
}
bool
@@ -4470,7 +4481,7 @@ Editor::idle_visual_changer ()
}
struct EditorOrderTimeAxisSorter {
- bool operator() (const TimeAxisView* a, const TimeAxisView* b) const {
+ bool operator() (const TimeAxisViewPtr a, const TimeAxisViewPtr b) const {
return a->order () < b->order ();
}
};
@@ -4602,7 +4613,7 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelec
}
for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
+ RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView>(*t);
if (rtv) {
boost::shared_ptr<Diskstream> ds;
boost::shared_ptr<Playlist> pl;
@@ -4637,7 +4648,7 @@ Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSe
}
for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
+ RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView>(*t);
if (rtv) {
boost::shared_ptr<Diskstream> ds;
boost::shared_ptr<Playlist> pl;
@@ -4677,7 +4688,7 @@ Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered)
for (RegionSelection::iterator i = to_map.begin (); i != to_map.end(); ++i) {
- RouteGroup* g = (*i)->get_time_axis_view().route_group ();
+ RouteGroup* g = (*i)->get_time_axis_view()->route_group ();
if (g && g->active_property (RouteGroup::Edit)) {
tracks.add (axis_views_from_routes (g->route_list()));
}
@@ -4693,9 +4704,9 @@ Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<R
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- RouteTimeAxisView* tatv;
+ RouteTimeAxisViewPtr tatv;
- if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
+ if ((tatv = boost::dynamic_pointer_cast<RouteTimeAxisView> (*i)) != 0) {
boost::shared_ptr<Playlist> pl;
vector<boost::shared_ptr<Region> > results;
@@ -4787,7 +4798,7 @@ _idle_resizer (gpointer arg)
}
void
-Editor::add_to_idle_resize (TimeAxisView* view, int32_t h)
+Editor::add_to_idle_resize (TimeAxisViewPtr view, int32_t h)
{
if (resize_idle_id < 0) {
resize_idle_id = g_idle_add (_idle_resizer, this);
@@ -4826,7 +4837,7 @@ Editor::idle_resize ()
{
_pending_resize_view->idle_resize (_pending_resize_view->current_height() + _pending_resize_amount);
- if (dynamic_cast<AutomationTimeAxisView*> (_pending_resize_view) == 0 &&
+ if (boost::dynamic_pointer_cast<AutomationTimeAxisView> (_pending_resize_view) == 0 &&
selection->tracks.contains (_pending_resize_view)) {
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
@@ -4871,7 +4882,7 @@ Editor::axis_views_from_routes (list<Route*> r) const
for (list<Route*>::const_iterator i = r.begin(); i != r.end(); ++i) {
TrackViewList::const_iterator j = track_views.begin ();
while (j != track_views.end()) {
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*j);
+ RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView> (*j);
if (rtv && rtv->route().get() == *i) {
t.push_back (rtv);
}
@@ -4888,8 +4899,8 @@ Editor::handle_new_route (RouteList& routes)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_route), routes));
- RouteTimeAxisView *rtv;
- list<RouteTimeAxisView*> new_views;
+ RouteTimeAxisViewPtr rtv;
+ list<RouteTimeAxisViewPtr> new_views;
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x);
@@ -4901,9 +4912,9 @@ Editor::handle_new_route (RouteList& routes)
DataType dt = route->input()->default_type();
if (dt == ARDOUR::DataType::AUDIO) {
- rtv = new AudioTimeAxisView (*this, *session, route, *track_canvas);
+ rtv = AudioTimeAxisView::create (*this, *session, route, *track_canvas);
} else if (dt == ARDOUR::DataType::MIDI) {
- rtv = new MidiTimeAxisView (*this, *session, route, *track_canvas);
+ rtv = MidiTimeAxisView::create (*this, *session, route, *track_canvas);
} else {
throw unknown_type();
}
@@ -4931,16 +4942,16 @@ Editor::handle_new_route (RouteList& routes)
}
void
-Editor::remove_route (TimeAxisView *tv)
+Editor::remove_route (TimeAxisViewPtr tv)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::remove_route), tv));
+ ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::remove_route), tv));
TrackViewList::iterator i;
boost::shared_ptr<Route> route;
- TimeAxisView* next_tv;
+ TimeAxisViewPtr next_tv;
if (tv == entered_track) {
- entered_track = 0;
+ entered_track.reset ();
}
if ((i = find (track_views.begin(), track_views.end(), tv)) != track_views.end()) {
@@ -4948,7 +4959,7 @@ Editor::remove_route (TimeAxisView *tv)
i = track_views.erase (i);
if (track_views.empty()) {
- next_tv = 0;
+ next_tv.reset ();
} else if (i == track_views.end()) {
next_tv = track_views.front();
} else {
@@ -4959,7 +4970,7 @@ Editor::remove_route (TimeAxisView *tv)
if (current_mixer_strip && current_mixer_strip->route() == route) {
if (next_tv) {
- set_selected_mixer_strip (*next_tv);
+ set_selected_mixer_strip (next_tv);
} else {
/* make the editor mixer strip go away setting the
* button to inactive (which also unticks the menu option)
@@ -4971,9 +4982,9 @@ Editor::remove_route (TimeAxisView *tv)
}
void
-Editor::hide_track_in_display (TimeAxisView& tv, bool temponly)
+Editor::hide_track_in_display (TimeAxisViewPtr tv, bool temponly)
{
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&tv);
+ RouteTimeAxisViewPtr rtv = boost::dynamic_pointer_cast<RouteTimeAxisView> (tv);
if (rtv && current_mixer_strip && (rtv->route() == current_mixer_strip->route())) {
// this will hide the mixer strip
@@ -4995,27 +5006,27 @@ Editor::sync_track_view_list_and_routes ()
}
void
-Editor::foreach_time_axis_view (sigc::slot<void,TimeAxisView&> theslot)
+Editor::foreach_time_axis_view (sigc::slot<void,TimeAxisViewPtr> theslot)
{
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- theslot (**i);
+ theslot (*i);
}
}
-RouteTimeAxisView*
+RouteTimeAxisViewPtr
Editor::get_route_view_by_id (PBD::ID& id)
{
- RouteTimeAxisView* v;
+ RouteTimeAxisViewPtr v;
for(TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- if((v = dynamic_cast<RouteTimeAxisView*>(*i)) != 0) {
+ if((v = boost::dynamic_pointer_cast<RouteTimeAxisView>(*i)) != 0) {
if(v->route()->id() == id) {
return v;
}
}
}
- return 0;
+ return RouteTimeAxisViewPtr ();
}
void
@@ -5071,3 +5082,22 @@ Editor::hide_region_from_region_list ()
_regions->selection_mapover (mem_fun (*this, &Editor::hide_a_region));
}
+TimeAxisViewPtr
+Editor::find_time_axis (TimeAxisView* v)
+{
+ TrackViewList::iterator i = track_views.begin ();
+ while (i != track_views.end()) {
+ if (i->get() == v) {
+ return *i;
+ }
+
+ TimeAxisViewPtr p = (*i)->find_time_axis (v);
+ if (p) {
+ return p;
+ }
+
+ ++i;
+ }
+
+ return TimeAxisViewPtr ();
+}