@@ -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 ); | ||||