Remove all use of nframes_t.
[ardour.git] / gtk2_ardour / imageframe_view.cc
index 2c943dcae474181cc25209fa0c071d6a7ea8ac11..817088124c4bd5aa459d77637461bacae08ce92f 100644 (file)
@@ -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 <algorithm>
@@ -35,8 +34,7 @@
 #include "canvas_impl.h"
 #include "gui_thread.h"
 
-using namespace sigc ;
-using namespace ARDOUR ;
+using namespace ARDOUR;
 using namespace Gtk;
 
 sigc::signal<void,ImageFrameView*> ImageFrameView::GoingAway;
@@ -62,8 +60,8 @@ ImageFrameView::ImageFrameView(const string & item_id,
        ImageFrameTimeAxisGroup* item_group,
        double spu,
        Gdk::Color& basic_color,
-       nframes_t start,
-       nframes_t duration,
+       framepos_t start,
+       framecnt_t duration,
        unsigned char* rgb_data,
        uint32_t width,
        uint32_t height,
@@ -75,36 +73,38 @@ ImageFrameView::ImageFrameView(const string & item_id,
                                                   TimeAxisViewItem::ShowHandles))
 
 {
-       the_parent_group = item_group ;
-       set_name_text(item_id) ;
-       
-       image_data_width = width ;
-       image_data_height = height ;
-       image_data_num_channels = num_channels ;
-       
+       the_parent_group = item_group;
+       set_name_text(item_id);
+
+       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.height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE) * im_ratio) ;
-       
-       imageframe = new ImageFrame (*group, pbuf, 1.0, 1.0, ANCHOR_NW, im_width, (trackview.height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE));
+       double im_ratio = (double)width/(double)height;
+       double im_width = ((double)(trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE) * im_ratio);
 
-       frame_handle_start->signal_event().connect (bind (mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_start_handle_event), frame_handle_start, this));
-       frame_handle_end->signal_event().connect (bind (mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_end_handle_event), frame_handle_end, this));
-       group->signal_event().connect (bind (mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_item_view_event), imageframe, this));
+       imageframe = new ImageFrame (*group, pbuf, 1.0, 1.0, ANCHOR_NW, im_width, (trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE));
+
+       frame_handle_start->signal_event().connect (sigc::bind (sigc::mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_start_handle_event), frame_handle_start, this));
+       frame_handle_end->signal_event().connect (sigc::bind (sigc::mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_end_handle_event), frame_handle_end, this));
+       group->signal_event().connect (sigc::bind (sigc::mem_fun (trackview.editor, &PublicEditor::canvas_imageframe_item_view_event), imageframe, this));
 
        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());
 }
 
 /**
@@ -113,51 +113,48 @@ ImageFrameView::ImageFrameView(const string & item_id,
  */
 ImageFrameView::~ImageFrameView()
 {
-       GoingAway (this);
+       CatchDeletion (this);
 
        // destroy any marker items we have associated with this item
-               
+
        for(MarkerViewList::iterator iter = marker_view_list.begin(); iter != marker_view_list.end(); ++iter)
        {
-               MarkerView* mv = (*iter) ;
-               
-               MarkerViewList::iterator next = iter ;
-               next++ ;
+               MarkerView* mv = (*iter);
+
+               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 ;
-               
-               // set our iterator to next, as we have invalided the current iterator with the call to erase 
-               iter = next ;
+               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;
        }
-       
+
        // if we are the currently selected item withi the parent track, we need to se-select
        if(the_parent_group)
        {
                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);
                }
        }
 
-       if(imageframe)
-       {
-delete imageframe;
-               imageframe = 0 ;
-       }
+       delete imageframe;
+       imageframe = 0;
 }
 
 
@@ -172,12 +169,12 @@ delete imageframe;
  * @return true if the position change was a success, false otherwise
  */
 bool
