@@ -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; | |||
} |
@@ -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(); | |||
} | |||
@@ -42,9 +42,7 @@ protected: | |||
virtual void get ( Log_Entry &e ) const; | |||
void set ( Log_Entry &e ); | |||
Tempo_Point ( ) | |||
{ | |||
} | |||
Tempo_Point ( ); | |||
public: | |||
@@ -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; | |||
} |
@@ -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 <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__ |
@@ -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 | |||
{ | |||
@@ -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 ); | |||