@@ -873,6 +873,22 @@ Chain::port_connect ( jack_port_id_t a, jack_port_id_t b, int connect ) | |||
} | |||
} | |||
void | |||
Chain::update ( void ) | |||
{ | |||
for ( int i = 0; i < controls_pack->children(); ++i ) | |||
{ | |||
Controller_Module *cm = (Controller_Module*)controls_pack->child( i ); | |||
cm->update(); | |||
} | |||
for ( int i = 0; i < modules(); i++ ) | |||
{ | |||
Module *m = module(i); | |||
m->update(); | |||
} | |||
} | |||
void | |||
Chain::update_connection_status ( void *v ) | |||
{ | |||
@@ -95,6 +95,7 @@ public: | |||
Chain ( ); | |||
virtual ~Chain ( ); | |||
void update ( void ); | |||
void draw ( void ); | |||
void resize ( int X, int Y, int W, int H ); | |||
@@ -47,10 +47,6 @@ | |||
const float CONTROL_UPDATE_FREQ = 0.2f; | |||
Controller_Module::Controller_Module ( bool is_default ) : Module( is_default, 50, 100, name() ) | |||
{ | |||
// label( "" ); | |||
@@ -70,15 +66,11 @@ Controller_Module::Controller_Module ( bool is_default ) : Module( is_default, 5 | |||
end(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
log_create(); | |||
} | |||
Controller_Module::~Controller_Module ( ) | |||
{ | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
/* shutdown JACK port, if we have one */ | |||
@@ -427,16 +419,8 @@ Controller_Module::connect_to ( Port *p ) | |||
} | |||
void | |||
Controller_Module::update_cb ( void *v ) | |||
Controller_Module::update ( void ) | |||
{ | |||
((Controller_Module*)v)->update_cb(); | |||
} | |||
void | |||
Controller_Module::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
/* we only need this in CV (JACK) mode, because with other forms | |||
* of control the change happens in the GUI thread and we know it */ | |||
if ( mode() != CV ) | |||
@@ -32,9 +32,6 @@ class Fl_Valuator; | |||
class Controller_Module : public Module | |||
{ | |||
static void update_cb ( void *v ); | |||
void update_cb ( void ); | |||
bool _pad; | |||
volatile float control_value; | |||
@@ -87,6 +84,8 @@ public: | |||
LOG_CREATE_FUNC( Controller_Module ); | |||
virtual void update ( void ); | |||
void process ( nframes_t nframes ); | |||
void draw ( void ) | |||
@@ -40,10 +40,6 @@ | |||
const float CONTROL_UPDATE_FREQ = 0.1f; | |||
Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default ) | |||
: Module ( is_default, 50, 100, name() ) | |||
{ | |||
@@ -71,8 +67,6 @@ Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default ) | |||
align( (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE ) ); | |||
clear_visible_focus(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
} | |||
Meter_Indicator_Module::~Meter_Indicator_Module ( ) | |||
@@ -83,8 +77,6 @@ Meter_Indicator_Module::~Meter_Indicator_Module ( ) | |||
control_value = NULL; | |||
} | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
@@ -140,16 +132,8 @@ Meter_Indicator_Module::set ( Log_Entry &e ) | |||
void | |||
Meter_Indicator_Module::update_cb ( void *v ) | |||
Meter_Indicator_Module::update ( void ) | |||
{ | |||
((Meter_Indicator_Module*)v)->update_cb(); | |||
} | |||
void | |||
Meter_Indicator_Module::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
if ( control_input[0].connected() ) | |||
{ | |||
// A little hack to detect that the connected module's number | |||
@@ -30,8 +30,6 @@ class Meter_Indicator_Module : public Module | |||
{ | |||
Fl_Scalepack *dpm_pack; | |||
static void update_cb ( void *v ); | |||
void update_cb ( void ); | |||
bool _pad; | |||
@@ -41,6 +39,8 @@ class Meter_Indicator_Module : public Module | |||
public: | |||
virtual void update ( void ); | |||
void disable_context_menu ( bool b ) { _disable_context_menu = b; } | |||
void handle_control_changed ( Port *p ); | |||
@@ -32,10 +32,6 @@ | |||
const float METER_UPDATE_FREQ = 0.2f; | |||
Meter_Module::Meter_Module ( ) | |||
: Module ( 50, 100, name() ) | |||
{ | |||
@@ -60,8 +56,6 @@ Meter_Module::Meter_Module ( ) | |||
add_port( p ); | |||
Fl::add_timeout( METER_UPDATE_FREQ, update_cb, this ); | |||
log_create(); | |||
} | |||
@@ -70,24 +64,14 @@ Meter_Module::~Meter_Module ( ) | |||
if ( control_value ) | |||
delete[] control_value; | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
void | |||
Meter_Module::update_cb ( void *v ) | |||
Meter_Module::update ( void ) | |||
{ | |||
((Meter_Module*)v)->update_cb(); | |||
} | |||
void | |||
Meter_Module::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( METER_UPDATE_FREQ, update_cb, this ); | |||
for ( int i = dpm_pack->children(); i--; ) | |||
{ | |||
((DPM*)dpm_pack->child( i ))->value( control_value[i] ); | |||
@@ -29,9 +29,6 @@ class Meter_Module : public Module | |||
volatile float *control_value; | |||
static void update_cb ( void *v ); | |||
void update_cb ( void ); | |||
public: | |||
Meter_Module ( ); | |||
@@ -44,6 +41,8 @@ public: | |||
LOG_CREATE_FUNC( Meter_Module ); | |||
virtual void update ( void ); | |||
protected: | |||
virtual int handle ( int m ); | |||
@@ -48,8 +48,6 @@ | |||
#include "OSC/Endpoint.H" | |||
#include <lo/lo.h> | |||
const double STATUS_UPDATE_FREQ = 0.2f; | |||
extern char *user_config_dir; | |||
extern char *instance_name; | |||
@@ -60,12 +58,6 @@ extern char *instance_name; | |||
extern NSM_Client *nsm; | |||
/* static void update_cb( void *v ) { */ | |||
/* Fl::repeat_timeout( STATUS_UPDATE_FREQ, update_cb, v ); */ | |||
/* ((Mixer*)v)->update(); */ | |||
/* } */ | |||
/************************/ | |||
@@ -294,6 +286,18 @@ void Mixer::cb_menu(Fl_Widget* o) { | |||
{ | |||
fl_theme_chooser(); | |||
} | |||
else if (! strcmp( picked, "&Options/&Display/Update Frequency/15 Hz" ) ) | |||
{ | |||
update_frequency( 15.0f ); | |||
} | |||
else if (! strcmp( picked, "&Options/&Display/Update Frequency/30 Hz" ) ) | |||
{ | |||
update_frequency( 30.0f ); | |||
} | |||
else if (! strcmp( picked, "&Options/&Display/Update Frequency/60 Hz" ) ) | |||
{ | |||
update_frequency( 60.0f ); | |||
} | |||
else if ( ! strcmp( picked, "&Help/&About" ) ) | |||
{ | |||
About_Dialog ab( PIXMAP_PATH "/non-mixer/icon-256x256.png" ); | |||
@@ -333,6 +337,32 @@ void Mixer::cb_menu(Fl_Widget* o, void* v) { | |||
((Mixer*)(v))->cb_menu(o); | |||
} | |||
void Mixer::update_frequency ( float v ) | |||
{ | |||
_update_interval = 1.0f / v; | |||
Fl::remove_timeout( &Mixer::update_cb ); | |||
Fl::add_timeout( _update_interval, &Mixer::update_cb, this ); | |||
} | |||
void | |||
Mixer::update_cb ( void *v ) | |||
{ | |||
((Mixer*)v)->update_cb(); | |||
} | |||
void | |||
Mixer::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( _update_interval, &Mixer::update_cb, this ); | |||
for ( int i = 0; i < mixer_strips->children(); i++ ) | |||
{ | |||
((Mixer_Strip*)mixer_strips->child(i))->update(); | |||
} | |||
} | |||
static void | |||
progress_cb ( int p, void *v ) | |||
{ | |||
@@ -420,6 +450,9 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) : | |||
o->add( "&Mixer/&Import Strip" ); | |||
o->add( "&Mixer/Paste", FL_CTRL + 'v', 0, 0 ); | |||
o->add( "&View/&Theme", 0, 0, 0 ); | |||
/* o->add( "&Options/&Display/Update Frequency/60 Hz", 0, 0, 0, FL_MENU_RADIO ); */ | |||
/* o->add( "&Options/&Display/Update Frequency/30 Hz", 0, 0, 0, FL_MENU_RADIO); */ | |||
/* o->add( "&Options/&Display/Update Frequency/15 Hz", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); */ | |||
o->add( "&Help/&Manual" ); | |||
o->add( "&Help/&About" ); | |||
o->callback( cb_menu, this ); | |||
@@ -468,7 +501,7 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) : | |||
end(); | |||
// Fl::add_timeout( STATUS_UPDATE_FREQ, update_cb, this ); | |||
update_frequency( 15 ); | |||
update_menu(); | |||
@@ -44,6 +44,8 @@ public: | |||
private: | |||
float _update_interval; | |||
int _rows; | |||
Fl_Color system_colors[3]; | |||
@@ -73,7 +75,12 @@ private: | |||
static int osc_non_hello ( const char *, const char *, lo_arg **, int , lo_message msg, void * ); | |||
static void update_cb ( void * ); | |||
void update_cb ( void ); | |||
public: | |||
void update_frequency ( float f ); | |||
virtual int handle ( int m ); | |||
@@ -361,6 +361,10 @@ void | |||
Mixer_Strip::update ( void ) | |||
{ | |||
THREAD_ASSERT( UI ); | |||
meter_indicator->update(); | |||
gain_controller->update(); | |||
_chain->update(); | |||
} | |||
void | |||
@@ -74,6 +74,8 @@ public: | |||
/* true if this module was added by default and not under normal user control */ | |||
bool is_default ( void ) const { return _is_default; } | |||
void is_default ( bool v ) { _is_default = v; } | |||
virtual void update ( void ) {} | |||
class Port | |||
{ | |||