| @@ -751,7 +751,7 @@ Timeline::select( const Rectangle &r ) | |||||
| Track *t = (Track*)tracks->child( i ); | Track *t = (Track*)tracks->child( i ); | ||||
| if ( ! ( t->y() > Y + r.h || t->y() + t->h() < Y ) ) | if ( ! ( t->y() > Y + r.h || t->y() + t->h() < Y ) ) | ||||
| t->track()->select_range( r.x, r.w ); | |||||
| t->select( r.x, r.y, r.w, r.h, true, true ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -365,6 +365,30 @@ Track::add ( Control_Sequence *t ) | |||||
| resize(); | resize(); | ||||
| } | } | ||||
| /** add all widget on this track falling within the given rectangle to | |||||
| the selection. */ | |||||
| void | |||||
| Track::select ( int X, int Y, int W, int H, | |||||
| bool include_control, bool merge_control ) | |||||
| { | |||||
| Sequence *t = track(); | |||||
| if ( ! ( t->y() > Y + H || t->y() + t->h() < Y ) ) | |||||
| t->select_range( X, W ); | |||||
| else | |||||
| include_control = true; | |||||
| if ( include_control ) | |||||
| for ( int i = control->children(); i--; ) | |||||
| { | |||||
| Control_Sequence *c = (Control_Sequence*)control->child( i ); | |||||
| if ( merge_control || | |||||
| ( c->y() >= Y && c->y() + c->h() <= Y + H ) ) | |||||
| c->select_range( X, W ); | |||||
| } | |||||
| } | |||||
| void | void | ||||
| Track::draw ( void ) | Track::draw ( void ) | ||||
| @@ -190,6 +190,8 @@ public: | |||||
| void remove ( Sequence *t ); | void remove ( Sequence *t ); | ||||
| void remove ( Control_Sequence *t ); | void remove ( Control_Sequence *t ); | ||||
| void select ( int X, int Y, int W, int H, bool include_control, bool merge_control ); | |||||
| int size ( void ) const { return _size; } | int size ( void ) const { return _size; } | ||||
| void resize ( void ); | void resize ( void ); | ||||