From f50c8318ff7640e123e4d6f01a7f80226544712f Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sat, 21 Jun 2008 22:01:04 -0500 Subject: [PATCH] Clean up takes menu building. Add 'remove' action. --- Timeline/Project.C | 10 ++------ Timeline/Track.C | 63 +++++++++++++++++++++++++++++++--------------- Timeline/Track.H | 2 ++ 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/Timeline/Project.C b/Timeline/Project.C index 6f52926..d725be2 100644 --- a/Timeline/Project.C +++ b/Timeline/Project.C @@ -93,10 +93,6 @@ Project::set_name ( const char *name ) bool Project::write_info ( void ) { - - if ( ! open() ) - return true; - FILE *fp; if ( ! ( fp = fopen( "info", "w" ) ) ) @@ -270,16 +266,14 @@ Project::create ( const char *name, const char *template_name ) FATAL( "WTF? Cannot change to new project directory" ); mkdir( "sources", 0777 ); - - creat( "info", 0666 ); creat( "history", 0666 ); /* TODO: copy template */ + write_info(); + if ( open( name ) == 0 ) { - write_info(); - /* add the bare essentials */ timeline->beats_per_minute( 0, 120 ); timeline->time( 0, 4, 4 ); diff --git a/Timeline/Track.C b/Timeline/Track.C index 61a14af..8ed121d 100644 --- a/Timeline/Track.C +++ b/Timeline/Track.C @@ -227,8 +227,6 @@ Track::set ( Log_Entry &e ) if ( ! strcmp( s, ":height" ) ) { size( atoi( v ) ); - -// Fl_Widget::size( w(), height() ); resize(); } else if ( ! strcmp( s, ":selected" ) ) @@ -245,6 +243,8 @@ Track::set ( Log_Entry &e ) color( (Fl_Color)atoll( v ) ); redraw(); } + else if ( ! strcmp( s, ":show-all-takes" ) ) + show_all_takes( atoi( v ) ); else if ( ! strcmp( s, ":sequence" ) ) { int i; @@ -271,17 +271,17 @@ Track::set ( Log_Entry &e ) } } - void Track::get ( Log_Entry &e ) const { e.add( ":name", _name ); - e.add( ":sequence", sequence() ); + e.add( ":sequence", sequence() ); e.add( ":selected", _selected ); e.add( ":height", size() ); e.add( ":inputs", input.size() ); e.add( ":outputs", output.size() ); e.add( ":color", (unsigned long)color()); + e.add( ":show-all-takes", _show_all_takes ); } @@ -335,24 +335,28 @@ Track::cb_button ( Fl_Widget *w ) { case 0: /* show all takes */ show_all_takes( take_menu->menu()[ v ].value() ); - return; + break; case 1: /* new */ sequence( (Audio_Sequence*)sequence()->clone_empty() ); - return; - } + break; + case 2: /* remove */ + if ( takes->children() ) + { + Loggable::block_start(); - const char *s = take_menu->menu()[ v ].text; + Sequence *s = sequence(); - for ( int i = takes->children(); i--; ) - { - Audio_Sequence *t = (Audio_Sequence*)takes->child( i ); - if ( ! strcmp( s, t->name() ) ) - { - sequence( t ); - redraw(); + sequence( (Audio_Sequence*)takes->child( 0 ) ); + + delete s; + + Loggable::block_end(); + } break; - } + default: + sequence( (Audio_Sequence*)take_menu->menu()[ v ].user_data() ); } + } } @@ -423,6 +427,23 @@ Track::size ( int v ) resize(); } +void +Track::update_take_menu ( void ) +{ + take_menu->clear(); + + take_menu->add( "Show all takes", 0, 0, 0, FL_MENU_TOGGLE ); + take_menu->add( "New", 0, 0, 0 ); + take_menu->add( "Remove", 0, 0, 0, FL_MENU_DIVIDER ); + + for ( int i = 0; i < takes->children(); ++i ) + { + Sequence *s = (Sequence *)takes->child( i ); + + take_menu->add( s->name(), 0, 0, s ); + } +} + void Track::add ( Audio_Sequence * t ) { @@ -430,13 +451,13 @@ Track::add ( Audio_Sequence * t ) if ( ! t->name() ) { char pat[20]; - snprintf( pat, sizeof( pat ), "%d", takes->children() ); + snprintf( pat, sizeof( pat ), "%d", 1 + takes->children() ); t->name( strdup( pat ) ); } - take_menu->add( t->name() ); - t->labeltype( FL_ENGRAVED_LABEL ); + + update_take_menu(); } void @@ -449,11 +470,13 @@ Track::remove ( Audio_Sequence *t ) takes->remove( t ); +/* delete t; */ + timeline->unlock(); resize(); -// take_menu->remove( t->name() ); + update_take_menu(); } void diff --git a/Timeline/Track.H b/Timeline/Track.H index bd52f9e..fc72991 100644 --- a/Timeline/Track.H +++ b/Timeline/Track.H @@ -96,10 +96,12 @@ private: void update_port_names ( void ); const char *name_for_port( Port::type_e type, int n ); + void update_take_menu ( void ); Track ( ); void init ( void ); + protected: void get ( Log_Entry &e ) const;