LMMS
Loading...
Searching...
No Matches
Fl_Osc_DialF.cpp
Go to the documentation of this file.
1/*
2 ZynAddSubFX - a software synthesizer
3
4 Fl_Osc_DialF.cpp - OSC Powered Real Valued Dial
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#include "Fl_Osc_DialF.H"
13#include "Fl_Osc_Interface.h"
14#include "Fl_Osc_Pane.H"
15#include <cstdlib>
16#include <cstring>
17#include <cmath>
18#include <cassert>
19#include <sstream>
20
21template<typename A, typename B>
22B string_cast(const A &a)
23{
24 std::stringstream s;
25 s.precision(3);
26 B b;
27 s << " " << a << " ";
28 s >> b;
29 return b;
30}
31
32static void callback_fn_dialf(Fl_Widget *w, void *)
33{
34 ((Fl_Osc_DialF*)w)->cb();
35}
36
37Fl_Osc_DialF::Fl_Osc_DialF(int X, int Y, int W, int H, const char *label)
38 :WidgetPDial(X,Y,W,H, label), Fl_Osc_Widget()
39{
40 //bounds(0.0, 127.0f);
41 WidgetPDial::callback(callback_fn_dialf);
42}
43
44
45void Fl_Osc_DialF::init(const char *path)
46{
47 Fl_Osc_Pane *pane = fetch_osc_pane(this);
48 assert(pane);
49 osc = pane->osc;
50 ext = path;
51 loc = pane->base;
52 oscRegister(path);
53 integer_step = false;
54};
55
58
59void Fl_Osc_DialF::callback(Fl_Callback *cb, void *p)
60{
61 cb_data.first = cb;
62 cb_data.second = p;
63}
64
66{
67 bool middle_mouse = (ev == FL_PUSH && Fl::event_state(FL_BUTTON2) && !Fl::event_shift());
68 bool ctl_click = (ev == FL_PUSH && Fl::event_state(FL_BUTTON3) && Fl::event_ctrl());
69 bool shift_middle = (ev == FL_PUSH && Fl::event_state(FL_BUTTON2) && Fl::event_shift());
70 if(middle_mouse || ctl_click) {
71 printf("Trying to learn...\n");
72 osc->write("/learn", "s", (loc+ext).c_str());
73 return 1;
74 } else if(shift_middle) {
75 osc->write("/unlearn", "s", (loc+ext).c_str());
76 return 1;
77 }
78 return WidgetPDial::handle(ev);
79}
80
82{
83 value(v);
84}
85
87{
89}
90
92{
93 assert(osc);
94
95 oscWrite(ext, "f", (float)value());
96
97 if(cb_data.first)
98 cb_data.first(this, cb_data.second);
99// label_str = string_cast<float,string>(val);
100// label(" ");
101// label(label_str.c_str());
102}
static void callback_fn_dialf(Fl_Widget *w, void *)
Definition Fl_Osc_DialF.cpp:32
B string_cast(const A &a)
Definition Fl_Osc_DialF.cpp:22
assert(0)
uint8_t a
Definition Spc_Cpu.h:141
Definition Fl_Osc_DialF.H:19
int handle(int)
Definition Fl_Osc_DialF.cpp:65
void init(const char *path)
Definition Fl_Osc_DialF.cpp:45
void update(void)
Definition Fl_Osc_DialF.cpp:86
Fl_Osc_DialF(int X, int Y, int W, int H, const char *label=NULL)
Definition Fl_Osc_DialF.cpp:37
void OSC_value(float)
Definition Fl_Osc_DialF.cpp:81
void cb(void)
Definition Fl_Osc_DialF.cpp:91
virtual ~Fl_Osc_DialF(void)
Definition Fl_Osc_DialF.cpp:56
std::pair< Fl_Callback *, void * > cb_data
Definition Fl_Osc_DialF.H:36
void callback(Fl_Callback *cb, void *p=NULL)
Definition Fl_Osc_DialF.cpp:59
Definition Fl_Osc_Pane.H:20
std::string base
Definition Fl_Osc_Pane.H:24
class Fl_Osc_Interface * osc
Definition Fl_Osc_Pane.H:23
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
std::string loc
Definition Fl_Osc_Widget.H:62
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
class Fl_Osc_Pane * fetch_osc_pane(Fl_Widget *w)
Definition Fl_Osc_Widget.cpp:103
bool integer_step
Definition WidgetPDial.h:33
int handle(int event)
Definition WidgetPDial.cpp:54
WidgetPDial(int x, int y, int w, int h, const char *label=0)
Definition WidgetPDial.cpp:29
UINT_D64 w
Definition inflate.c:942
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned s
Definition inflate.c:1555
static PuglViewHint int value
Definition pugl.h:1708
#define X(str)
Definition juce_LV2Common.h:197
#define A(x)
Definition lice_arc.cpp:13
uch * p
Definition crypt.c:594
b
Definition crypt.c:628