diff options
Diffstat (limited to 'src/gui/ingen_gui.cpp')
-rw-r--r-- | src/gui/ingen_gui.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/gui/ingen_gui.cpp b/src/gui/ingen_gui.cpp new file mode 100644 index 00000000..677296fd --- /dev/null +++ b/src/gui/ingen_gui.cpp @@ -0,0 +1,67 @@ +/* + This file is part of Ingen. + Copyright 2007-2018 David Robillard <http://drobilla.net/> + + Ingen is free software: you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free + Software Foundation, either version 3 of the License, or any later version. + + Ingen 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 Affero General Public License for details. + + You should have received a copy of the GNU Affero General Public License + along with Ingen. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ingen/Configuration.hpp" +#include "ingen/Module.hpp" +#include "ingen/QueuedInterface.hpp" +#include "ingen/client/SigClientInterface.hpp" + +#include "App.hpp" + +namespace Ingen { +namespace GUI { + +struct GUIModule : public Module { + using SigClientInterface = Client::SigClientInterface; + + void load(World* world) { + URI uri(world->conf().option("connect").ptr<char>()); + if (!world->interface()) { + world->set_interface( + world->new_interface(URI(uri), make_client(world))); + } else if (!dynamic_ptr_cast<SigClientInterface>( + world->interface()->respondee())) { + world->interface()->set_respondee(make_client(world)); + } + + app = GUI::App::create(world); + } + + void run(World* world) { + app->run(); + } + + SPtr<Interface> make_client(World* const world) { + SPtr<SigClientInterface> sci(new SigClientInterface()); + return world->engine() ? sci : SPtr<Interface>(new QueuedInterface(sci)); + } + + SPtr<GUI::App> app; +}; + +} // namespace GUI +} // namespace Ingen + +extern "C" { + +Ingen::Module* +ingen_module_load() +{ + Glib::thread_init(); + return new Ingen::GUI::GUIModule(); +} + +} // extern "C" |