send control now has working metering, and switches back and forth between busses...
[ardour.git] / gtk2_ardour / editor_imageframe.cc
index b65ce93178b58ec0abc0fd83aee1d3cc9974818f..5ff1fc64595aabae89604d9567cafca826f5494d 100644 (file)
@@ -16,7 +16,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #include "imageframe_view.h"
@@ -31,7 +30,7 @@
 #include "canvas_impl.h"
 
 #include <gtkmm2ext/gtk_ui.h>
-#include <pbd/error.h>
+#include "pbd/error.h"
 
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -96,10 +95,10 @@ void
 Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
 {
        // GTK2FIX
-       //nframes_t offset = static_cast<nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
-       nframes_t offset = 0;
+       //nframes64_t offset = static_cast<nframes64_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
+       nframes64_t offset = 0;
 
-       nframes_t x_pos = 0 ;
+       nframes64_t x_pos = 0 ;
 
        if (item->get_position() < offset) {
                x_pos = 0 ;
@@ -122,7 +121,7 @@ Editor::add_imageframe_marker_time_axis(const string & track_name, TimeAxisView*
 void
 Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
-       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
+       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview) ;
        
        if(ifta)
        {
@@ -139,7 +138,7 @@ Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item*
 void
 Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
-       MarkerTimeAxis* mta = dynamic_cast<MarkerTimeAxis*>(clicked_trackview) ;
+       MarkerTimeAxis* mta = dynamic_cast<MarkerTimeAxis*>(clicked_axisview) ;
        
        if(mta)
        {
@@ -186,9 +185,9 @@ Editor::canvas_imageframe_item_view_event (GdkEvent *event, ArdourCanvas::Item*
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &ifv->get_time_axis_view();
+                       clicked_axisview = &ifv->get_time_axis_view();
                        iftag = ifv->get_time_axis_group() ;
-                       dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv);
+                       dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv);
                        ret = button_press_handler (item, event, ImageFrameItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -214,9 +213,9 @@ Editor::canvas_imageframe_start_handle_event (GdkEvent *event, ArdourCanvas::Ite
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &ifv->get_time_axis_view() ;
+                       clicked_axisview = &ifv->get_time_axis_view() ;
                        iftag = ifv->get_time_axis_group() ;
-                       dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv);
+                       dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv);
                        
                        ret = button_press_handler (item, event, ImageFrameHandleStartItem) ;
                        break ;
@@ -249,9 +248,9 @@ Editor::canvas_imageframe_end_handle_event (GdkEvent *event, ArdourCanvas::Item*
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &ifv->get_time_axis_view() ;
+                       clicked_axisview = &ifv->get_time_axis_view() ;
                        iftag = ifv->get_time_axis_group() ;
-                       dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv);
+                       dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv);
                        
                        ret = button_press_handler (item, event, ImageFrameHandleEndItem) ;
                        break ;
@@ -282,7 +281,7 @@ Editor::canvas_imageframe_view_event (GdkEvent* event, ArdourCanvas::Item* item,
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = ifta ;
+                       clicked_axisview = ifta ;
                        ret = button_press_handler (item, event, ImageFrameTimeAxisItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -305,7 +304,7 @@ Editor::canvas_marker_time_axis_view_event (GdkEvent* event, ArdourCanvas::Item*
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = mta ;
+                       clicked_axisview = mta ;
                        ret = button_press_handler(item, event, MarkerTimeAxisItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -328,8 +327,8 @@ Editor::canvas_markerview_item_view_event (GdkEvent* event, ArdourCanvas::Item*
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &mta->get_time_axis_view() ;
-                       dynamic_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->set_selected_time_axis_item(mta);
+                       clicked_axisview = &mta->get_time_axis_view() ;
+                       dynamic_cast<MarkerTimeAxis*>(clicked_axisview)->get_view()->set_selected_time_axis_item(mta);
                        ret = button_press_handler(item, event, MarkerViewItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -353,8 +352,8 @@ Editor::canvas_markerview_start_handle_event (GdkEvent* event, ArdourCanvas::Ite
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &mta->get_time_axis_view() ;
-                       dynamic_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->set_selected_time_axis_item(mta) ;
+                       clicked_axisview = &mta->get_time_axis_view() ;
+                       dynamic_cast<MarkerTimeAxis*>(clicked_axisview)->get_view()->set_selected_time_axis_item(mta) ;
                        ret = button_press_handler(item, event, MarkerViewHandleStartItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -384,8 +383,8 @@ Editor::canvas_markerview_end_handle_event (GdkEvent* event, ArdourCanvas::Item*
                case GDK_BUTTON_PRESS:
                case GDK_2BUTTON_PRESS:
                case GDK_3BUTTON_PRESS:
-                       clicked_trackview = &mta->get_time_axis_view() ;
-                       dynamic_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->set_selected_time_axis_item(mta) ;
+                       clicked_axisview = &mta->get_time_axis_view() ;
+                       dynamic_cast<MarkerTimeAxis*>(clicked_axisview)->get_view()->set_selected_time_axis_item(mta) ;
                        ret = button_press_handler(item, event, MarkerViewHandleEndItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -423,7 +422,7 @@ Editor::canvas_markerview_end_handle_event (GdkEvent* event, ArdourCanvas::Item*
 void
 Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
 {
-       ImageFrameView* ifv = ((ImageFrameTimeAxis*)clicked_trackview)->get_view()->get_selected_imageframe_view() ;
+       ImageFrameView* ifv = ((ImageFrameTimeAxis*)clicked_axisview)->get_view()->get_selected_imageframe_view() ;
        drag_info.copy = false ;
        drag_info.item = item ;
        drag_info.data = ifv ;
@@ -431,7 +430,8 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
        drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback;
        drag_info.last_frame_position = ifv->get_position() ;
  
-       drag_info.last_trackview = &ifv->get_time_axis_view() ;
+       drag_info.source_trackview = &ifv->get_time_axis_view() ;
+       drag_info.dest_trackview = drag_info.source_trackview;
        
        /* this is subtle. raising the regionview itself won't help,
           because raise_to_top() just puts the item on the top of
@@ -443,7 +443,7 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
        */
 
        drag_info.item->raise_to_top();
-       drag_info.last_trackview->canvas_display->raise_to_top();
+       drag_info.source_trackview->canvas_display->raise_to_top();
        //time_line_group->raise_to_top();
        cursor_group->raise_to_top ();
 
@@ -456,7 +456,7 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
 void
 Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
 {
-       MarkerView* mv = ((MarkerTimeAxis*)clicked_trackview)->get_view()->get_selected_time_axis_item() ;
+       MarkerView* mv = ((MarkerTimeAxis*)clicked_axisview)->get_view()->get_selected_time_axis_item() ;
        drag_info.copy = false ;
        drag_info.item = item ;
        drag_info.data = mv ;
@@ -464,7 +464,8 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
        drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback;
        drag_info.last_frame_position = mv->get_position() ;
 
-       drag_info.last_trackview = &mv->get_time_axis_view() ;
+       drag_info.source_trackview = &mv->get_time_axis_view() ;
+       drag_info.dest_trackview = drag_info.source_trackview;
 
        /* this is subtle. raising the regionview itself won't help,
           because raise_to_top() just puts the item on the top of
@@ -476,7 +477,7 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
        */
 
        drag_info.item->raise_to_top();
-       drag_info.last_trackview->canvas_display->raise_to_top();
+       drag_info.source_trackview->canvas_display->raise_to_top();
        //time_line_group->raise_to_top();
        cursor_group->raise_to_top ();
 
@@ -492,14 +493,14 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        double cx, cy ;
 
        MarkerView* mv = reinterpret_cast<MarkerView*>(drag_info.data) ;
-       nframes_t pending_region_position ;
-       nframes_t pointer_frame ;
+       nframes64_t pending_region_position ;
+       nframes64_t pointer_frame ;
 
        pointer_frame = event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
-       if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
+       if (pointer_frame > (nframes64_t) drag_info.pointer_frame_offset)
        {
                pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
                snap_to(pending_region_position) ;
@@ -540,14 +541,14 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView*>(drag_info.data) ;
        
-       nframes_t pending_region_position;
-       nframes_t pointer_frame;
+       nframes64_t pending_region_position;
+       nframes64_t pointer_frame;
 
        pointer_frame = event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
-       if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
+       if (pointer_frame > (nframes64_t) drag_info.pointer_frame_offset)
        {
                pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
                snap_to(pending_region_position) ;
@@ -575,7 +576,7 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
 void
 Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
-       nframes_t where ;
+       nframes64_t where ;
        TimeAxisViewItem* tavi = reinterpret_cast<TimeAxisViewItem*>(drag_info.data) ;
 
        bool item_x_movement = (drag_info.last_frame_position != tavi->get_position()) ;
@@ -614,7 +615,7 @@ void
 Editor::imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        // get the selected item from the parent time axis
-       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
+       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview) ;
        if(ifta)
        {
                ImageFrameView* ifv = ifta->get_view()->get_selected_imageframe_view() ;
@@ -642,7 +643,7 @@ void
 Editor::imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        // get the selected item from the parent time axis
-       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
+       ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview) ;
 
        if(ifta)
        {
@@ -673,9 +674,9 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView*> (drag_info.data) ;
        
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
+       nframes64_t start = 0 ;
+       nframes64_t end = 0 ;
+       nframes64_t pointer_frame = event_frame(event) ;
        
        // chekc th eposition of the item is not locked
        if(!ifv->get_position_locked()) {
@@ -692,7 +693,7 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                        }
                        
                        // are we getting bigger or smaller?
-                       nframes_t new_dur_val = end - start ;
+                       nframes64_t new_dur_val = end - start ;
                        
                        // start handle, so a smaller pointer frame increases our component size
                        if(pointer_frame <= drag_info.grab_frame) 
@@ -750,10 +751,10 @@ Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* eve
        }
        else
        {
-               nframes_t temp = ifv->get_position() + ifv->get_duration() ;
+               nframes64_t temp = ifv->get_position() + ifv->get_duration() ;
                
-               ifv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
-               ifv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
+               ifv->set_position((nframes64_t) (temp - drag_info.cumulative_x_drag), this) ;
+               ifv->set_duration((nframes64_t) drag_info.cumulative_x_drag, this) ;
        }
 }
 
@@ -762,10 +763,10 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
        
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       nframes_t new_dur_val = 0 ;
+       nframes64_t start = 0 ;
+       nframes64_t end = 0 ;
+       nframes64_t pointer_frame = event_frame(event) ;
+       nframes64_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
        
@@ -827,7 +828,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
        }
        else
        {
-               nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
+               nframes64_t new_duration = (nframes64_t)drag_info.cumulative_x_drag ;
                if((new_duration <= ifv->get_max_duration()) && (new_duration >= ifv->get_min_duration()))
                {
                        ifv->set_duration(new_duration, this) ;
@@ -839,7 +840,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
 void
 Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
-       MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->get_selected_time_axis_item() ;
+       MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_axisview)->get_view()->get_selected_time_axis_item() ;
 
        if (mv == 0)
        {
@@ -862,7 +863,7 @@ Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* even
 void
 Editor::markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
-       MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->get_selected_time_axis_item() ;
+       MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_axisview)->get_view()->get_selected_time_axis_item() ;
        if (mv == 0)
        {
                fatal << _("programming error: no MarkerView selected") << endmsg ;
@@ -887,9 +888,9 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
        
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
+       nframes64_t start = 0 ;
+       nframes64_t end = 0 ;
+       nframes64_t pointer_frame = event_frame(event) ;
        
        // chekc th eposition of the item is not locked
        if(!mv->get_position_locked())
@@ -910,7 +911,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                        }
                        
                        // are we getting bigger or smaller?
-                       nframes_t new_dur_val = end - start ;
+                       nframes64_t new_dur_val = end - start ;
                        
                        if(pointer_frame <= drag_info.grab_frame)
                        {
@@ -967,10 +968,10 @@ Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* eve
        }
        else
        {
-               nframes_t temp = mv->get_position() + mv->get_duration() ;
+               nframes64_t temp = mv->get_position() + mv->get_duration() ;
                
-               mv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
-               mv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
+               mv->set_position((nframes64_t) (temp - drag_info.cumulative_x_drag), this) ;
+               mv->set_duration((nframes64_t) drag_info.cumulative_x_drag, this) ;
        }
 }
 
@@ -979,10 +980,10 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
        
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       nframes_t new_dur_val = 0 ;
+       nframes64_t start = 0 ;
+       nframes64_t end = 0 ;
+       nframes64_t pointer_frame = event_frame(event) ;
+       nframes64_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
        
@@ -1007,7 +1008,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                {
                        // we cant extend beyond the item we are marking
                        ImageFrameView* marked_item = mv->get_marked_item() ;
-                       nframes_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
+                       nframes64_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
                        
                        if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration()))
                        {
@@ -1061,7 +1062,7 @@ Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
        }
        else
        {
-               nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
+               nframes64_t new_duration = (nframes64_t)drag_info.cumulative_x_drag ;
                mv->set_duration(new_duration, this) ;
        }
 }
@@ -1081,7 +1082,7 @@ void
 Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* src)
 {
        ImageFrameTimeAxis* iftav ;
-       iftav = new ImageFrameTimeAxis(track_name, *this, *session, track_canvas) ;
+       iftav = new ImageFrameTimeAxis(track_name, *this, *session, *track_canvas) ;
        iftav->set_time_axis_name(track_name, this) ;
        track_views.push_back(iftav) ;
 
@@ -1098,7 +1099,7 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
 void
 Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track)
 {
-       MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), track_canvas, track_name, marked_track) ;
+       MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), *track_canvas, track_name, marked_track) ;
        ((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ;
        track_views.push_back(mta) ;