Mixer: Allow user to add internal modules as well as plugins to a chain.
This commit is contained in:
parent
e8eae16fa1
commit
8e0a625312
|
@ -692,9 +692,19 @@ Chain::handle ( int m )
|
||||||
}
|
}
|
||||||
else if ( test_press( FL_BUTTON1 | FL_SHIFT ) )
|
else if ( test_press( FL_BUTTON1 | FL_SHIFT ) )
|
||||||
{
|
{
|
||||||
Module *mod = (Module*)Plugin_Module::pick_plugin();
|
// Module *mod = (Module*)Plugin_Module::pick_plugin();
|
||||||
|
Module *mod = Module::pick_module();
|
||||||
if ( mod )
|
if ( mod )
|
||||||
{
|
{
|
||||||
|
if ( !strcmp( mod->name(), "JACK" ) )
|
||||||
|
{
|
||||||
|
DMESSAGE( "Special casing JACK module" );
|
||||||
|
JACK_Module *jm = (JACK_Module*)mod;
|
||||||
|
jm->chain( this );
|
||||||
|
jm->configure_inputs( m->ninputs() );
|
||||||
|
jm->configure_outputs( m->ninputs() );
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! insert( m, mod ) )
|
if ( ! insert( m, mod ) )
|
||||||
fl_alert( "Cannot insert this module at this point in the chain" );
|
fl_alert( "Cannot insert this module at this point in the chain" );
|
||||||
redraw();
|
redraw();
|
||||||
|
|
|
@ -27,6 +27,12 @@
|
||||||
#include "Module_Parameter_Editor.H"
|
#include "Module_Parameter_Editor.H"
|
||||||
#include "Chain.H"
|
#include "Chain.H"
|
||||||
|
|
||||||
|
#include "JACK_Module.H"
|
||||||
|
#include "Gain_Module.H"
|
||||||
|
#include "Mono_Pan_Module.H"
|
||||||
|
#include "Meter_Module.H"
|
||||||
|
#include "Plugin_Module.H"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Module::Module ( int W, int H, const char *L ) : Fl_Group( 0, 0, W, H, L )
|
Module::Module ( int W, int H, const char *L ) : Fl_Group( 0, 0, W, H, L )
|
||||||
|
@ -307,6 +313,51 @@ Module::draw_label ( void )
|
||||||
delete[] s;
|
delete[] s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <FL/Fl_Menu_Button.H>
|
||||||
|
|
||||||
|
Module *
|
||||||
|
Module::pick_module ( void )
|
||||||
|
{
|
||||||
|
Fl_Menu_Button *menu = new Fl_Menu_Button( 0, 0, 400, 400 );
|
||||||
|
menu->type( Fl_Menu_Button::POPUP3 );
|
||||||
|
|
||||||
|
// menu->add( "JACK", 0, 0, (void*)1 );
|
||||||
|
menu->add( "Gain", 0, 0, (void*)2 );
|
||||||
|
menu->add( "Meter", 0, 0, (void*)3 );
|
||||||
|
menu->add( "Mono Pan", 0, 0, (void*)4 );
|
||||||
|
|
||||||
|
Plugin_Module::add_plugins_to_menu( menu );
|
||||||
|
|
||||||
|
menu->popup();
|
||||||
|
|
||||||
|
if ( menu->value() < 0 )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
void * v = menu->menu()[ menu->value() ].user_data();
|
||||||
|
|
||||||
|
if ( ! v )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
switch ( (int)v )
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
return new JACK_Module();
|
||||||
|
case 2:
|
||||||
|
return new Gain_Module();
|
||||||
|
case 3:
|
||||||
|
return new Meter_Module();
|
||||||
|
case 4:
|
||||||
|
return new Mono_Pan_Module();
|
||||||
|
}
|
||||||
|
|
||||||
|
Plugin_Module::Plugin_Info *pi = (Plugin_Module::Plugin_Info*)v;
|
||||||
|
Plugin_Module *m = new Plugin_Module();
|
||||||
|
|
||||||
|
m->load( pi->id );
|
||||||
|
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
#include "FL/test_press.H"
|
#include "FL/test_press.H"
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -310,6 +310,8 @@ public:
|
||||||
char *get_parameters ( void ) const;
|
char *get_parameters ( void ) const;
|
||||||
void set_parameters ( const char * );
|
void set_parameters ( const char * );
|
||||||
|
|
||||||
|
static Module * pick_module ( void );
|
||||||
|
|
||||||
virtual bool initialize ( void ) { return true; }
|
virtual bool initialize ( void ) { return true; }
|
||||||
|
|
||||||
/* for the given number of inputs, return how many outputs this
|
/* for the given number of inputs, return how many outputs this
|
||||||
|
|
|
@ -107,6 +107,22 @@ Plugin_Module::set ( Log_Entry &e )
|
||||||
|
|
||||||
#include <FL/Fl_Menu_Button.H>
|
#include <FL/Fl_Menu_Button.H>
|
||||||
|
|
||||||
|
void
|
||||||
|
Plugin_Module::add_plugins_to_menu ( Fl_Menu_Button *menu )
|
||||||
|
{
|
||||||
|
Plugin_Module::Plugin_Info *pia = Plugin_Module::discover();
|
||||||
|
|
||||||
|
char path[1024];
|
||||||
|
for ( Plugin_Module::Plugin_Info *pi = pia; pi->path; ++pi )
|
||||||
|
{
|
||||||
|
snprintf( path, sizeof( path ), "%s/%s", "Plugin", pi->path );
|
||||||
|
|
||||||
|
menu->add(path, 0, NULL, pi, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] pia;
|
||||||
|
}
|
||||||
|
|
||||||
/* allow the user to pick a plugin */
|
/* allow the user to pick a plugin */
|
||||||
Plugin_Module *
|
Plugin_Module *
|
||||||
Plugin_Module::pick_plugin ( void )
|
Plugin_Module::pick_plugin ( void )
|
||||||
|
|
|
@ -22,7 +22,27 @@
|
||||||
#include "Module.H"
|
#include "Module.H"
|
||||||
#include "Loggable.H"
|
#include "Loggable.H"
|
||||||
|
|
||||||
class Plugin_Module : Module {
|
class Fl_Menu_Button;
|
||||||
|
|
||||||
|
class Plugin_Module : public Module {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
struct Plugin_Info
|
||||||
|
{
|
||||||
|
const char *path;
|
||||||
|
unsigned long id;
|
||||||
|
|
||||||
|
Plugin_Info ( )
|
||||||
|
{
|
||||||
|
path = 0;
|
||||||
|
id = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool load ( unsigned long id );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
void init ( void );
|
void init ( void );
|
||||||
|
|
||||||
|
@ -48,21 +68,8 @@ class Plugin_Module : Module {
|
||||||
int _plugin_outs;
|
int _plugin_outs;
|
||||||
bool _crosswire;
|
bool _crosswire;
|
||||||
|
|
||||||
struct Plugin_Info
|
|
||||||
{
|
|
||||||
const char *path;
|
|
||||||
unsigned long id;
|
|
||||||
|
|
||||||
Plugin_Info ( )
|
|
||||||
{
|
|
||||||
path = 0;
|
|
||||||
id = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static Plugin_Info* discover ( void );
|
static Plugin_Info* discover ( void );
|
||||||
|
|
||||||
bool load ( unsigned long id );
|
|
||||||
|
|
||||||
void set_input_buffer ( int n, void *buf );
|
void set_input_buffer ( int n, void *buf );
|
||||||
void set_output_buffer ( int n, void *buf );
|
void set_output_buffer ( int n, void *buf );
|
||||||
|
@ -82,6 +89,7 @@ public:
|
||||||
virtual ~Plugin_Module();
|
virtual ~Plugin_Module();
|
||||||
|
|
||||||
static Plugin_Module * pick_plugin ( void );
|
static Plugin_Module * pick_plugin ( void );
|
||||||
|
static void add_plugins_to_menu ( Fl_Menu_Button *menu );
|
||||||
|
|
||||||
int plugin_ins ( void ) const { return _plugin_ins; }
|
int plugin_ins ( void ) const { return _plugin_ins; }
|
||||||
int plugin_outs ( void ) const { return _plugin_outs; }
|
int plugin_outs ( void ) const { return _plugin_outs; }
|
||||||
|
|
Loading…
Reference in New Issue