X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fimageframe_time_axis_group.cc;h=1bff9a15729b647ee23e3b571f7a4d56543dc72c;hb=5b520324ceab2559723b4ef5127301fa61ff4846;hp=4c860f2a36576d42d9733baa6e6d483bf9198b15;hpb=d38e2213d79b1c8952c776a3b60f7709457edc0c;p=ardour.git diff --git a/gtk2_ardour/imageframe_time_axis_group.cc b/gtk2_ardour/imageframe_time_axis_group.cc index 4c860f2a36..1bff9a1572 100644 --- a/gtk2_ardour/imageframe_time_axis_group.cc +++ b/gtk2_ardour/imageframe_time_axis_group.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2003 Paul Davis + Copyright (C) 2003 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -34,22 +33,26 @@ #include "i18n.h" -using namespace ARDOUR ; +using namespace ARDOUR; + +PBD::Signal1 ImageFrameTimeAxisGroup::CatchDeletion; //---------------------------------------------------------------------------------------// // Constructor / Desctructor - + /** * Constructs a new ImageFrameTimeAxisGroup. * * @param iftav the parent ImageFrameTimeAxis of this view helper * @param group_id the unique name/id of this group */ -ImageFrameTimeAxisGroup::ImageFrameTimeAxisGroup(ImageFrameTimeAxisView& iftav, std::string group_id) +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()); } /** @@ -62,26 +65,26 @@ ImageFrameTimeAxisGroup::~ImageFrameTimeAxisGroup() // Destroy all the ImageFramViews that we have for(ImageFrameViewList::iterator iter = imageframe_views.begin(); iter != imageframe_views.end(); ++iter) { - ImageFrameView* ifv = *iter ; - - ImageFrameViewList::iterator next = iter ; - next++ ; - - imageframe_views.erase(iter) ; - - delete ifv ; - ifv = 0 ; - - iter = next ; + ImageFrameView* ifv = *iter; + + ImageFrameViewList::iterator next = iter; + next++; + + imageframe_views.erase(iter); + + delete ifv; + ifv = 0; + + iter = next; } - - GoingAway() ; /* EMIT_SIGNAL */ + + CatchDeletion; /* EMIT_SIGNAL */ } //---------------------------------------------------------------------------------------// // Name/Id Accessors/Mutators - + /** * Set the name/Id of this group. * @@ -89,13 +92,13 @@ ImageFrameTimeAxisGroup::~ImageFrameTimeAxisGroup() * @param src the identity of the object that initiated the change */ void -ImageFrameTimeAxisGroup::set_group_name(std::string new_name, void* src) +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 */ } } @@ -108,7 +111,7 @@ ImageFrameTimeAxisGroup::set_group_name(std::string new_name, void* src) std::string ImageFrameTimeAxisGroup::get_group_name() const { - return(_group_id) ; + return(_group_id); } @@ -126,38 +129,38 @@ 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); } /** * Sets the current samples per unit. * this method tells each item upon the time axis of the change - * + * * @param spu the new samples per canvas unit value */ -int +int 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); } /** @@ -166,12 +169,12 @@ ImageFrameTimeAxisGroup::set_item_samples_per_units(gdouble spp) * @param color the new base color */ void -ImageFrameTimeAxisGroup::apply_item_color(GdkColor& color) +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); } } @@ -195,15 +198,15 @@ ImageFrameTimeAxisGroup::apply_item_color(GdkColor& color) * @param src the identity of the object that initiated the change */ ImageFrameView* -ImageFrameTimeAxisGroup::add_imageframe_item(std::string frame_id, jack_nframes_t start, jack_nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src) +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) { ifv = new ImageFrameView(frame_id, - GTK_CANVAS_GROUP(_view_helper.canvas_item()), + _view_helper.canvas_item()->property_parent(), &(_view_helper.trackview()), this, _view_helper.trackview().editor.get_current_zoom(), @@ -213,16 +216,13 @@ ImageFrameTimeAxisGroup::add_imageframe_item(std::string frame_id, jack_nframes_ rgb_data, width, height, - num_channels) ; + num_channels); - imageframe_views.push_front(ifv) ; - - ifv->GoingAway.connect(bind(mem_fun(*this,&ImageFrameTimeAxisGroup::remove_imageframe_item), (void*)this)) ; - - ImageFrameAdded(ifv, src) ; /* EMIT_SIGNAL */ + imageframe_views.push_front(ifv); + ImageFrameAdded(ifv, src); /* EMIT_SIGNAL */ } - return(ifv) ; + return(ifv); } @@ -233,21 +233,21 @@ ImageFrameTimeAxisGroup::add_imageframe_item(std::string frame_id, jack_nframes_ * @return the named ImageFrameView, or 0 if it is not held upon this view */ ImageFrameView* -ImageFrameTimeAxisGroup::get_named_imageframe_item(std::string frame_id) +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); } - + /** * Removes the currently selected ImageFrameView * @@ -259,32 +259,32 @@ ImageFrameTimeAxisGroup::get_named_imageframe_item(std::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 ; - - std::string track_id = _view_helper.trackview().name() ; - ImageFrameRemoved(track_id, _group_id, frame_id, src) ; /* EMIT_SIGNAL */ + 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 */ } } else { - //cerr << "No Selected ImageFrame" << endl ; + //cerr << "No Selected ImageFrame" << endl; } } - + /** * Removes and returns the named ImageFrameView from the list of ImageFrameViews held by this view helper * @@ -293,33 +293,33 @@ ImageFrameTimeAxisGroup::remove_selected_imageframe_item(void* src) * @see add_imageframe_view */ ImageFrameView* -ImageFrameTimeAxisGroup::remove_named_imageframe_item(std::string frame_id, void* src) +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); } /** @@ -329,18 +329,18 @@ ImageFrameTimeAxisGroup::remove_named_imageframe_item(std::string frame_id, void * @param ifv the ImageFrameView to remove */ void -ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src) +ImageFrameTimeAxisGroup::remove_imageframe_item (ImageFrameView* ifv) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &ImageFrameTimeAxisGroup::remove_imageframe_item), ifv, src)); - + 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 */ } } @@ -357,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); // } //} @@ -377,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); //} @@ -389,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); // } @@ -402,7 +402,7 @@ ImageFrameTimeAxisGroup::remove_imageframe_item(ImageFrameView* ifv, void* src) bool ImageFrameTimeAxisGroup::get_selected() const { - return(is_selected) ; + return(is_selected); } @@ -414,7 +414,7 @@ ImageFrameTimeAxisGroup::get_selected() const void ImageFrameTimeAxisGroup::set_selected(bool yn) { - is_selected = yn ; + is_selected = yn; } @@ -439,7 +439,7 @@ ImageFrameTimeAxisGroup::remove_this_group(void* src) defer to idle loop, otherwise we'll delete this object while we're still inside this function ... */ - Gtk::Main::idle.connect(bind(mem_fun(&ImageFrameTimeAxisGroup::idle_remove_this_group), this, src)); + Glib::signal_idle().connect(sigc::bind(ptr_fun(&ImageFrameTimeAxisGroup::idle_remove_this_group), this, src)); } /** @@ -453,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); }