-ImageFrameView::set_position(nframes_t pos, void* src, double* delta)
+ImageFrameView::set_position(framepos_t pos, void* src, double* delta)
 {
-       nframes_t old_pos = frame_position ;
-       
+       framepos_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) {
@@ -185,16 +182,16 @@ ImageFrameView::set_position(nframes_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 ;
-                       nframes_t marker_old_pos = mv->get_position() ;
-                       
-                       mv->set_position(pos + (marker_old_pos - old_pos), src) ;
+                       MarkerView* mv = (MarkerView*)*i;
+                       framepos_t marker_old_pos = mv->get_position();
+
+                       mv->set_position(pos + (marker_old_pos - old_pos), src);
                }
        }
-       
-       return(ret) ;
+
+       return(ret);
 }
-                
+
 /**
  * Sets the duration of this item
  *
@@ -203,24 +200,24 @@ ImageFrameView::set_position(nframes_t pos, void* src, double* delta)
  * @return true if the duration change was succesful, false otherwise
  */
 bool
-ImageFrameView::set_duration(nframes_t dur, void* src)
+ImageFrameView::set_duration(framepos_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)
        {
                /* handle setting the sizes of our canvas itesm based on the new duration */
                imageframe->property_drawwidth() = trackview.editor.frame_to_pixel(get_duration());
        }
-       
-       return(ret) ;
+
+       return(ret);
 }
 
 //---------------------------------------------------------------------------------------//
 // Parent Component Methods
-               
+
 /**
  * Sets the parent ImageFrameTimeAxisGroup of thie item
  * each Item must be part of exactly one group (or 'scene') upon the timeline
@@ -230,9 +227,9 @@ ImageFrameView::set_duration(nframes_t dur, void* src)
 void
 ImageFrameView::set_time_axis_group(ImageFrameTimeAxisGroup* group)
 {
-       the_parent_group = group ;
+       the_parent_group = group;
 }
-               
+
 /**
  * Returns the parent group of this item
  *
@@ -241,13 +238,13 @@ ImageFrameView::set_time_axis_group(ImageFrameTimeAxisGroup* group)
 ImageFrameTimeAxisGroup*
 ImageFrameView::get_time_axis_group()
 {
-       return(the_parent_group) ;
+       return(the_parent_group);
 }
 
 
 //---------------------------------------------------------------------------------------//
 // ui methods
-               
+
 /**
  * Set the height of this item
  *
@@ -258,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;
@@ -266,11 +263,11 @@ ImageFrameView::set_height (gdouble h)
        frame->raise_to_top();
        imageframe->raise_to_top();
        name_highlight->raise_to_top();
-       name_text->raise_to_top();
+       name_pixbuf->raise_to_top();
        frame_handle_start->raise_to_top();
        frame_handle_end->raise_to_top();
-       name_text->property_y() = h - TimeAxisViewItem::NAME_Y_OFFSET;
+
+       name_pixbuf->property_y() = h - TimeAxisViewItem::NAME_Y_OFFSET;
        frame->property_y2() = h;
 
        name_highlight->property_y1() = (gdouble) h - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE;
@@ -290,13 +287,10 @@ ImageFrameView::set_height (gdouble h)
 void
 ImageFrameView::add_marker_view_item(MarkerView* item, void* src)
 {
-       marker_view_list.push_back(item) ;
-       
-       item->GoingAway.connect(bind(mem_fun(*this, &ImageFrameView::remove_marker_view_item), (void*)this));
-       
-        MarkerViewAdded(item, src) ; /* EMIT_SIGNAL */
+       marker_view_list.push_back(item);
+        MarkerViewAdded(item, src); /* EMIT_SIGNAL */
 }
-               
+
 /**
  * Removes the named marker view from the list of marker view associated with this item
  * The Marker view is not destroyed on removal, so the caller must handle the item themself
@@ -308,30 +302,30 @@ 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);
+
+                        MarkerViewRemoved(mv,src); /* EMIT_SIGNAL */
 
-                       marker_view_list.erase(i) ;
-                       
-                        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);
 }
-               
+
 /**
  * Removes item from the list of marker views assocaited with this item
  * This method will do nothing if item if not assiciated with this item
@@ -340,18 +334,18 @@ 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(bind (mem_fun(*this, &ImageFrameView::remove_marker_view_item), mv, src));
+       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 */
        }
 }
-               
+
 /**
  * Determines if the named marker is one of those associated with this item
  *
@@ -360,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);
 }