|
- /*
- * 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;
-
- /*!
- * TESTING
- */
- virtual void uiResized(const uint width, const uint height) = 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
|