00001
00002 #ifndef OSCWRAPPER_H
00003 #define OSCWRAPPER_H
00004
00005 #include "MarSystemQtWrapper.h"
00006 #include "qoscserver.h"
00007 #include "qoscclient.h"
00008
00009
00010 using namespace std;
00011 using namespace Marsyas;
00012
00013 namespace MarsyasQt
00014 {
00021 class OscMapper: public QObject
00022 {
00023 Q_OBJECT
00024 public:
00025
00026
00027 OscMapper(QHostAddress inputHost, quint16 inputPort, QHostAddress outputHost, quint16 outputPort, QObject* p, MarSystemQtWrapper *mwr);
00028 ~OscMapper();
00029
00030
00031 void registerInputQtSlot(QObject *object, QString path, QVariant::Type type);
00032
00033
00034
00035 void registerOutputQtSlot(QObject *object, QString path, QVariant::Type type);
00036
00037 public slots:
00038
00039
00040 void updctrl(QString path, QVariant data)
00041 {
00042
00043 string control = path.toStdString();
00044 control.erase(0, 1);
00045 MarControlPtr cval;
00046 QString tmp;
00047
00048 QVariant::Type targetType;
00049 if(path.contains("mrs_natural/"))
00050 data.convert(QVariant::Int);
00051 else if(path.contains("mrs_bool/"))
00052 data.convert(QVariant::Bool);
00053 else if(path.contains("mrs_string/"))
00054 data.convert(QVariant::String);
00055 else if(path.contains("mrs_real/"))
00056 data.convert(QVariant::Double);
00057 else if(path.contains("mrs_realvec/"))
00058 data.convert(QVariant::List);
00059
00060 switch(data.type())
00061 {
00062 case QVariant::Bool:
00063 cval = data.toBool();
00064 break;
00065 case QVariant::Int:
00066 cval = data.toInt();
00067 break;
00068 case QVariant::Double:
00069 cval = data.toDouble();
00070 break;
00071 case QVariant::String:
00072 tmp = data.toString();
00073 cval = tmp.toStdString();
00074 break;
00075 case QVariant::List:
00076 mrs_natural i=0;
00077 QList<QVariant> list = data.toList();
00078 realvec vec(list.size());
00079
00080 QList<QVariant>::iterator vsi;
00081 for (vsi = list.begin();
00082 vsi != list.end(); ++vsi)
00083 {
00084 vec(i++) = (*vsi).toDouble();
00085 }
00086 cval = vec;
00087 break;
00088 }
00089 cout << cval;
00090 mwr_->updctrl(control, cval);
00091 }
00092
00093
00094 void ctrlChanged(MarControlPtr ctrl)
00095 {
00096 QString oscPath("/");
00097 oscPath+=QString().fromStdString(ctrl->getName());
00098
00099 QVariant oscData;
00100 if(oscPath.contains("mrs_natural/"))
00101 oscData = (int) ctrl->to<mrs_natural>();
00102 else if(oscPath.contains("mrs_bool/"))
00103 oscData = ctrl->to<mrs_bool>();
00104 else if(oscPath.contains("mrs_string/"))
00105 oscData = QString().fromStdString(ctrl->to<mrs_string>());
00106 else if(oscPath.contains("mrs_realvec/"))
00107 {
00108 realvec vec = ctrl->to<mrs_realvec>();
00109 QList<QVariant> list;
00110 for (mrs_natural i=0 ; i< vec.getSize() ; i++)
00111 list.push_back(vec(i));
00112 oscData = QVariant(list);
00113 }
00114 else if(oscPath.contains("mrs_real/"))
00115 oscData = ctrl->to<mrs_real>();
00116
00117 oscClient_->sendData(oscPath, oscData);
00118 }
00119
00120 private:
00121 MarSystemQtWrapper *mwr_;
00122 QOscServer *oscServer_;
00123 QOscClient *oscClient_;
00124 };
00125 }
00126 #endif