/usr/include/faust/osc/FaustFactory.h is in faust-common 0.9.95~repack1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | /*
Copyright (C) 2011 Grame
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France
research@grame.fr
*/
#ifndef __FaustFactory__
#define __FaustFactory__
#include <stack>
#include <string>
#include <sstream>
#include "faust/osc/FaustNode.h"
#include "faust/osc/smartpointer.h"
class GUI;
namespace oscfaust
{
class OSCIO;
class RootNode;
typedef class SMARTP<RootNode> SRootNode;
class MessageDriven;
typedef class SMARTP<MessageDriven> SMessageDriven;
//--------------------------------------------------------------------------
/*!
\brief a factory to build a OSC UI hierarchy
Actually, makes use of a stack to build the UI hierarchy.
It includes a pointer to a OSCIO controler, but just to give it to the root node.
*/
class FaustFactory
{
std::stack<SMessageDriven> fNodes; ///< maintains the current hierarchy level
SRootNode fRoot; ///< keep track of the root node
OSCIO* fIO; ///< hack to support audio IO via OSC, actually the field is given to the root node
GUI* fGUI; ///< a GUI pointer to support updateAllGuis(), required for bi-directionnal OSC
private:
std::string addressFirst(const std::string& address) const;
std::string addressTail(const std::string& address) const;
public:
FaustFactory(GUI* ui, OSCIO * io = 0);
virtual ~FaustFactory();
template <typename C> void addnode(const char* label, C* zone, C init, C min, C max, bool initZone, bool input);
template <typename C> void addAlias(const std::string& fullpath, C* zone, C imin, C imax, C init, C min, C max, const char* label);
void addAlias(const char* alias, const char* address, float imin, float imax, float omin, float omax);
void opengroup(const char* label);
void closegroup();
SRootNode root() const;
};
/**
* Add a node to the OSC UI tree in the current group at the top of the stack
*/
template <typename C> void FaustFactory::addnode(const char* label, C* zone, C init, C min, C max, bool initZone, bool input)
{
SMessageDriven top;
if (fNodes.size()) top = fNodes.top();
if (top) {
std::string prefix = top->getOSCAddress();
top->add(FaustNode<C>::create(root(), label, zone, init, min, max, prefix.c_str(), fGUI, initZone, input));
}
}
/**
* Add an alias (actually stored and handled at root node level
*/
template <typename C> void FaustFactory::addAlias(const std::string& fullpath, C* zone, C imin, C imax, C init, C min, C max, const char* label)
{
std::istringstream ss(fullpath);
std::string realpath;
ss >> realpath >> imin >> imax;
SMessageDriven top = fNodes.top();
if (top) {
std::string target = top->getOSCAddress() + "/" + label;
addAlias(realpath.c_str(), target.c_str(), float(imin), float(imax), float(min), float(max));
}
}
} // end namespoace
#endif
|