Browse Source

Forgot to add this file

tags/1.9.7
falkTX 9 years ago
parent
commit
200a9884b9
1 changed files with 68 additions and 0 deletions
  1. +68
    -0
      source/native-plugins/zynaddsubfx/UI/Osc_SimpleListModel.h

+ 68
- 0
source/native-plugins/zynaddsubfx/UI/Osc_SimpleListModel.h View File

@@ -0,0 +1,68 @@
#pragma once
#include "Fl_Osc_Widget.H"
#include <functional>
#include <vector>
#include <rtosc/rtosc.h>

class Osc_SimpleListModel:public Fl_Osc_Widget
{
public:
Osc_SimpleListModel(Fl_Osc_Interface *osc_)
:Fl_Osc_Widget("", osc_), list_size(0)
{
assert(osc);
}

typedef std::vector<std::string> list_t;
list_t list;
std::function<void(list_t)> callback;
unsigned list_size;

void update(std::string url)
{
if(!ext.empty())
osc->removeLink(this);
ext = url;

oscRegister(ext.c_str());
}

void apply()
{
if(list.size() == 0) {
oscWrite("", "I");
}
char types[list.size()+1];
rtosc_arg_t args[list.size()];

//zero out data
memset(types, 0, sizeof(types));
memset(args, 0, sizeof(args));

for(int i=0; i<(int)list.size(); ++i) {
types[i] = 's';
args[i].s = list[i].c_str();
}
char buffer[1024*5];
rtosc_amessage(buffer, sizeof(buffer), ext.c_str(), types, args);
osc->writeRaw(buffer);
}
//Raw messages
virtual void OSC_raw(const char *msg)
{
std::string args = rtosc_argument_string(msg);
const int list_size = args.length();
for(int i=0; i<list_size; ++i)
if(args[i] != 's')
return;

list.clear();
list.resize(list_size);

for(int idx=0; idx<list_size; ++idx)
list[idx] = rtosc_argument(msg, idx).s;
if(callback)
callback(list);
}
};

Loading…
Cancel
Save