summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-12-25 21:06:52 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-12-25 21:06:52 +0000
commitb6f4cdaea27fbf49f924b2684d4c638089314067 (patch)
tree4328e93333d13eccadc18455ba32a7293d3cbd73 /gtk2_ardour
parentf53cbaede885cd52b8fee59890e33575a4fc11fa (diff)
rationalize destruction pathway (some more); tidy-ify some ImageFrame code
git-svn-id: svn://localhost/ardour2/branches/3.0@6398 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_region_view.cc2
-rw-r--r--gtk2_ardour/axis_view.cc1
-rw-r--r--gtk2_ardour/axis_view.h2
-rw-r--r--gtk2_ardour/editor.cc77
-rw-r--r--gtk2_ardour/editor.h5
-rw-r--r--gtk2_ardour/editor_drag.cc2
-rw-r--r--gtk2_ardour/editor_imageframe.cc5
-rw-r--r--gtk2_ardour/editor_mixer.cc17
-rw-r--r--gtk2_ardour/imageframe_time_axis.cc19
-rw-r--r--gtk2_ardour/imageframe_time_axis.h4
-rw-r--r--gtk2_ardour/imageframe_time_axis_group.cc143
-rw-r--r--gtk2_ardour/imageframe_time_axis_view.cc6
-rw-r--r--gtk2_ardour/imageframe_view.cc117
-rw-r--r--gtk2_ardour/marker_time_axis_view.cc6
-rw-r--r--gtk2_ardour/midi_region_view.cc2
-rw-r--r--gtk2_ardour/mixer_strip.cc1
-rw-r--r--gtk2_ardour/mixer_strip.h1
-rw-r--r--gtk2_ardour/mixer_ui.cc12
-rw-r--r--gtk2_ardour/region_view.cc5
-rw-r--r--gtk2_ardour/route_ui.cc6
-rw-r--r--gtk2_ardour/selection.cc30
-rw-r--r--gtk2_ardour/selection.h4
-rw-r--r--gtk2_ardour/time_axis_view.cc18
-rw-r--r--gtk2_ardour/time_axis_view.h2
24 files changed, 241 insertions, 246 deletions
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index c52d71c780..54be60bc9d 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -1186,8 +1186,6 @@ AudioRegionView::add_ghost (TimeAxisView& tv)
ghost->set_colors();
ghosts.push_back (ghost);
- ghost->CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
-
return ghost;
}
diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc
index 9bd9182201..eb3ef23bc6 100644
--- a/gtk2_ardour/axis_view.cc
+++ b/gtk2_ardour/axis_view.cc
@@ -44,7 +44,6 @@ using namespace Gtkmm2ext;
using namespace ARDOUR;
list<Gdk::Color> AxisView::used_colors;
-PBD::Signal1<void,AxisView*> AxisView::CatchDeletion;
AxisView::AxisView (ARDOUR::Session* sess)
: SessionHandlePtr (sess)
diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h
index 29f167d85e..108d14c1f1 100644
--- a/gtk2_ardour/axis_view.h
+++ b/gtk2_ardour/axis_view.h
@@ -60,8 +60,6 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu
_marked_for_display = yn;
}
- static PBD::Signal1<void,AxisView*> CatchDeletion;
-
sigc::signal<void> Hiding;
void set_old_order_key (uint32_t ok) { _old_order_key = ok; }
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 320642cbd9..45fd4d6010 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -310,7 +310,6 @@ Editor::Editor ()
_show_waveforms_recording = true;
show_gain_after_trim = false;
verbose_cursor_on = true;
- route_removal = false;
last_item_entered = 0;
last_item_entered_n = 0;
@@ -688,6 +687,8 @@ Editor::Editor ()
Config->ParameterChanged.connect (*this, ui_bind (&Editor::parameter_changed, this, _1), gui_context());
+ TimeAxisView::CatchDeletion.connect (*this, ui_bind (&Editor::timeaxisview_deleted, this, _1), gui_context());
+
_last_normalization_value = 0;
constructed = true;
@@ -4803,8 +4804,6 @@ Editor::handle_new_route (RouteList& routes)
rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added));
rtv->view()->HeightChanged.connect (sigc::mem_fun (*this, &Editor::streamview_height_changed));
-
- route->DropReferences.connect (*this, boost::bind (&Editor::remove_route, this, rtv), gui_context());
}
_routes->routes_added (new_views);
@@ -4819,56 +4818,62 @@ Editor::handle_new_route (RouteList& routes)
}
void
-Editor::remove_route (TimeAxisView *tv)
+Editor::timeaxisview_deleted (TimeAxisView *tv)
{
- ENSURE_GUI_THREAD (*this, &Editor::remove_route, tv)
-
- TrackViewList::iterator i;
- if ((i = find (track_views.begin(), track_views.end(), tv)) == track_views.end()) {
- /* this track view has already been removed by someone else; e.g. when
- * the session goes away, all TimeAxisViews are removed by the Editor's
- * session_going_away handler.
- */
+ if (_session && _session->deletion_in_progress()) {
+ /* the situation is under control */
return;
}
- boost::shared_ptr<Route> route;
- RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (tv);
- if (rtav) {
- route = rtav->route ();
- }
+ ENSURE_GUI_THREAD (*this, &Editor::timeaxisview_deleted, tv);
- TimeAxisView* next_tv = 0;
_routes->route_removed (tv);
if (tv == entered_track) {
entered_track = 0;
}
-
- i = track_views.erase (i);
- if (track_views.empty()) {
- next_tv = 0;
- } else if (i == track_views.end()) {
- next_tv = track_views.front();
- } else {
- next_tv = (*i);
+ /* remove it from the list of track views */
+
+ TrackViewList::iterator i;
+
+ if ((i = find (track_views.begin(), track_views.end(), tv)) != track_views.end()) {
+ i = track_views.erase (i);
}
- if (current_mixer_strip && current_mixer_strip->route() == route) {
+ /* update whatever the current mixer strip is displaying, if revelant */
- if (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)
- */
+ boost::shared_ptr<Route> route;
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (tv);
- ActionManager::uncheck_toggleaction ("<Actions>/Editor/show-editor-mixer");
- }
- }
+ if (rtav) {
+ route = rtav->route ();
+ }
+
+ if (current_mixer_strip && current_mixer_strip->route() == route) {
+
+ TimeAxisView* next_tv;
+ if (track_views.empty()) {
+ next_tv = 0;
+ } else if (i == track_views.end()) {
+ next_tv = track_views.front();
+ } else {
+ next_tv = (*i);
+ }
+
+
+ if (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)
+ */
+
+ ActionManager::uncheck_toggleaction ("<Actions>/Editor/show-editor-mixer");
+ }
+ }
}
void
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index c045136f61..ca1082af78 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -618,8 +618,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
void handle_new_route (ARDOUR::RouteList&);
- void remove_route (TimeAxisView *);
- bool route_removal;
+ void timeaxisview_deleted (TimeAxisView *);
Gtk::HBox global_hpacker;
Gtk::VBox global_vpacker;
@@ -1803,9 +1802,7 @@ public:
bool show_editor_mixer_when_tracks_arrive;
Gtk::VBox current_mixer_strip_vbox;
void cms_new (boost::shared_ptr<ARDOUR::Route>);
- void cms_deleted ();
void current_mixer_strip_hidden ();
- void current_mixer_strip_removed ();
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index a86f7ee64b..cd9419cffd 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -2662,7 +2662,7 @@ RubberbandSelectDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
}
void
-RubberbandSelectDrag::motion (GdkEvent* event, bool first_move)
+RubberbandSelectDrag::motion (GdkEvent* event, bool)
{
nframes64_t start;
nframes64_t end;
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index 2d6e23fbd5..bac689b48f 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -1088,7 +1088,6 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
row[route_display_columns.tv] = iftav;
route_list_display.get_selection()->select (row);
- iftav->CatchDeletion.connect (*this, boost::bind (&Editor::remove_route, this, (TimeAxisView*)iftav), gui_context());
iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ;
}
@@ -1104,9 +1103,7 @@ Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, T
row[route_display_columns.text] = mta->name();
row[route_display_columns.tv] = mta;
route_list_display.get_selection()->select (row);
-
- mta->CatchDeletion.connect (*this, boost::bind (&Editor::remove_route, this, (TimeAxisView*)mta), gui_context());
- }
+}
/* </CMT Additions file="editor_route_list.cc"> */
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index 311506ecdf..b2cca47e98 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -64,12 +64,6 @@ Editor::editor_list_button_toggled ()
}
void
-Editor::cms_deleted ()
-{
- current_mixer_strip = 0;
-}
-
-void
Editor::show_editor_mixer (bool yn)
{
boost::shared_ptr<ARDOUR::Route> r;
@@ -169,7 +163,7 @@ Editor::create_editor_mixer ()
_session,
false);
current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden));
- current_mixer_strip->CatchDeletion.connect (*this, boost::bind (&Editor::current_mixer_strip_removed, this), gui_context());
+
#ifdef GTKOSX
current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn));
#endif
@@ -297,15 +291,6 @@ Editor::update_current_screen ()
}
void
-Editor::current_mixer_strip_removed ()
-{
- if (current_mixer_strip) {
- /* it is being deleted elsewhere */
- current_mixer_strip = 0;
- }
-}
-
-void
Editor::current_mixer_strip_hidden ()
{
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
diff --git a/gtk2_ardour/imageframe_time_axis.cc b/gtk2_ardour/imageframe_time_axis.cc
index 96939218b1..b680dbda3a 100644
--- a/gtk2_ardour/imageframe_time_axis.cc
+++ b/gtk2_ardour/imageframe_time_axis.cc
@@ -81,6 +81,8 @@ ImageFrameTimeAxis::ImageFrameTimeAxis(const string & track_id, PublicEditor& ed
// set the initial height of this time axis
set_height(hNormal) ;
+
+ TimeAxisView::CatchDeletion.connect (*this, ui_bind (&ImageFrameTimeAxis::remove_time_axis_view, this, _1), gui_context());
}
/**
@@ -322,8 +324,6 @@ ImageFrameTimeAxis::add_marker_time_axis(MarkerTimeAxis* marker_track, void* src
else
{
marker_time_axis_list.push_back(marker_track) ;
- marker_track->CatchDeletion.connect (*this, boost::bind (&ImageFrameTimeAxis::remove_time_axis_view, this, marker_track, (void*)this), gui_context());
-
MarkerTimeAxisAdded(marker_track, src) ; /* EMIT_SIGNAL */
ret = true ;
}
@@ -390,17 +390,20 @@ ImageFrameTimeAxis::remove_named_marker_time_axis(const string & track_id, void*
* @param src the identity of the object that initiated the change
*/
void
-ImageFrameTimeAxis::remove_time_axis_view(MarkerTimeAxis* mta, void* src)
+ImageFrameTimeAxis::remove_time_axis_view (TimeAxisView* tav)
{
- ENSURE_GUI_THREAD (*this, &ImageFrameTimeAxis::remove_time_axis_view, mta, src)
+ MarkerTimeAxisView* mtav = dynamic_cast<MarkerTimeAxisView*> (tav);
+
+ if (!mtav) {
+ return;
+ }
MarkerTimeAxisList::iterator i;
- if((i = find (marker_time_axis_list.begin(), marker_time_axis_list.end(), mta)) != marker_time_axis_list.end())
- {
+
+ if ((i = find (marker_time_axis_list.begin(), marker_time_axis_list.end(), mta)) != marker_time_axis_list.end()) {
// note that we dont delete the object itself, we just remove it from our list
marker_time_axis_list.erase(i) ;
-
- MarkerTimeAxisRemoved(mta->name(), src) ; /* EMIT_SIGNAL */
+ MarkerTimeAxisRemoved (mta->name(), src) ; /* EMIT_SIGNAL */
}
}
diff --git a/gtk2_ardour/imageframe_time_axis.h b/gtk2_ardour/imageframe_time_axis.h
index 6b2576fe96..52c2f73e67 100644
--- a/gtk2_ardour/imageframe_time_axis.h
+++ b/gtk2_ardour/imageframe_time_axis.h
@@ -138,12 +138,12 @@ class ImageFrameTimeAxis : public VisualTimeAxis
MarkerTimeAxis* remove_named_marker_time_axis(const std::string & track_id, void* src) ;
/**
- * Removes tav from the list of MarkerTimaAxis associated with this ImageFrameTimeAxis
+ * Potentially removes a MarkerTimeAxisView from the list of MarkerTimaAxis associated with this ImageFrameTimeAxis
*
* @param tav the TimeAxis to remove
* @param src the identity of the object that initiated the change
*/
- void remove_time_axis_view(MarkerTimeAxis* tav, void* src) ;
+ void remove_time_axis_view (TimeAxisView* av);
//---------------------------------------------------------------------------------------//
diff --git a/gtk2_ardour/imageframe_time_axis_group.cc b/gtk2_ardour/imageframe_time_axis_group.cc
index 5cdbf2d3af..1bff9a1572 100644
--- a/gtk2_ardour/imageframe_time_axis_group.cc
+++ b/gtk2_ardour/imageframe_time_axis_group.cc
@@ -33,7 +33,7 @@
#include "i18n.h"
-using namespace ARDOUR ;
+using namespace ARDOUR;
PBD::Signal1<void,ImageFrameTimeAxisGroup*> ImageFrameTimeAxisGroup::CatchDeletion;
@@ -49,8 +49,10 @@ PBD::Signal1<void,ImageFrameTimeAxisGroup*> ImageFrameTimeAxisGroup::CatchDeleti
ImageFrameTimeAxisGroup::ImageFrameTimeAxisGroup(ImageFrameTimeAxisView& iftav, const string & group_id)
: _view_helper(iftav), _group_id(group_id)
{
- selected_imageframe_item = 0 ;
- is_selected = false ;
+ selected_imageframe_item = 0;
+ is_selected = false;
+
+ ImageFrameView::CatchDeletion.connect (*this, ui_bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, _1), gui_context());
}
/**
@@ -63,20 +65,20 @@ ImageFrameTimeAxisGroup::~ImageFrameTimeAxisGroup()
// Destroy all the ImageFramViews that we have
for(ImageFrameViewList::iterator iter = imageframe_views.begin(); iter != imageframe_views.end(); ++iter)
{
- ImageFrameView* ifv = *iter ;
+ ImageFrameView* ifv = *iter;
- ImageFrameViewList::iterator next = iter ;
- next++ ;
+ ImageFrameViewList::iterator next = iter;
+ next++;
- imageframe_views.erase(iter) ;
+ imageframe_views.erase(iter);
- delete ifv ;
- ifv = 0 ;
+ delete ifv;
+ ifv = 0;
- iter = next ;
+ iter = next;
}
- CatchDeletion ; /* EMIT_SIGNAL */
+ CatchDeletion; /* EMIT_SIGNAL */
}
@@ -94,9 +96,9 @@ ImageFrameTimeAxisGroup::set_group_name(const string & new_name, void* src)
{
if(_group_id != new_name)
{
- std::string temp_name = _group_id ;
- _group_id = new_name ;
- NameChanged(_group_id, temp_name, src) ; /* EMIT_SIGNAL */
+ std::string temp_name = _group_id;
+ _group_id = new_name;
+ NameChanged(_group_id, temp_name, src); /* EMIT_SIGNAL */
}
}
@@ -109,7 +111,7 @@ ImageFrameTimeAxisGroup::set_group_name(const string & new_name, void* src)
std::string
ImageFrameTimeAxisGroup::get_group_name() const
{
- return(_group_id) ;
+ return(_group_id);
}
@@ -127,16 +129,16 @@ ImageFrameTimeAxisGroup::set_item_heights(gdouble h)
/* limit the values to something sane-ish */
if (h < 10.0 || h > 1000.0)
{
- return(-1) ;
+ return(-1);
}
// set the heights of all the imaeg frame views within the group
for(ImageFrameViewList::const_iterator citer = imageframe_views.begin(); citer != imageframe_views.end(); ++citer)
{
- (*citer)->set_height(h) ;
+ (*citer)->set_height(h);
}
- return(0) ;
+ return(0);
}
/**
@@ -150,15 +152,15 @@ ImageFrameTimeAxisGroup::set_item_samples_per_units(gdouble spp)
{
if(spp < 1.0)
{
- return(-1) ;
+ return(-1);
}
for(ImageFrameViewList::const_iterator citer = imageframe_views.begin(); citer != imageframe_views.end(); ++citer)
{
- (*citer)->set_samples_per_unit(spp) ;
+ (*citer)->set_samples_per_unit(spp);
}
- return(0) ;
+ return(0);
}
/**
@@ -169,10 +171,10 @@ ImageFrameTimeAxisGroup::set_item_samples_per_units(gdouble spp)
void
ImageFrameTimeAxisGroup::apply_item_color(Gdk::Color& color)
{
- region_color = color ;
+ region_color = color;
for(ImageFrameViewList::const_iterator citer = imageframe_views.begin(); citer != imageframe_views.end(); citer++)
{
- (*citer)->set_color (region_color) ;
+ (*citer)->set_color (region_color);
}
}
@@ -198,7 +200,7 @@ ImageFrameTimeAxisGroup::apply_item_color(Gdk::Color& color)
ImageFrameView*
ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t start, nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src)
{
- ImageFrameView* ifv = 0 ;
+ ImageFrameView* ifv = 0;
//check that there is not already an imageframe with that id
if(get_named_imageframe_item(frame_id) == 0)
@@ -214,16 +216,13 @@ ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t
rgb_data,
width,
height,
- num_channels) ;
-
- imageframe_views.push_front(ifv) ;
-
- ifv->CatchDeletion.connect (*this, boost::bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, (void*)this), gui_context());
+ num_channels);
- ImageFrameAdded(ifv, src) ; /* EMIT_SIGNAL */
+ imageframe_views.push_front(ifv);
+ ImageFrameAdded(ifv, src); /* EMIT_SIGNAL */
}
- return(ifv) ;
+ return(ifv);
}
@@ -236,17 +235,17 @@ ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t
ImageFrameView*
ImageFrameTimeAxisGroup::get_named_imageframe_item(const string & frame_id)
{
- ImageFrameView* ifv = 0 ;
+ ImageFrameView* ifv = 0;
for (ImageFrameViewList::const_iterator i = imageframe_views.begin(); i != imageframe_views.end(); ++i)
{
if (((ImageFrameView*)*i)->get_item_name() == frame_id)
{
- ifv = ((ImageFrameView*)*i) ;
- break ;
+ ifv = ((ImageFrameView*)*i);
+ break;
}
}
- return(ifv) ;
+ return(ifv);
}
/**
@@ -260,28 +259,28 @@ ImageFrameTimeAxisGroup::get_named_imageframe_item(const string & frame_id)
void
ImageFrameTimeAxisGroup::remove_selected_imageframe_item(void* src)
{
- std::string frame_id ;
+ std::string frame_id;
if(selected_imageframe_item)
{
- ImageFrameViewList::iterator i ;
+ ImageFrameViewList::iterator i;
if((i = find(imageframe_views.begin(), imageframe_views.end(), selected_imageframe_item)) != imageframe_views.end())
{
- imageframe_views.erase(i) ;
- frame_id = selected_imageframe_item->get_item_name() ;
+ imageframe_views.erase(i);
+ frame_id = selected_imageframe_item->get_item_name();
// note that we delete the item here
- delete(selected_imageframe_item) ;
- selected_imageframe_item = 0 ;
+ delete(selected_imageframe_item);
+ selected_imageframe_item = 0;
- std::string track_id = _view_helper.trackview().name() ;
- ImageFrameRemoved(track_id, _group_id, frame_id, src) ; /* EMIT_SIGNAL */
+ std::string track_id = _view_helper.trackview().name();
+ ImageFrameRemoved(track_id, _group_id, frame_id, src); /* EMIT_SIGNAL */
}
}
else
{
- //cerr << "No Selected ImageFrame" << endl ;
+ //cerr << "No Selected ImageFrame" << endl;
}
}
@@ -296,31 +295,31 @@ ImageFrameTimeAxisGroup::remove_selected_imageframe_item(void* src)
ImageFrameView*
ImageFrameTimeAxisGroup::remove_named_imageframe_item(const string & frame_id, void* src)
{
- ImageFrameView* removed = 0 ;
+ ImageFrameView* removed = 0;
for(ImageFrameViewList::iterator iter = imageframe_views.begin(); iter != imageframe_views.end(); ++iter)
{
- ImageFrameView* tempItem = *iter ;
+ ImageFrameView* tempItem = *iter;
if(tempItem->get_item_name() == frame_id)
{
- removed = tempItem ;
- imageframe_views.erase(iter) ;
+ removed = tempItem;
+ imageframe_views.erase(iter);
if (removed == selected_imageframe_item)
{
- selected_imageframe_item = 0 ;
+ selected_imageframe_item = 0;
}
- std::string track_id = _view_helper.trackview().name() ;
- ImageFrameRemoved(track_id, _group_id, frame_id, src) ; /* EMIT_SIGNAL */
+ std::string track_id = _view_helper.trackview().name();
+ ImageFrameRemoved(track_id, _group_id, frame_id, src); /* EMIT_SIGNAL */
// break from the for loop
- break ;
+ break;
}
- iter++ ;
+ iter++;
}
- return(removed) ;
+ return(removed);
}
/**
@@ -330,18 +329,18 @@ ImageFrameTimeAxisGroup::remove_named_imageframe_item(const string & frame_id, v
* @param ifv the ImageFrameView to remove
*/
void
-ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src)
+ImageFrameTimeAxisGroup::remove_imageframe_item (ImageFrameView* ifv)
{
ENSURE_GUI_THREAD (*this, &ImageFrameTimeAxisGroup::remove_imageframe_item, ifv, src)
ImageFrameViewList::iterator i;
- if((i = find (imageframe_views.begin(), imageframe_views.end(), ifv)) != imageframe_views.end())
- {
- imageframe_views.erase(i) ;
- std::string frame_id = ifv->get_item_name() ;
- std::string track_id = _view_helper.trackview().name() ;
- ImageFrameRemoved(track_id, _group_id, frame_id, src) ; /* EMIT_SIGNAL */
+ if((i = find (imageframe_views.begin(), imageframe_views.end(), ifv)) != imageframe_views.end()) {
+ imageframe_views.erase(i);
+
+ std::string frame_id = ifv->get_item_name();
+ std::string track_id = _view_helper.trackview().name();
+ ImageFrameRemoved(track_id, _group_id, frame_id, src); /* EMIT_SIGNAL */
}
}
@@ -358,14 +357,14 @@ ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src)
//{
// if(selected_imageframe_item)
// {
-// selected_imageframe_item->set_selected(false, this) ;
+// selected_imageframe_item->set_selected(false, this);
// }
//
-// selected_imageframe_item = ifv ;
+// selected_imageframe_item = ifv;
//
// if(!ifv->get_selected())
// {
-// selected_imageframe_item->set_selected(true, this) ;
+// selected_imageframe_item->set_selected(true, this);
// }
//}
@@ -378,7 +377,7 @@ ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src)
//void
//ImageFrameTimeAxisGroup::set_selected_imageframe_item(std::string frame_id)
//{
-// selected_imageframe_item = get_named_imageframe_item(frame_id) ;
+// selected_imageframe_item = get_named_imageframe_item(frame_id);
//}
@@ -390,7 +389,7 @@ ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src)
// ImageFrameView*
// ImageFrameTimeAxisGroup::get_selected_imageframe_item()
// {
- // return(selected_imageframe_item) ;
+ // return(selected_imageframe_item);
// }
@@ -403,7 +402,7 @@ ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src)
bool
ImageFrameTimeAxisGroup::get_selected() const
{
- return(is_selected) ;
+ return(is_selected);
}
@@ -415,7 +414,7 @@ ImageFrameTimeAxisGroup::get_selected() const
void
ImageFrameTimeAxisGroup::set_selected(bool yn)
{
- is_selected = yn ;
+ is_selected = yn;
}
@@ -454,9 +453,9 @@ ImageFrameTimeAxisGroup::remove_this_group(void* src)
gint
ImageFrameTimeAxisGroup::idle_remove_this_group(ImageFrameTimeAxisGroup* group, void* src)
{
- delete group ;
- group = 0 ;
- group->GroupRemoved(group->get_group_name(), src) ; /* EMIT_SIGNAL */
- return(false) ;
+ delete group;
+ group = 0;
+ group->GroupRemoved(group->get_group_name(), src); /* EMIT_SIGNAL */
+ return(false);
}
diff --git a/gtk2_ardour/imageframe_time_axis_view.cc b/gtk2_ardour/imageframe_time_axis_view.cc
index a1c211995b..b78ce58b08 100644
--- a/gtk2_ardour/imageframe_time_axis_view.cc
+++ b/gtk2_ardour/imageframe_time_axis_view.cc
@@ -66,6 +66,8 @@ ImageFrameTimeAxisView::ImageFrameTimeAxisView (ImageFrameTimeAxis& tv)
selected_imageframe_group = 0 ;
selected_imageframe_view = 0 ;
+
+ ImageFrameTimeAxisGroup::CatchDeletion.connect (*this, ui_bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, _1), gui_context());
}
/**
@@ -211,11 +213,7 @@ ImageFrameTimeAxisView::add_imageframe_group(std::string group_id, void* src)
else
{
iftag = new ImageFrameTimeAxisGroup(*this, group_id) ;
-
imageframe_groups.push_front(iftag) ;
-
- iftag->CatchDeletion.connect (*this, boost::bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, iftag, (void*)this), gui_context());
-
ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */
}
diff --git a/gtk2_ardour/imageframe_view.cc b/gtk2_ardour/imageframe_view.cc
index 6feca44a85..366c56e5e5 100644
--- a/gtk2_ardour/imageframe_view.cc
+++ b/gtk2_ardour/imageframe_view.cc
@@ -34,7 +34,7 @@
#include "canvas_impl.h"
#include "gui_thread.h"
-using namespace ARDOUR ;
+using namespace ARDOUR;
using namespace Gtk;
sigc::signal<void,ImageFrameView*> ImageFrameView::GoingAway;
@@ -73,24 +73,24 @@ ImageFrameView::ImageFrameView(const string & item_id,
TimeAxisViewItem::ShowHandles))
{
- the_parent_group = item_group ;
- set_name_text(item_id) ;
+ the_parent_group = item_group;
+ set_name_text(item_id);
- image_data_width = width ;
- image_data_height = height ;
- image_data_num_channels = num_channels ;
+ image_data_width = width;
+ image_data_height = height;
+ image_data_num_channels = num_channels;
//This should be art_free'd once the ArtPixBuf is destroyed - this should happen when we destroy the imageframe canvas item
- unsigned char* the_rgb_data = (unsigned char*) art_alloc(width*height*num_channels) ;
- memcpy(the_rgb_data, rgb_data, (width*height*num_channels)) ;
+ unsigned char* the_rgb_data = (unsigned char*) art_alloc(width*height*num_channels);
+ memcpy(the_rgb_data, rgb_data, (width*height*num_channels));
- ArtPixBuf* pbuf ;
+ ArtPixBuf* pbuf;
pbuf = art_pixbuf_new_rgba(the_rgb_data, width, height, (num_channels * width));
- imageframe = 0 ;
+ imageframe = 0;
//calculate our image width based on the track height
- double im_ratio = (double)width/(double)height ;
- double im_width = ((double)(trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE) * im_ratio) ;
+ double im_ratio = (double)width/(double)height;
+ double im_width = ((double)(trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE) * im_ratio);
imageframe = new ImageFrame (*group, pbuf, 1.0, 1.0, ANCHOR_NW, im_width, (trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE));
@@ -101,8 +101,10 @@ ImageFrameView::ImageFrameView(const string & item_id,
frame_handle_start->raise_to_top();
frame_handle_end->raise_to_top();
- set_position(start, this) ;
- set_duration(duration, this) ;
+ set_position(start, this);
+ set_duration(duration, this);
+
+ MarkerView::CatchDeletion.connect (*this, ui_bind (&ImageFrameView::remove_marker_view_item, this, _1), gui_context());
}
/**
@@ -117,29 +119,29 @@ ImageFrameView::~ImageFrameView()
for(MarkerViewList::iterator iter = marker_view_list.begin(); iter != marker_view_list.end(); ++iter)
{
- MarkerView* mv = (*iter) ;
+ MarkerView* mv = (*iter);
- MarkerViewList::iterator next = iter ;
- next++ ;
+ MarkerViewList::iterator next = iter;
+ next++;
// remove the item from our marker list
// the current iterator becomes invalid after this point, so we cannot call next upon it
// luckily enough, we already have next
- marker_view_list.erase(iter) ;
+ marker_view_list.erase(iter);
// remove the item from the marker time axis
- MarkerTimeAxisView* mtav = dynamic_cast<MarkerTimeAxis*>(&mv->get_time_axis_view())->get_view() ;
+ MarkerTimeAxisView* mtav = dynamic_cast<MarkerTimeAxis*>(&mv->get_time_axis_view())->get_view();
if(mtav)
{
- mtav->remove_marker_view(mv, this) ;
+ mtav->remove_marker_view(mv, this);
}
- mv->set_marked_item(0) ;
- delete mv ;
- mv = 0 ;
+ mv->set_marked_item(0);
+ delete mv;
+ mv = 0;
// set our iterator to next, as we have invalided the current iterator with the call to erase
- iter = next ;
+ iter = next;
}
// if we are the currently selected item withi the parent track, we need to se-select
@@ -147,12 +149,12 @@ ImageFrameView::~ImageFrameView()
{
if(the_parent_group->get_view().get_selected_imageframe_view() == this)
{
- the_parent_group->get_view().clear_selected_imageframe_item(false) ;
+ the_parent_group->get_view().clear_selected_imageframe_item(false);
}
}
delete imageframe;
- imageframe = 0 ;
+ imageframe = 0;
}
@@ -169,10 +171,10 @@ ImageFrameView::~ImageFrameView()
bool
ImageFrameView::set_position(nframes64_t pos, void* src, double* delta)
{
- nframes64_t old_pos = frame_position ;
+ nframes64_t old_pos = frame_position;
// do the standard stuff
- bool ret = TimeAxisViewItem::set_position(pos, src, delta) ;
+ bool ret = TimeAxisViewItem::set_position(pos, src, delta);
// everything went ok with the standard stuff?
if (ret) {
@@ -180,14 +182,14 @@ ImageFrameView::set_position(nframes64_t pos, void* src, double* delta)
for (MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i)
{
// calculate the offset of the marker
- MarkerView* mv = (MarkerView*)*i ;
- nframes64_t marker_old_pos = mv->get_position() ;
+ MarkerView* mv = (MarkerView*)*i;
+ nframes64_t marker_old_pos = mv->get_position();
- mv->set_position(pos + (marker_old_pos - old_pos), src) ;
+ mv->set_position(pos + (marker_old_pos - old_pos), src);
}
}
- return(ret) ;
+ return(ret);
}
/**
@@ -201,7 +203,7 @@ bool
ImageFrameView::set_duration(nframes64_t dur, void* src)
{
/* do the standard stuff */
- bool ret = TimeAxisViewItem::set_duration(dur, src) ;
+ bool ret = TimeAxisViewItem::set_duration(dur, src);
// eveything went ok with the standard stuff?
if(ret)
@@ -210,7 +212,7 @@ ImageFrameView::set_duration(nframes64_t dur, void* src)
imageframe->property_drawwidth() = trackview.editor.frame_to_pixel(get_duration());
}
- return(ret) ;
+ return(ret);
}
//---------------------------------------------------------------------------------------//
@@ -225,7 +227,7 @@ ImageFrameView::set_duration(nframes64_t dur, void* src)
void
ImageFrameView::set_time_axis_group(ImageFrameTimeAxisGroup* group)
{
- the_parent_group = group ;
+ the_parent_group = group;
}
/**
@@ -236,7 +238,7 @@ ImageFrameView::set_time_axis_group(ImageFrameTimeAxisGroup* group)
ImageFrameTimeAxisGroup*
ImageFrameView::get_time_axis_group()
{
- return(the_parent_group) ;
+ return(the_parent_group);
}
@@ -253,7 +255,7 @@ ImageFrameView::set_height (gdouble h)
{
// set the image size
// @todo might have to re-get the image data, for a large height...hmmm.
- double im_ratio = (double)image_data_width/(double)image_data_height ;
+ double im_ratio = (double)image_data_width/(double)image_data_height;
imageframe->property_width() = (h - TimeAxisViewItem::NAME_Y_OFFSET) * im_ratio;
imageframe->property_height() = h - TimeAxisViewItem::NAME_Y_OFFSET;
@@ -285,11 +287,8 @@ ImageFrameView::set_height (gdouble h)
void
ImageFrameView::add_marker_view_item(MarkerView* item, void* src)
{
- marker_view_list.push_back(item) ;
-
- item->CatchDeletion.connect (*this, boost::bind (&ImageFrameView::remove_marker_view_item, this, (void*)this), gui_context());
-
- MarkerViewAdded(item, src) ; /* EMIT_SIGNAL */
+ marker_view_list.push_back(item);
+ MarkerViewAdded(item, src); /* EMIT_SIGNAL */
}
/**
@@ -303,28 +302,28 @@ ImageFrameView::add_marker_view_item(MarkerView* item, void* src)
MarkerView*
ImageFrameView::remove_named_marker_view_item(const string & markerId, void* src)
{
- MarkerView* mv = 0 ;
- MarkerViewList::iterator i = marker_view_list.begin() ;
+ MarkerView* mv = 0;
+ MarkerViewList::iterator i = marker_view_list.begin();
while(i != marker_view_list.end())
{
if (((MarkerView*)*i)->get_item_name() == markerId)
{
- mv = (*i) ;
+ mv = (*i);
- marker_view_list.erase(i) ;
+ marker_view_list.erase(i);
- MarkerViewRemoved(mv,src) ; /* EMIT_SIGNAL */
+ MarkerViewRemoved(mv,src); /* EMIT_SIGNAL */
// iterator is now invalid, but since we should only ever have
// one item with the specified name, things are ok, and we can
// break from the while loop
- break ;
+ break;
}
- i++ ;
+ i++;
}
- return(mv) ;
+ return(mv);
}
/**
@@ -335,15 +334,15 @@ ImageFrameView::remove_named_marker_view_item(const string & markerId, void* src
* @param src the identity of the object that initiated the change
*/
void
-ImageFrameView::remove_marker_view_item(MarkerView* mv, void* src)
+ImageFrameView::remove_marker_view_item (MarkerView* mv)
{
ENSURE_GUI_THREAD (*this, &ImageFrameView::remove_marker_view_item, mv, src)
- MarkerViewList::iterator i ;
+ MarkerViewList::iterator i;
- if((i = find (marker_view_list.begin(), marker_view_list.end(), mv)) != marker_view_list.end()) {
- marker_view_list.erase(i) ;
- MarkerViewRemoved (mv, src) ; /* EMIT_SIGNAL */
+ if ((i = find (marker_view_list.begin(), marker_view_list.end(), mv)) != marker_view_list.end()) {
+ marker_view_list.erase(i);
+ MarkerViewRemoved (mv, src); /* EMIT_SIGNAL */
}
}
@@ -355,18 +354,18 @@ ImageFrameView::remove_marker_view_item(MarkerView* mv, void* src)
bool
ImageFrameView::has_marker_view_item(const string & mname)
{
- bool result = false ;
+ bool result = false;
for (MarkerViewList::const_iterator ci = marker_view_list.begin(); ci != marker_view_list.end(); ++ci)
{
if (((MarkerView*)*ci)->get_item_name() == mname)
{
- result = true ;
+ result = true;
// found the item, so we can break the for loop
- break ;
+ break;
}
}
- return(result) ;
+ return(result);
}
diff --git a/gtk2_ardour/marker_time_axis_view.cc b/gtk2_ardour/marker_time_axis_view.cc
index 3da442e89d..c4fa4bc4c8 100644
--- a/gtk2_ardour/marker_time_axis_view.cc
+++ b/gtk2_ardour/marker_time_axis_view.cc
@@ -67,6 +67,7 @@ MarkerTimeAxisView::MarkerTimeAxisView(MarkerTimeAxis& tv)
_samples_per_unit = _trackview.editor.get_current_zoom() ;
_trackview.editor.ZoomChanged.connect (sigc::mem_fun(*this, &MarkerTimeAxisView::reset_samples_per_unit));
+ MarkerView::CatchDeletion.connect (*this, ui_bind (&MarkerTimeAxisView::remove_marker_view, this, _1), gui_context());
}
/**
@@ -211,8 +212,6 @@ MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type,
ifv->add_marker_view_item(mv, src) ;
marker_view_list.push_front(mv) ;
- mv->CatchDeletion.connect (*this, boost::bind (&MarkerTimeAxisView::remove_marker_view, this, _1), gui_context());
-
MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */
return(mv) ;
@@ -311,7 +310,7 @@ MarkerTimeAxisView::remove_named_marker_view(std::string item_id, void* src)
* @param src the identity of the object that initiated the change
*/
void
-MarkerTimeAxisView::remove_marker_view(MarkerView* mv)
+MarkerTimeAxisView::remove_marker_view (MarkerView* mv)
{
ENSURE_GUI_THREAD (*this, &MarkerTimeAxisView::remove_marker_view, mv, src)
@@ -326,7 +325,6 @@ MarkerTimeAxisView::remove_marker_view(MarkerView* mv)
}
}
-
/**
* Sets the duration of the selected MarkerView to the specified number of seconds
*
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index d85ca3cad6..24f167a6c7 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1071,7 +1071,7 @@ MidiRegionView::add_ghost (TimeAxisView& tv)
}
}
- ghost->CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
+ GhostRegion::CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
return ghost;
}
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 38d60233de..3531108f4a 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -72,6 +72,7 @@ using namespace std;
sigc::signal<void,boost::shared_ptr<Route> > MixerStrip::SwitchIO;
int MixerStrip::scrollbar_height = 0;
+PBD::Signal1<void,MixerStrip*> MixerStrip::CatchDeletion;
MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
: AxisView(sess)
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index 0e432eed3e..acb69534b3 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -102,6 +102,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
sigc::signal<void> WidthChanged;
static sigc::signal<void,boost::shared_ptr<ARDOUR::Route> > SwitchIO;
+ static PBD::Signal1<void,MixerStrip*> CatchDeletion;
protected:
friend class Mixer_UI;
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index dc3b95a68f..b750f8a470 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -250,6 +250,8 @@ Mixer_UI::Mixer_UI ()
group_display.show();
auto_rebinding = FALSE;
+
+ MixerStrip::CatchDeletion.connect (*this, ui_bind (&Mixer_UI::remove_strip, this, _1), gui_context());
_plugin_selector = new PluginSelector (PluginManager::the_manager ());
}
@@ -334,7 +336,6 @@ Mixer_UI::add_strip (RouteList& routes)
}
route->NameChanged.connect (*this, boost::bind (&Mixer_UI::strip_name_changed, this, strip), gui_context());
- route->DropReferences.connect (*this, boost::bind (&Mixer_UI::remove_strip, this, strip), gui_context());
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
@@ -350,7 +351,14 @@ Mixer_UI::add_strip (RouteList& routes)
void
Mixer_UI::remove_strip (MixerStrip* strip)
{
- ENSURE_GUI_THREAD (*this, &Mixer_UI::remove_strip, strip)
+ if (_session && _session->deletion_in_progress()) {
+ /* its all being taken care of */
+ return;
+ }
+
+ ENSURE_GUI_THREAD (*this, &Mixer_UI::remove_strip, strip);
+
+ cerr << "Mixer UI removing strip for " << strip << endl;
TreeModel::Children rows = track_model->children();
TreeModel::Children::iterator ri;
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index b6f0cda8f1..2d7f5c8797 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -80,6 +80,7 @@ RegionView::RegionView (ArdourCanvas::Group* parent,
, wait_for_data(false)
, _time_converter(r->session().tempo_map(), r->position())
{
+ GhostRegion::CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
}
RegionView::RegionView (const RegionView& other)
@@ -94,6 +95,8 @@ RegionView::RegionView (const RegionView& other)
valid = false;
_pixel_width = other._pixel_width;
_height = other._height;
+
+ GhostRegion::CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
}
RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other_region)
@@ -112,6 +115,8 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
valid = false;
_pixel_width = other._pixel_width;
_height = other._height;
+
+ GhostRegion::CatchDeletion.connect (*this, ui_bind (&RegionView::remove_ghost, this, _1), gui_context());
}
RegionView::RegionView (ArdourCanvas::Group* parent,
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index f78885deb4..e3ee563ac7 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -79,6 +79,9 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session* sess)
RouteUI::~RouteUI()
{
+ _route.reset (); /* drop reference to route, so that it can be cleaned up */
+ route_connections.drop_connections ();
+
delete solo_menu;
delete mute_menu;
delete sends_menu;
@@ -165,9 +168,6 @@ RouteUI::self_delete ()
{
/* This may be called from a non-GUI thread. Keep it safe */
- cerr << "\n\nExpect to see route " << _route->name() << " be deleted\n";
- _route.reset (); /* drop reference to route, so that it can be cleaned up */
- route_connections.drop_connections ();
delete_when_idle (this);
}
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index b2cb88a008..065100a2d8 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -46,6 +46,22 @@ struct AudioRangeComparator {
}
};
+Selection::Selection (const PublicEditor* e)
+ : tracks (e)
+ , editor (e)
+ , next_time_id (0)
+{
+ clear ();
+
+ /* we have disambiguate which remove() for the compiler */
+
+ void (Selection::*track_remove)(TimeAxisView*) = &Selection::remove;
+ TimeAxisView::CatchDeletion.connect (*this, ui_bind (track_remove, this, _1), gui_context());
+
+ void (Selection::*marker_remove)(Marker*) = &Selection::remove;
+ Marker::CatchDeletion.connect (*this, ui_bind (marker_remove, this, _1), gui_context());
+}
+
#if 0
Selection&
Selection::operator= (const Selection& other)
@@ -209,8 +225,6 @@ Selection::toggle (TimeAxisView* track)
TrackSelection::iterator i;
if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) {
- void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
- track->CatchDeletion.connect (*this, boost::bind (pmf, this, track), gui_context());
tracks.push_back (track);
} else {
tracks.erase (i);
@@ -337,11 +351,6 @@ Selection::add (const TrackViewList& track_list)
{
TrackViewList added = tracks.add (track_list);
- for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) {
- void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
- (*i)->CatchDeletion.connect (*this, boost::bind (pmf, this, (*i)), gui_context());
- }
-
if (!added.empty()) {
TracksChanged ();
}
@@ -945,13 +954,6 @@ void
Selection::add (Marker* m)
{
if (find (markers.begin(), markers.end(), m) == markers.end()) {
-
- /* disambiguate which remove() for the compiler */
-
- void (Selection::*pmf)(Marker*) = &Selection::remove;
-
- m->CatchDeletion.connect (*this, boost::bind (pmf, this, _1), gui_context());
-
markers.push_back (m);
MarkersChanged();
}
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index d838720d36..3a6e7ff3ae 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -85,9 +85,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
MidiRegionSelection midi_regions;
MidiNoteSelection midi_notes;
- Selection (PublicEditor const * e) : tracks (e), editor (e), next_time_id (0) {
- clear();
- }
+ Selection (PublicEditor const * e);
// Selection& operator= (const Selection& other);
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 2c241ee283..4809d9fedd 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -74,6 +74,7 @@ uint32_t TimeAxisView::hSmaller = 0;
uint32_t TimeAxisView::hSmall = 0;
bool TimeAxisView::need_size_info = true;
int const TimeAxisView::_max_order = 512;
+PBD::Signal1<void,TimeAxisView*> TimeAxisView::CatchDeletion;
TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisView* rent, Canvas& /*canvas*/)
: AxisView (sess),
@@ -178,6 +179,8 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
controls_hbox.show ();
ColorsChanged.connect (sigc::mem_fun (*this, &TimeAxisView::color_handler));
+
+ GhostRegion::CatchDeletion.connect (*this, ui_bind (&TimeAxisView::erase_ghost, this, _1), gui_context());
}
TimeAxisView::~TimeAxisView()
@@ -925,24 +928,23 @@ TimeAxisView::add_ghost (RegionView* rv)
if(gr) {
ghosts.push_back(gr);
- gr->CatchDeletion.connect (*this, ui_bind (&TimeAxisView::erase_ghost, this, _1), gui_context());
}
}
void
-TimeAxisView::remove_ghost (RegionView* rv) {
+TimeAxisView::remove_ghost (RegionView* rv)
+{
rv->remove_ghost_in (*this);
}
void
-TimeAxisView::erase_ghost (GhostRegion* gr) {
- if(in_destructor) {
+TimeAxisView::erase_ghost (GhostRegion* gr)
+{
+ if (in_destructor) {
return;
}
-
- list<GhostRegion*>::iterator i;
-
- for (i = ghosts.begin(); i != ghosts.end(); ++i) {
+
+ for (list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
if ((*i) == gr) {
ghosts.erase (i);
break;
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 3ad033417b..d2c87426a9 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -96,6 +96,8 @@ class TimeAxisView : public virtual AxisView, public PBD::Stateful
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
+ static PBD::Signal1<void,TimeAxisView*> CatchDeletion;
+
/** @return index of this TimeAxisView within its parent */
int order () const { return _order; }