|  | /*
 * Carla Bridge Toolkit, Plugin version
 * Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com>
 *
 * 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
 |