1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/*
* Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
* (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
*
* This file is part of lsp-plugin-fw
* Created on: 24 нояб. 2020 г.
*
* lsp-plugin-fw is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* lsp-plugin-fw 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with lsp-plugin-fw. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef LSP_PLUG_IN_PLUG_FW_UI_IPORT_H_
#define LSP_PLUG_IN_PLUG_FW_UI_IPORT_H_
#ifndef LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_
#error "Use #include <lsp-plug.in/plug-fw/ui/ui.h>"
#endif /* LSP_PLUG_IN_PLUG_FW_UI_IMPL_H_ */
#include <lsp-plug.in/plug-fw/version.h>
#include <lsp-plug.in/plug-fw/meta/types.h>
#include <lsp-plug.in/lltl/parray.h>
namespace lsp
{
namespace ui
{
class IPortListener;
/**
* Interface for UI port that can hold different types of data
*/
class IPort
{
protected:
const meta::port_t *pMetadata;
lltl::parray<IPortListener> vListeners;
public:
explicit IPort(const meta::port_t *meta);
virtual ~IPort();
public:
/** Add listener to the port
*
* @param listener that listens port changes
*/
void bind(IPortListener *listener);
/** Unbind listener
*
* @param listener listener to unbind
*/
void unbind(IPortListener *listener);
/** Unbind all controls
*
*/
void unbind_all();
/** Write some data to port
*
* @param buffer data to write to port
* @param size size of data
*/
virtual void write(const void *buffer, size_t size);
/** Write some data to port
*
* @param buffer data to write to port
* @param size size of data
* @param flags additional control flags
*/
virtual void write(const void *buffer, size_t size, size_t flags);
/** Get data from port
*
* @return associated buffer (may be NULL)
*/
virtual void *buffer();
/** Get single float value
*
* @return single float value
*/
virtual float value();
/** Get single default float value
*
* @return default float value
*/
virtual float default_value();
/**
* Set the value to the default
*/
virtual void set_default();
/** Set single float value
*
* @param value value to set
*/
virtual void set_value(float value);
/** Set single float value
*
* @param flags additional control flags
*/
virtual void set_value(float value, size_t flags);
/** Notify all that port data has been changed
*
*/
virtual void notify_all();
/** Notify all that port metadata has been changed
*
*/
virtual void sync_metadata();
public:
/** Get port metadata
*
* @return port metadata
*/
inline const meta::port_t *metadata() const { return pMetadata; };
/**
* Get unique port identifier
* @return unique port identifier
*/
virtual const char *id() const;
/** Get buffer casted to specified type
*
* @return buffer casted to specified type
*/
template <class T>
inline T *buffer()
{
return static_cast<T *>(buffer());
}
};
} /* namespace ctl */
} /* namespace lsp */
#endif /* LSP_PLUG_IN_PLUG_FW_UI_IPORT_H_ */
|