mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 07:14:56 +01:00
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
This commit is contained in:
parent
f53cbaede8
commit
b6f4cdaea2
28 changed files with 283 additions and 263 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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,26 +4818,15 @@ 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);
|
||||
|
||||
|
|
@ -4846,7 +4834,26 @@ Editor::remove_route (TimeAxisView *tv)
|
|||
entered_track = 0;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
||||
/* update whatever the current mixer strip is displaying, if revelant */
|
||||
|
||||
boost::shared_ptr<Route> route;
|
||||
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (tv);
|
||||
|
||||
if (rtav) {
|
||||
route = rtav->route ();
|
||||
}
|
||||
|
||||
if (current_mixer_strip && current_mixer_strip->route() == route) {
|
||||
|
||||
TimeAxisView* next_tv;
|
||||
|
||||
if (track_views.empty()) {
|
||||
next_tv = 0;
|
||||
|
|
@ -4856,7 +4863,6 @@ Editor::remove_route (TimeAxisView *tv)
|
|||
next_tv = (*i);
|
||||
}
|
||||
|
||||
if (current_mixer_strip && current_mixer_strip->route() == route) {
|
||||
|
||||
if (next_tv) {
|
||||
set_selected_mixer_strip (*next_tv);
|
||||
|
|
@ -4868,7 +4874,6 @@ Editor::remove_route (TimeAxisView *tv)
|
|||
ActionManager::uncheck_toggleaction ("<Actions>/Editor/show-editor-mixer");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"> */
|
||||
|
|
|
|||
|
|
@ -63,12 +63,6 @@ Editor::editor_list_button_toggled ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::cms_deleted ()
|
||||
{
|
||||
current_mixer_strip = 0;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::show_editor_mixer (bool yn)
|
||||
{
|
||||
|
|
@ -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
|
||||
|
|
@ -296,15 +290,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 ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------------------//
|
||||
|
|
|
|||
|
|
@ -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) ;
|
||||
num_channels);
|
||||
|
||||
imageframe_views.push_front(ifv) ;
|
||||
|
||||
ifv->CatchDeletion.connect (*this, boost::bind (&ImageFrameTimeAxisGroup::remove_imageframe_item, this, (void*)this), gui_context());
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -251,6 +251,8 @@ Mixer_UI::Mixer_UI ()
|
|||
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ Butler::Butler(Session& s)
|
|||
|
||||
Butler::~Butler()
|
||||
{
|
||||
terminate_thread ();
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -362,9 +362,7 @@ Session::destroy ()
|
|||
|
||||
Stateful::loading_state_version = 0;
|
||||
|
||||
_butler->terminate_thread ();
|
||||
delete _butler;
|
||||
|
||||
delete midi_control_ui;
|
||||
|
||||
if (click_data != default_click) {
|
||||
|
|
@ -425,8 +423,9 @@ Session::destroy ()
|
|||
/* writer goes out of scope and updates master */
|
||||
}
|
||||
routes.flush ();
|
||||
extern void boost_debug_count_ptrs ();
|
||||
boost_debug_count_ptrs ();
|
||||
|
||||
boost::shared_ptr<RouteList> r = routes.reader ();
|
||||
cerr << "\n\n\n AFTER ROUTE CLEARING, there are " << r->size() << " routes in RCU\n";
|
||||
|
||||
DEBUG_TRACE (DEBUG::Destruction, "delete diskstreams\n");
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1104,6 +1104,7 @@ Session::set_state (const XMLNode& node, int version)
|
|||
XMLNode* child;
|
||||
const XMLProperty* prop;
|
||||
int ret = -1;
|
||||
extern void boost_debug_shared_ptr_show_live_debugging (bool);
|
||||
|
||||
_state_of_the_state = StateOfTheState (_state_of_the_state|CannotSave);
|
||||
|
||||
|
|
|
|||
|
|
@ -136,13 +136,23 @@ is_interesting_object (void const* ptr)
|
|||
|
||||
/* ------------------------------- */
|
||||
|
||||
static bool debug_out = false;
|
||||
|
||||
void
|
||||
boost_debug_shared_ptr_show_live_debugging (bool yn)
|
||||
{
|
||||
debug_out = yn;
|
||||
}
|
||||
|
||||
void
|
||||
boost_debug_shared_ptr_mark_interesting (void* ptr, const char* type)
|
||||
{
|
||||
Glib::Mutex::Lock guard (the_lock);
|
||||
pair<void*,const char*> newpair (ptr, type);
|
||||
interesting_pointers.insert (newpair);
|
||||
// cerr << "Interesting object @ " << ptr << " of type " << type << endl;
|
||||
if (debug_out) {
|
||||
cerr << "Interesting object @ " << ptr << " of type " << type << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -155,18 +165,23 @@ boost_debug_shared_ptr_operator_equals (void const *sp, void const *old_obj, int
|
|||
Glib::Mutex::Lock guard (the_lock);
|
||||
|
||||
if (is_interesting_object (old_obj) || is_interesting_object (obj)) {
|
||||
// cerr << "ASSIGN SWAPS " << old_obj << " & " << obj << endl;
|
||||
if (debug_out) {
|
||||
cerr << "ASSIGN SWAPS " << old_obj << " & " << obj << endl;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_interesting_object (old_obj)) {
|
||||
// cerr << "\tlost old sp @ " << sp << " for " << old_obj << " UC = " << old_use_count << " now for " << obj << " UC = " << new_use_count
|
||||
// << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
|
||||
if (debug_out) {
|
||||
cerr << "\tlost old sp @ " << sp << " for " << old_obj << " UC = " << old_use_count << " now for " << obj << " UC = " << new_use_count
|
||||
<< " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
}
|
||||
PointerMap::iterator x = sptrs.find (sp);
|
||||
|
||||
if (x != sptrs.end()) {
|
||||
sptrs.erase (x);
|
||||
// cerr << "\tRemoved (by assigment) sp for " << old_obj << " @ " << sp << " UC = " << old_use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
if (debug_out) {
|
||||
cerr << "\tRemoved (by assigment) sp for " << old_obj << " @ " << sp << " UC = " << old_use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -179,10 +194,12 @@ boost_debug_shared_ptr_operator_equals (void const *sp, void const *old_obj, int
|
|||
|
||||
sptrs.insert (newpair);
|
||||
|
||||
// cerr << "assignment created sp for " << obj << " @ " << sp << " used to point to " << old_obj << " UC = " << old_use_count
|
||||
// << " UC = " << new_use_count
|
||||
// << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
|
||||
if (debug_out) {
|
||||
cerr << "assignment created sp for " << obj << " @ " << sp << " used to point to " << old_obj << " UC = " << old_use_count
|
||||
<< " UC = " << new_use_count
|
||||
<< " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
cerr << *newpair.second << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -190,7 +207,9 @@ void
|
|||
boost_debug_shared_ptr_reset (void const *sp, void const *obj, int use_count)
|
||||
{
|
||||
if (is_interesting_object (obj)) {
|
||||
// cerr << "reset sp to object @ " << obj << " @ " << sp << " UC was " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
if (debug_out) {
|
||||
cerr << "reset sp to object @ " << obj << " @ " << sp << " UC was " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -202,7 +221,9 @@ boost_debug_shared_ptr_destructor (void const *sp, void const *obj, int use_coun
|
|||
|
||||
if (x != sptrs.end()) {
|
||||
sptrs.erase (x);
|
||||
// cerr << "Removed sp for " << obj << " @ " << sp << " UC = " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
if (debug_out) {
|
||||
cerr << "Removed sp for " << obj << " @ " << sp << " UC = " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -217,7 +238,10 @@ boost_debug_shared_ptr_constructor (void const *sp, void const *obj, int use_cou
|
|||
newpair.second = new SPDebug (new Backtrace());
|
||||
|
||||
sptrs.insert (newpair);
|
||||
// cerr << "Stored constructor for " << obj << " @ " << sp << " UC = " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
if (debug_out) {
|
||||
cerr << "Stored constructor for " << obj << " @ " << sp << " UC = " << use_count << " (total sp's = " << sptrs.size() << ')' << endl;
|
||||
cerr << *newpair.second << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue