Improve the way sequence widgets are selected.

pull/3/head
Jonathan Moore Liles 2008-04-29 15:47:03 -05:00
parent 221e66d91a
commit c464c73ab9
3 changed files with 27 additions and 1 deletions

View File

@ -751,7 +751,7 @@ Timeline::select( const Rectangle &r )
Track *t = (Track*)tracks->child( i );
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 );
}
}

View File

@ -365,6 +365,30 @@ Track::add ( Control_Sequence *t )
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
Track::draw ( void )

View File

@ -190,6 +190,8 @@ public:
void remove ( 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; }
void resize ( void );