diff --git a/Timeline/Sequence.C b/Timeline/Sequence.C index da6a6ff..4127d8b 100644 --- a/Timeline/Sequence.C +++ b/Timeline/Sequence.C @@ -204,17 +204,23 @@ Sequence::length ( void ) const } Sequence_Widget * -Sequence::event_widget ( void ) +Sequence::widget_at ( nframes_t ts, int Y ) { - nframes_t ets = timeline->xoffset + timeline->x_to_ts( Fl::event_x() - x() ); - for ( list ::const_reverse_iterator r = _widgets.rbegin(); r != _widgets.rend(); ++r ) - if ( ets > (*r)->start() && ets < (*r)->start() + (*r)->length() - && Fl::event_y() >= (*r)->y() && Fl::event_y() <= (*r)->y() + (*r)->h() ) + for ( list ::const_reverse_iterator r = _widgets.rbegin(); r != _widgets.rend(); ++r ) + if ( ts >= (*r)->start() && ts <= (*r)->start() + (*r)->length() + && Y >= (*r)->y() && Y <= (*r)->y() + (*r)->h() ) return (*r); return NULL; } +Sequence_Widget * +Sequence::event_widget ( void ) +{ + nframes_t ets = timeline->xoffset + timeline->x_to_ts( Fl::event_x() - x() ); + return widget_at( ets, Fl::event_y() ); +} + void Sequence::select_range ( int X, int W ) { @@ -355,6 +361,18 @@ Sequence::handle ( int m ) transport->locate( prev( transport->frame ) ); return 1; } + else if ( Fl::test_shortcut( FL_CTRL + ' ' ) ) + { + Sequence_Widget *r = widget_at( transport->frame, y() ); + + if ( r ) + { + if ( r->selected() ) + r->deselect(); + else + r->select(); + } + } else { switch ( Fl::event_key() ) diff --git a/Timeline/Sequence.H b/Timeline/Sequence.H index ae6852a..87aeb72 100644 --- a/Timeline/Sequence.H +++ b/Timeline/Sequence.H @@ -59,6 +59,7 @@ protected: friend class Timeline; // for draw_measure std::list _widgets; + Sequence_Widget *widget_at ( nframes_t ts, int Y ); Sequence_Widget *event_widget ( void );