Browse Source

Work on adding the rest of the GUI.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
d85cc1c61c
8 changed files with 309 additions and 81 deletions
  1. +4
    -0
      Timeline/Audio_Sequence.H
  2. +6
    -7
      Timeline/Clock.H
  3. +1
    -0
      Timeline/Makefile
  4. +267
    -0
      Timeline/TLE.fl
  5. +10
    -38
      Timeline/Timeline.C
  6. +2
    -0
      Timeline/Timeline.H
  7. +2
    -1
      Timeline/Track.C
  8. +17
    -35
      Timeline/main.C

+ 4
- 0
Timeline/Audio_Sequence.H View File

@@ -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 ( )


+ 6
- 7
Timeline/Clock.H View File

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


+ 1
- 0
Timeline/Makefile View File

@@ -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 \


+ 267
- 0
Timeline/TLE.fl 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 );}
}
}
}
}

+ 10
- 38
Timeline/Timeline.C 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; _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 )


+ 2
- 0
Timeline/Timeline.H View File

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


+ 2
- 1
Timeline/Track.C View File

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


+ 17
- 35
Timeline/main.C View File

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

Loading…
Cancel
Save