21 typedef struct extra {
27 #define EXTRA ((t_extra*)x->extra)
33 void WrapTTCueManagerClass(WrappedClassPtr c);
34 void WrappedCueManagerClass_new(
TTPtr self,
long argc, t_atom *argv);
35 void WrappedCueManageClass_free(
TTPtr self);
37 void cue_assist(
TTPtr self,
void *b,
long msg,
long arg,
char *dst);
39 void cue_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
40 void cue_return_names(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
42 void cue_get(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
43 void cue_set(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
45 void cue_read(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
46 void cue_doread(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
47 void cue_read_again(
TTPtr self);
48 void cue_doread_again(
TTPtr self);
50 void cue_write(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
51 void cue_dowrite(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
52 void cue_write_again(
TTPtr self);
53 void cue_dowrite_again(
TTPtr self);
55 void cue_dorecall(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
57 void cue_edit(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
58 void cue_edclose(
TTPtr self,
char **text,
long size);
59 void cue_doedit(
TTPtr self);
61 void cue_subscribe(
TTPtr self);
63 void cue_return_model_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
65 t_max_err cue_get_relative(
TTPtr self,
TTPtr attr,
long *ac, t_atom **av);
66 t_max_err cue_set_relative(
TTPtr self,
TTPtr attr,
long ac, t_atom *av);
68 extern "C" void JAMOMA_EXPORT_MAXOBJ setup_j0x2ecue(
void)
70 ModularSpec *spec =
new ModularSpec;
71 spec->_wrap = &WrapTTCueManagerClass;
72 spec->_new = &WrappedCueManagerClass_new;
73 spec->_free = &WrappedCueManageClass_free;
79 void WrapTTCueManagerClass(WrappedClassPtr c)
81 eclass_addmethod(c->pdClass, (method)cue_assist,
"assist", A_CANT, 0L);
83 eclass_addmethod(c->pdClass, (method)cue_subscribe,
"loadbang", A_NULL, 0L);
85 eclass_addmethod(c->pdClass, (method)cue_return_model_address,
"return_model_address", A_CANT, 0);
87 eclass_addmethod(c->pdClass, (method)cue_return_value,
"return_value", A_CANT, 0);
89 eclass_addmethod(c->pdClass, (method)cue_return_names,
"return_names", A_CANT, 0);
91 eclass_addmethod(c->pdClass, (method)cue_read,
"cue_read", A_CANT, 0);
92 eclass_addmethod(c->pdClass, (method)cue_write,
"cue_write", A_CANT, 0);
94 eclass_addmethod(c->pdClass, (method)cue_edit,
"dblclick", A_CANT, 0);
95 eclass_addmethod(c->pdClass, (method)cue_edclose,
"edclose", A_CANT, 0);
97 eclass_addmethod(c->pdClass, (method)cue_get,
"get", A_GIMME, 0);
98 eclass_addmethod(c->pdClass, (method)cue_set,
"set", A_GIMME, 0);
100 eclass_addmethod(c->pdClass, (method)cue_read,
"read", A_GIMME, 0);
101 eclass_addmethod(c->pdClass, (method)cue_write,
"write", A_GIMME, 0);
102 eclass_addmethod(c->pdClass, (method)cue_edit,
"edit", A_GIMME, 0);
104 eclass_addmethod(c->pdClass, (method)cue_read_again,
"read/again", A_NULL, 0);
105 eclass_addmethod(c->pdClass, (method)cue_write_again,
"write/again", A_NULL, 0);
108 CLASS_ATTR_ACCESSORS(c->pdClass,
"relative", cue_get_relative, cue_set_relative);
109 CLASS_ATTR_STYLE(c->pdClass,
"relative", 0,
"onoff");
112 void WrappedCueManagerClass_new(
TTPtr self,
long argc, t_atom *argv)
118 long attrstart = attr_args_offset(argc, argv);
124 if (attrstart && argv) {
126 if (atom_gettype(argv) == A_SYM) {
128 name = atom_getsym(argv);
132 pd_error((t_object*)x,
"argument not expected");
136 x->
outlets = (TTHandle)sysmem_newptr(
sizeof(
TTPtr) * 1);
137 x->
outlets[line_out] = outlet_new((t_object*)x, NULL);
143 aTextHandler =
TTObject(kTTSym_TextHandler);
150 EXTRA->cueName = kTTSymEmpty;
152 EXTRA->textEditor = NULL;
155 attr_args_process(x, argc, argv);
158 void WrappedCueManageClass_free(
TTPtr self)
162 delete EXTRA->toEdit;
167 TTObject empty, aTextHandler = o[0];
168 aTextHandler.
set(kTTSym_object, empty);
173 void cue_subscribe(
TTPtr self)
178 TTAddress absoluteAddress, returnedAddress;
190 contextAddress = v[0];
193 post(
"j.cue : contextAddress : %s",contextAddress.
c_str());
196 if (contextAddress != kTTAdrsEmpty) {
201 makeInternals_receiver(x, contextAddress,
TTSymbol(
"/model:address"), gensym(
"return_model_address"), anObject, YES);
222 void cue_return_model_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
236 void cue_assist(
TTPtr self,
void *b,
long msg,
long arg,
char *dst)
243 strcpy(dst,
"cue output");
246 strcpy(dst,
"dumpout");
252 void cue_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
257 if (msg == _sym_nothing)
258 outlet_anything((t_outlet*)x->
outlets[line_out], _sym_nothing, argc, argv);
260 outlet_anything((t_outlet*)x->
outlets[line_out], msg, argc, argv);
263 void cue_return_names(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
266 outlet_anything((t_outlet*)x->
outlets[dump_out], gensym(
"names"), argc, argv);
269 void cue_get(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
281 if (atom_gettype(argv) == A_SYM && atom_gettype(argv+1) == A_SYM) {
283 attribute =
TTSymbol((
char*)atom_getsym(argv)->s_name);
284 name =
TTSymbol((
char*)atom_getsym(argv+1)->s_name);
293 if (!allCues->
lookup(name, v)) {
296 if (!cue.
get(attribute, v)) {
301 outlet_anything((t_outlet*)x->dumpOut, atom_getsym(argv), ac, av);
304 pd_error((t_object*)x,
"%s attribute doesn't exist", atom_getsym(argv)->s_name);
307 pd_error((t_object*)x,
"%s cue doesn't exist", atom_getsym(argv+1)->s_name);
313 void cue_set(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
323 if (atom_gettype(argv) == A_SYM && atom_gettype(argv+1) == A_SYM) {
325 attribute =
TTSymbol((
char*)atom_getsym(argv)->s_name);
326 name =
TTSymbol((
char*)atom_getsym(argv+1)->s_name);
335 if (!allCues->
lookup(name, v)) {
342 if (cue.
set(attribute, v))
343 pd_error((t_object*)x,
"%s attribute doesn't exist", atom_getsym(argv)->s_name);
346 pd_error((t_object*)x,
"%s cue doesn't exist", atom_getsym(argv+1)->s_name);
352 void cue_read(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
355 cue_doread(
self,msg,argc,argv);
358 void cue_doread(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
380 tterr = aTextHandler.
send(kTTSym_Read, v, none);
384 outlet_anything((t_outlet*)x->dumpOut, _sym_read, argc, argv);
386 outlet_anything((t_outlet*)x->dumpOut, _sym_error, 0, NULL);
391 void cue_read_again(
TTPtr self)
393 cue_doread(
self,NULL,0,NULL);
397 void cue_doread_again(
TTPtr self)
415 tterr = aTextHandler.
send(kTTSym_ReadAgain, v, none);
419 outlet_anything((t_outlet*)x->dumpOut, _sym_read, 0, NULL);
421 outlet_anything((t_outlet*)x->dumpOut, _sym_error, 0, NULL);
426 void cue_write(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
429 cue_dowrite(
self, msg, argc, argv);
432 void cue_dowrite(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
435 char filename[MAX_FILENAME_CHARS];
444 snprintf(filename, MAX_FILENAME_CHARS,
"untitled.cues.txt");
457 tterr = aTextHandler.
send(kTTSym_Write, v, none);
461 outlet_anything((t_outlet*) x->dumpOut, _sym_write, argc, argv);
463 outlet_anything((t_outlet*) x->dumpOut, _sym_error, 0, NULL);
468 void cue_write_again(
TTPtr self)
471 cue_dowrite(
self,NULL,0,NULL);
474 void cue_dowrite_again(
TTPtr self)
492 tterr = aTextHandler.
send(kTTSym_WriteAgain, v, none);
496 outlet_anything((t_outlet*)x->dumpOut, _sym_write, 0, NULL);
498 outlet_anything((t_outlet*)x->dumpOut, _sym_error, 0, NULL);
503 void cue_dorecall(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
512 if (atom_gettype(argv) == A_SYM) {
527 if (o.
name() == kTTSym_Container) {
529 o.
get(kTTSym_initialized, v);
540 void cue_edit(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
544 char title[MAX_FILENAME_CHARS];
554 EXTRA->cueName = kTTSymEmpty;
558 if (atom_gettype(argv) == A_LONG)
560 TTUInt32 index = atom_getlong(argv);
565 if (index > 0 && index <= v.
size())
566 v.
get(index-1, name);
569 pd_error((t_object*)x,
"%ld doesn't exist", atom_getlong(argv));
573 else if (atom_gettype(argv) == A_SYM)
574 name =
TTSymbol(atom_getsym(argv)->s_name);
576 if (name != kTTSymEmpty)
585 if (!allCues->
lookup(name, v))
588 *EXTRA->toEdit = v[0];
589 EXTRA->cueName = name;
593 pd_error((t_object*)x,
"%s doesn't exist", atom_getsym(argv)->s_name);
639 void cue_edclose(
TTPtr self,
char **text,
long size)
644 EXTRA->textEditor = NULL;
650 void cue_doedit(
TTPtr self)
666 tterr = aTextHandler.
send(kTTSym_Read, (
TTPtr)EXTRA->text, none);
670 atom_setsym(&a, gensym(
"closed"));
671 outlet_anything((t_outlet*)x->dumpOut, gensym(
"editor"), 1, &a);
674 outlet_anything((t_outlet*)x->dumpOut, _sym_error, 0, NULL);
679 EXTRA->textEditor = NULL;
681 EXTRA->cueName = kTTSymEmpty;
684 t_max_err cue_get_relative(
TTPtr self,
TTPtr attr,
long *ac, t_atom **av)
693 if (!(*av = (t_atom*)getbytes(
sizeof(t_atom)*(*ac)))) {
699 atom_setlong(*av, x->
index);
704 t_max_err cue_set_relative(
TTPtr self,
TTPtr attr,
long ac, t_atom *av)
709 x->
index = atom_getlong(av);
TTAddress appendAddress(const TTAddress &toAppend)
Return a new TTAddress with the appended part.
TTObject subscriberObject
The instance of a TTSubscriber object used to register the wrapped object in the tree structure...
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTHandle outlets
an array of outlet
TTErr lookup(const TTSymbol key, TTValue &value)
Find the value for the given key.
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
TTAddress address
sometime external needs to store an address (e.g. send, receive, view, ...)
TTSymbol patcherClass
the patcher class in which the external is
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
TTObject & getObject()
Get the object binded by this node.
size_type size() const noexcept
Return the number of elements.
void * extra
used to keep very specific things
t_object * patcherPtr
the patcher in which the external is (ignoring subpatcher)
TTHashPtr internals
An hash table to store any internal TTObjectBases (like TTData, TTViewer, ...)
Maintain a collection of TTValue objects indexed by TTSymbol pointers.
void prepend(const TTValue &aValueToPrepend)
Insert another TTValue before the first element.
void append(const T &anElementValueToAppend)
Insert a single TTElement at the end.
void * TTPtr
A generic pointer.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
TTSymbol name() const
Return the name of this class.
TTErr set(const TTSymbol aName, T aValue)
Set an attribute value for an object.
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
TTErr append(const TTSymbol key, const TTValue &value)
Insert an item into the hash table.
void get(const TTUInt16 index, T &returnedElementValue) const
DEPRECATED.
TTObject wrappedObject
The instance of the Jamoma object we are wrapping.
const char * c_str() const
Return a pointer to the internal string as a C-string.
Wraps Jamoma Core classes as objects for PureData.
Data Structure for this object.
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
std::uint32_t TTUInt32
32 bit unsigned integer
TTSymbol patcherContext
the patcher context in which the external is (model, view)
TTSymbol patcherName
the patcher name in which the external is
The TTString class is used to represent a string.
long index
index of the inlet used
TTBoolean valid() const
Determine if the object contained by this TTObject is truly ready for use.
WrappedModularInstance * WrappedModularInstancePtr
Pointer to a wrapped instance of our object.
[doxygenAppendixC_copyExample]
TTErr wrapTTModularClassAsPdClass(TTSymbol &ttblueClassName, const char *pdClassName, WrappedClassPtr *c, ModularSpec *specificities)
Wrap a Jamoma class as a Pd class.