|
- #include "NioUI.h"
- #include "../Nio/Nio.h"
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <FL/Fl_Pack.H>
- #include <FL/Fl_Spinner.H>
- #include <FL/Enumerations.H>
- #include <FL/Fl_Choice.H>
- #include <FL/Fl_Tabs.H>
- #include <FL/Fl_Group.H>
- #include <FL/Fl_Text_Display.H>
- #include "Osc_SimpleListModel.h"
- #include "Fl_Osc_Pane.H"
-
- using namespace std;
-
- static void callback_fn_choice_nio(Fl_Widget *w, void *);
- class Fl_Osc_StrChoice:public Fl_Choice, public Fl_Osc_Widget
- {
- public:
- Fl_Osc_StrChoice(int X, int Y, int W, int H, const char *label = NULL)
- :Fl_Choice(X,Y,W,H, label), Fl_Osc_Widget(this), cb_data(NULL, NULL)
- {
- Fl_Choice::callback(callback_fn_choice_nio, NULL);
- }
-
- virtual ~Fl_Osc_StrChoice(void) {};
- void init(std::string path_)
- {
- ext = path_;
- Fl_Osc_Pane *pane = fetch_osc_pane(this);
- assert(pane);
- assert(pane->osc);
- osc = pane->osc;
- oscRegister(path_.c_str());
- };
-
-
- void OSC_value(const char *S) override
- {
- for(int i=0; i<size()-1; ++i) {
- printf("size = %d, i=%d, text='%s'\n", size(), i, text(i));
- if(!strcmp(S, text(i)))
- value(i);
- }
- }
-
- //Refetch parameter information
- void update(void)
- {
- assert(osc);
- oscWrite(ext);
- }
- void callback(Fl_Callback *cb, void *p = NULL)
- {
- cb_data.first = cb;
- cb_data.second = p;
- }
-
- void cb(void)
- {
- assert(osc);
- if(text(value()))
- oscWrite(ext, "s", text(value()));
- if(cb_data.first)
- cb_data.first(this, cb_data.second);
- }
- private:
- std::pair<Fl_Callback*, void*> cb_data;
- };
- static void callback_fn_choice_nio(Fl_Widget *w, void *)
- {
- ((Fl_Osc_StrChoice*)w)->cb();
- }
-
- NioUI::NioUI(Fl_Osc_Interface *osc)
- :Fl_Window(200, 100, 400, 400, "New IO Controls")
- {
- //hm, I appear to be leaking memory
- Fl_Osc_Group *settings = new Fl_Osc_Group(0, 20, 400, 400 - 35, "Settings");
- {
- settings->osc = osc;
- audio = new Fl_Osc_StrChoice(60, 80, 100, 25, "Audio");
- //audio->callback(audioCallback);
- audio->init("/io/sink");
- midi = new Fl_Osc_StrChoice(60, 100, 100, 25, "Midi");
- //midi->callback(midiCallback);
- midi->init("/io/source");
- }
- settings->end();
-
- //Get options
- midi_opt = new Osc_SimpleListModel(osc);
- audio_opt = new Osc_SimpleListModel(osc);
-
- using list_t = Osc_SimpleListModel::list_t;
-
- //initialize midi list
- midi_opt->callback = [this](list_t list) {
- printf("midi list updating...\n");
- midi->clear();
- for(auto io:list)
- midi->add(io.c_str());
- };
-
- //initialize audio list
- audio_opt->callback = [this](list_t list) {
- audio->clear();
- for(auto io:list)
- audio->add(io.c_str());
- };
-
- midi_opt->doUpdate("/io/source-list");
- audio_opt->doUpdate("/io/sink-list");
-
- resizable(this);
- size_range(400, 300);
- }
-
- NioUI::~NioUI()
- {}
-
- void NioUI::refresh()
- {
- midi_opt->doUpdate("/io/source-list");
- audio_opt->doUpdate("/io/sink-list");
- midi->update();
- audio->update();
- }
-
- void NioUI::midiCallback(Fl_Widget *)
- {
- //bool good = Nio::setSource(static_cast<Fl_Choice *>(c)->text());
- //static_cast<Fl_Choice *>(c)->textcolor(fl_rgb_color(255 * !good, 0, 0));
- }
-
- void NioUI::audioCallback(Fl_Widget *)
- {
- //bool good = Nio::setSink(static_cast<Fl_Choice *>(c)->text());
- //static_cast<Fl_Choice *>(c)->textcolor(fl_rgb_color(255 * !good, 0, 0));
- }
|