diff options
Diffstat (limited to 'src/jalv_qt4.cpp')
-rw-r--r-- | src/jalv_qt4.cpp | 57 |
1 files changed, 50 insertions, 7 deletions
diff --git a/src/jalv_qt4.cpp b/src/jalv_qt4.cpp index b082233..cbccdd2 100644 --- a/src/jalv_qt4.cpp +++ b/src/jalv_qt4.cpp @@ -1,5 +1,5 @@ /* - Copyright 2007-2011 David Robillard <http://drobilla.net> + Copyright 2007-2013 David Robillard <http://drobilla.net> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -24,6 +24,31 @@ static QApplication* app = NULL; +class PresetAction : public QAction { + + Q_OBJECT + +public: + PresetAction(QObject* parent, Jalv* jalv, LilvNode* preset) + : QAction(parent) + , _jalv(jalv) + , _preset(preset) + { + connect(this, SIGNAL(triggered()), + this, SLOT(presetChosen())); + } + + Q_SLOT void presetChosen() { + jalv_apply_preset(_jalv, _preset); + } + +private: + Jalv* _jalv; + LilvNode* _preset; +}; + +#include "jalv_qt4_meta.hpp" + extern "C" { int @@ -62,22 +87,38 @@ jalv_ui_port_event(Jalv* jalv, class Timer : public QTimer { public: - explicit Timer(Jalv* j) : jalv(j) {} + explicit Timer(Jalv* jalv) : _jalv(jalv) {} void timerEvent(QTimerEvent* e) { - jalv_emit_ui_events(jalv); + jalv_emit_ui_events(_jalv); } private: - Jalv* jalv; + Jalv* _jalv; }; +static int +add_preset_to_menu(Jalv* jalv, + const LilvNode* node, + const LilvNode* title, + void* data) +{ + QMenu* menu = (QMenu*)data; + const char* label = lilv_node_as_string(title); + + QAction* action = new PresetAction(menu, jalv, lilv_node_duplicate(node)); + action->setText(label); + menu->addAction(action); + return 0; +} + int jalv_open_ui(Jalv* jalv) { - QMainWindow* win = new QMainWindow(); - QMenu* file_menu = win->menuBar()->addMenu("&File"); - QAction* quit_action = new QAction("&Quit", win); + QMainWindow* win = new QMainWindow(); + QMenu* file_menu = win->menuBar()->addMenu("&File"); + QMenu* presets_menu = win->menuBar()->addMenu("&Presets"); + QAction* quit_action = new QAction("&Quit", win); QObject::connect(quit_action, SIGNAL(triggered()), win, SLOT(close())); quit_action->setShortcuts(QKeySequence::Quit); @@ -85,6 +126,8 @@ jalv_open_ui(Jalv* jalv) file_menu->addAction(quit_action); jalv->has_ui = TRUE; + jalv_load_presets(jalv, add_preset_to_menu, presets_menu); + if (jalv->ui) { jalv_ui_instantiate(jalv, jalv_native_ui_type(jalv), win); } |