@@ -161,7 +161,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Group( X, | |||||
// o->end(); | // o->end(); | ||||
t->track( o ); | t->track( o ); | ||||
t->color( FL_GREEN ); | |||||
t->color( (Fl_Color)rand() ); | |||||
} | } | ||||
tracks = o; | tracks = o; | ||||
@@ -19,6 +19,25 @@ | |||||
#include "Track_Header.H" | #include "Track_Header.H" | ||||
void | |||||
Track_Header::cb_input_field ( Fl_Widget *w, void *v ) | |||||
{ | |||||
((Track_Header*)v)->cb_input_field(); | |||||
} | |||||
void | |||||
Track_Header::cb_input_field ( void ) | |||||
{ | |||||
log_start(); | |||||
if ( _name ) | |||||
free( _name ); | |||||
_name = strdup( name_field->value() ); | |||||
log_end(); | |||||
} | |||||
Track_Header::Track_Header ( int X, int Y, int W, int H, const char *L ) : | Track_Header::Track_Header ( int X, int Y, int W, int H, const char *L ) : | ||||
Fl_Group ( X, Y, W, H, L ) | Fl_Group ( X, Y, W, H, L ) | ||||
{ | { | ||||
@@ -35,6 +54,8 @@ Track_Header::Track_Header ( int X, int Y, int W, int H, const char *L ) : | |||||
o->labeltype( FL_NO_LABEL ); | o->labeltype( FL_NO_LABEL ); | ||||
o->labelcolor( FL_GRAY0 ); | o->labelcolor( FL_GRAY0 ); | ||||
o->textcolor( 32 ); | o->textcolor( 32 ); | ||||
o->callback( cb_input_field, (void*)this ); | |||||
} | } | ||||
{ | { | ||||
Fl_Button *o = record_button = | Fl_Button *o = record_button = | ||||
@@ -81,6 +102,18 @@ Track_Header::Track_Header ( int X, int Y, int W, int H, const char *L ) : | |||||
Fl_Group::current()->resizable( o ); | Fl_Group::current()->resizable( o ); | ||||
} | } | ||||
end(); | end(); | ||||
_name = NULL; | |||||
_track = NULL; | |||||
_selected = false; | |||||
log_create(); | |||||
} | |||||
Track_Header::~Track_Header ( ) | |||||
{ | |||||
log_destroy(); | |||||
} | } | ||||
int | int | ||||
@@ -34,11 +34,17 @@ class Track_Header : public Fl_Group, public Loggable | |||||
public: | public: | ||||
Track_Header( int X, int Y, int W, int H, const char *L = 0 ); | |||||
Track_Header ( int X, int Y, int W, int H, const char *L = 0 ); | |||||
~Track_Header ( ); | |||||
private: | private: | ||||
Track * _track; | Track * _track; | ||||
char *_name; | |||||
bool _selected; | |||||
public: | public: | ||||
Fl_Input * name_field; | Fl_Input * name_field; | ||||
@@ -53,14 +59,67 @@ public: | |||||
void set ( char **sa ) | void set ( char **sa ) | ||||
{ | { | ||||
return; | |||||
for ( int i = 0; sa[i]; ++i ) | |||||
{ | |||||
char *s = sa[i]; | |||||
strtok( s, " " ); | |||||
char *v = s + strlen( s ) + 1; | |||||
if ( *v == '"' ) | |||||
{ | |||||
v++; | |||||
v[ strlen( v ) - 2 ] = '\0'; | |||||
} | |||||
if ( ! strcmp( s, ":selected" ) ) | |||||
_selected = atoi( v ); | |||||
else | |||||
if ( ! strcmp( s, ":name" ) ) | |||||
{ | |||||
_name = strdup( v ); | |||||
name_field->value( _name ); | |||||
} | |||||
else | |||||
if ( ! strcmp( s, ":track" ) ) | |||||
{ | |||||
int i; | |||||
sscanf( v, "%X", &i ); | |||||
Track *t = (Track*)Loggable::find( i ); | |||||
assert( t ); | |||||
_track = t; | |||||
} | |||||
free( s ); | |||||
} | |||||
free( sa ); | |||||
} | } | ||||
char ** get ( void ) | char ** get ( void ) | ||||
{ | { | ||||
return NULL; | |||||
char **sa = (char**)malloc( sizeof( char* ) * (1 + 3) ); | |||||
int i = 0; | |||||
asprintf( &sa[ i++ ], ":name \"%s\"", _name ? _name : "" ); | |||||
asprintf( &sa[ i++ ], ":track 0x%X", _track ? _track->id() : 0 ); | |||||
asprintf( &sa[ i++ ], ":selected %d", _selected ); | |||||
// asprintf( &sa[ i++ ], ":gain %f", _scale ); | |||||
sa[ i ] = NULL; | |||||
return sa; | |||||
} | } | ||||
static void cb_input_field ( Fl_Widget *w, void *v ); | |||||
void cb_input_field ( void ); | |||||
static int width(); | static int width(); | ||||
void track( Track * t ); | void track( Track * t ); | ||||