/* * Carla Bridge Toolkit, Plugin version * Copyright (C) 2011-2013 Filipe Coelho * * 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 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. * * For a full copy of the GNU General Public License see the GPL.txt file */ #include "CarlaBridgeClient.hpp" #include "CarlaBridgeToolkit.hpp" #include "CarlaPlugin.hpp" CARLA_BRIDGE_START_NAMESPACE static int qargc = 0; static char* qargv[0] = {}; // ------------------------------------------------------------------------- class CarlaBridgeToolkitPlugin : public CarlaBridgeToolkit/*, public CarlaBackend::CarlaPluginGUI::Callback*/ { public: CarlaBridgeToolkitPlugin(CarlaBridgeClient* const client, const char* const uiTitle) : CarlaBridgeToolkit(client, uiTitle) { carla_debug("CarlaBridgeToolkitPlugin::CarlaBridgeToolkitPlugin(%p, \"%s\")", client, uiTitle); app = nullptr; gui = nullptr; m_uiQuit = false; init(); } ~CarlaBridgeToolkitPlugin() { carla_debug("CarlaBridgeToolkitPlugin::~CarlaBridgeToolkitPlugin()"); CARLA_ASSERT(! app); CARLA_ASSERT(! gui); } void init() { carla_debug("CarlaBridgeToolkitPlugin::init()"); CARLA_ASSERT(! app); CARLA_ASSERT(! gui); app = new QApplication(qargc, qargv); gui = new CarlaBackend::CarlaPluginGUI(nullptr, this); } void exec(const bool showGui) { carla_debug("CarlaBridgeToolkitPlugin::exec(%s)", bool2str(showGui)); CARLA_ASSERT(app); CARLA_ASSERT(gui); CARLA_ASSERT(client); if (showGui) { show(); } else { app->setQuitOnLastWindowClosed(false); client->sendOscUpdate(); client->sendOscBridgeUpdate(); } m_uiQuit = showGui; // Main loop app->exec(); } void quit() { carla_debug("CarlaBridgeToolkitPlugin::quit()"); CARLA_ASSERT(app); if (gui) { gui->close(); delete gui; gui = nullptr; } if (app) { if (! app->closingDown()) app->quit(); delete app; app = nullptr; } } void show() { carla_debug("CarlaBridgeToolkitPlugin::show()"); CARLA_ASSERT(gui); if (gui && m_uiShow) gui->setVisible(true); } void hide() { carla_debug("CarlaBridgeToolkitPlugin::hide()"); CARLA_ASSERT(gui); if (gui && m_uiShow) gui->setVisible(false); } void resize(const int width, const int height) { carla_debug("CarlaBridgeToolkitPlugin::resize(%i, %i)", width, height); CARLA_ASSERT(gui); if (gui) gui->setNewSize(width, height); } private: QApplication* fApp; bool fQuit; //CarlaBackend::CarlaPluginGUI* gui; //void guiClosedCallback(); }; // ------------------------------------------------------------------------- CarlaBridgeToolkit* CarlaBridgeToolkit::createNew(CarlaBridgeClient* const client, const char* const uiTitle) { return new CarlaBridgeToolkitPlugin(client, uiTitle); } CARLA_BRIDGE_END_NAMESPACE