| @@ -92,7 +92,7 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
| /* FIXME: what's the right thing to do here? */ | |||
| // request_locate( pos->frame ); | |||
| return 1; | |||
| // return transport.frame == pos->frame; | |||
| // return transport->frame == pos->frame; | |||
| break; | |||
| default: | |||
| printf( "unknown transport state.\n" ); | |||
| @@ -105,9 +105,9 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
| int | |||
| Engine::process ( nframes_t nframes ) | |||
| { | |||
| transport.poll(); | |||
| transport->poll(); | |||
| if ( ! transport.rolling ) | |||
| if ( ! transport->rolling ) | |||
| /* FIXME: fill all ports with silence */ | |||
| return 0; | |||
| @@ -561,7 +561,7 @@ Timeline::draw ( void ) | |||
| void | |||
| Timeline::draw_playhead ( void ) | |||
| { | |||
| int x = ( ts_to_x( transport.frame ) - ts_to_x( xoffset ) ) + tracks->x() + Track::width(); | |||
| int x = ( ts_to_x( transport->frame ) - ts_to_x( xoffset ) ) + tracks->x() + Track::width(); | |||
| if ( x < tracks->x() + Track::width() || x > tracks->x() + tracks->w() ) | |||
| return; | |||
| @@ -590,10 +590,10 @@ Timeline::redraw_playhead ( void ) | |||
| { | |||
| static nframes_t last_playhead = -1; | |||
| if ( last_playhead != transport.frame ) | |||
| if ( last_playhead != transport->frame ) | |||
| { | |||
| redraw_overlay(); | |||
| last_playhead = transport.frame; | |||
| last_playhead = transport->frame; | |||
| } | |||
| } | |||
| @@ -702,19 +702,21 @@ Timeline::handle ( int m ) | |||
| return 1; | |||
| } | |||
| case FL_Home: | |||
| transport.locate( 0 ); | |||
| return 1; | |||
| case ' ': | |||
| transport.toggle(); | |||
| return 1; | |||
| /* case FL_Home: */ | |||
| /* transport->locate( 0 ); */ | |||
| /* return 1; */ | |||
| /* case ' ': */ | |||
| /* transport->toggle(); */ | |||
| /* return 1; */ | |||
| case 'p': | |||
| { | |||
| int X = Fl::event_x() - Track::width(); | |||
| if ( X > 0 ) | |||
| { | |||
| transport.locate( xoffset + x_to_ts( X ) ); | |||
| transport->locate( xoffset + x_to_ts( X ) ); | |||
| } | |||
| return 1; | |||
| @@ -62,9 +62,9 @@ Track::cb_button ( Fl_Widget *w ) | |||
| { | |||
| /* FIXME: wrong place for this! */ | |||
| if ( record_button->value() ) | |||
| record_ds->start( transport.frame ); | |||
| record_ds->start( transport->frame ); | |||
| else | |||
| record_ds->stop( transport.frame ); | |||
| record_ds->stop( transport->frame ); | |||
| } | |||
| else | |||
| if ( w == take_menu ) | |||
| @@ -20,7 +20,7 @@ | |||
| #include "Transport.H" | |||
| #include "Engine.H" | |||
| Transport transport; | |||
| // Transport transport; | |||
| #define client engine->client() | |||
| @@ -22,8 +22,69 @@ | |||
| #include <jack/transport.h> | |||
| #include "types.h" | |||
| struct Transport : public jack_position_t | |||
| #include <FL/Fl_Pack.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <stdio.h> | |||
| struct Transport : public jack_position_t, public Fl_Pack | |||
| { | |||
| private: | |||
| Fl_Button *_home_button; | |||
| Fl_Button *_play_button; | |||
| Fl_Button *_record_button; | |||
| static | |||
| void | |||
| cb_button ( Fl_Widget *w, void *v ) | |||
| { | |||
| ((Transport*)v)->cb_button( w ); | |||
| } | |||
| void | |||
| cb_button ( Fl_Widget *w ) | |||
| { | |||
| if ( w == _home_button ) | |||
| locate( 0 ); | |||
| else if ( w == _play_button ) | |||
| toggle(); | |||
| else if ( w == _record_button ) | |||
| printf( "FIXME: record now\n" ); | |||
| } | |||
| public: | |||
| Transport ( int X, int Y, int W, int H, const char *L=0 ) | |||
| : Fl_Pack( X, Y, W, H, L ) | |||
| { | |||
| const int bw = W / 3; | |||
| type( HORIZONTAL ); | |||
| Fl_Button *o; | |||
| _home_button = o = new Fl_Button( 0, 0, bw, 0, "@<|" ); | |||
| o->labeltype( FL_EMBOSSED_LABEL ); | |||
| o->callback( cb_button, this ); | |||
| o->shortcut( FL_Home ); | |||
| o->box( FL_UP_BOX ); | |||
| _play_button = o = new Fl_Button( 0, 0, bw, 0, "@>" ); | |||
| o->labeltype( FL_EMBOSSED_LABEL ); | |||
| o->callback( cb_button, this ); | |||
| o->shortcut( ' ' ); | |||
| o->box( FL_UP_BOX ); | |||
| _record_button = o = new Fl_Button( 0, 0, bw, 0, "@circle" ); | |||
| o->labeltype( FL_EMBOSSED_LABEL ); | |||
| o->labelcolor( FL_RED ); | |||
| o->shortcut( 'R' ); | |||
| o->callback( cb_button, this ); | |||
| o->box( FL_UP_BOX ); | |||
| end(); | |||
| } | |||
| bool rolling; | |||
| void poll ( void ); | |||
| @@ -33,4 +94,4 @@ struct Transport : public jack_position_t | |||
| void toggle ( void ); | |||
| }; | |||
| extern Transport transport; | |||
| extern Transport* transport; | |||
| @@ -47,14 +47,16 @@ | |||
| #include "Time_Sequence.H" | |||
| #include "Control_Sequence.H" | |||
| #include "Transport.H" | |||
| #include "Loggable.H" | |||
| #include "Track.H" | |||
| // #include "const.h" | |||
| #include "Engine.H" | |||
| Engine *engine; | |||
| Timeline *timeline; | |||
| Transport *transport; | |||
| void cb_undo ( Fl_Widget *w, void *v ) | |||
| { | |||
| @@ -67,6 +69,7 @@ main ( int argc, char **argv ) | |||
| Fl_Window *main_window = new Fl_Window( 0, 0, 1024, 768 ); | |||
| Fl::visual( FL_RGB8 ); | |||
| Fl::visible_focus( 0 ); | |||
| Fl::get_system_colors(); | |||
| Fl::scheme( "plastic" ); | |||
| @@ -83,6 +86,10 @@ main ( int argc, char **argv ) | |||
| /* TODO: change to seesion dir */ | |||
| transport = new Transport( 0, 0, 300, 24 ); | |||
| main_window->add( transport ); | |||
| /* we don't really need a pointer for this */ | |||
| engine = new Engine; | |||
| engine->init(); | |||