Add solo and record blinkers to TLE.
Also, fix bug in soloing when a solo'd track was removed.
This commit is contained in:
parent
cdbf01183c
commit
8ae5783c3e
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Copyright (C) 2008 Jonathan Moore Liles */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify it */
|
||||||
|
/* under the terms of the GNU General Public License as published by the */
|
||||||
|
/* Free Software Foundation; either version 2 of the License, or (at your */
|
||||||
|
/* option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, but WITHOUT */
|
||||||
|
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
|
||||||
|
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */
|
||||||
|
/* more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License along */
|
||||||
|
/* with This program; see the file COPYING. If not,write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
#include <FL/Fl_Button.H>
|
||||||
|
#include <FL/Fl.H>
|
||||||
|
|
||||||
|
const float BLINK_FREQ = 0.5f;
|
||||||
|
|
||||||
|
class Fl_Blinker : public Fl_Button
|
||||||
|
{
|
||||||
|
|
||||||
|
bool _on;
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_cb ( void *v )
|
||||||
|
{
|
||||||
|
((Fl_Blinker*)v)->update_cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
update_cb ( void )
|
||||||
|
{
|
||||||
|
Fl::repeat_timeout( BLINK_FREQ, update_cb, this );
|
||||||
|
|
||||||
|
_on = ! _on;
|
||||||
|
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Fl_Blinker ( int X, int Y, int W, int H, const char *L )
|
||||||
|
: Fl_Button( X, Y, W, H, L )
|
||||||
|
{
|
||||||
|
_on = false;
|
||||||
|
Fl::add_timeout( BLINK_FREQ, update_cb, this );
|
||||||
|
|
||||||
|
type( FL_TOGGLE_BUTTON );
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual
|
||||||
|
~Fl_Blinker ()
|
||||||
|
{
|
||||||
|
Fl::remove_timeout( update_cb, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void
|
||||||
|
draw ( void )
|
||||||
|
{
|
||||||
|
draw_box( value() ? box() : down_box(), x(), y(), w(), h(), ( value() != 0 && _on ) ? selection_color() : color() );
|
||||||
|
draw_label();
|
||||||
|
}
|
||||||
|
};
|
|
@ -115,7 +115,7 @@ public:
|
||||||
|
|
||||||
~Clock ( )
|
~Clock ( )
|
||||||
{
|
{
|
||||||
Fl::remove_timeout( update_cb );
|
Fl::remove_timeout( update_cb, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
void run ( nframes_t *v )
|
void run ( nframes_t *v )
|
||||||
|
|
|
@ -198,7 +198,7 @@ Loggable::progress_callback( &TLE::progress_cb, this );} {}
|
||||||
} {
|
} {
|
||||||
Fl_Window main_window {
|
Fl_Window main_window {
|
||||||
label Timeline open
|
label Timeline open
|
||||||
private xywh {254 117 1025 770} type Double resizable xclass Non_DAW visible
|
private xywh {133 113 1025 770} type Double resizable xclass Non_DAW visible
|
||||||
} {
|
} {
|
||||||
Fl_Menu_Bar menubar {open
|
Fl_Menu_Bar menubar {open
|
||||||
private xywh {0 0 1024 25}
|
private xywh {0 0 1024 25}
|
||||||
|
@ -605,7 +605,7 @@ ab.run();}
|
||||||
}
|
}
|
||||||
Fl_Box {} {
|
Fl_Box {} {
|
||||||
label {<empty>}
|
label {<empty>}
|
||||||
xywh {487 27 378 42} resizable
|
xywh {487 27 308 42} resizable
|
||||||
code0 {o->labeltype( FL_NO_LABEL );}
|
code0 {o->labeltype( FL_NO_LABEL );}
|
||||||
}
|
}
|
||||||
Fl_Group {} {open
|
Fl_Group {} {open
|
||||||
|
@ -636,6 +636,18 @@ ab.run();}
|
||||||
private xywh {921 41 104 14} labelsize 10
|
private xywh {921 41 104 14} labelsize 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Fl_Button solo_blinker {
|
||||||
|
label SOLO
|
||||||
|
xywh {810 30 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 74 selection_color 92 labelfont 2 labelcolor 39 deactivate
|
||||||
|
code0 {\#include "FL/Fl_Blinker.H"}
|
||||||
|
class Fl_Blinker
|
||||||
|
}
|
||||||
|
Fl_Button rec_blinker {
|
||||||
|
label REC
|
||||||
|
xywh {810 50 50 15} box ROUNDED_BOX down_box ROUNDED_BOX color 72 selection_color 88 labelfont 2 labelcolor 39 deactivate
|
||||||
|
code0 {\#include "FL/Fl_Blinker.H"}
|
||||||
|
class Fl_Blinker
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Fl_Progress progress {
|
Fl_Progress progress {
|
||||||
label {0%}
|
label {0%}
|
||||||
|
@ -708,7 +720,7 @@ snprintf( s, 5, "%d%%", (int)v );
|
||||||
|
|
||||||
p->label( s );} {}
|
p->label( s );} {}
|
||||||
}
|
}
|
||||||
Function {update_status()} {private
|
Function {update_status()} {open private
|
||||||
} {
|
} {
|
||||||
code {static char cbp[5], pbp[5], clp[5];
|
code {static char cbp[5], pbp[5], clp[5];
|
||||||
|
|
||||||
|
@ -733,9 +745,13 @@ if ( engine->zombified() && ! zombie )
|
||||||
{
|
{
|
||||||
zombie = true;
|
zombie = true;
|
||||||
fl_alert( "Disconnected from JACK!" );
|
fl_alert( "Disconnected from JACK!" );
|
||||||
}} {}
|
}
|
||||||
|
|
||||||
|
solo_blinker->value( Track::soloing() );
|
||||||
|
rec_blinker->value( transport->rolling && transport->rec_enabled() );} {selected
|
||||||
}
|
}
|
||||||
Function {update_cb( void *v )} {private return_type {static void}
|
}
|
||||||
|
Function {update_cb( void *v )} {open private return_type {static void}
|
||||||
} {
|
} {
|
||||||
code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
|
code {Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v );
|
||||||
|
|
||||||
|
@ -782,8 +798,7 @@ Fl::check();} {}
|
||||||
|
|
||||||
snprintf( pat, 256, "file://%s%s.html", DOCUMENT_PATH, file );
|
snprintf( pat, 256, "file://%s%s.html", DOCUMENT_PATH, file );
|
||||||
|
|
||||||
open_url( pat );} {selected
|
open_url( pat );} {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,17 @@ Track::Track ( ) : Fl_Group( 0, 0, 1, 1 )
|
||||||
timeline->add_track( this );
|
timeline->add_track( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Track::solo ( bool b )
|
||||||
|
{
|
||||||
|
if ( b && ! solo_button->value() )
|
||||||
|
++_soloing;
|
||||||
|
else if ( ! b && solo_button->value() )
|
||||||
|
--_soloing;
|
||||||
|
|
||||||
|
solo_button->value( b );
|
||||||
|
}
|
||||||
|
|
||||||
Track::~Track ( )
|
Track::~Track ( )
|
||||||
{
|
{
|
||||||
Loggable::block_start();
|
Loggable::block_start();
|
||||||
|
@ -89,6 +100,8 @@ Track::~Track ( )
|
||||||
|
|
||||||
_sequence = NULL;
|
_sequence = NULL;
|
||||||
|
|
||||||
|
solo( false );
|
||||||
|
|
||||||
if ( _name )
|
if ( _name )
|
||||||
free( _name );
|
free( _name );
|
||||||
|
|
||||||
|
|
|
@ -179,6 +179,8 @@ public:
|
||||||
bool armed ( void ) const { return record_button->value(); }
|
bool armed ( void ) const { return record_button->value(); }
|
||||||
bool selected ( void ) const { return _selected; }
|
bool selected ( void ) const { return _selected; }
|
||||||
|
|
||||||
|
void solo ( bool b );
|
||||||
|
|
||||||
static void cb_input_field ( Fl_Widget *w, void *v );
|
static void cb_input_field ( Fl_Widget *w, void *v );
|
||||||
void cb_input_field ( void );
|
void cb_input_field ( void );
|
||||||
static void cb_button ( Fl_Widget *w, void *v );
|
static void cb_button ( Fl_Widget *w, void *v );
|
||||||
|
|
|
@ -106,6 +106,12 @@ Transport::cb_button ( Fl_Widget *w )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Transport::rec_enabled ( void ) const
|
||||||
|
{
|
||||||
|
return _record_button->value();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Transport::toggle_record ( void )
|
Transport::toggle_record ( void )
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,6 +51,7 @@ public:
|
||||||
|
|
||||||
Transport ( int X, int Y, int W, int H, const char *L=0 );
|
Transport ( int X, int Y, int W, int H, const char *L=0 );
|
||||||
|
|
||||||
|
bool rec_enabled ( void ) const;
|
||||||
|
|
||||||
void toggle_record ( void );
|
void toggle_record ( void );
|
||||||
int handle ( int m );
|
int handle ( int m );
|
||||||
|
|
Loading…
Reference in New Issue