From 951c1ca23b2bb9ccf65e30241431ecef5eaa1808 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sat, 3 May 2008 18:25:59 -0500 Subject: [PATCH] Hack to make Time, Tempo, and Ruler sequences unjournaled to simplify session teardown. --- Timeline/Audio_Sequence.H | 9 ++++----- Timeline/Control_Sequence.C | 8 ++++---- Timeline/Control_Sequence.H | 2 +- Timeline/Loggable.H | 28 +++++++++++++++++++++------ Timeline/Sequence.H | 38 ++----------------------------------- Timeline/Timeline.C | 7 +++++++ 6 files changed, 40 insertions(+), 52 deletions(-) diff --git a/Timeline/Audio_Sequence.H b/Timeline/Audio_Sequence.H index bda3770..68797c3 100644 --- a/Timeline/Audio_Sequence.H +++ b/Timeline/Audio_Sequence.H @@ -25,23 +25,20 @@ #include -class Audio_Sequence : public Sequence +class Audio_Sequence : public Sequence, public Loggable { protected: virtual void get ( Log_Entry &e ) const { - Sequence::get( e ); - e.add( ":t", _track ); + e.add( ":n", name() ); } void set ( Log_Entry &e ) { - Sequence::set( e ); - for ( int i = 0; i < e.size(); ++i ) { const char *s, *v; @@ -58,6 +55,8 @@ protected: t->track( this ); } + else if ( ! strcmp( ":n", s ) ) + name( strdup( v ) ); } } diff --git a/Timeline/Control_Sequence.C b/Timeline/Control_Sequence.C index 0a29eb0..62ba038 100644 --- a/Timeline/Control_Sequence.C +++ b/Timeline/Control_Sequence.C @@ -62,16 +62,13 @@ Control_Sequence::init ( void ) void Control_Sequence::get ( Log_Entry &e ) const { - Sequence::get( e ); - e.add( ":t", _track ); + e.add( ":n", name() ); } void Control_Sequence::set ( Log_Entry &e ) { - Sequence::set( e ); - for ( int i = 0; i < e.size(); ++i ) { const char *s, *v; @@ -88,6 +85,9 @@ Control_Sequence::set ( Log_Entry &e ) t->add( this ); } + else if ( ! strcmp( ":n", s ) ) + name( strdup( v ) ); + } } diff --git a/Timeline/Control_Sequence.H b/Timeline/Control_Sequence.H index e514098..1a58cfb 100644 --- a/Timeline/Control_Sequence.H +++ b/Timeline/Control_Sequence.H @@ -23,7 +23,7 @@ #include "Control_Point.H" #include "Port.H" -class Control_Sequence : public Sequence +class Control_Sequence : public Sequence, public Loggable { public: diff --git a/Timeline/Loggable.H b/Timeline/Loggable.H index c1dc0f6..fe6df6d 100644 --- a/Timeline/Loggable.H +++ b/Timeline/Loggable.H @@ -36,6 +36,25 @@ using namespace std; #include "debug.h" +/* welcome to C++ */ +class Loggable_ID +{ + +protected: + + int _id; + +public: + + Loggable_ID ( ) : _id( 0 ) { } + virtual ~Loggable_ID ( ) { } + + int id ( void ) { return _id; } + + virtual const char *class_name ( void ) const = 0; + +}; + class Log_Entry; class Loggable; typedef Loggable *(create_func)(Log_Entry &); @@ -59,7 +78,7 @@ typedef Loggable *(create_func)(Log_Entry &); class Logger; -class Loggable +class Loggable : public Loggable_ID { static FILE *_fp; @@ -75,7 +94,6 @@ class Loggable private: - int _id; char **_old_state; char **_new_state; @@ -194,9 +212,7 @@ protected: public: - virtual const char *class_name ( void ) const = 0; - - int id ( void ) { return _id; } +// virtual const char *class_name ( void ) const = 0; friend class Logger; @@ -340,7 +356,7 @@ public: ADD( nframes_t, "%lu", (unsigned long)v ); ADD( unsigned long, "%lu", v ); ADD( const char *, "\"%s\"", v ? v : "" ); - ADD( Loggable *, "0x%X", v ? v->id() : 0 ); + ADD( Loggable_ID *, "0x%X", v ? v->id() : 0 ); ADD( float, "%f", v ); ADD( double, "%f", v ); diff --git a/Timeline/Sequence.H b/Timeline/Sequence.H index 33d6f48..f0d4da0 100644 --- a/Timeline/Sequence.H +++ b/Timeline/Sequence.H @@ -38,7 +38,7 @@ class Sequence_Widget; /* This is the base class for all track types. */ -class Sequence : public Fl_Widget, public Loggable +class Sequence : public Fl_Widget, public Loggable_ID { static queue _delete_queue; @@ -53,43 +53,9 @@ protected: std::list _widgets; Sequence_Widget *event_widget ( void ); -// virtual const char *class_name ( void ) { return "Sequence"; } - - - virtual void set ( Log_Entry &e ) - { - for ( int i = 0; i < e.size(); ++i ) - { - const char *s, *v; - - e.get( i, &s, &v ); - - if ( ! strcmp( ":n", s ) ) - { - name( strdup( v ) ); - } - } - } - - virtual void get ( Log_Entry &e ) const - { - e.add( ":n", name() ); -// e.add( ":t", _track ); - -/* s += sprintf( s, ":items " ); */ -/* for ( list ::const_iterator i = _widgets.begin(); i != _widgets.end(); i++ ) */ -/* { */ -/* s += sprintf( s, "0x%X", ((Loggable*)(*i))->id() ); */ - -/* list ::const_iterator e = i; */ -/* if ( ++e != _widgets.end() ) */ -/* s += sprintf( s, "," ); */ -/* } */ - - } - public: + /* welcome to C++ */ LOG_NAME_FUNC( Sequence ); Sequence ( int X, int Y, int W, int H, Track *track=0 ); diff --git a/Timeline/Timeline.C b/Timeline/Timeline.C index 6eec54a..df1bc44 100644 --- a/Timeline/Timeline.C +++ b/Timeline/Timeline.C @@ -331,6 +331,12 @@ Timeline::draw_measure ( nframes_t when, int Y, int W, int H, Fl_Color color, me if ( ! draw_with_measure_lines ) return; + if ( ! tempo_track->_widgets.size() || ! time_track->_widgets.size() ) + { + DWARNING( "No tempo/time points" ); + return; + } + fl_line_style( FL_DASH, 0 ); const Fl_Color beat = fl_color_average( FL_BLACK, color, 0.65f ); @@ -367,6 +373,7 @@ Timeline::draw_measure ( nframes_t when, int Y, int W, int H, Fl_Color color, me break; } + --tpi; /* start on the next beat */