aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv_qt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jalv_qt.cpp')
-rw-r--r--src/jalv_qt.cpp185
1 files changed, 96 insertions, 89 deletions
diff --git a/src/jalv_qt.cpp b/src/jalv_qt.cpp
index ef29858..7d99118 100644
--- a/src/jalv_qt.cpp
+++ b/src/jalv_qt.cpp
@@ -2,15 +2,19 @@
// SPDX-License-Identifier: ISC
#include "jalv_qt.hpp"
+#include "comm.h"
#include "frontend.h"
-#include "jalv_internal.h"
+#include "jalv.h"
#include "nodes.h"
#include "options.h"
#include "port.h"
+#include "query.h"
+#include "state.h"
+#include "types.h"
-#include "lilv/lilv.h"
-#include "suil/suil.h"
-#include "zix/sem.h"
+#include <lilv/lilv.h>
+#include <suil/suil.h>
+#include <zix/sem.h>
#include <QAction>
#include <QApplication>
@@ -87,14 +91,14 @@ private:
int doLayout(const QRect& rect, bool testOnly) const;
int smartSpacing(QStyle::PixelMetric pm) const;
- QList<QLayoutItem*> itemList;
- int m_hSpace;
- int m_vSpace;
+ QList<QLayoutItem*> _itemList;
+ int _hSpace;
+ int _vSpace;
};
FlowLayout::FlowLayout(int margin, int hSpacing, int vSpacing)
- : m_hSpace(hSpacing)
- , m_vSpace(vSpacing)
+ : _hSpace(hSpacing)
+ , _vSpace(vSpacing)
{
setContentsMargins(margin, margin, margin, margin);
}
@@ -110,14 +114,14 @@ FlowLayout::~FlowLayout()
void
FlowLayout::addItem(QLayoutItem* item)
{
- itemList.append(item);
+ _itemList.append(item);
}
int
FlowLayout::horizontalSpacing() const
{
- if (m_hSpace >= 0) {
- return m_hSpace;
+ if (_hSpace >= 0) {
+ return _hSpace;
}
return smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
@@ -126,8 +130,8 @@ FlowLayout::horizontalSpacing() const
int
FlowLayout::verticalSpacing() const
{
- if (m_vSpace >= 0) {
- return m_vSpace;
+ if (_vSpace >= 0) {
+ return _vSpace;
}
return smartSpacing(QStyle::PM_LayoutVerticalSpacing);
@@ -136,20 +140,20 @@ FlowLayout::verticalSpacing() const
int
FlowLayout::count() const
{
- return itemList.size();
+ return _itemList.size();
}
QLayoutItem*
FlowLayout::itemAt(int index) const
{
- return itemList.value(index);
+ return _itemList.value(index);
}
QLayoutItem*
FlowLayout::takeAt(int index)
{
- if (index >= 0 && index < itemList.size()) {
- return itemList.takeAt(index);
+ if (index >= 0 && index < _itemList.size()) {
+ return _itemList.takeAt(index);
}
return nullptr;
@@ -190,7 +194,7 @@ QSize
FlowLayout::minimumSize() const
{
QSize size = {};
- for (QLayoutItem* const item : itemList) {
+ for (QLayoutItem* const item : _itemList) {
size = size.expandedTo(item->minimumSize());
}
@@ -212,7 +216,7 @@ FlowLayout::doLayout(const QRect& rect, bool testOnly) const
int y = effectiveRect.y();
int lineHeight = 0;
- for (QLayoutItem* const item : itemList) {
+ for (QLayoutItem* const item : _itemList) {
QWidget* wid = item->widget();
int spaceX = horizontalSpacing();
@@ -303,13 +307,14 @@ add_preset_to_menu(Jalv* jalv,
Control::Control(PortContainer portContainer, QWidget* parent)
: QGroupBox(parent)
- , dial(new QDial())
- , plugin(portContainer.jalv->plugin)
- , port(portContainer.port)
- , label(new QLabel())
+ , _dial(new QDial())
+ , _jalv(portContainer.jalv)
+ , _port(portContainer.port)
+ , _label(new QLabel())
{
- const JalvNodes* nodes = &portContainer.jalv->nodes;
- const LilvPort* lilvPort = port->lilv_port;
+ const JalvNodes* nodes = &portContainer.jalv->nodes;
+ const LilvPlugin* plugin = portContainer.jalv->plugin;
+ const LilvPort* lilvPort = _port->lilv_port;
LilvNode* nmin = nullptr;
LilvNode* nmax = nullptr;
@@ -319,9 +324,9 @@ Control::Control(PortContainer portContainer, QWidget* parent)
LilvNode* stepsNode =
lilv_port_get(plugin, lilvPort, nodes->pprops_rangeSteps);
if (lilv_node_is_int(stepsNode)) {
- steps = std::max(lilv_node_as_int(stepsNode), 2);
+ _steps = std::max(lilv_node_as_int(stepsNode), 2);
} else {
- steps = DIAL_STEPS;
+ _steps = DIAL_STEPS;
}
lilv_node_free(stepsNode);
@@ -336,52 +341,54 @@ Control::Control(PortContainer portContainer, QWidget* parent)
}
const float f = lilv_node_as_float(val);
- scalePoints.push_back(f);
- scaleMap[f] = lilv_node_as_string(lilv_scale_point_get_label(p));
+ _scalePoints.push_back(f);
+ _scaleMap[f] = lilv_node_as_string(lilv_scale_point_get_label(p));
}
lilv_scale_points_free(sp);
}
// Check port properties
- isLogarithmic =
+ _isLogarithmic =
lilv_port_has_property(plugin, lilvPort, nodes->pprops_logarithmic);
- isInteger = lilv_port_has_property(plugin, lilvPort, nodes->lv2_integer);
- isEnum = lilv_port_has_property(plugin, lilvPort, nodes->lv2_enumeration);
+ _isInteger = lilv_port_has_property(plugin, lilvPort, nodes->lv2_integer);
+ _isEnum = lilv_port_has_property(plugin, lilvPort, nodes->lv2_enumeration);
if (lilv_port_has_property(plugin, lilvPort, nodes->lv2_toggled)) {
- isInteger = true;
+ _isInteger = true;
- if (!scaleMap[0]) {
- scaleMap[0] = "Off";
+ if (!_scaleMap[0]) {
+ _scaleMap[0] = "Off";
}
- if (!scaleMap[1]) {
- scaleMap[1] = "On";
+ if (!_scaleMap[1]) {
+ _scaleMap[1] = "On";
}
}
// Find and set min, max and default values for port
- const float defaultValue = ndef ? lilv_node_as_float(ndef) : port->control;
+ const float defaultValue =
+ ndef ? lilv_node_as_float(ndef)
+ : portContainer.jalv->process.controls_buf[_port->index];
setRange(lilv_node_as_float(nmin), lilv_node_as_float(nmax));
setValue(defaultValue);
// Fill layout
auto* const layout = new QVBoxLayout();
- layout->addWidget(label, 0, Qt::AlignHCenter);
- layout->addWidget(dial, 0, Qt::AlignHCenter);
+ layout->addWidget(_label, 0, Qt::AlignHCenter);
+ layout->addWidget(_dial, 0, Qt::AlignHCenter);
setLayout(layout);
setMinimumWidth(CONTROL_WIDTH);
setMaximumWidth(CONTROL_WIDTH);
LilvNode* nname = lilv_port_get_name(plugin, lilvPort);
- name = QString("%1").arg(lilv_node_as_string(nname));
+ _name = QString("%1").arg(lilv_node_as_string(nname));
// Handle long names
- if (stringWidth(name) > CONTROL_WIDTH) {
- setTitle(fontMetrics().elidedText(name, Qt::ElideRight, CONTROL_WIDTH));
+ if (stringWidth(_name) > CONTROL_WIDTH) {
+ setTitle(fontMetrics().elidedText(_name, Qt::ElideRight, CONTROL_WIDTH));
} else {
- setTitle(name);
+ setTitle(_name);
}
// Set tooltip if comment is available
@@ -394,7 +401,7 @@ Control::Control(PortContainer portContainer, QWidget* parent)
setFlat(true);
- connect(dial, SIGNAL(valueChanged(int)), this, SLOT(dialChanged(int)));
+ connect(_dial, SIGNAL(valueChanged(int)), this, SLOT(dialChanged(int)));
lilv_node_free(nmin);
lilv_node_free(nmax);
@@ -408,31 +415,31 @@ Control::setValue(float value)
{
float step = 0.0f;
- if (isInteger) {
+ if (_isInteger) {
step = value;
- } else if (isEnum) {
- step = (std::find(scalePoints.begin(), scalePoints.end(), value) -
- scalePoints.begin());
- } else if (isLogarithmic) {
- step = steps * logf(value / min) / logf(max / min);
+ } else if (_isEnum) {
+ step = (std::find(_scalePoints.begin(), _scalePoints.end(), value) -
+ _scalePoints.begin());
+ } else if (_isLogarithmic) {
+ step = _steps * logf(value / _min) / logf(_max / _min);
} else {
- step = value * steps;
+ step = value * _steps;
}
- dial->setValue(step);
- label->setText(getValueLabel(value));
+ _dial->setValue(step);
+ _label->setText(getValueLabel(value));
}
QString
Control::getValueLabel(float value)
{
- if (scaleMap[value]) {
- if (stringWidth(scaleMap[value]) > CONTROL_WIDTH) {
- label->setToolTip(scaleMap[value]);
+ if (_scaleMap[value]) {
+ if (stringWidth(_scaleMap[value]) > CONTROL_WIDTH) {
+ _label->setToolTip(_scaleMap[value]);
return fontMetrics().elidedText(
- QString(scaleMap[value]), Qt::ElideRight, CONTROL_WIDTH);
+ QString(_scaleMap[value]), Qt::ElideRight, CONTROL_WIDTH);
}
- return scaleMap[value];
+ return _scaleMap[value];
}
return QString("%1").arg(value);
@@ -441,40 +448,40 @@ Control::getValueLabel(float value)
void
Control::setRange(float minRange, float maxRange)
{
- min = minRange;
- max = maxRange;
+ _min = minRange;
+ _max = maxRange;
- if (isLogarithmic) {
+ if (_isLogarithmic) {
minRange = 1;
- maxRange = steps;
- } else if (isEnum) {
+ maxRange = _steps;
+ } else if (_isEnum) {
minRange = 0;
- maxRange = scalePoints.size() - 1;
- } else if (!isInteger) {
- minRange *= steps;
- maxRange *= steps;
+ maxRange = _scalePoints.size() - 1;
+ } else if (!_isInteger) {
+ minRange *= _steps;
+ maxRange *= _steps;
}
- dial->setRange(minRange, maxRange);
+ _dial->setRange(minRange, maxRange);
}
float
Control::getValue()
{
- if (isEnum) {
- return scalePoints[dial->value()];
+ if (_isEnum) {
+ return _scalePoints[_dial->value()];
}
- if (isInteger) {
- return dial->value();
+ if (_isInteger) {
+ return _dial->value();
}
- if (isLogarithmic) {
- return min *
- powf(max / min, static_cast<float>(dial->value()) / (steps - 1));
+ if (_isLogarithmic) {
+ return _min *
+ powf(_max / _min, static_cast<float>(_dial->value()) / (_steps - 1));
}
- return static_cast<float>(dial->value()) / steps;
+ return static_cast<float>(_dial->value()) / _steps;
}
int
@@ -492,8 +499,8 @@ Control::dialChanged(int)
{
const float value = getValue();
- label->setText(getValueLabel(value));
- port->control = value;
+ _label->setText(getValueLabel(value));
+ jalv_write_control(_jalv->process.ui_to_plugin, _port->index, value);
}
namespace {
@@ -547,8 +554,8 @@ build_control_widget(Jalv* jalv)
LilvNode* lastGroup = nullptr;
QHBoxLayout* groupLayout = nullptr;
for (int i = 0; i < portContainers.count(); ++i) {
- const PortContainer portContainer = portContainers[i];
- const Port* const port = portContainer.port;
+ const PortContainer portContainer = portContainers[i];
+ const JalvPort* const port = portContainer.port;
auto* const control = new Control(portContainer, nullptr);
LilvNode* group =
@@ -612,11 +619,11 @@ jalv_frontend_ui_type(void)
}
void
-jalv_ui_port_event(Jalv* jalv,
- uint32_t port_index,
- uint32_t buffer_size,
- uint32_t protocol,
- const void* buffer)
+jalv_frontend_port_event(Jalv* jalv,
+ uint32_t port_index,
+ uint32_t buffer_size,
+ uint32_t protocol,
+ const void* buffer)
{
if (jalv->ui_instance) {
suil_instance_port_event(
@@ -696,7 +703,7 @@ jalv_frontend_open(Jalv* jalv)
jalv_init_ui(jalv);
win->show();
- if (jalv->ui_instance && !jalv_ui_is_resizable(jalv)) {
+ if (jalv->ui_instance && !jalv_ui_is_resizable(jalv->world, jalv->ui)) {
widget->setMinimumSize(widget->width(), widget->height());
widget->setMaximumSize(widget->width(), widget->height());
win->adjustSize();
@@ -706,7 +713,7 @@ jalv_frontend_open(Jalv* jalv)
}
auto* const timer = new Timer(jalv);
- timer->start(1000 / jalv->ui_update_hz);
+ timer->start((int)(1000.0f / jalv->settings.ui_update_hz));
const int ret = app->exec();
zix_sem_post(&jalv->done);