| @@ -173,5 +173,14 @@ Project::create ( const char *name, const char *template_name ) | |||||
| /* TODO: copy template */ | /* 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; | |||||
| } | } | ||||
| @@ -25,26 +25,29 @@ | |||||
| void | void | ||||
| Tempo_Point::get ( Log_Entry &e ) const | Tempo_Point::get ( Log_Entry &e ) const | ||||
| { | { | ||||
| e.add( ":start", _r->offset ); | |||||
| Sequence_Point::get( e ); | |||||
| e.add( ":tempo", _tempo ); | e.add( ":tempo", _tempo ); | ||||
| } | } | ||||
| void | void | ||||
| Tempo_Point::set ( Log_Entry &e ) | Tempo_Point::set ( Log_Entry &e ) | ||||
| { | { | ||||
| Sequence_Point::set( e ); | |||||
| for ( int i = 0; i < e.size(); ++i ) | for ( int i = 0; i < e.size(); ++i ) | ||||
| { | { | ||||
| const char *s, *v; | const char *s, *v; | ||||
| e.get( i, &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 ); | _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(); | 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_Point::Tempo_Point ( nframes_t when, float bpm ) | ||||
| { | { | ||||
| _tempo = bpm; | _tempo = bpm; | ||||
| _r->offset = when; | |||||
| _r->start = when; | |||||
| _make_label(); | _make_label(); | ||||
| timeline->tempo_track->add( this ); | |||||
| log_create(); | log_create(); | ||||
| } | } | ||||
| @@ -42,9 +42,7 @@ protected: | |||||
| virtual void get ( Log_Entry &e ) const; | virtual void get ( Log_Entry &e ) const; | ||||
| void set ( Log_Entry &e ); | void set ( Log_Entry &e ); | ||||
| Tempo_Point ( ) | |||||
| { | |||||
| } | |||||
| Tempo_Point ( ); | |||||
| public: | public: | ||||
| @@ -24,7 +24,9 @@ | |||||
| void | void | ||||
| Time_Point::get ( Log_Entry &e ) const | 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( ":beats_per_bar", _time.beats_per_bar ); | ||||
| e.add( ":beat_type", _time.beat_type ); | e.add( ":beat_type", _time.beat_type ); | ||||
| } | } | ||||
| @@ -32,24 +34,48 @@ Time_Point::get ( Log_Entry &e ) const | |||||
| void | void | ||||
| Time_Point::set ( Log_Entry &e ) | Time_Point::set ( Log_Entry &e ) | ||||
| { | { | ||||
| Sequence_Point::set( e ); | |||||
| for ( int i = 0; i < e.size(); ++i ) | for ( int i = 0; i < e.size(); ++i ) | ||||
| { | { | ||||
| const char *s, *v; | const char *s, *v; | ||||
| e.get( i, &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 ); | _time.beats_per_bar = atoi( v ); | ||||
| else if ( ! strcmp( s, ":beat_type" ) ) | else if ( ! strcmp( s, ":beat_type" ) ) | ||||
| _time.beat_type = atoi( v ); | _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(); | timeline->redraw(); | ||||
| _make_label(); | _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; | |||||
| } | |||||
| @@ -56,10 +56,6 @@ class Time_Point : public Sequence_Point | |||||
| snprintf( _label, 40, "%d/%d", _time.beats_per_bar, _time.beat_type ); | snprintf( _label, 40, "%d/%d", _time.beats_per_bar, _time.beat_type ); | ||||
| } | } | ||||
| Time_Point ( ) : _time( 4, 4 ) | |||||
| { | |||||
| } | |||||
| protected: | protected: | ||||
| @@ -68,23 +64,18 @@ protected: | |||||
| virtual void get ( Log_Entry &e ) const; | virtual void get ( Log_Entry &e ) const; | ||||
| void set ( Log_Entry &e ); | void set ( Log_Entry &e ); | ||||
| Time_Point ( ); | |||||
| public: | public: | ||||
| LOG_CREATE_FUNC( Time_Point ); | 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 ) | Sequence_Widget *clone ( const Sequence_Widget *r ) | ||||
| @@ -92,41 +83,9 @@ public: | |||||
| return new Time_Point( *(Time_Point*)r ); | 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; } | void time ( int bpb, int note ) { _time.beats_per_bar = bpb; _time.beat_type = note; } | ||||
| time_sig time ( void ) const { return _time; } | time_sig time ( void ) const { return _time; } | ||||
| /* Time_Point * */ | |||||
| /* at ( nframes_t when ) */ | |||||
| /* { */ | |||||
| /* for ( std::list <Sequence_Widget *>::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__ | #undef __CLASS__ | ||||
| @@ -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 ); | o->align( FL_ALIGN_LEFT ); | ||||
| tempo_track = o; | 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 ); | o->align( FL_ALIGN_LEFT ); | ||||
| time_track = o; | 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 ) ); | 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 | #if 0 | ||||
| struct BBT | struct BBT | ||||
| { | { | ||||
| @@ -141,6 +141,7 @@ public: | |||||
| float beats_per_minute ( nframes_t when ) const; | float beats_per_minute ( nframes_t when ) const; | ||||
| int beats_per_bar ( nframes_t when ) const; | int beats_per_bar ( nframes_t when ) const; | ||||
| void beats_per_minute ( nframes_t when, float bpm ); | 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; | 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 ); | typedef void (measure_line_callback)( nframes_t frame, int X, int Y, int H, void *arg ); | ||||