|  | /*
 * Carla Bridge UI
 * Copyright (C) 2011-2014 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 doc/GPL.txt file.
 */
#ifndef CARLA_BRIDGE_UI_HPP_INCLUDED
#define CARLA_BRIDGE_UI_HPP_INCLUDED
#include "CarlaBridgeToolkit.hpp"
#include "CarlaLibUtils.hpp"
#include "CarlaPipeUtils.hpp"
#include "CarlaString.hpp"
#include "lv2/atom.h"
#include "lv2/urid.h"
CARLA_BRIDGE_START_NAMESPACE
/*!
 * @defgroup CarlaBridgeUIAPI Carla UI Bridge API
 *
 * The Carla UI Bridge API.
 * @{
 */
// -----------------------------------------------------------------------
class CarlaBridgeUI : public CarlaPipeClient
{
protected:
    /*!
     * Constructor.
     */
    CarlaBridgeUI() noexcept;
    /*!
     * Destructor.
     */
    virtual ~CarlaBridgeUI() /*noexcept*/;
    // ---------------------------------------------------------------------
    bool libOpen(const char* const filename) noexcept;
    void* libSymbol(const char* const symbol) const noexcept;
    const char* libError() const noexcept;
    // ---------------------------------------------------------------------
    // DSP Callbacks
    virtual void dspParameterChanged(const uint32_t index, const float value) = 0;
    virtual void dspProgramChanged(const uint32_t index) = 0;
    virtual void dspMidiProgramChanged(const uint32_t bank, const uint32_t program) = 0;
    virtual void dspStateChanged(const char* const key, const char* const value) = 0;
    virtual void dspNoteReceived(const bool onOff, const uint8_t channel, const uint8_t note, const uint8_t velocity) = 0;
    virtual void dspAtomReceived(const uint32_t index, const LV2_Atom* const atom) = 0;
    virtual void dspURIDReceived(const LV2_URID urid, const char* const uri) = 0;
    virtual void uiOptionsChanged(const double sampleRate, const bool useTheme, const bool useThemeColors, const char* const windowTitle, uintptr_t transientWindowId) = 0;
public:
    // ---------------------------------------------------------------------
    // UI initialization
  virtual bool init(const int argc, const char* argv[]);
  virtual void exec(const bool showUI);
  virtual void idleUI() {}
    // ---------------------------------------------------------------------
    // UI management
    /*!
     * Get the widget associated with this UI.
     * This can be a Gtk widget, Qt widget or a native Window handle depending on the compile target.
     */
    virtual void* getWidget() const noexcept = 0;
    /*!
     * Options.
     */
    struct Options {
        /*!
         * UI is resizable by the user.
         * The UI can still sometimes resize itself internally if this is false.
         */
        bool isResizable;
        /*!
         * Use the Carla PRO theme if possible.
         */
        bool useTheme;
        /*!
         * Use the Carla PRO theme colors if possible.
         * This implies useTheme to be true.
         */
        bool useThemeColors;
        /*!
         * Window title.
         */
        CarlaString windowTitle;
        /*!
         * Transient window id (parent), null if zero.
         */
        uintptr_t transientWindowId;
        /*!
         * Constructor for default options.
         */
        Options() noexcept
            : isResizable(true),
              useTheme(true),
              useThemeColors(true),
              windowTitle("TestUI"),
              transientWindowId(0) {}
    };
    /*!
     * Get options associated with this UI.
     */
    virtual const Options& getOptions() const noexcept = 0;
    // ---------------------------------------------------------------------
protected:
    bool fQuitReceived;
    bool fGotOptions;
    int  fLastMsgTimer;
    CarlaBridgeToolkit* fToolkit;
    lib_t fLib;
    CarlaString fLibFilename;
    /*! @internal */
    bool msgReceived(const char* const msg) noexcept override;
    CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaBridgeUI)
};
/**@}*/
// -----------------------------------------------------------------------
CARLA_BRIDGE_END_NAMESPACE
#endif // CARLA_BRIDGE_UI_HPP_INCLUDED
 |