| @@ -200,8 +200,6 @@ public: | |||||
| bool current ( void ) const { return this == belowmouse(); } | bool current ( void ) const { return this == belowmouse(); } | ||||
| friend class Track; /* for _clip in Track::write() */ | |||||
| public: | public: | ||||
| @@ -740,7 +740,9 @@ Timeline::handle ( int m ) | |||||
| /* FIXME: prompt for I/O config? */ | /* FIXME: prompt for I/O config? */ | ||||
| /* add audio track */ | /* add audio track */ | ||||
| Track *t = new Track( 0, 0, tracks->w(), 30 ); | |||||
| char *name = get_unique_track_name( "Audio" ); | |||||
| Track *t = new Track( 0, 0, tracks->w(), 30, name ); | |||||
| add_track( t ); | add_track( t ); | ||||
| @@ -797,6 +799,34 @@ Timeline::handle ( int m ) | |||||
| } | } | ||||
| bool | |||||
| Timeline::track_name_exists ( const char *name ) | |||||
| { | |||||
| for ( int i = tracks->children(); i-- ; ) | |||||
| { | |||||
| Track *t = (Track*)tracks->child( i ); | |||||
| if ( ! strcmp( name, t->name() ) ) | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| char * | |||||
| Timeline::get_unique_track_name ( const char *name ) | |||||
| { | |||||
| char pat[256]; | |||||
| strcpy( pat, name ); | |||||
| for ( int i = 1; track_name_exists( pat ); ++i ) | |||||
| snprintf( pat, sizeof( pat ), "%s.%d", name, i ); | |||||
| return strdup( pat ); | |||||
| } | |||||
| void | void | ||||
| Timeline::add_track ( Track *track ) | Timeline::add_track ( Track *track ) | ||||
| { | { | ||||
| @@ -157,6 +157,9 @@ private: | |||||
| friend class Engine; // FIXME: only Engine::process() needs to be friended.x | friend class Engine; // FIXME: only Engine::process() needs to be friended.x | ||||
| bool track_name_exists ( const char *name ); | |||||
| char * get_unique_track_name ( const char *name ); | |||||
| /* Engine */ | /* Engine */ | ||||
| nframes_t process ( nframes_t nframes ); | nframes_t process ( nframes_t nframes ); | ||||
| void seek ( nframes_t frame ); | void seek ( nframes_t frame ); | ||||
| @@ -106,6 +106,8 @@ Track::Track ( int X, int Y, int W, int H, const char *L ) : | |||||
| _show_all_takes = false; | _show_all_takes = false; | ||||
| _size = 1; | _size = 1; | ||||
| labeltype( FL_NO_LABEL ); | |||||
| { | { | ||||
| char pname[40]; | char pname[40]; | ||||
| static int no = 0, ni = 0; | static int no = 0, ni = 0; | ||||
| @@ -142,6 +144,8 @@ Track::Track ( int X, int Y, int W, int H, const char *L ) : | |||||
| o->textcolor( 32 ); | o->textcolor( 32 ); | ||||
| o->callback( cb_input_field, (void*)this ); | o->callback( cb_input_field, (void*)this ); | ||||
| o->hide(); | |||||
| } | } | ||||
| { | { | ||||
| @@ -220,6 +224,9 @@ Track::Track ( int X, int Y, int W, int H, const char *L ) : | |||||
| } | } | ||||
| end(); | end(); | ||||
| if ( L ) | |||||
| name( L ); | |||||
| log_create(); | log_create(); | ||||
| } | } | ||||
| @@ -283,8 +290,6 @@ Track::size ( int v ) | |||||
| resize(); | resize(); | ||||
| } | } | ||||
| void | void | ||||
| Track::track( Sequence * t ) | Track::track( Sequence * t ) | ||||
| { | { | ||||
| @@ -27,6 +27,7 @@ | |||||
| #include <FL/Fl_Menu_Button.H> | #include <FL/Fl_Menu_Button.H> | ||||
| #include <FL/Fl_Pack.H> | #include <FL/Fl_Pack.H> | ||||
| #include <FL/Fl_Box.H> | #include <FL/Fl_Box.H> | ||||
| #include <FL/fl_draw.H> | |||||
| #include "Loggable.H" | #include "Loggable.H" | ||||
| @@ -188,6 +189,13 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| Fl_Group::draw(); | Fl_Group::draw(); | ||||
| if ( ! name_field->visible() ) | |||||
| { | |||||
| fl_color( FL_WHITE ); | |||||
| fl_font( FL_HELVETICA, 14 ); | |||||
| fl_draw( name_field->value(), name_field->x(), name_field->y(), name_field->w(), name_field->h(), FL_ALIGN_CENTER ); | |||||
| } | |||||
| } | } | ||||
| void add_control( Sequence *t ); | void add_control( Sequence *t ); | ||||
| @@ -210,6 +218,13 @@ public: | |||||
| resize(); | resize(); | ||||
| } | } | ||||
| void name ( const char *name ) | |||||
| { | |||||
| if ( _name ) free( _name ); | |||||
| _name = strdup( name ); | |||||
| name_field->value( _name ); | |||||
| } | |||||
| const char * name ( void ) const { return _name; } | const char * name ( void ) const { return _name; } | ||||
| bool mute ( void ) const { return mute_button->value(); } | bool mute ( void ) const { return mute_button->value(); } | ||||
| bool solo ( void ) const { return solo_button->value(); } | bool solo ( void ) const { return solo_button->value(); } | ||||
| @@ -273,7 +288,6 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| /* Engine */ | /* Engine */ | ||||
| nframes_t process ( nframes_t nframes ); | nframes_t process ( nframes_t nframes ); | ||||
| void seek ( nframes_t frame ); | void seek ( nframes_t frame ); | ||||