diff --git a/Timeline/Project.C b/Timeline/Project.C index 4f56277..04f3bd4 100644 --- a/Timeline/Project.C +++ b/Timeline/Project.C @@ -173,5 +173,14 @@ Project::create ( const char *name, const char *template_name ) /* TODO: copy template */ - return open( name ); + if ( open( name ) ) + { + /* add the bare essentials */ + timeline->beats_per_minute( 0, 120 ); + timeline->time( 0, 4, 4 ); + + return true; + } + else + return false; } diff --git a/Timeline/Tempo_Point.C b/Timeline/Tempo_Point.C index 45080f5..be9d6ca 100644 --- a/Timeline/Tempo_Point.C +++ b/Timeline/Tempo_Point.C @@ -25,26 +25,29 @@ void Tempo_Point::get ( Log_Entry &e ) const { - e.add( ":start", _r->offset ); + Sequence_Point::get( e ); + e.add( ":tempo", _tempo ); } void Tempo_Point::set ( Log_Entry &e ) { + + Sequence_Point::set( e ); + for ( int i = 0; i < e.size(); ++i ) { const char *s, *v; e.get( i, &s, &v ); - if ( ! strcmp( s, ":start" ) ) - _r->offset = atol( v ); - else if ( ! strcmp( s, ":tempo" ) ) + if ( ! strcmp( s, ":tempo" ) ) _tempo = atof( v ); - /* FIXME: we need to add this to the time track on creation!!! */ - timeline->tempo_track->add( this ); +/* /\* FIXME: we need to add this to the time track on creation!!! *\/ */ +/* timeline->tempo_track->add( this ); */ + } timeline->redraw(); @@ -53,13 +56,20 @@ Tempo_Point::set ( Log_Entry &e ) } +Tempo_Point::Tempo_Point ( ) +{ + timeline->tempo_track->add( this ); +} + Tempo_Point::Tempo_Point ( nframes_t when, float bpm ) { _tempo = bpm; - _r->offset = when; + _r->start = when; _make_label(); + timeline->tempo_track->add( this ); + log_create(); } diff --git a/Timeline/Tempo_Point.H b/Timeline/Tempo_Point.H index f5350c6..28a9235 100644 --- a/Timeline/Tempo_Point.H +++ b/Timeline/Tempo_Point.H @@ -42,9 +42,7 @@ protected: virtual void get ( Log_Entry &e ) const; void set ( Log_Entry &e ); - Tempo_Point ( ) - { - } + Tempo_Point ( ); public: diff --git a/Timeline/Time_Point.C b/Timeline/Time_Point.C index ae56e9c..1fb2629 100644 --- a/Timeline/Time_Point.C +++ b/Timeline/Time_Point.C @@ -24,7 +24,9 @@ void Time_Point::get ( Log_Entry &e ) const { - e.add( ":start", _r->offset ); + + Sequence_Point::get( e ); + e.add( ":beats_per_bar", _time.beats_per_bar ); e.add( ":beat_type", _time.beat_type ); } @@ -32,24 +34,48 @@ Time_Point::get ( Log_Entry &e ) const void Time_Point::set ( Log_Entry &e ) { + + Sequence_Point::set( e ); + for ( int i = 0; i < e.size(); ++i ) { const char *s, *v; e.get( i, &s, &v ); - if ( ! strcmp( s, ":start" ) ) - _r->offset = atol( v ); - else if ( ! strcmp( s, ":beats_per_bar" ) ) + if ( ! strcmp( s, ":beats_per_bar" ) ) _time.beats_per_bar = atoi( v ); else if ( ! strcmp( s, ":beat_type" ) ) _time.beat_type = atoi( v ); - /* FIXME: we need to add this to the time track on creation!!! */ - timeline->time_track->add( this ); +/* /\* FIXME: we need to add this to the time track on creation!!! *\/ */ +/* timeline->time_track->add( this ); */ + } timeline->redraw(); _make_label(); } + + +Time_Point::Time_Point ( ) : _time( 4, 4 ) +{ + timeline->time_track->add( this ); +} + +Time_Point::Time_Point ( nframes_t when, int bpb, int note ) : _time( bpb, note ) +{ + _r->offset = when; + _make_label(); + + timeline->time_track->add( this ); + + log_create(); +} + +Time_Point::Time_Point ( const Time_Point &rhs ) +{ + _r->offset = rhs._r->offset; + _time = rhs._time; +} diff --git a/Timeline/Time_Point.H b/Timeline/Time_Point.H index c76b113..f0fb44f 100644 --- a/Timeline/Time_Point.H +++ b/Timeline/Time_Point.H @@ -56,10 +56,6 @@ class Time_Point : public Sequence_Point snprintf( _label, 40, "%d/%d", _time.beats_per_bar, _time.beat_type ); } - Time_Point ( ) : _time( 4, 4 ) - { - - } protected: @@ -68,23 +64,18 @@ protected: virtual void get ( Log_Entry &e ) const; void set ( Log_Entry &e ); + Time_Point ( ); public: LOG_CREATE_FUNC( Time_Point ); - Time_Point ( nframes_t when, int bpb, int note ) : _time( bpb, note ) - { - _r->offset = when; - _make_label(); - - log_create(); - } + Time_Point ( nframes_t when, int bpb, int note ); + Time_Point ( const Time_Point &rhs ); - Time_Point ( const Time_Point &rhs ) + ~Time_Point ( ) { - _r->offset = rhs._r->offset; - _time = rhs._time; + log_destroy(); } Sequence_Widget *clone ( const Sequence_Widget *r ) @@ -92,41 +83,9 @@ public: return new Time_Point( *(Time_Point*)r ); } - ~Time_Point ( ) - { - log_destroy(); - } - -/* beats_per_bar ( void ) const { return _time.beats_per_bar; } */ -/* beat_type ( void ) const { return _beat_type; } */ - void time ( int bpb, int note ) { _time.beats_per_bar = bpb; _time.beat_type = note; } time_sig time ( void ) const { return _time; } -/* Time_Point * */ -/* at ( nframes_t when ) */ -/* { */ -/* for ( std::list ::const_reverse_iterator i = _widgets.rbegin(); */ -/* i != _widgets.rend(); i++ ) */ -/* if ( (*i)->offset() < when ) */ -/* return ((Time_Point*)(*i)); */ - -/* return NULL; */ -/* } */ - -/* int */ -/* handle ( int m ) */ -/* { */ -/* int r = Sequence_Widget::handle( m ); */ - -/* if ( m == FL_RELEASE ) */ -/* { */ -/* _track->sort(); */ -/* timeline->redraw(); */ -/* } */ -/* return r; */ -/* } */ - }; #undef __CLASS__ diff --git a/Timeline/Timeline.C b/Timeline/Timeline.C index 62b5da8..3922259 100644 --- a/Timeline/Timeline.C +++ b/Timeline/Timeline.C @@ -157,13 +157,6 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi o->align( FL_ALIGN_LEFT ); tempo_track = o; - - o->beats_per_minute( 0, 120 ); - -/* o->beats_per_minute( 48000 * 50, 250 ); */ - -/* o->beats_per_minute( 48000 * 120, 60 ); */ - } { @@ -175,8 +168,6 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi o->align( FL_ALIGN_LEFT ); time_track = o; - - o->time( 0, 4, 4 ); } @@ -253,6 +244,12 @@ Timeline::beats_per_minute ( nframes_t when, float bpm ) tempo_track->add( new Tempo_Point( when, bpm ) ); } +void +Timeline::time ( nframes_t when, int bpb, int note_type ) +{ + time_track->add( new Time_Point( when, bpb, note_type ) ); +} + #if 0 struct BBT { diff --git a/Timeline/Timeline.H b/Timeline/Timeline.H index 5bdb904..ef900b3 100644 --- a/Timeline/Timeline.H +++ b/Timeline/Timeline.H @@ -141,6 +141,7 @@ public: float beats_per_minute ( nframes_t when ) const; int beats_per_bar ( nframes_t when ) const; void beats_per_minute ( nframes_t when, float bpm ); + void time ( nframes_t when, int bpb, int beat_type ); bool nearest_line ( nframes_t when, nframes_t *f ) const; typedef void (measure_line_callback)( nframes_t frame, int X, int Y, int H, void *arg );