Work on adding the rest of the GUI.

pull/3/head
Jonathan Moore Liles 2008-04-22 21:22:46 -05:00
parent a826f1533e
commit d85cc1c61c
8 changed files with 309 additions and 81 deletions

View File

@ -81,6 +81,10 @@ public:
track->add( this );
log_create();
/* FIXME: temporary */
labeltype( FL_NO_LABEL );
}
~Audio_Sequence ( )

View File

@ -30,12 +30,12 @@ switched between Bar Beat Tick and Wallclock displays */
class Clock : public Fl_Widget
{
enum { BBT, HMS };
nframes_t _when;
public:
enum { BBT, HMS };
static void
frame_to_HMS ( char *dst, int n, nframes_t frame )
{
@ -44,7 +44,7 @@ public:
int M = S / 60; S -= M * 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 )
@ -69,11 +69,10 @@ public:
void draw ( void )
{
// fl_rectf( x(), y(), w(), h(), color() );
draw_box();
char buf[15];
*buf = '\0';
switch ( type() )
{
@ -98,14 +97,14 @@ public:
const int dw = w() - Fl::box_dw( 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--; )
if ( isdigit( buf[ i ] ) )
buf[ i ] = ' ';
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_color( FL_RED );

View File

@ -3,6 +3,7 @@ SRCS= \
Waveform.C \
Region.C \
main.C \
TLE.C \
Sequence.C \
Audio_Sequence.C \
Control_Sequence.C \

267
Timeline/TLE.fl Normal file
View File

@ -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 );}
}
}
}
}

View File

@ -85,6 +85,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi
_enable_measure_lines = true;
X = Y = 0;
{
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 );
o->type( FL_VERTICAL );
// o->step( 10 );
o->callback( cb_scroll, this );
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->add( new Tempo_Point( 0, 120 ) ); */
/* o->add( new Tempo_Point( 56000, 250 ) ); */
o->label( "Tempo" );
o->align( FL_ALIGN_LEFT );
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->add( new Time_Point( 0, 4, 4 ) ); */
/* o->add( new Time_Point( 345344, 6, 8 ) ); */
o->label( "Time" );
o->align( FL_ALIGN_LEFT );
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->add( new Time_Point( 0, 4, 4 ) ); */
/* o->add( new Time_Point( 345344, 6, 8 ) ); */
o->label( "Ruler" );
o->align( FL_ALIGN_LEFT );
ruler_track = o;
// o->end();
}
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;
_fpp = 256;
_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->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;
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
Timeline::draw ( void )

View File

@ -143,6 +143,8 @@ public:
void yposition ( int Y );
void draw_playhead ( void );
void redraw_playhead ( void );
void resize ( int X, int Y, int W, int H );
void draw ( void );
void draw_overlay ( void );
int handle ( int m );

View File

@ -184,7 +184,8 @@ Track::init ( void )
Fl_Pack *o = pack = new Fl_Pack( width(), 0, 1006, 115 );
o->labeltype( FL_NO_LABEL );
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 );

View File

@ -54,40 +54,34 @@
#include "Engine.H"
// #include "Clock.H"
#include "TLE.H"
#include "Clock.H"
Engine *engine;
Timeline *timeline;
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
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++ */
LOG_REGISTER_CREATE( Region );
@ -100,29 +94,17 @@ main ( int argc, char **argv )
/* TODO: change to seesion dir */
transport = new Transport( 0, 0, 120, 40 );
TLE tle;
/* we don't really need a pointer for this */
engine = new Engine;
engine->init();
timeline = new Timeline( 0, 100, main_window->w(), main_window->h() - 24, "Timeline" );
Loggable::open( "history" );
Fl_Button *o = new Fl_Button( 0, 0, 50, 24, "undo" );
o->shortcut( FL_CTRL + 'z' );
o->callback( cb_undo, 0 );
// Fl::add_timeout( UPDATE_FREQ, clock_update_cb, o );
{
Clock *o = new Clock( 400, 0, 170, 40, "PLAYHEAD" );
o->color( fl_darker( FL_GRAY ) );
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();
}