+++ /dev/null
-/*
- Copyright (C) 2011 Grame - Lyon
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted.
-*/
-
-#include "OSCControler.h"
-#include "GUI.h"
-#include <vector>
-
-/******************************************************************************
-*******************************************************************************
-
- OSC (Open Sound Control) USER INTERFACE
-
-*******************************************************************************
-*******************************************************************************/
-/*
-
-Note about the OSC addresses and the Faust UI names:
-----------------------------------------------------
-There are potential conflicts between the Faust UI objects naming scheme and
-the OSC address space. An OSC symbolic names is an ASCII string consisting of
-printable characters other than the following:
- space
-# number sign
-* asterisk
-, comma
-/ forward
-? question mark
-[ open bracket
-] close bracket
-{ open curly brace
-} close curly brace
-
-a simple solution to address the problem consists in replacing
-space or tabulation with '_' (underscore)
-all the other osc excluded characters with '-' (hyphen)
-
-This solution is implemented in the proposed OSC UI;
-*/
-
-using namespace std;
-
-//class oscfaust::OSCIO;
-class OSCUI : public GUI
-{
- oscfaust::OSCControler* fCtrl;
- vector<const char*> fAlias;
-
- const char* tr(const char* label) const;
-
- // add all accumulated alias
- void addalias(float* zone, float init, float min, float max)
- {
- for (unsigned int i=0; i<fAlias.size(); i++) {
- fCtrl->addfullpathnode(fAlias[i], zone, 0, 1, init, min, max);
- }
- fAlias.clear();
- }
-
- public:
-
- OSCUI(char* /*applicationname*/, int argc, char *argv[], oscfaust::OSCIO* io=0) : GUI()
- {
- fCtrl = new oscfaust::OSCControler(argc, argv, io);
-// fCtrl->opengroup(applicationname);
- }
-
- virtual ~OSCUI() { delete fCtrl; }
-
- // -- active widgets
- virtual void addButton(const char* label, float* zone) { addalias(zone, 0, 0, 1); fCtrl->addnode( tr(label), zone, 0, 0, 1); }
- virtual void addToggleButton(const char* label, float* zone) { addalias(zone, 0, 0, 1); fCtrl->addnode( tr(label), zone, 0, 0, 1); }
- virtual void addCheckButton(const char* label, float* zone) { addalias(zone, 0, 0, 1); fCtrl->addnode( tr(label), zone, 0, 0, 1); }
- virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float /*step*/) { addalias(zone, init, min, max); fCtrl->addnode( tr(label), zone, init, min, max); }
- virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float /*step*/) { addalias(zone, init, min, max); fCtrl->addnode( tr(label), zone, init, min, max); }
- virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float /*step*/) { addalias(zone, init, min, max); fCtrl->addnode( tr(label), zone, init, min, max); }
-
- // -- passive widgets
-
- virtual void addNumDisplay(const char* /*label*/, float* /*zone*/, int /*precision*/) {}
- virtual void addTextDisplay(const char* /*label*/, float* /*zone*/, const char* /*names*/[], float /*min*/, float /*max*/) {}
- virtual void addHorizontalBargraph(const char* /*label*/, float* /*zone*/, float /*min*/, float /*max*/) {}
- virtual void addVerticalBargraph(const char* /*label*/, float* /*zone*/, float /*min*/, float /*max*/) {}
-
- virtual void openFrameBox(const char* label) { fCtrl->opengroup( tr(label)); }
- virtual void openTabBox(const char* label) { fCtrl->opengroup( tr(label)); }
- virtual void openHorizontalBox(const char* label) { fCtrl->opengroup( tr(label)); }
- virtual void openVerticalBox(const char* label) { fCtrl->opengroup( tr(label)); }
- virtual void closeBox() { fCtrl->closegroup(); }
-
- virtual void declare(float* , const char* key , const char* alias)
- {
- if (strcasecmp(key,"OSC")==0) fAlias.push_back(alias);
- }
-
-
- virtual void show() {}
-
- void run() { fCtrl->run(); }
- const char* getRootName() { return fCtrl->getRootName(); }
-};
-
-
-const char* OSCUI::tr(const char* label) const
-{
- static char buffer[1024];
- char * ptr = buffer; int n=1;
- while (*label && (n++ < 1024)) {
- switch (*label) {
- case ' ': case ' ':
- *ptr++ = '_';
- break;
- case '#': case '*': case ',': case '/': case '?':
- case '[': case ']': case '{': case '}':
- *ptr++ = '_';
- break;
- default:
- *ptr++ = *label;
- }
- label++;
- }
- *ptr = 0;
- return buffer;
-}