Make region deletion undoable.

This commit is contained in:
Jonathan Moore Liles 2008-02-28 06:51:51 -06:00
parent 9e47efc585
commit 143035f0e8
4 changed files with 40 additions and 22 deletions

View File

@ -87,11 +87,7 @@ Audio_Track::handle ( int m )
return 0; return 0;
} }
Region *r = new Region( c ); Region *r = new Region( c, this, timeline->xoffset + timeline->x_to_ts( Fl::event_x() ) );
r->offset( timeline->x_to_ts( Fl::event_x() ) );
this->add( r );
redraw(); redraw();
return 1; return 1;

View File

@ -91,6 +91,7 @@ Region::init ( void )
_color = FL_BLUE; _color = FL_BLUE;
} }
/* copy constructor */
Region::Region ( const Region & rhs ) Region::Region ( const Region & rhs )
{ {
_offset = rhs._offset; _offset = rhs._offset;
@ -103,6 +104,7 @@ Region::Region ( const Region & rhs )
log_create(); log_create();
} }
/* */
Region::Region ( Audio_File *c ) Region::Region ( Audio_File *c )
{ {
init(); init();
@ -113,6 +115,20 @@ Region::Region ( Audio_File *c )
} }
/* used when DND importing */
Region::Region ( Audio_File *c, Track *t, nframes_t o )
{
init();
_clip = c;
_end = _clip->length();
_track = t;
_offset = o;
_track->add( this );
log_create();
}
void void
Region::trim ( enum trim_e t, int X ) Region::trim ( enum trim_e t, int X )
{ {

View File

@ -63,11 +63,12 @@ protected:
char ** log_dump ( void ) char ** log_dump ( void )
{ {
// char *r; // char *r;
char **sa = (char**)malloc( sizeof( char* ) * 7 ); char **sa = (char**)malloc( sizeof( char* ) * 8 );
int i = 0; int i = 0;
asprintf( &sa[ i++ ], ":source \"%s\"", _clip->name() ); asprintf( &sa[ i++ ], ":source \"%s\"", _clip ? _clip->name() : "" );
asprintf( &sa[ i++ ], ":track 0x%X", _track ? _track->id() : 0 );
asprintf( &sa[ i++ ], ":x %lu", _offset ); asprintf( &sa[ i++ ], ":x %lu", _offset );
asprintf( &sa[ i++ ], ":l %lu", _start ); asprintf( &sa[ i++ ], ":l %lu", _start );
asprintf( &sa[ i++ ], ":r %lu", _end ); asprintf( &sa[ i++ ], ":r %lu", _end );
@ -75,9 +76,6 @@ protected:
asprintf( &sa[ i++ ], ":gain %f", _scale ); asprintf( &sa[ i++ ], ":gain %f", _scale );
sa[ i ] = NULL; sa[ i ] = NULL;
// asprintf( &sa[4], ":track 0x%X", _track->id() );
// asprintf( &r, ":x %lu\n:l %lu\n:r %lu\n:selected %d\n:gain %f", _offset, _start, _end, _selected, _scale );
return sa; return sa;
} }
@ -115,18 +113,23 @@ protected:
_scale = atof( v ); _scale = atof( v );
else else
if ( ! strcmp( s, ":source" ) ) if ( ! strcmp( s, ":source" ) )
_clip = Audio_File::from_file( v ); {
/* else */ if ( ! ( _clip = Audio_File::from_file( v ) ) )
/* if ( ! strcmp( s, ":track" ) ) */ {
/* { */ printf( "Grave error: could not open source \"%s\"\n", v );
/* int i; */ }
/* sscanf( v, "%X", &i ); */ }
/* Track *t = (Track*)Loggable::find( i ); */ else
if ( ! strcmp( s, ":track" ) )
{
int i;
sscanf( v, "%X", &i );
Track *t = (Track*)Loggable::find( i );
/* assert( t ); */ assert( t );
/* t->add( this ); */ t->add( this );
/* } */ }
free( s ); free( s );
@ -153,6 +156,8 @@ public:
r->set( sa ); r->set( sa );
r->log_create();
return (Loggable *)r; return (Loggable *)r;
} }
@ -167,6 +172,7 @@ public:
Region ( const Region & rhs ); Region ( const Region & rhs );
Region ( Audio_File *c ); Region ( Audio_File *c );
Region ( Audio_File *c, Track *t, nframes_t o );
int handle ( int m ); int handle ( int m );
void draw_box( int X, int Y, int W, int H ); void draw_box( int X, int Y, int W, int H );

View File

@ -76,7 +76,7 @@ Track::draw ( void )
void void
Track::remove ( Track_Widget *r ) Track::remove ( Track_Widget *r )
{ {
Logger _log( this ); // Logger _log( this );
_widgets.remove( r ); _widgets.remove( r );
} }
@ -96,7 +96,7 @@ Track::event_widget ( void )
void void
Track::add ( Track_Widget *r ) Track::add ( Track_Widget *r )
{ {
Logger _log( this ); // Logger _log( this );
if ( r->track() ) if ( r->track() )
{ {