Timeline: Redesign track header and add option to overlay control sequences.
Also, assign random color to individual control sequence (which the user may edit).
This commit is contained in:
parent
f089d61ee2
commit
753ac2b56a
|
@ -62,7 +62,7 @@ public:
|
|||
DEFAULT=500
|
||||
};
|
||||
|
||||
Fl_Blink_Button ( int X, int Y, int W, int H, const char *L )
|
||||
Fl_Blink_Button ( int X, int Y, int W, int H, const char *L=0 )
|
||||
: Fl_Button( X, Y, W, H, L )
|
||||
{
|
||||
_blinking = true;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
/* Just like an Fl_Input, except that when not being edited it
|
||||
* displays just like a label. */
|
||||
|
||||
#include <FL/fl_draw.H>
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Input.H>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "debug.h"
|
||||
|
||||
#include <FL/fl_ask.H>
|
||||
#include <FL/Fl_Color_Chooser.H>
|
||||
|
||||
#include "Control_Sequence.H"
|
||||
#include "Track.H"
|
||||
|
@ -121,6 +122,7 @@ Control_Sequence::get ( Log_Entry &e ) const
|
|||
{
|
||||
e.add( ":track", _track );
|
||||
e.add( ":name", name() );
|
||||
e.add( ":color", color() );
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -187,6 +189,10 @@ Control_Sequence::set ( Log_Entry &e )
|
|||
{
|
||||
_persistent_osc_connections.push_back( strdup( v ) );
|
||||
}
|
||||
else if ( ! strcmp( ":color", s ) )
|
||||
{
|
||||
color( (Fl_Color)atol( v ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -282,17 +288,44 @@ Control_Sequence::draw_curve ( bool filled )
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Control_Sequence::draw_box ( void )
|
||||
{
|
||||
const int bx = x();
|
||||
const int by = y();
|
||||
const int bw = w();
|
||||
const int bh = h();
|
||||
|
||||
int X, Y, W, H;
|
||||
|
||||
fl_clip_box( bx, by, bw, bh, X, Y, W, H );
|
||||
|
||||
// fl_rectf( X, Y, W, H, fl_color_average( FL_BLACK, FL_BACKGROUND_COLOR, 0.3 ) );
|
||||
fl_rectf( X,Y,W,H, fl_color_average( FL_BLACK, FL_WHITE, 0.90 ) );
|
||||
|
||||
if ( draw_with_grid )
|
||||
{
|
||||
fl_color( FL_GRAY );
|
||||
|
||||
const int inc = bh / 10;
|
||||
if ( inc )
|
||||
for ( int gy = 0; gy < bh; gy += inc )
|
||||
fl_line( X, by + gy, X + W, by + gy );
|
||||
|
||||
}
|
||||
|
||||
timeline->draw_measure_lines( X, Y, W, H );
|
||||
|
||||
fl_color( FL_BLACK );
|
||||
fl_line( x(), y(), x() + w(), y() );
|
||||
fl_line( x(), y() + h() - 1, w(), y() + h() - 1 );
|
||||
}
|
||||
|
||||
void
|
||||
Control_Sequence::draw ( void )
|
||||
{
|
||||
// draw_box();
|
||||
|
||||
fl_push_clip( x(), y(), w(), h() );
|
||||
|
||||
|
||||
/* draw the box with the ends cut off. */
|
||||
// draw_box( box(), x() - Fl::box_dx( box() ), y(), w() + Fl::box_dw( box() ) + 1, h(), color() );
|
||||
|
||||
const int bx = x();
|
||||
const int by = y() + Fl::box_dy( box() );
|
||||
const int bw = w();
|
||||
|
@ -307,24 +340,14 @@ Control_Sequence::draw ( void )
|
|||
const Fl_Color color = active ? this->color() : fl_inactive( this->color() );
|
||||
// const Fl_Color selection_color = active ? this->selection_color() : fl_inactive( this->selection_color() );
|
||||
|
||||
fl_rectf( X, Y, W, H, fl_color_average( FL_WHITE, FL_BACKGROUND_COLOR, 0.3 ) );
|
||||
|
||||
if ( draw_with_grid )
|
||||
{
|
||||
fl_color( FL_GRAY );
|
||||
|
||||
const int inc = bh / 10;
|
||||
if ( inc )
|
||||
for ( int gy = 0; gy < bh; gy += inc )
|
||||
fl_line( X, by + gy, X + W, by + gy );
|
||||
|
||||
}
|
||||
if ( box() != FL_NO_BOX )
|
||||
draw_box();
|
||||
|
||||
if ( interpolation() != None )
|
||||
{
|
||||
if ( draw_with_polygon )
|
||||
{
|
||||
fl_color( fl_color_add_alpha( color, 100 ) );
|
||||
fl_color( fl_color_add_alpha( color, 60 ) );
|
||||
|
||||
fl_begin_complex_polygon();
|
||||
draw_curve( true );
|
||||
|
@ -342,8 +365,6 @@ Control_Sequence::draw ( void )
|
|||
fl_line_style( FL_SOLID, 0 );
|
||||
}
|
||||
|
||||
timeline->draw_measure_lines( X, Y, W, H );
|
||||
|
||||
if ( interpolation() == None || _highlighted || Fl::focus() == this )
|
||||
for ( list <Sequence_Widget *>::const_iterator r = _widgets.begin(); r != _widgets.end(); r++ )
|
||||
(*r)->draw_box();
|
||||
|
@ -433,6 +454,19 @@ Control_Sequence::menu_cb ( const Fl_Menu_ *m )
|
|||
{
|
||||
Fl::delete_widget( this );
|
||||
}
|
||||
else if ( ! strcmp( picked, "/Color" ) )
|
||||
{
|
||||
unsigned char r, g, b;
|
||||
|
||||
Fl::get_color( color(), r, g, b );
|
||||
|
||||
if ( fl_color_chooser( "Track Color", r, g, b ) )
|
||||
{
|
||||
color( fl_rgb_color( r, g, b ) );
|
||||
}
|
||||
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -581,6 +615,7 @@ Control_Sequence::handle ( int m )
|
|||
menu.add( "Mode/Control Signal (OSC)", 0, 0, 0 , FL_MENU_RADIO | ( mode() == OSC ? FL_MENU_VALUE : 0 ) );
|
||||
|
||||
menu.add( "Rename", 0, 0, 0 );
|
||||
menu.add( "Color", 0, 0, 0 );
|
||||
menu.add( "Remove", 0, 0, 0 );
|
||||
|
||||
menu.callback( &Control_Sequence::menu_cb, (void*)this);
|
||||
|
|
|
@ -87,6 +87,7 @@ protected:
|
|||
}
|
||||
|
||||
|
||||
void draw_box ( void );
|
||||
void draw ( void );
|
||||
int handle ( int m );
|
||||
|
||||
|
|
|
@ -202,8 +202,8 @@ Track::process_output ( nframes_t nframes )
|
|||
}
|
||||
|
||||
/* FIXME: should we blank the control output here or leave it floating? */
|
||||
for ( int i = 0; i < control->children(); i++ )
|
||||
((Control_Sequence*)control->child( i ))->process( nframes );
|
||||
for ( int i = 0; i < ((Fl_Pack*)control)->children(); i++ )
|
||||
((Control_Sequence*)((Fl_Pack*)control)->child( i ))->process( nframes );
|
||||
|
||||
if ( playback_ds )
|
||||
return playback_ds->process( nframes );
|
||||
|
|
|
@ -91,6 +91,10 @@ public:
|
|||
if ( _name ) free( _name );
|
||||
_name = s ? strdup( s ) : NULL;
|
||||
label( _name );
|
||||
|
||||
/* for outside label */
|
||||
if ( (Fl_Widget*)track() )
|
||||
((Fl_Widget*)track())->redraw();
|
||||
}
|
||||
|
||||
void sort ( void );
|
||||
|
|
|
@ -249,7 +249,7 @@ Loggable::progress_callback( &TLE::progress_cb, this );} {}
|
|||
label {Non DAW : Timeline}
|
||||
callback {if ( Fl::event_key() != FL_Escape )
|
||||
timeline->command_quit();} open
|
||||
xywh {551 117 1025 770} type Double resizable
|
||||
xywh {559 209 1025 770} type Double resizable
|
||||
class TLE_Window xclass Non_DAW size_range {900 300 0 0} visible
|
||||
} {
|
||||
Fl_Group {} {
|
||||
|
@ -718,29 +718,35 @@ ab.run();}
|
|||
xywh {740 31 115 40}
|
||||
} {
|
||||
Fl_Button solo_blinker {
|
||||
label SOLO
|
||||
xywh {800 33 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 74 selection_color 92 labelfont 2 labelcolor 39 deactivate
|
||||
label SOLO selected
|
||||
xywh {800 33 50 15} box BORDER_BOX down_box BORDER_BOX color 74 selection_color 92 labelfont 1 labelsize 11 labelcolor 32 deactivate
|
||||
code0 {\#include "FL/Fl_Blink_Button.H"}
|
||||
code1 {o->box( FL_ASYM_BOX );}
|
||||
code2 {o->down_box( FL_ASYM_BOX );}
|
||||
class Fl_Blink_Button
|
||||
}
|
||||
Fl_Button rec_blinker {
|
||||
label REC
|
||||
xywh {800 53 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 72 selection_color 88 labelfont 2 labelcolor 39 deactivate
|
||||
label REC selected
|
||||
xywh {800 53 50 15} box BORDER_BOX down_box BORDER_BOX color 72 selection_color 88 labelfont 1 labelsize 11 labelcolor 32 deactivate
|
||||
code0 {\#include "FL/Fl_Blink_Button.H"}
|
||||
code1 {o->box( FL_ASYM_BOX );}
|
||||
code2 {o->down_box( FL_ASYM_BOX );}
|
||||
class Fl_Blink_Button
|
||||
}
|
||||
Fl_Button selected_blinker {
|
||||
label SEL
|
||||
xywh {745 53 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 13 selection_color 5 labelfont 2 labelcolor 39 deactivate
|
||||
label SEL selected
|
||||
xywh {745 53 50 15} box BORDER_BOX down_box BORDER_BOX color 13 selection_color 5 labelfont 1 labelsize 11 labelcolor 32 deactivate
|
||||
code0 {\#include "FL/Fl_Blink_Button.H"}
|
||||
code1 {o->blink( false );}
|
||||
code1 {o->box( FL_ASYM_BOX );}
|
||||
code2 {o->down_box( FL_ASYM_BOX );}
|
||||
class Fl_Blink_Button
|
||||
}
|
||||
Fl_Button seek_blinker {
|
||||
label SEEK
|
||||
xywh {745 33 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 10 selection_color 2 labelfont 2 labelcolor 39 deactivate
|
||||
label SEEK selected
|
||||
xywh {745 33 50 15} box BORDER_BOX down_box BORDER_BOX color 10 selection_color 2 labelfont 1 labelsize 11 labelcolor 32 deactivate
|
||||
code0 {\#include "FL/Fl_Blink_Button.H"}
|
||||
code1 {o->blink_interval( Fl_Blink_Button::FAST );}
|
||||
code1 {o->box( FL_ASYM_BOX );}
|
||||
code2 {o->down_box( FL_ASYM_BOX );}
|
||||
class Fl_Blink_Button
|
||||
}
|
||||
}
|
||||
|
@ -754,7 +760,7 @@ ab.run();}
|
|||
class Fl_Button
|
||||
}
|
||||
}
|
||||
Fl_Group progress_group {open selected
|
||||
Fl_Group progress_group {open
|
||||
xywh {295 352 450 79} hide
|
||||
} {
|
||||
Fl_Progress progress {
|
||||
|
@ -983,7 +989,7 @@ if ( logo_box->image() )
|
|||
((Fl_Shared_Image*)logo_box->image())->release();
|
||||
logo_box->image( NULL );
|
||||
}} open
|
||||
private xywh {1232 180 520 775} type Double modal visible
|
||||
private xywh {1240 261 520 775} type Double modal visible
|
||||
} {
|
||||
Fl_Value_Output {} {
|
||||
label {Sample Rate}
|
||||
|
|
|
@ -1761,9 +1761,12 @@ Timeline::length ( void ) const
|
|||
nframes_t l = 0;
|
||||
|
||||
for ( int i = tracks->children(); i--; )
|
||||
l = max( l, ((Track*)tracks->child( i ))->sequence()->length() );
|
||||
|
||||
// adjust_panzoomer();
|
||||
{
|
||||
Sequence *t = ((Track*)tracks->child( i ))->sequence();
|
||||
|
||||
if ( t )
|
||||
l = max( l, ((Track*)tracks->child( i ))->sequence()->length() );
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
@ -2125,12 +2128,8 @@ Timeline::connect_osc ( void )
|
|||
for ( int i = tracks->children(); i-- ; )
|
||||
{
|
||||
Track *t = (Track*)tracks->child( i );
|
||||
|
||||
for ( int j = t->control->children(); j--; )
|
||||
{
|
||||
Control_Sequence *c = (Control_Sequence*)t->control->child( j );
|
||||
c->connect_osc();
|
||||
}
|
||||
|
||||
t->connect_osc();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2166,14 +2165,7 @@ Timeline::process_osc ( void )
|
|||
{
|
||||
Track *t = (Track*)tracks->child( i );
|
||||
|
||||
if ( t->control )
|
||||
{
|
||||
for ( int j = t->control->children(); j--; )
|
||||
{
|
||||
Control_Sequence *c = (Control_Sequence*)t->control->child( j );
|
||||
c->process_osc();
|
||||
}
|
||||
}
|
||||
t->process_osc();
|
||||
}
|
||||
|
||||
unlock();
|
||||
|
|
|
@ -33,19 +33,93 @@
|
|||
#include <FL/Fl_Color_Chooser.H>
|
||||
#include <FL/Fl.H>
|
||||
#include "FL/Fl_Scalepack.H"
|
||||
#include "FL/Fl_Blink_Button.H"
|
||||
|
||||
#include "Engine/Engine.H" // for lock()
|
||||
|
||||
#include "Control_Sequence.H"
|
||||
#include "Annotation_Sequence.H"
|
||||
|
||||
#include "Track_Header.H"
|
||||
|
||||
#include "const.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
static Fl_Color
|
||||
random_color ( void )
|
||||
{
|
||||
return fl_rgb_color( rand() % 255, rand() % 255, rand() % 255 );
|
||||
}
|
||||
|
||||
static Fl_Menu_Button _menu( 0, 0, 0, 0, "Track" );
|
||||
|
||||
class Fl_Sometimes_Pack : public Fl_Pack
|
||||
{
|
||||
bool _pack;
|
||||
|
||||
public:
|
||||
|
||||
Fl_Sometimes_Pack ( int X, int Y, int W, int H, const char *L=0 ) : Fl_Pack(X,Y,W,H,L)
|
||||
{
|
||||
_pack = true;
|
||||
}
|
||||
|
||||
virtual ~Fl_Sometimes_Pack ( )
|
||||
{
|
||||
}
|
||||
|
||||
void pack ( bool b )
|
||||
{
|
||||
if ( b != _pack )
|
||||
redraw();
|
||||
|
||||
_pack = b;
|
||||
}
|
||||
|
||||
bool pack ( void ) const
|
||||
{
|
||||
return _pack;
|
||||
}
|
||||
|
||||
virtual void draw ( void )
|
||||
{
|
||||
/* draw_box(); */
|
||||
|
||||
if ( _pack )
|
||||
{
|
||||
for ( int i = 0; i < children(); i++ )
|
||||
{
|
||||
Fl_Widget *o = child( i );
|
||||
|
||||
o->box( FL_FLAT_BOX );
|
||||
}
|
||||
|
||||
Fl_Pack::draw();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( children() )
|
||||
{
|
||||
for ( int i = 0; i < children(); i++ )
|
||||
{
|
||||
Fl_Widget *o = child( i );
|
||||
|
||||
if ( i != 0 )
|
||||
o->box( FL_NO_BOX );
|
||||
|
||||
o->resize( x(),y(),w(), o->h() );
|
||||
}
|
||||
resize( x(), y(), w(), child(0)->h() );
|
||||
}
|
||||
|
||||
Fl_Group::draw();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
int Track::_soloing = 0;
|
||||
|
||||
const char *Track::capture_format = "Wav 24";
|
||||
|
@ -61,7 +135,7 @@ Track::Track ( const char *L, int channels ) :
|
|||
if ( L )
|
||||
name( L );
|
||||
|
||||
color( (Fl_Color)rand() );
|
||||
color( random_color() );
|
||||
|
||||
configure_inputs( channels );
|
||||
configure_outputs( channels );
|
||||
|
@ -117,7 +191,6 @@ Track::init ( void )
|
|||
_sequence = NULL;
|
||||
_name = NULL;
|
||||
_selected = false;
|
||||
_show_all_takes = false;
|
||||
_size = 1;
|
||||
|
||||
record_ds = NULL;
|
||||
|
@ -133,75 +206,41 @@ Track::init ( void )
|
|||
o->box( FL_FLAT_BOX );
|
||||
|
||||
{
|
||||
Fl_Group *o = new Fl_Group( 0, 0, 149, 70 );
|
||||
o->color( ( Fl_Color ) 53 );
|
||||
o->box( FL_THIN_UP_BOX );
|
||||
Track_Header *o = new Track_Header( x(), y(), 200, 80 );
|
||||
|
||||
{
|
||||
Fl_Input *o = name_field = new Fl_Sometimes_Input( 2, 2, 144, 24 );
|
||||
o->color( FL_BACKGROUND_COLOR );
|
||||
o->labeltype( FL_NO_LABEL );
|
||||
o->labelcolor( FL_GRAY0 );
|
||||
o->textcolor( FL_FOREGROUND_COLOR );
|
||||
name_field = o->name_input;
|
||||
record_button = o->rec_button;
|
||||
mute_button = o->mute_button;
|
||||
solo_button = o->solo_button;
|
||||
show_all_takes_button = o->show_all_takes_button;
|
||||
overlay_controls_button = o->overlay_controls_button;
|
||||
|
||||
name_field->callback( cb_button, this );
|
||||
record_button->callback( cb_button, this );
|
||||
mute_button->callback( cb_button, this );
|
||||
solo_button->callback( cb_button, this );
|
||||
|
||||
o->callback( cb_input_field, (void*)this );
|
||||
}
|
||||
|
||||
{
|
||||
Fl_Scalepack *o = controls = new Fl_Scalepack( 6, 28, 135, 40 );
|
||||
o->spacing( 5 );
|
||||
o->box( FL_NO_BOX );
|
||||
o->type( FL_HORIZONTAL );
|
||||
|
||||
{
|
||||
Fl_Button *o = record_button =
|
||||
new Fl_Button( 6, 28, 26, 24, "rec." );
|
||||
o->type( 1 );
|
||||
o->box( FL_UP_BOX );
|
||||
o->selection_color( FL_RED );
|
||||
o->color( FL_BACKGROUND_COLOR );
|
||||
o->labelsize( 11 );
|
||||
o->callback( cb_button, this );
|
||||
}
|
||||
{
|
||||
Fl_Button *o = mute_button =
|
||||
new Fl_Button( 35, 28, 26, 24, "mute" );
|
||||
o->selection_color( fl_color_average( FL_YELLOW, FL_GREEN, 0.50 ) );
|
||||
o->color( FL_BACKGROUND_COLOR );
|
||||
o->type( 1 );
|
||||
o->box( FL_UP_BOX );
|
||||
o->labelsize( 11 );
|
||||
o->callback( cb_button, this );
|
||||
}
|
||||
{
|
||||
Fl_Button *o = solo_button =
|
||||
new Fl_Button( 66, 28, 26, 24, "solo" );
|
||||
o->selection_color( fl_color_average( FL_YELLOW, FL_RED, 0.50 ) );
|
||||
o->color( FL_BACKGROUND_COLOR );
|
||||
o->type( 1 );
|
||||
o->box( FL_UP_BOX );
|
||||
o->labelsize( 11 );
|
||||
o->callback( cb_button, this );
|
||||
}
|
||||
o->end();
|
||||
}
|
||||
|
||||
{
|
||||
Fl_Box *o = new Fl_Box( 0, 72, 149, 38 );
|
||||
o->box( FL_NO_BOX );
|
||||
Fl_Group::current()->resizable( o );
|
||||
}
|
||||
|
||||
o->size( Track::width(), h() );
|
||||
o->end();
|
||||
}
|
||||
{
|
||||
Fl_Pack *o = pack = new Fl_Pack( width(), 0, 1006, 115 );
|
||||
o->type( Fl_Pack::VERTICAL );
|
||||
o->labeltype( FL_NO_LABEL );
|
||||
o->resize( x() + width(), y(), w() - width(), h() );
|
||||
show_all_takes_button->callback( cb_button, this );
|
||||
overlay_controls_button->callback( cb_button, this );
|
||||
|
||||
resizable( o );
|
||||
o->color( (Fl_Color)53 );
|
||||
}
|
||||
|
||||
/* { */
|
||||
/* Fl_Box *o = new Fl_Box( 0, 72, 149, 38 ); */
|
||||
/* o->box( FL_NO_BOX ); */
|
||||
/* Fl_Group::current()->resizable( o ); */
|
||||
/* } */
|
||||
|
||||
{
|
||||
/* this pack holds the active sequence, annotation sequence, control sequences and takes */
|
||||
Fl_Pack *o = pack = new Fl_Pack( x() + width(), y(), w() - width(), h() );
|
||||
o->type( Fl_Pack::VERTICAL );
|
||||
o->labeltype( FL_NO_LABEL );
|
||||
/* o->resize( x() + width(), y(), w() - width(), h() ); */
|
||||
|
||||
/* resizable( o ); */
|
||||
|
||||
{
|
||||
Fl_Pack *o = annotation = new Fl_Pack( width(), 0, pack->w(), 1 );
|
||||
|
@ -210,8 +249,11 @@ Track::init ( void )
|
|||
}
|
||||
|
||||
{
|
||||
Fl_Pack *o = control = new Fl_Pack( width(), 0, pack->w(), 1 );
|
||||
Fl_Sometimes_Pack *o = control = new Fl_Sometimes_Pack( width(), 0, pack->w(), 1 );
|
||||
o->box( FL_NO_BOX );
|
||||
o->color( FL_BACKGROUND_COLOR );
|
||||
o->type( Fl_Pack::VERTICAL );
|
||||
o->pack( true );
|
||||
o->end();
|
||||
}
|
||||
|
||||
|
@ -260,6 +302,8 @@ Track::set ( Log_Entry &e )
|
|||
}
|
||||
else if ( ! strcmp( s, ":show-all-takes" ) )
|
||||
show_all_takes( atoi( v ) );
|
||||
else if ( ! strcmp( s, ":overlay-controls" ) )
|
||||
overlay_controls( atoi( v ) );
|
||||
else if ( ! strcmp( s, ":solo" ) )
|
||||
solo( atoi( v ) );
|
||||
else if ( ! strcmp( s, ":mute" ) )
|
||||
|
@ -308,7 +352,8 @@ Track::get_unjournaled ( Log_Entry &e ) const
|
|||
e.add( ":height", size() );
|
||||
e.add( ":inputs", input.size() );
|
||||
e.add( ":outputs", output.size() );
|
||||
e.add( ":show-all-takes", _show_all_takes );
|
||||
e.add( ":show-all-takes", show_all_takes() );
|
||||
e.add( ":overlay-controls", overlay_controls() );
|
||||
e.add( ":armed", armed() );
|
||||
e.add( ":mute", mute() );
|
||||
e.add( ":solo", solo() );
|
||||
|
@ -332,13 +377,13 @@ Track::log_children ( void ) const
|
|||
{
|
||||
log_create();
|
||||
|
||||
for ( int i = control->children(); i--; )
|
||||
for ( int i = 0; i < control->children(); i++ )
|
||||
((Sequence*)control->child( i ))->log_children();
|
||||
|
||||
for ( int i = annotation->children(); i--; )
|
||||
for ( int i = 0; i < annotation->children(); i++ )
|
||||
((Sequence*)annotation->child( i ))->log_children();
|
||||
|
||||
for ( int i = takes->children(); i--; )
|
||||
for ( int i = 0; i < takes->children(); i++ )
|
||||
((Sequence*)takes->child( i ))->log_children();
|
||||
|
||||
sequence()->log_children();
|
||||
|
@ -355,11 +400,6 @@ Track::solo ( bool b )
|
|||
solo_button->value( b );
|
||||
}
|
||||
|
||||
void
|
||||
Track::cb_input_field ( Fl_Widget *, void *v )
|
||||
{
|
||||
((Track*)v)->cb_input_field();
|
||||
}
|
||||
|
||||
void
|
||||
Track::cb_button ( Fl_Widget *w, void *v )
|
||||
|
@ -367,36 +407,38 @@ Track::cb_button ( Fl_Widget *w, void *v )
|
|||
((Track*)v)->cb_button( w );
|
||||
}
|
||||
|
||||
void
|
||||
Track::cb_input_field ( void )
|
||||
{
|
||||
log_start();
|
||||
|
||||
name( name_field->value() );
|
||||
|
||||
log_end();
|
||||
}
|
||||
|
||||
void
|
||||
Track::cb_button ( Fl_Widget *w )
|
||||
{
|
||||
Logger log(this);
|
||||
|
||||
if ( w == record_button )
|
||||
if ( w == name_field )
|
||||
{
|
||||
name( name_field->value() );
|
||||
}
|
||||
else if ( w == record_button )
|
||||
{
|
||||
|
||||
}
|
||||
if ( w == mute_button )
|
||||
else if ( w == mute_button )
|
||||
{
|
||||
|
||||
}
|
||||
if ( w == solo_button )
|
||||
else if ( w == solo_button )
|
||||
{
|
||||
if ( solo_button->value() )
|
||||
++_soloing;
|
||||
else
|
||||
--_soloing;
|
||||
}
|
||||
|
||||
else if ( w == show_all_takes_button )
|
||||
{
|
||||
show_all_takes( show_all_takes_button->value() );
|
||||
}
|
||||
else if ( w == overlay_controls_button )
|
||||
{
|
||||
overlay_controls( overlay_controls_button->value() );
|
||||
}
|
||||
}
|
||||
|
||||
static int pack_visible( Fl_Pack *p )
|
||||
|
@ -422,33 +464,56 @@ Track::adjust_size ( void )
|
|||
for ( int i = control->children(); i--; )
|
||||
control->child( i )->size( w(), height() );
|
||||
|
||||
/* FIXME: hack! */
|
||||
control->pack( ! overlay_controls() );
|
||||
|
||||
int TH = height();
|
||||
|
||||
if ( show_all_takes() )
|
||||
{
|
||||
takes->show();
|
||||
TH += height() * takes->children();
|
||||
}
|
||||
else
|
||||
takes->hide();
|
||||
|
||||
if ( control->children() )
|
||||
{
|
||||
control->show();
|
||||
|
||||
if ( overlay_controls() )
|
||||
TH += height() * (control->children() ? 1 : 0);
|
||||
else
|
||||
TH += height() * pack_visible( control );
|
||||
}
|
||||
else
|
||||
control->hide();
|
||||
|
||||
if ( annotation->children() )
|
||||
{
|
||||
annotation->show();
|
||||
TH += 24 * pack_visible( annotation );
|
||||
}
|
||||
else
|
||||
annotation->hide();
|
||||
|
||||
if ( _show_all_takes )
|
||||
{
|
||||
takes->show();
|
||||
Fl_Group::size( w(), height() * ( 1 + takes->children() + pack_visible( control ) ) );
|
||||
}
|
||||
else
|
||||
if ( ! size() )
|
||||
{
|
||||
takes->hide();
|
||||
Fl_Group::size( w(), height() * ( 1 + pack_visible( control ) ) );
|
||||
control->hide();
|
||||
Fl_Group::size( w(), height() );
|
||||
}
|
||||
|
||||
Fl_Group::size( w(), h() + ( ( 24 ) * pack_visible( annotation ) ) );
|
||||
else
|
||||
Fl_Group::size( w(), TH );
|
||||
|
||||
if ( sequence() )
|
||||
sequence()->size( w(), height() );
|
||||
|
||||
/* if ( controls->y() + controls->h() > y() + h() ) */
|
||||
/* controls->hide(); */
|
||||
/* else */
|
||||
/* controls->show(); */
|
||||
|
||||
if ( controls->y() + controls->h() > y() + h() )
|
||||
controls->hide();
|
||||
else
|
||||
controls->show();
|
||||
|
||||
|
||||
/* FIXME: why is this necessary? */
|
||||
if ( parent() )
|
||||
|
@ -550,6 +615,7 @@ Track::sequence ( Audio_Sequence * t )
|
|||
add( sequence() );
|
||||
|
||||
_sequence = t;
|
||||
/* insert following the annotation pack */
|
||||
pack->insert( *t, 1 );
|
||||
|
||||
t->color( FL_GRAY );
|
||||
|
@ -558,6 +624,7 @@ Track::sequence ( Audio_Sequence * t )
|
|||
adjust_size();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Track::add ( Control_Sequence *t )
|
||||
{
|
||||
|
@ -567,10 +634,11 @@ Track::add ( Control_Sequence *t )
|
|||
|
||||
t->track( this );
|
||||
|
||||
t->color( random_color() );
|
||||
|
||||
// control->insert( *t, 0 );
|
||||
control->add( t );
|
||||
|
||||
t->color( color() );
|
||||
|
||||
engine->unlock();
|
||||
|
||||
adjust_size();
|
||||
|
@ -669,6 +737,10 @@ Track::menu_cb ( const Fl_Menu_ *m )
|
|||
{
|
||||
new Control_Sequence( this );
|
||||
}
|
||||
else if ( ! strcmp( picked, "/Overlay controls" ) )
|
||||
{
|
||||
overlay_controls( ! m->mvalue()->value() );
|
||||
}
|
||||
else if ( ! strcmp( picked, "/Add Annotation" ) )
|
||||
{
|
||||
add( new Annotation_Sequence( this ) );
|
||||
|
@ -790,7 +862,7 @@ Track::menu ( void ) const
|
|||
|
||||
_menu.clear();
|
||||
|
||||
_menu.add( "Takes/Show all takes", 0, 0, 0, FL_MENU_TOGGLE | ( _show_all_takes ? FL_MENU_VALUE : 0 ) );
|
||||
_menu.add( "Takes/Show all takes", 0, 0, 0, FL_MENU_TOGGLE | ( show_all_takes() ? FL_MENU_VALUE : 0 ) );
|
||||
_menu.add( "Takes/New", 0, 0, 0 );
|
||||
|
||||
if ( takes->children() )
|
||||
|
@ -813,6 +885,7 @@ Track::menu ( void ) const
|
|||
_menu.add( "Type/Stereo", 0, 0, 0, FL_MENU_RADIO | ( c == 2 ? FL_MENU_VALUE : 0 ));
|
||||
_menu.add( "Type/Quad", 0, 0, 0, FL_MENU_RADIO | ( c == 4 ? FL_MENU_VALUE : 0 ) );
|
||||
_menu.add( "Type/...", 0, 0, 0, FL_MENU_RADIO | ( c == 3 || c > 4 ? FL_MENU_VALUE : 0 ) );
|
||||
_menu.add( "Overlay controls", 0, 0, 0, FL_MENU_TOGGLE | ( overlay_controls() ? FL_MENU_VALUE : 0 ) );
|
||||
_menu.add( "Add Control", 0, 0, 0 );
|
||||
_menu.add( "Add Annotation", 0, 0, 0 );
|
||||
_menu.add( "Color", 0, 0, 0 );
|
||||
|
@ -836,6 +909,48 @@ Track::menu ( void ) const
|
|||
#include "FL/event_name.H"
|
||||
#include "FL/test_press.H"
|
||||
|
||||
void
|
||||
Track::internal_draw ( void )
|
||||
{
|
||||
draw_box();
|
||||
|
||||
/* we have to do this first because the pack(s) size isn't known until draw() */
|
||||
draw_child( *pack );
|
||||
|
||||
|
||||
{
|
||||
Track_Header *o = (Track_Header *)child( 0 );
|
||||
|
||||
o->controls_header_group->resize( x(), control->y(), o->controls_header_group->w(), control->h() );
|
||||
o->takes_header_group->resize( x(), takes->y(), o->takes_header_group->w(), takes->h() );
|
||||
|
||||
if ( takes->visible() )
|
||||
o->takes_header_group->show();
|
||||
else
|
||||
o->takes_header_group->hide();
|
||||
|
||||
if ( control->visible() )
|
||||
o->controls_header_group->show();
|
||||
else
|
||||
o->controls_header_group->hide();
|
||||
|
||||
/* override stupid group resize effect. */
|
||||
o->takes_header_group->child(0)->size( 195, 12 );
|
||||
o->controls_header_group->child(0)->size( 195, 12 );
|
||||
|
||||
}
|
||||
|
||||
draw_child( *child(0));
|
||||
|
||||
if ( takes->visible() )
|
||||
for ( int i = 0; i < takes->children(); i++ )
|
||||
draw_outside_label( *takes->child( i ) );
|
||||
|
||||
if ( control->visible() )
|
||||
for ( int i = 0; i < control->children(); i++ )
|
||||
draw_outside_label( *control->child( i ) );
|
||||
}
|
||||
|
||||
void
|
||||
Track::draw ( void )
|
||||
{
|
||||
|
@ -856,12 +971,12 @@ Track::draw ( void )
|
|||
|
||||
color( FL_RED );
|
||||
|
||||
Fl_Group::draw();
|
||||
internal_draw();
|
||||
|
||||
color( c );
|
||||
}
|
||||
else
|
||||
Fl_Group::draw();
|
||||
internal_draw();
|
||||
|
||||
if ( ! Track::colored_tracks )
|
||||
color( saved_color );
|
||||
|
@ -927,3 +1042,23 @@ Track::handle ( int m )
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
Track::connect_osc ( void )
|
||||
{
|
||||
for ( int j = control->children(); j--; )
|
||||
{
|
||||
Control_Sequence *c = (Control_Sequence*)control->child( j );
|
||||
c->connect_osc();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Track::process_osc ( void )
|
||||
{
|
||||
for ( int j = control->children(); j--; )
|
||||
{
|
||||
Control_Sequence *c = (Control_Sequence*)control->child( j );
|
||||
c->process_osc();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,8 @@ class Record_DS;
|
|||
class Audio_Region;
|
||||
class Audio_File;
|
||||
class Fl_Scalepack;
|
||||
class Fl_Sometimes_Pack;
|
||||
class Fl_Blink_Button;
|
||||
|
||||
//class Audio_Sequence;
|
||||
|
||||
|
@ -99,8 +101,6 @@ private:
|
|||
|
||||
bool _selected;
|
||||
|
||||
bool _show_all_takes;
|
||||
|
||||
int _size;
|
||||
|
||||
int _row;
|
||||
|
@ -118,6 +118,7 @@ private:
|
|||
Track ( );
|
||||
void init ( void );
|
||||
|
||||
void internal_draw ( void );
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -126,6 +127,9 @@ protected:
|
|||
void set ( Log_Entry &e );
|
||||
|
||||
Fl_Scalepack *controls;
|
||||
Fl_Sometimes_Pack *control;
|
||||
Fl_Blink_Button *connected_indicator;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
@ -135,10 +139,11 @@ public:
|
|||
Fl_Button *record_button;
|
||||
Fl_Button *mute_button;
|
||||
Fl_Button *solo_button;
|
||||
Fl_Button *show_all_takes_button;
|
||||
Fl_Button *overlay_controls_button;
|
||||
|
||||
Fl_Pack *pack;
|
||||
Fl_Pack *annotation;
|
||||
Fl_Pack *control;
|
||||
Fl_Pack *takes;
|
||||
|
||||
|
||||
|
@ -163,24 +168,39 @@ public:
|
|||
|
||||
int size ( void ) const { return _size; }
|
||||
|
||||
int ncontrols ( void ) { return control->children(); }
|
||||
int ncontrols ( void ) { return ((Fl_Group*)control)->children(); }
|
||||
|
||||
void adjust_size ( void );
|
||||
void size ( int v );
|
||||
|
||||
int height ( void ) const
|
||||
{
|
||||
static int table[] = { 30, 80, 150, 300 };
|
||||
static int table[] = { 27, 54, 80, 150, 300 };
|
||||
|
||||
return table[ _size ];
|
||||
}
|
||||
|
||||
void show_all_takes ( bool b )
|
||||
{
|
||||
_show_all_takes = b;
|
||||
show_all_takes_button->value( b );
|
||||
adjust_size();
|
||||
}
|
||||
|
||||
bool show_all_takes ( void ) const
|
||||
{
|
||||
return show_all_takes_button->value();
|
||||
}
|
||||
|
||||
void overlay_controls ( bool b )
|
||||
{
|
||||
overlay_controls_button->value( b );
|
||||
adjust_size();
|
||||
}
|
||||
bool overlay_controls ( void ) const
|
||||
{
|
||||
return overlay_controls_button->value();
|
||||
}
|
||||
|
||||
void name ( const char *name )
|
||||
{
|
||||
if ( _name )
|
||||
|
@ -208,13 +228,11 @@ public:
|
|||
int row ( void ) const;
|
||||
void row ( int );
|
||||
|
||||
static void cb_input_field ( Fl_Widget *w, void *v );
|
||||
void cb_input_field ( void );
|
||||
static void cb_button ( Fl_Widget *w, void *v );
|
||||
void cb_button ( Fl_Widget *w );
|
||||
|
||||
|
||||
static int width ( void ) { return 150; }
|
||||
static int width ( void ) { return 200; }
|
||||
|
||||
void sequence ( Audio_Sequence * t );
|
||||
Audio_Sequence * sequence ( void ) const { return _sequence; }
|
||||
|
@ -228,6 +246,9 @@ public:
|
|||
void draw ( void );
|
||||
int handle ( int m );
|
||||
|
||||
void process_osc ( void );
|
||||
void connect_osc ( void );
|
||||
|
||||
/* Engine */
|
||||
const Audio_Region *capture_region ( void ) const;
|
||||
Capture *capture ( void );
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
# data file for the Fltk User Interface Designer (fluid)
|
||||
version 1.0300
|
||||
header_name {.h}
|
||||
code_name {.cxx}
|
||||
decl {\#include "FL/Fl_Sometimes_Input.H"} {public global
|
||||
}
|
||||
|
||||
widget_class Track_Header {open
|
||||
xywh {384 728 200 210} type Double box THIN_UP_BOX resizable visible
|
||||
} {
|
||||
Fl_Group {} {open
|
||||
xywh {5 3 192 48}
|
||||
} {
|
||||
Fl_Input name_input {
|
||||
label {input:}
|
||||
xywh {5 3 192 22} labeltype NO_LABEL align 20 when 8
|
||||
class Fl_Sometimes_Input
|
||||
}
|
||||
Fl_Button track_inputs_indicator {
|
||||
label in
|
||||
tooltip {lit if inputs are connected} xywh {5 27 24 16} box BORDER_BOX color 48 selection_color 90 labelfont 5 labelsize 10 labelcolor 53 hide
|
||||
}
|
||||
Fl_Button track_outputs_indicator {
|
||||
label out
|
||||
tooltip {lit if outputs are connected} xywh {31 27 24 16} box BORDER_BOX color 48 selection_color 90 labelfont 5 labelsize 10 labelcolor 53 hide
|
||||
}
|
||||
Fl_Button overlay_controls_button {
|
||||
label {c-} selected
|
||||
tooltip {Expand controls} xywh {5 26 24 24} type Toggle selection_color 3 labelfont 5 labelsize 12
|
||||
}
|
||||
Fl_Button show_all_takes_button {
|
||||
label {t+} selected
|
||||
tooltip {Show all takes} xywh {32 26 24 24} type Toggle selection_color 3 labelfont 5 labelsize 12
|
||||
}
|
||||
Fl_Button rec_button {
|
||||
label r
|
||||
tooltip {arm for recording} xywh {118 26 24 24} type Toggle selection_color 88 labelfont 5 labelsize 12
|
||||
}
|
||||
Fl_Button mute_button {
|
||||
label m
|
||||
tooltip mute xywh {145 26 24 24} type Toggle selection_color 63 labelfont 5 labelsize 12
|
||||
}
|
||||
Fl_Button solo_button {
|
||||
label s
|
||||
tooltip solo xywh {172 26 24 24} type Toggle selection_color 91 labelfont 5 labelsize 12
|
||||
}
|
||||
}
|
||||
Fl_Group controls_header_group {open
|
||||
xywh {5 53 195 64} labelsize 11 align 25
|
||||
} {
|
||||
Fl_Box {} {
|
||||
label Controls
|
||||
xywh {5 53 195 12} box FLAT_BOX color 47 labelsize 9 align 24
|
||||
code0 {o->color( fl_color_add_alpha( o->color(), 127 ) );}
|
||||
}
|
||||
Fl_Box {} {
|
||||
label spacer
|
||||
xywh {5 63 195 53} labeltype NO_LABEL resizable
|
||||
}
|
||||
}
|
||||
Fl_Group takes_header_group {open
|
||||
xywh {5 115 195 55} labelsize 11 align 25
|
||||
} {
|
||||
Fl_Box {} {
|
||||
label Takes
|
||||
xywh {5 115 195 12} box FLAT_BOX color 47 labelsize 9 align 24
|
||||
code0 {o->color( fl_color_add_alpha( o->color(), 127 ) );}
|
||||
}
|
||||
Fl_Box {} {
|
||||
label spacer
|
||||
xywh {5 126 195 40} labeltype NO_LABEL resizable
|
||||
}
|
||||
}
|
||||
Fl_Box {} {
|
||||
label spacer
|
||||
xywh {0 165 200 45} labeltype NO_LABEL resizable
|
||||
}
|
||||
}
|
||||
|
||||
widget_class Control_Sequence_Header {open
|
||||
xywh {390 981 200 55} type Double visible
|
||||
} {
|
||||
Fl_Input take_name_input {
|
||||
label {input:}
|
||||
xywh {5 3 192 22} labeltype NO_LABEL align 20 when 8
|
||||
class Fl_Sometimes_Input
|
||||
}
|
||||
Fl_Button outputs_indicator {
|
||||
label out
|
||||
tooltip {lit if outputs are connected} xywh {33 26 24 16} box BORDER_BOX color 48 selection_color 90 labelfont 5 labelsize 10
|
||||
}
|
||||
Fl_Output {} {
|
||||
xywh {60 26 92 24} color 32 labeltype NO_LABEL align 20 textsize 9
|
||||
}
|
||||
Fl_Menu_Button {} {open
|
||||
xywh {147 26 24 24} color 52
|
||||
} {}
|
||||
Fl_Button delete_control_button {
|
||||
label X
|
||||
tooltip {Expand controls} xywh {172 26 24 24} color 52 labelfont 5 labelsize 12
|
||||
}
|
||||
}
|
||||
|
||||
widget_class Take_Header {open
|
||||
xywh {868 986 200 50} type Double visible
|
||||
} {
|
||||
Fl_Input take_name_input {
|
||||
label {input:}
|
||||
xywh {5 3 193 22} labeltype NO_LABEL align 20 when 8
|
||||
class Fl_Sometimes_Input
|
||||
}
|
||||
Fl_Button delete_take_button {
|
||||
label X
|
||||
tooltip {Expand controls} xywh {172 26 24 24} color 52 labelfont 5 labelsize 12
|
||||
}
|
||||
Fl_Button set_active_take_button {
|
||||
label {@2}
|
||||
tooltip {select this take as active sequence} xywh {147 26 24 24} color 52 labelfont 5 labelsize 12
|
||||
}
|
||||
}
|
|
@ -78,6 +78,7 @@ src/Sequence_Point.C
|
|||
src/Sequence_Region.C
|
||||
src/Sequence_Widget.C
|
||||
src/TLE.fl
|
||||
src/Track_Header.fl
|
||||
src/Tempo_Point.C
|
||||
src/Tempo_Sequence.C
|
||||
src/Time_Point.C
|
||||
|
|
Loading…
Reference in New Issue