diff --git a/src/diskreader.cxx b/src/diskreader.cxx index 9c53a99..cdd6dc0 100644 --- a/src/diskreader.cxx +++ b/src/diskreader.cxx @@ -80,9 +80,7 @@ int DiskReader::loadPreferences() LUPPP_NOTE("Loading controller %s", ctlr->valuestring); stringstream s; s << getenv("HOME") << "/.config/openAV/luppp/controllers/" << ctlr->valuestring; - GenericMIDI* c = new GenericMIDI( s.str().c_str() ); - EventControllerInstance e(c); - writeToDspRingbuffer( &e ); + gui->addMidiControllerToSetup( s.str() ); } } } diff --git a/src/gui.cxx b/src/gui.cxx index 18205ac..820c8ad 100644 --- a/src/gui.cxx +++ b/src/gui.cxx @@ -338,6 +338,8 @@ Gui::Gui(std::string argZero) : { LUPPP_NOTE( "%s", "Gui()" ); + gui = this; + // setup callback to signalChecker() Fl::add_timeout( 0.1, (Fl_Timeout_Handler)&signalChecker, 0 ); @@ -466,6 +468,24 @@ Gui::Gui(std::string argZero) : } } +void Gui::addMidiControllerToSetup(std::string c) +{ + controllerVector.push_back( c ); +} + +void Gui::setupMidiControllers() +{ + for(int i = 0; i < controllerVector.size(); i++) + { + GenericMIDI* c = new GenericMIDI( controllerVector.at(i).c_str() ); + if ( c ) + { + EventControllerInstance e(c); + writeToDspRingbuffer( &e ); + } + } +} + void Gui::reset() { // signal to DSP to reset state diff --git a/src/gui.hxx b/src/gui.hxx index 9f5ee8c..daea0b5 100644 --- a/src/gui.hxx +++ b/src/gui.hxx @@ -64,6 +64,10 @@ class Gui /// resets the state to "new" void reset(); + /// sets up MIDI controllers: must be done *after* backend is started + void addMidiControllerToSetup(std::string); + void setupMidiControllers(); + GTrack* getTrack(int id); GMasterTrack* getMasterTrack(){return master;} @@ -84,6 +88,8 @@ class Gui nsm_client_t* getNsm(){return nsm;} private: + vector controllerVector; + Fl_Double_Window window; Fl_Group* lupppGroup; diff --git a/src/jack.cxx b/src/jack.cxx index 0a442d1..e11e964 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -24,6 +24,7 @@ #include "state/state.hxx" +#include "gui.hxx" #include "logic.hxx" #include "config.hxx" #include "looper.hxx" @@ -46,7 +47,8 @@ using namespace std; int AudioBuffer::privateID = 0; -// static pointer from main. +// static pointers from main +extern Gui* gui; extern Jack* jack; void Jack::setup(std::string name) @@ -226,13 +228,17 @@ Jack::Jack( std::string name ) : // Watch out for RT stuff, loading file, registering ports etc: before activate?! //Controller* m = new GenericMIDI("akai_apc.ctlr","apc"); - Controller* gui = new LupppGUI(); - controllerUpdater->registerController( gui ); + Controller* g = new LupppGUI(); + controllerUpdater->registerController( g ); - if ( !gui ) + if ( !g ) { LUPPP_ERROR("%s","Error creating LupppGUI Controller instance"); } + + // call into the GUI, telling it to register default controllers + gui->setupMidiControllers(); + } Jack::~Jack()