57#include <FL/Fl_Shared_Image.H>
58#include <FL/Fl_Tiled_Image.H>
59#include <FL/Fl_Dial.H>
87static Fl_Tiled_Image *module_backdrop;
92 const bool undo_ = Fl::event_ctrl() && Fl::event_key() ==
'z';
93 const bool redo = Fl::event_ctrl() && Fl::event_key() ==
'r';
94 const bool show = Fl::event_ctrl() && Fl::event_shift() &&
95 Fl::event_key() ==
's';
96 const bool panel = Fl::event_ctrl() && Fl::event_shift() &&
97 Fl::event_key() ==
'p';
99 ui->osc->write(
"/undo",
"");
101 ui->osc->write(
"/redo",
"");
103 ui->simplemasterwindow->hide();
104 ui->masterwindow->show();
107 ui->panelwindow->show();
108 return undo_ || redo || show;
115 o->box( FL_DOWN_FRAME );
116 o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP );
117 o->color( FL_BLACK );
118 o->image( module_backdrop );
119 o->labeltype( FL_SHADOW_LABEL );
121 o->parent()->labeltype(FL_NO_LABEL);
122 o->parent()->box(FL_NO_BOX);
125 o->box( FL_PLASTIC_UP_BOX );
127 o->labeltype( FL_EMBOSSED_LABEL );
134 fl_register_images();
136 Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL);
138#ifdef CARLA_VERSION_STRING
139 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath +
"/knob.png"))
140 Fl_Dial::default_image(img);
142 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH
"/knob.png"))
143 Fl_Dial::default_image(img);
145 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(
SOURCE_DIR "/pixmaps/knob.png"))
146 Fl_Dial::default_image(img);
148 errx(1,
"ERROR: Cannot find pixmaps/knob.png");
151#ifdef CARLA_VERSION_STRING
152 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath +
"/window_backdrop.png"))
153 Fl::scheme_bg(
new Fl_Tiled_Image(img));
155 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH
"/window_backdrop.png"))
156 Fl::scheme_bg(
new Fl_Tiled_Image(img));
158 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(
SOURCE_DIR "/pixmaps/window_backdrop.png"))
159 Fl::scheme_bg(
new Fl_Tiled_Image(img));
161 errx(1,
"ERROR: Cannot find pixmaps/window_backdrop.png");
163#ifdef CARLA_VERSION_STRING
164 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath +
"/module_backdrop.png"))
165 module_backdrop =
new Fl_Tiled_Image(img);
167 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH
"/module_backdrop.png"))
168 module_backdrop =
new Fl_Tiled_Image(img);
170 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(
SOURCE_DIR "/pixmaps/module_backdrop.png"))
171 module_backdrop =
new Fl_Tiled_Image(img);
173 errx(1,
"ERROR: Cannot find pixmaps/module_backdrop");
175 Fl::background(50, 50, 50);
176 Fl::background2(70, 70, 70);
177 Fl::foreground(255, 255, 255);
189 ui =
new MasterUI((
int*)
exit, osc);
193 if (
long long winId = atoll(
embedId))
197 MasterUI::menu_mastermenu[11].hide();
198 MasterUI::menu_mastermenu[26].deactivate();
202 MasterUI::menu_mastermenu[13].hide();
203 fl_embed(
ui->masterwindow, winId);
206 ui->masterwindow->show();
214 delete static_cast<MasterUI*
>(
ui);
217#define BEGIN(x) {x,":non-realtime\0",NULL,[](const char *m, rtosc::RtData d){ \
218 MasterUI *ui = static_cast<MasterUI*>(d.obj); \
219 rtosc_arg_t a0 = {0}, a1 = {0}; \
220 if(rtosc_narguments(m) > 0) \
221 a0 = rtosc_argument(m,0); \
222 if(rtosc_narguments(m) > 1) \
223 a1 = rtosc_argument(m,1); \
224 (void)ui;(void)a1;(void)a0;
240 BEGIN(
"session-type:s") {
241 if(strcmp(a0.s,
"LASH"))
243 ui->sm_indicator1->value(1);
244 ui->sm_indicator2->value(1);
245 ui->sm_indicator1->tooltip(
"LASH");
246 ui->sm_indicator2->tooltip(
"LASH");
248 BEGIN(
"save-master:s") {
249 ui->do_save_master(a0.s);
251 BEGIN(
"load-master:s") {
252 ui->do_load_master(a0.s);
254 BEGIN(
"vu-meter:bb") {
256 printf(
"Vu meter handler...\n");
258 if(a0.b.len ==
sizeof(
vuData) &&
261 printf(
"Normal behavior...\n");
264 ui->simplemastervu->update((
vuData*)a0.b.data);
265 ui->mastervu->update((
vuData*)a0.b.data);
267 float *partvu = (
float*)a1.b.data;
269 ui->panellistitem[
i]->partvu->update(partvu[
i]);
282 MasterUI *mui = (MasterUI*)
gui;
288 memset(buffer, 0,
sizeof(buffer));
332 fprintf(stderr,
"Error in transmitMsg(...)\n");
340 lo_message
msg = lo_message_deserialise((
void*)rtmsg,
342 lo_address addr = lo_address_new_from_url(
sendtourl.c_str());
343 lo_send_message(addr, rtmsg,
msg);
350 assert(
s!=
"/Psysefxvol-1/part0");
361 void write(
string s,
const char *args, ...)
override
412 assert(!strstr(
s.c_str(),
"/part0/kit-1"));
413 map.insert(std::pair<string,Fl_Osc_Widget*>(
s,
w));
418 fprintf(stdout,
"renameLink('%s','%s',%p)\n",
419 old.c_str(), newer.c_str(),
w);
426 for(
auto i =
map.begin();
i !=
map.end(); ++
i) {
427 if(
i->first ==
s &&
i->second ==
w) {
437 bool processing =
true;
442 for(
auto i =
map.begin();
i !=
map.end(); ++
i) {
455 virtual void damage(
const char *path)
override
459 if(strstr(pair.first.c_str(), path)) {
460 auto *tmp =
dynamic_cast<Fl_Widget*
>(pair.second);
465 if(!tmp || tmp->visible_r())
466 pair.second->update();
477 const char *handle = strrchr(
msg,
'/');
483 auto range =
map.equal_range(
msg);
484 for(
auto itr = range.first; itr != range.second; ++itr) {
485 auto widget = itr->second;
490 widget->OSC_raw(
msg);
492 if(!strcmp(arg_str,
"b")) {
496 }
else if(!strcmp(arg_str,
"c")) {
499 }
else if(!strcmp(arg_str,
"s")) {
502 }
else if(!strcmp(arg_str,
"i")) {
505 }
else if(!strcmp(arg_str,
"f")) {
508 }
else if(!strcmp(arg_str,
"T") || !strcmp(arg_str,
"F")) {
514 && strcmp(
msg,
"/vu-meter")
515 && strcmp(
msg,
"undo_change")
516 && !strstr(
msg,
"parameter")
517 && !strstr(
msg,
"Prespoint")) {
527 printf(
"Leaked controls:\n");
528 for(
auto i =
map.begin();
i !=
map.end(); ++
i) {
529 printf(
"Known control '%s' (%p)...\n",
i->first.c_str(),
i->second);
536 std::multimap<string,Fl_Osc_Widget*>
map;
548 fprintf(stderr,
"liblo :-( %d-%s@%s\n",
i,
m,loc);
552 int argc, lo_message
msg,
void *user_data)
559 memset(buffer, 0,
sizeof(buffer));
560 size_t size =
sizeof(buffer);
561 assert(lo_message_length(
msg, path) <=
sizeof(buffer));
562 lo_message_serialise(
msg, path, buffer, &
size);
572 lo_server_recv_noblock(
server, 100);
576"zynaddsubfx-ext-gui [options] uri - Connect to remote ZynAddSubFX\n"
577" --help print this help message\n"
578" --no-uri run without a remote ZynAddSubFX\n"
579" --embed window ID [Internal Flag For Embedding Windows]\n"
581" example: zynaddsubfx-ext-gui osc.udp://localhost:1234/\n"
582" This will connect to a running zynaddsubfx instance on the same\n"
583" machine on port 1234.\n";
585#ifndef CARLA_VERSION_STRING
593 if(!strcmp(
"--help",
argv[
i]))
595 else if(!strcmp(
"--no-uri",
argv[
i]))
597 else if(!strcmp(
"--embed",
argv[
i]))
599 else if(!strcmp(
"--title",
argv[
i]))
604 if(
uri ==
NULL && no_uri ==
false)
618 fprintf(stderr,
"ext client running on %d\n", lo_server_get_port(
server));
#define errx(...)
Definition SVFilter.cpp:21
#define NUM_MIDI_PARTS
Definition globals.h:99
int kb_shortcut_handler(int)
Definition Connection.cpp:44
class MasterUI * ui
Definition Connection.cpp:39
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
int main(void)
Definition atom-test.c:30
Definition Fl_Osc_Interface.h:56
virtual void createLink(string, class Fl_Osc_Widget *)
Definition Fl_Osc_Interface.h:61
Definition Connection.cpp:285
virtual void removeLink(class Fl_Osc_Widget *w) override
Definition guimain.cpp:435
void renameLink(string old, string newer, Fl_Osc_Widget *w) override
Definition guimain.cpp:416
void transmitMsg(const char *path, const char *args,...)
Definition guimain.cpp:324
void writeValue(string s, float f) override
Definition guimain.cpp:400
void removeLink(string s, class Fl_Osc_Widget *w) override
Definition Connection.cpp:373
void write(string s, const char *args,...) override
Definition guimain.cpp:361
void transmitMsg(const char *rtmsg)
Definition guimain.cpp:336
void dumpLookupTable(void)
Definition guimain.cpp:524
void requestValue(string s) override
Definition guimain.cpp:347
void tryLink(const char *msg) override
Definition guimain.cpp:471
void writeValue(string s, string ss) override
Definition guimain.cpp:384
void writeRaw(const char *msg) override
Definition guimain.cpp:375
std::multimap< string, Fl_Osc_Widget * > map
Definition Connection.cpp:490
virtual void damage(const char *path) override
Definition guimain.cpp:455
UI_Interface()
Definition guimain.cpp:321
void writeValue(string s, char c) override
Definition guimain.cpp:392
void createLink(string s, class Fl_Osc_Widget *w) override
Definition guimain.cpp:408
Definition thread-link.h:43
UINT_D64 w
Definition inflate.c:942
unsigned * m
Definition inflate.c:1559
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static char filename[]
Definition features.c:5
char * argv[]
Definition unzip.c:738
static const char * title
Definition pugl.h:1747
const char * help_message
Definition guimain.cpp:575
#define BEGIN(x)
Definition guimain.cpp:217
void set_module_parameters(Fl_Widget *o)
Definition guimain.cpp:112
const char * embedId
Definition guimain.cpp:24
int kb_shortcut_handler(int)
Definition guimain.cpp:90
void watch_lo(void)
Definition guimain.cpp:569
lo_server server
Definition guimain.cpp:28
int Pexitprogram
Definition guimain.cpp:39
rtosc::ThreadLink lo_buffer(4096 *2, 1000)
static int handler_function(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data)
Definition guimain.cpp:551
void exitprogram()
Definition guimain.cpp:34
std::string sendtourl
Definition guimain.cpp:29
static void liblo_error_cb(int i, const char *m, const char *loc)
Definition guimain.cpp:546
CARLA_PLUGIN_EXPORT void exit(int status)
Definition interposer-safe.cpp:70
const char * msg
Definition missing_descriptor.c:20
Definition Connection.h:23
void * ui_handle_t
Definition Connection.h:24
Fl_Osc_Interface * genOscInterface(zyncarla::MiddleWare *)
Definition ConnectionDummy.cpp:32
void raiseUi(ui_handle_t, const char *)
Definition ConnectionDummy.cpp:22
void destroyUi(ui_handle_t)
Definition ConnectionDummy.cpp:19
ui_handle_t createUi(Fl_Osc_Interface *osc, void *exit)
Definition ConnectionDummy.cpp:15
void tickUi(ui_handle_t)
Definition ConnectionDummy.cpp:28
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition zynaddsubfx-src.cpp:569
bool fileexists(const char *filename)
Definition Util.cpp:110
bool isPlugin
Definition Util.cpp:41
GUI::ui_handle_t gui
Definition main.cpp:50
size_t rtosc_message_length(const char *msg, size_t len)
Definition rtosc.c:848
size_t rtosc_vmessage(char *buffer, size_t len, const char *address, const char *arguments, va_list ap)
Definition rtosc.c:497
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
data object for the dispatch routine
Definition ports.h:55
Definition Connection.cpp:159
static rtosc::Ports ports
Definition Connection.cpp:164
return c
Definition crypt.c:175
int result
Definition process.c:1455
#define void
Definition unzip.h:396
#define END
Definition unzpriv.h:1662
ss
Definition zipinfo.c:2292
int argc
Definition zipinfo.c:455
#define SOURCE_DIR
Definition zynaddsubfx-src.cpp:21