| @@ -81,6 +81,10 @@ public: | |||||
| track->add( this ); | track->add( this ); | ||||
| log_create(); | log_create(); | ||||
| /* FIXME: temporary */ | |||||
| labeltype( FL_NO_LABEL ); | |||||
| } | } | ||||
| ~Audio_Sequence ( ) | ~Audio_Sequence ( ) | ||||
| @@ -30,12 +30,12 @@ switched between Bar Beat Tick and Wallclock displays */ | |||||
| class Clock : public Fl_Widget | class Clock : public Fl_Widget | ||||
| { | { | ||||
| enum { BBT, HMS }; | |||||
| nframes_t _when; | nframes_t _when; | ||||
| public: | public: | ||||
| enum { BBT, HMS }; | |||||
| static void | static void | ||||
| frame_to_HMS ( char *dst, int n, nframes_t frame ) | frame_to_HMS ( char *dst, int n, nframes_t frame ) | ||||
| { | { | ||||
| @@ -44,7 +44,7 @@ public: | |||||
| int M = S / 60; S -= M * 60; | int M = S / 60; S -= M * 60; | ||||
| int H = M / 60; M -= H * 60; | int H = M / 60; M -= H * 60; | ||||
| snprintf( dst, n, "%d:%d:%.1f", H, M, S ); | |||||
| snprintf( dst, n, "%02d:%02d:%02.1f", H, M, S ); | |||||
| } | } | ||||
| Clock ( int X, int Y, int W, int H, const char *L=0 ) | Clock ( int X, int Y, int W, int H, const char *L=0 ) | ||||
| @@ -69,11 +69,10 @@ public: | |||||
| void draw ( void ) | void draw ( void ) | ||||
| { | { | ||||
| // fl_rectf( x(), y(), w(), h(), color() ); | |||||
| draw_box(); | draw_box(); | ||||
| char buf[15]; | char buf[15]; | ||||
| *buf = '\0'; | |||||
| switch ( type() ) | switch ( type() ) | ||||
| { | { | ||||
| @@ -98,14 +97,14 @@ public: | |||||
| const int dw = w() - Fl::box_dw( box() ); | const int dw = w() - Fl::box_dw( box() ); | ||||
| const int dh = h() - Fl::box_dh( box() ); | const int dh = h() - Fl::box_dh( box() ); | ||||
| fl_draw( buf, dx, dy, dw, dh, (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_TOP) ); | |||||
| fl_draw( buf, dx, dy, dw, dh - 9, FL_ALIGN_CENTER ); | |||||
| for ( int i = strlen( buf ); i--; ) | for ( int i = strlen( buf ); i--; ) | ||||
| if ( isdigit( buf[ i ] ) ) | if ( isdigit( buf[ i ] ) ) | ||||
| buf[ i ] = ' '; | buf[ i ] = ' '; | ||||
| fl_color( fl_darker( c ) ); | fl_color( fl_darker( c ) ); | ||||
| fl_draw( buf, dx, dy, dw, dh, (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_TOP) ); | |||||
| fl_draw( buf, dx, dy, dw, dh - 9, FL_ALIGN_CENTER ); | |||||
| fl_font( FL_HELVETICA, 9 ); | fl_font( FL_HELVETICA, 9 ); | ||||
| fl_color( FL_RED ); | fl_color( FL_RED ); | ||||
| @@ -3,6 +3,7 @@ SRCS= \ | |||||
| Waveform.C \ | Waveform.C \ | ||||
| Region.C \ | Region.C \ | ||||
| main.C \ | main.C \ | ||||
| TLE.C \ | |||||
| Sequence.C \ | Sequence.C \ | ||||
| Audio_Sequence.C \ | Audio_Sequence.C \ | ||||
| Control_Sequence.C \ | Control_Sequence.C \ | ||||
| @@ -0,0 +1,267 @@ | |||||
| # data file for the Fltk User Interface Designer (fluid) | |||||
| version 1.0108 | |||||
| header_name {.H} | |||||
| code_name {.C} | |||||
| decl {\#include "Timeline.H"} {} | |||||
| decl {\#include "Transport.H"} {} | |||||
| decl {\#include "Clock.H"} {public | |||||
| } | |||||
| decl {\#include <FL/Fl.H>} {} | |||||
| class TLE {open | |||||
| } { | |||||
| Function {TLE()} {open | |||||
| } { | |||||
| code {make_window(); | |||||
| // Fl::visual( RGB8 ); | |||||
| Fl::visible_focus( 0 ); | |||||
| Fl::get_system_colors(); | |||||
| Fl::scheme( "plastic" );} {} | |||||
| } | |||||
| Function {make_window()} {open | |||||
| } { | |||||
| Fl_Window main_window { | |||||
| label {Non-DAW - Timeline} open | |||||
| xywh {549 146 1024 768} type Double resizable xclass {Non-DAW} visible | |||||
| } { | |||||
| Fl_Group {} {open | |||||
| xywh {0 0 1024 25} | |||||
| } {} | |||||
| Fl_Menu_Bar {} {open | |||||
| xywh {0 0 1024 25} | |||||
| } { | |||||
| Submenu {} { | |||||
| label {&Session} open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label {&New} | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label {&Open} | |||||
| xywh {10 10 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label {&Compact} | |||||
| xywh {20 20 40 25} | |||||
| } | |||||
| Submenu {} { | |||||
| label Export open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Session | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label Range | |||||
| xywh {10 10 40 25} | |||||
| } | |||||
| } | |||||
| MenuItem {} { | |||||
| label {&Quit} | |||||
| xywh {40 40 40 25} shortcut 0x40071 | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label {&Edit} open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Preferences | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label Undo | |||||
| xywh {0 0 40 25} shortcut 0x4007a | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label Transport open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Home | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label End | |||||
| xywh {10 10 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label Stop | |||||
| xywh {20 20 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label Play | |||||
| xywh {30 30 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label Record | |||||
| xywh {40 40 40 25} | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label {&View} open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| Submenu {} { | |||||
| label Zoom open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Fit | |||||
| xywh {10 10 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label {1 sec.} | |||||
| xywh {10 10 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label {1 min.} | |||||
| xywh {20 20 40 25} | |||||
| } | |||||
| MenuItem {} { | |||||
| label {1 hour.} | |||||
| xywh {30 30 40 25} | |||||
| } | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label {&Options} open | |||||
| xywh {0 0 74 25} divider | |||||
| } { | |||||
| Submenu {} { | |||||
| label Display open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label item | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| Submenu {} { | |||||
| label Region open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label {Filled waveforms} | |||||
| xywh {10 10 40 25} type Toggle value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label {Colorful waveforms} | |||||
| xywh {20 20 40 25} type Toggle value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label {Filled fades} | |||||
| xywh {30 30 40 25} type Toggle value 1 | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label {Control Sequence} open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Polygon | |||||
| xywh {20 20 40 25} type Toggle value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label Graded | |||||
| xywh {30 30 40 25} type Toggle value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label Ruled | |||||
| xywh {40 40 40 25} type Toggle value 1 | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label Style open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label Default | |||||
| xywh {0 0 40 25} type Radio value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label Flat | |||||
| xywh {10 10 40 25} type Radio | |||||
| } | |||||
| } | |||||
| Submenu {} { | |||||
| label Colors open | |||||
| xywh {0 0 74 25} | |||||
| } { | |||||
| MenuItem {} { | |||||
| label System | |||||
| xywh {0 0 40 25} type Radio | |||||
| } | |||||
| MenuItem {} { | |||||
| label Dark | |||||
| xywh {10 10 40 25} type Radio value 1 | |||||
| } | |||||
| MenuItem {} { | |||||
| label Light | |||||
| xywh {20 20 40 25} type Radio | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| MenuItem {} { | |||||
| label {&Help} | |||||
| xywh {0 0 40 25} | |||||
| } | |||||
| } | |||||
| Fl_Box {} { | |||||
| label {<Timeline>} | |||||
| xywh {0 74 1024 695} box FLAT_BOX color 47 labelsize 100 | |||||
| code0 {timeline = o;} | |||||
| class Timeline | |||||
| } | |||||
| Fl_Box {} { | |||||
| label {<Transport>} | |||||
| xywh {0 25 137 46} color 30 | |||||
| code0 {transport = o;} | |||||
| code1 {o->labeltype( FL_NO_LABEL );} | |||||
| class Transport | |||||
| } | |||||
| Fl_Pack clocks_pack {open | |||||
| xywh {139 25 285 46} type HORIZONTAL | |||||
| } { | |||||
| Fl_Box playhead_clock { | |||||
| label PLAYHEAD selected | |||||
| xywh {139 29 137 40} box BORDER_BOX color 46 | |||||
| code0 {o->type( Clock::HMS );} | |||||
| class Clock | |||||
| } | |||||
| Fl_Box {} { | |||||
| label PLAYHEAD selected | |||||
| xywh {278 29 142 40} box BORDER_BOX color 46 | |||||
| code0 {o->type( Clock::BBT );} | |||||
| class Clock | |||||
| } | |||||
| } | |||||
| Fl_Progress capture_buffer_progress { | |||||
| label {c:} | |||||
| xywh {925 26 99 14} labelsize 10 align 4 | |||||
| } | |||||
| Fl_Progress dsp_usage_progress { | |||||
| label {DSP:} | |||||
| xywh {925 55 99 16} labelsize 9 align 4 | |||||
| } | |||||
| Fl_Progress playback_buffer_progress { | |||||
| label {p:} | |||||
| xywh {925 40 99 14} labelsize 10 align 4 | |||||
| } | |||||
| Fl_Box {} { | |||||
| label {<empty>} | |||||
| xywh {427 29 469 42} | |||||
| code0 {o->labeltype( FL_NO_LABEL );} | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -85,6 +85,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| _enable_measure_lines = true; | _enable_measure_lines = true; | ||||
| X = Y = 0; | X = Y = 0; | ||||
| { | { | ||||
| Scalebar *o = new Scalebar( X, Y + H - 18, W - 18, 18 ); | Scalebar *o = new Scalebar( X, Y + H - 18, W - 18, 18 ); | ||||
| @@ -101,7 +102,6 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| Fl_Scrollbar *o = new Fl_Scrollbar( X + W - 18, Y, 18, H - 18 ); | Fl_Scrollbar *o = new Fl_Scrollbar( X + W - 18, Y, 18, H - 18 ); | ||||
| o->type( FL_VERTICAL ); | o->type( FL_VERTICAL ); | ||||
| // o->step( 10 ); | |||||
| o->callback( cb_scroll, this ); | o->callback( cb_scroll, this ); | ||||
| vscroll = o; | vscroll = o; | ||||
| } | } | ||||
| @@ -115,15 +115,10 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| o->color( FL_RED ); | o->color( FL_RED ); | ||||
| /* o->add( new Tempo_Point( 0, 120 ) ); */ | |||||
| /* o->add( new Tempo_Point( 56000, 250 ) ); */ | |||||
| o->label( "Tempo" ); | o->label( "Tempo" ); | ||||
| o->align( FL_ALIGN_LEFT ); | o->align( FL_ALIGN_LEFT ); | ||||
| tempo_track = o; | tempo_track = o; | ||||
| // o->end(); | |||||
| } | } | ||||
| { | { | ||||
| @@ -131,15 +126,10 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| o->color( fl_color_average( FL_RED, FL_WHITE, 0.50f ) ); | o->color( fl_color_average( FL_RED, FL_WHITE, 0.50f ) ); | ||||
| /* o->add( new Time_Point( 0, 4, 4 ) ); */ | |||||
| /* o->add( new Time_Point( 345344, 6, 8 ) ); */ | |||||
| o->label( "Time" ); | o->label( "Time" ); | ||||
| o->align( FL_ALIGN_LEFT ); | o->align( FL_ALIGN_LEFT ); | ||||
| time_track = o; | time_track = o; | ||||
| // o->end(); | |||||
| } | } | ||||
| { | { | ||||
| @@ -147,15 +137,10 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| o->color( FL_GREEN ); | o->color( FL_GREEN ); | ||||
| /* o->add( new Time_Point( 0, 4, 4 ) ); */ | |||||
| /* o->add( new Time_Point( 345344, 6, 8 ) ); */ | |||||
| o->label( "Ruler" ); | o->label( "Ruler" ); | ||||
| o->align( FL_ALIGN_LEFT ); | o->align( FL_ALIGN_LEFT ); | ||||
| ruler_track = o; | ruler_track = o; | ||||
| // o->end(); | |||||
| } | } | ||||
| o->size( o->w(), o->child( 0 )->h() * o->children() ); | o->size( o->w(), o->child( 0 )->h() * o->children() ); | ||||
| @@ -165,10 +150,6 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| { | { | ||||
| /* Fl_Scroll *o = new Fl_Scroll( 0, 24 * 2, 800, 600 - (24 * 3) ); */ | |||||
| /* o->type( Fl_Scroll::VERTICAL_ALWAYS ); */ | |||||
| _sample_rate = 44100; | _sample_rate = 44100; | ||||
| _fpp = 256; | _fpp = 256; | ||||
| _length = _sample_rate * 60 * 2; | _length = _sample_rate * 60 * 2; | ||||
| @@ -178,26 +159,10 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||||
| o->type( Fl_Pack::VERTICAL ); | o->type( Fl_Pack::VERTICAL ); | ||||
| o->spacing( 0 ); | o->spacing( 0 ); | ||||
| /* for ( int i = 1; i--; ) */ | |||||
| /* { */ | |||||
| /* // Track *t = new Track( 0, 0, W, 75 ); */ | |||||
| /* Track *t = new Track( 0, 0, W, 30 ); */ | |||||
| /* Sequence *o = new Audio_Sequence( 0, 0, 1, 100 ); */ | |||||
| /* t->track( o ); */ | |||||
| /* t->add( new Audio_Sequence( 0, 0, 1, 100 ) ); */ | |||||
| /* t->add( new Audio_Sequence( 0, 0, 1, 100 ) ); */ | |||||
| /* t->add_control( new Control_Sequence( 0, 0, 1, 100 ) ); */ | |||||
| /* t->color( (Fl_Color)rand() ); */ | |||||
| /* } */ | |||||
| tracks = o; | tracks = o; | ||||
| o->end(); | o->end(); | ||||
| resizable( o ); | |||||
| } | } | ||||
| /* scroll = o; */ | |||||
| /* o->end(); */ | |||||
| } | } | ||||
| @@ -434,9 +399,16 @@ Timeline::draw_clip ( void * v, int X, int Y, int W, int H ) | |||||
| } | } | ||||
| static unsigned char *rect_image; | |||||
| // static unsigned char *rect_image; | |||||
| void | |||||
| Timeline::resize ( int X, int Y, int W, int H ) | |||||
| { | |||||
| Fl_Overlay_Window::resize( X, Y, W, H ); | |||||
| /* why is this necessary? */ | |||||
| rulers->resize( Track::width(), 0, W, rulers->h() ); | |||||
| } | |||||
| void | void | ||||
| Timeline::draw ( void ) | Timeline::draw ( void ) | ||||
| @@ -143,6 +143,8 @@ public: | |||||
| void yposition ( int Y ); | void yposition ( int Y ); | ||||
| void draw_playhead ( void ); | void draw_playhead ( void ); | ||||
| void redraw_playhead ( void ); | void redraw_playhead ( void ); | ||||
| void resize ( int X, int Y, int W, int H ); | |||||
| void draw ( void ); | void draw ( void ); | ||||
| void draw_overlay ( void ); | void draw_overlay ( void ); | ||||
| int handle ( int m ); | int handle ( int m ); | ||||
| @@ -184,7 +184,8 @@ Track::init ( void ) | |||||
| Fl_Pack *o = pack = new Fl_Pack( width(), 0, 1006, 115 ); | Fl_Pack *o = pack = new Fl_Pack( width(), 0, 1006, 115 ); | ||||
| o->labeltype( FL_NO_LABEL ); | o->labeltype( FL_NO_LABEL ); | ||||
| o->resize( x() + width(), y(), w() - width(), h() ); | o->resize( x() + width(), y(), w() - width(), h() ); | ||||
| Fl_Group::current()->resizable( o ); | |||||
| resizable( o ); | |||||
| { | { | ||||
| Fl_Pack *o = control = new Fl_Pack( width(), 0, pack->w(), 115 ); | Fl_Pack *o = control = new Fl_Pack( width(), 0, pack->w(), 115 ); | ||||
| @@ -54,40 +54,34 @@ | |||||
| #include "Engine.H" | #include "Engine.H" | ||||
| // #include "Clock.H" | |||||
| #include "TLE.H" | |||||
| #include "Clock.H" | |||||
| Engine *engine; | Engine *engine; | ||||
| Timeline *timeline; | Timeline *timeline; | ||||
| Transport *transport; | Transport *transport; | ||||
| void cb_undo ( Fl_Widget *w, void *v ) | |||||
| { | |||||
| Loggable::undo(); | |||||
| } | |||||
| /* void cb_undo ( Fl_Widget *w, void *v ) */ | |||||
| /* { */ | |||||
| /* Loggable::undo(); */ | |||||
| /* } */ | |||||
| const float UPDATE_FREQ = 0.05f; | |||||
| /* const float UPDATE_FREQ = 0.05f; */ | |||||
| static void | |||||
| clock_update_cb ( void *w ) | |||||
| { | |||||
| Fl::repeat_timeout( UPDATE_FREQ, clock_update_cb, w ); | |||||
| /* static void */ | |||||
| /* clock_update_cb ( void *w ) */ | |||||
| /* { */ | |||||
| /* Fl::repeat_timeout( UPDATE_FREQ, clock_update_cb, w ); */ | |||||
| ((Clock *)w)->set( transport->frame ); | |||||
| } | |||||
| /* ((Clock *)w)->set( transport->frame ); */ | |||||
| /* } */ | |||||
| int | int | ||||
| main ( int argc, char **argv ) | 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" ); | |||||
| // Fl::scheme( "gtk+" ); | |||||
| /* welcome to C++ */ | /* welcome to C++ */ | ||||
| LOG_REGISTER_CREATE( Region ); | LOG_REGISTER_CREATE( Region ); | ||||
| @@ -100,29 +94,17 @@ main ( int argc, char **argv ) | |||||
| /* TODO: change to seesion dir */ | /* TODO: change to seesion dir */ | ||||
| transport = new Transport( 0, 0, 120, 40 ); | |||||
| TLE tle; | |||||
| /* we don't really need a pointer for this */ | /* we don't really need a pointer for this */ | ||||
| engine = new Engine; | engine = new Engine; | ||||
| engine->init(); | engine->init(); | ||||
| timeline = new Timeline( 0, 100, main_window->w(), main_window->h() - 24, "Timeline" ); | |||||
| Loggable::open( "history" ); | Loggable::open( "history" ); | ||||
| Fl_Button *o = new Fl_Button( 0, 0, 50, 24, "undo" ); | |||||
| o->shortcut( FL_CTRL + 'z' ); | |||||
| o->callback( cb_undo, 0 ); | |||||
| { | |||||
| Clock *o = new Clock( 400, 0, 170, 40, "PLAYHEAD" ); | |||||
| o->color( fl_darker( FL_GRAY ) ); | |||||
| Fl::add_timeout( UPDATE_FREQ, clock_update_cb, o ); | |||||
| } | |||||
| // Fl::add_timeout( UPDATE_FREQ, clock_update_cb, o ); | |||||
| main_window->end(); | |||||
| main_window->show( argc, argv ); | |||||
| tle.main_window->show( argc, argv ); | |||||
| Fl::run(); | Fl::run(); | ||||
| } | } | ||||