|  | /*
 * Carla Plugin
 * 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 "CarlaPluginGui.hpp"
# include <QtCore/QSettings>
#ifdef Q_WS_X11
# include <QtGui/QX11EmbedContainer>
#endif
CARLA_BACKEND_START_NAMESPACE
#include "moc_CarlaPluginGui.cpp"
// -------------------------------------------------------------------
// CarlaPluginGUI
CarlaPluginGui::CarlaPluginGui(CarlaEngine* const engine, Callback* const callback, const Options& options)
    : QMainWindow(nullptr),
      kCallback(callback),
      fContainer(nullptr),
      fOptions(options)
{
    CARLA_ASSERT(callback != nullptr);
    carla_debug("CarlaPluginGui::CarlaPluginGui(%p, %p)", engine, callback);
    if (options.parented)
    {
#ifdef Q_WS_X11
        fContainer = new QX11EmbedContainer(this);
#else
        fContainer = new QWidget(this);
#endif
        setCentralWidget(fContainer);
    }
#ifdef Q_OS_WIN
    if (! options.resizable)
        setWindowFlags(windowFlags()|Qt::MSWindowsFixedSizeDialogHint);
#endif
    connect(this, SIGNAL(setSizeSafeSignal(int,int)), SLOT(setSizeSafeSlot(int,int)));
    {
        QSettings settings;
        if (settings.value("Engine/UIsAlwaysOnTop", true).toBool())
            setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint);
    }
}
CarlaPluginGui::~CarlaPluginGui()
{
    carla_debug("CarlaPluginGui::~CarlaPluginGui()");
    if (fOptions.parented)
    {
        CARLA_ASSERT(fContainer != nullptr);
#ifdef Q_WS_X11
        delete (QX11EmbedContainer*)fContainer;
#else
        delete fContainer;
#endif
    }
}
void CarlaPluginGui::setSize(const int width, const int height)
{
    CARLA_ASSERT_INT(width > 0, width);
    CARLA_ASSERT_INT(height > 0, height);
    carla_debug("CarlaPluginGui::setSize(%i, %i)", width, height);
    if (width <= 0)
        return;
    if (height <= 0)
        return;
    emit setSizeSafeSignal(width, height);
}
void* CarlaPluginGui::getContainerWinId()
{
    CARLA_ASSERT(fContainer != nullptr);
    carla_debug("CarlaPluginGui::getContainerWinId()");
    return (fContainer != nullptr) ? (void*)fContainer->winId() : nullptr;
}
void CarlaPluginGui::setWidget(QWidget* const widget)
{
    CARLA_ASSERT(fContainer == nullptr);
    carla_debug("CarlaPluginGui::setWidget(%p)", widget);
    setCentralWidget(widget);
    widget->setParent(this);
    fContainer = widget;
}
void CarlaPluginGui::closeEvent(QCloseEvent* const event)
{
    CARLA_ASSERT(event != nullptr);
    carla_debug("CarlaPluginGui::closeEvent(%p)", event);
    if (event == nullptr)
        return;
    if (event->spontaneous() && kCallback != nullptr)
        kCallback->guiClosedCallback();
    QMainWindow::closeEvent(event);
}
void CarlaPluginGui::setSizeSafeSlot(int width, int height)
{
    carla_debug("CarlaPluginGui::setSizeSafeSlot(%i, %i)", width, height);
    if (fOptions.resizable)
        resize(width, height);
    else
        setFixedSize(width, height);
}
// -------------------------------------------------------------------
CARLA_BACKEND_END_NAMESPACE
 |