TTErr TTProtocol::getApplicationParameters(TTSymbol parameterName, TTValue& value) { TTValue v; TTHashPtr parameters; if (!mApplicationParameters.lookup(mSelectedApplication, v)) { parameters = TTHashPtr((TTPtr)v[0]); return parameters->lookup(parameterName, value); } return kTTErrGeneric; }
void cue_get(TTPtr self, t_symbol *msg, long argc, t_atom *argv) { WrappedModularInstancePtr x = (WrappedModularInstancePtr)self; TTHashPtr allCues; TTValue v; TTSymbol name, attribute; TTObject cue; long ac = 0; t_atom *av = NULL; if (argc == 2) { if (atom_gettype(argv) == A_SYM && atom_gettype(argv+1) == A_SYM) { attribute = TTSymbol((char*)atom_getsym(argv)->s_name); name = TTSymbol((char*)atom_getsym(argv+1)->s_name); // get cue object table x->wrappedObject.get("cues", v); allCues = TTHashPtr((TTPtr)v[0]); if (allCues) { // get cue if (!allCues->lookup(name, v)) { cue = v[0]; if (!cue.get(attribute, v)) { v.prepend(name); jamoma_ttvalue_to_Atom(v, &ac, &av); object_obex_dumpout(self, atom_getsym(argv), ac, av); } else object_error((t_object*)x, "%s attribute doesn't exist", atom_getsym(argv)->s_name); } else object_error((t_object*)x, "%s cue doesn't exist", atom_getsym(argv+1)->s_name); } } } }
void cue_set(TTPtr self, t_symbol *msg, long argc, t_atom *argv) { WrappedModularInstancePtr x = (WrappedModularInstancePtr)self; TTHashPtr allCues; TTValue v; TTSymbol name, attribute; TTObject cue; if (argc >= 2) { if (atom_gettype(argv) == A_SYM && atom_gettype(argv+1) == A_SYM) { attribute = TTSymbol((char*)atom_getsym(argv)->s_name); name = TTSymbol((char*)atom_getsym(argv+1)->s_name); // get cue object table x->wrappedObject.get("cues", v); allCues = TTHashPtr((TTPtr)v[0]); if (allCues) { // get cue if (!allCues->lookup(name, v)) { cue = v[0]; // prepare value to set jamoma_ttvalue_from_Atom(v, _sym_nothing, argc-2, argv+2); if (cue.set(attribute, v)) object_error((t_object*)x, "%s attribute doesn't exist", atom_getsym(argv)->s_name); } else object_error((t_object*)x, "%s cue doesn't exist", atom_getsym(argv+1)->s_name); } } } }
TTErr TTProtocol::ApplicationRegister(const TTValue& inputValue, TTValue& outputValue) { TTObject application; TTSymbol parameterName; TTHashPtr applicationParameters; TTValue v, parameterNames, out, none; TTErr err; // update local application name mApplicationManager.get("applicationLocalName", v); mLocalApplicationName = v[0]; if (inputValue.size() == 1) { if (inputValue[0].type() == kTypeSymbol) { mSelectedApplication = inputValue[0]; // Check the application is not already registered err = mApplicationParameters.lookup(mSelectedApplication, v); if (err) { applicationParameters = new TTHash(); // prepare parameters table this->getParameterNames(parameterNames); for (TTUInt32 i = 0; i < parameterNames.size(); i++) { parameterName = parameterNames[i]; applicationParameters->append(parameterName, none); } // add the parameters table into mApplicationParameters v = TTValue((TTPtr)applicationParameters); mApplicationParameters.append(mSelectedApplication, v); // optionnaly format the application type depending on the protocol features // (if the application is already registered into the application manager) err = mApplicationManager.send("ApplicationFind", mSelectedApplication, out); if (!err) { application = out[0]; // for none local application if (mSelectedApplication != mLocalApplicationName) { // setup the application type depending of the discovering feature of the protocol if (mDiscover || mDiscoverAll) application.set("type", kTTSym_mirror); else application.set("type", kTTSym_proxy); } } return kTTErrNone; } } } return kTTErrGeneric; }
void cue_edit(TTPtr self, t_symbol *msg, long argc, const t_atom *argv) { WrappedModularInstancePtr x = (WrappedModularInstancePtr)self; TTString *buffer; char title[MAX_FILENAME_CHARS]; TTObject aTextHandler; TTHashPtr allCues; TTValue v, o; TTSymbol name = kTTSymEmpty; t_atom a; TTErr tterr; // choose object to edit : default the cuelist *EXTRA->toEdit = x->wrappedObject; EXTRA->cueName = kTTSymEmpty; if (argc && argv) { if (atom_gettype(argv) == A_LONG) { TTUInt32 index = atom_getlong(argv); // get cues names x->wrappedObject.get("names", v); if (index > 0 && index <= v.size()) name = v[index-1]; else { object_error((t_object*)x, "%d doesn't exist", atom_getlong(argv)); return; } } else if (atom_gettype(argv) == A_SYM) name = TTSymbol(atom_getsym(argv)->s_name); if (name != kTTSymEmpty) { // get cue object table x->wrappedObject.get("cues", v); allCues = TTHashPtr((TTPtr)v[0]); if (allCues) { // get cue to edit if (!allCues->lookup(name, v)) { // edit a cue *EXTRA->toEdit = v[0]; EXTRA->cueName = name; } else { object_error((t_object*)x, "%s doesn't exist", atom_getsym(argv)->s_name); return; } } } } // only one editor can be open in the same time if (!EXTRA->textEditor) { EXTRA->textEditor = (t_object*)object_new(_sym_nobox, _sym_jed, x, 0); buffer = new TTString(); // get the buffer handler tterr = x->internals->lookup(kTTSym_TextHandler, o); if (!tterr) { aTextHandler = o[0]; critical_enter(0); aTextHandler.set(kTTSym_object, *EXTRA->toEdit); tterr = aTextHandler.send(kTTSym_Write, (TTPtr)buffer); critical_exit(0); } // pass the buffer to the editor object_method(EXTRA->textEditor, _sym_settext, buffer->c_str(), _sym_utf_8); object_attr_setchar(EXTRA->textEditor, gensym("scratch"), 1); snprintf(title, MAX_FILENAME_CHARS, "cuelist editor"); object_attr_setsym(EXTRA->textEditor, _sym_title, gensym(title)); // output a flag atom_setsym(&a, gensym("opened")); object_obex_dumpout(self, gensym("editor"), 1, &a); buffer->clear(); delete buffer; buffer = NULL; } else { object_attr_setchar(EXTRA->textEditor, gensym("visible"), 1); } }