LMMS
Loading...
Searching...
No Matches
Osc_SimpleListModel.h
Go to the documentation of this file.
1/*
2 ZynAddSubFX - a software synthesizer
3
4 Osc_SimpleListModel.h - OSC List View
5 Copyright (C) 2016 Mark McCurry
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11*/
12#pragma once
13#include "Fl_Osc_Widget.H"
14#include <functional>
15#include <vector>
16#include <rtosc/rtosc.h>
17
19{
20 public:
22 :Fl_Osc_Widget("", osc_), list_size(0)
23 {
24 assert(osc);
25 }
26
27 typedef std::vector<std::string> list_t;
29 std::function<void(list_t)> callback;
30 unsigned list_size;
31
32 void doUpdate(std::string url)
33 {
34 if(!ext.empty())
35 osc->removeLink(this);
36 ext = url;
37
38 oscRegister(ext.c_str());
39 }
40
41 void apply()
42 {
43 if(list.size() == 0) {
44 oscWrite("", "I");
45 }
46 char types[list.size()+1];
47 rtosc_arg_t args[list.size()];
48
49 //zero out data
50 memset(types, 0, sizeof(types));
51 memset(args, 0, sizeof(args));
52
53 for(int i=0; i<(int)list.size(); ++i) {
54 types[i] = 's';
55 args[i].s = list[i].c_str();
56 }
57 char buffer[1024*5];
58 rtosc_amessage(buffer, sizeof(buffer), ext.c_str(), types, args);
59 osc->writeRaw(buffer);
60 }
61
62 //Raw messages
63 virtual void OSC_raw(const char *msg)
64 {
65 std::string args = rtosc_argument_string(msg);
66 const int list_size = args.length();
67 for(int i=0; i<list_size; ++i)
68 if(args[i] != 's')
69 return;
70
71 list.clear();
72 list.resize(list_size);
73
74 for(int idx=0; idx<list_size; ++idx)
75 list[idx] = rtosc_argument(msg, idx).s;
76 if(callback)
78 }
79};
assert(0)
Definition Fl_Osc_Interface.h:56
Fl_Osc_Interface * osc
Definition Fl_Osc_Widget.H:65
std::string ext
Definition Fl_Osc_Widget.H:64
Fl_Osc_Widget(void)
Definition Fl_Osc_Widget.cpp:16
void oscRegister(const char *path)
Definition Fl_Osc_Widget.cpp:91
void oscWrite(std::string path, const char *args,...)
Definition Fl_Osc_Widget.cpp:60
void doUpdate(std::string url)
Definition Osc_SimpleListModel.h:32
void apply()
Definition Osc_SimpleListModel.h:41
std::function< void(list_t)> callback
Definition Osc_SimpleListModel.h:29
virtual void OSC_raw(const char *msg)
Definition Osc_SimpleListModel.h:63
list_t list
Definition Osc_SimpleListModel.h:28
unsigned list_size
Definition Osc_SimpleListModel.h:30
std::vector< std::string > list_t
Definition Osc_SimpleListModel.h:27
Osc_SimpleListModel(Fl_Osc_Interface *osc_)
Definition Osc_SimpleListModel.h:21
register unsigned i
Definition inflate.c:1575
const char * msg
Definition missing_descriptor.c:20
size_t rtosc_amessage(char *buffer, size_t len, const char *address, const char *arguments, const rtosc_arg_t *args)
Definition rtosc.c:515
const char * rtosc_argument_string(const char *msg)
Definition rtosc.c:11
rtosc_arg_t rtosc_argument(const char *msg, unsigned idx)
Definition rtosc.c:732
Definition rtosc.h:46
const char * s
Definition rtosc.h:54
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396