@@ -304,11 +304,6 @@ Audio_Region::handle ( int m ) | |||
redraw(); | |||
return 1; | |||
} | |||
else if ( Fl::event_button1() && Fl::event_ctrl() ) | |||
{ | |||
/* duplication */ | |||
return 1; | |||
} | |||
else if ( Fl::test_shortcut( FL_BUTTON3 ) && ! Fl::event_shift() ) | |||
{ | |||
/* context menu */ | |||
@@ -350,13 +345,13 @@ Audio_Region::handle ( int m ) | |||
return 0; | |||
} | |||
else | |||
return Sequence_Widget::handle( m ); | |||
return Sequence_Region::handle( m ); | |||
} | |||
break; | |||
} | |||
case FL_RELEASE: | |||
{ | |||
Sequence_Widget::handle( m ); | |||
Sequence_Region::handle( m ); | |||
copied = false; | |||
@@ -369,38 +364,28 @@ Audio_Region::handle ( int m ) | |||
begin_drag( Drag( x() - X, y() - Y, x_to_offset( X ) ) ); | |||
_log.hold(); | |||
} | |||
/* panning */ | |||
if ( Fl::event_state() & FL_SHIFT && | |||
Fl::event_state() & FL_CTRL ) | |||
if ( Fl::event_button1() ) | |||
{ | |||
int d = (ox + X) - x(); | |||
long td = timeline->x_to_ts( d ); | |||
if ( td > 0 && os < (nframes_t)td ) | |||
_r->offset = 0; | |||
else | |||
_r->offset = os - td; | |||
if ( Fl::event_state() & ( FL_SHIFT | FL_CTRL ) ) | |||
{ | |||
/* panning */ | |||
int d = (ox + X) - x(); | |||
long td = timeline->x_to_ts( d ); | |||
sequence()->redraw(); | |||
return 1; | |||
} | |||
if ( td > 0 && os < (nframes_t)td ) | |||
_r->offset = 0; | |||
else | |||
_r->offset = os - td; | |||
/* duplication */ | |||
if ( Fl::event_state() & FL_CTRL ) | |||
{ | |||
if ( _drag->state == 0 ) | |||
{ | |||
sequence()->add( new Audio_Region( *this ) ); | |||
_drag->state = 1; | |||
sequence()->redraw(); | |||
return 1; | |||
} | |||
} | |||
ret = Sequence_Widget::handle( m ); | |||
ret = Sequence_Region::handle( m ); | |||
return ret | 1; | |||
default: | |||
return Sequence_Widget::handle( m ); | |||
return Sequence_Region::handle( m ); | |||
break; | |||
} | |||
@@ -135,6 +135,23 @@ private: | |||
static bool snapshot( FILE * fp ); | |||
void init ( bool loggable=true ) | |||
{ | |||
if ( loggable ) | |||
{ | |||
_id = ++_log_id; | |||
_old_state = NULL; | |||
_nest = 0; | |||
ensure_size( _id ); | |||
_loggables[ _id - 1 ] = this; | |||
} | |||
else | |||
_id = 0; | |||
} | |||
public: | |||
static const char *escape ( const char *s ); | |||
@@ -176,19 +193,7 @@ public: | |||
Loggable ( bool loggable=true ) | |||
{ | |||
if ( loggable ) | |||
{ | |||
_id = ++_log_id; | |||
_old_state = NULL; | |||
_nest = 0; | |||
ensure_size( _id ); | |||
_loggables[ _id - 1 ] = this; | |||
} | |||
else | |||
_id = 0; | |||
init( loggable ); | |||
} | |||
void update_id ( int id ); | |||
@@ -226,8 +231,9 @@ protected: | |||
/* leaf subclasses *must* call log_create() at the end of their copy contructors */ | |||
Loggable ( const Loggable &rhs ) | |||
{ | |||
init( true ); | |||
/* FIXME: get a real id here!!! */ | |||
_id = 0; | |||
// _id = 0; | |||
} | |||
public: | |||
@@ -215,22 +215,36 @@ Sequence_Region::handle ( int m ) | |||
} | |||
else | |||
return 0; | |||
/* track jumping */ | |||
if ( ! selected() ) | |||
else if ( Fl::event_button1() ) | |||
{ | |||
if ( Y > y() + h() || Y < y() ) | |||
if ( Fl::event_state() & FL_CTRL ) | |||
{ | |||
/* duplication */ | |||
if ( _drag->state == 0 ) | |||
{ | |||
// sequence()->add( new Audio_Region( *this ) ); | |||
sequence()->add( this->clone() ); | |||
_drag->state = 1; | |||
return 1; | |||
} | |||
} | |||
else if ( ! selected() ) | |||
{ | |||
printf( "wants to jump tracks\n" ); | |||
/* track jumping */ | |||
if ( Y > y() + h() || Y < y() ) | |||
{ | |||
printf( "wants to jump tracks\n" ); | |||
Track *t = timeline->track_under( Y ); | |||
Track *t = timeline->track_under( Y ); | |||
fl_cursor( (Fl_Cursor)1 ); | |||
fl_cursor( (Fl_Cursor)1 ); | |||
if ( t ) | |||
t->handle( FL_ENTER ); | |||
if ( t ) | |||
t->handle( FL_ENTER ); | |||
return 0; | |||
return 0; | |||
} | |||
} | |||
} | |||