20 #if defined (JCOM_VIEW)
21 extern "C" void JAMOMA_EXPORT_MAXOBJ setup_j0x2eview(
void)
23 extern "C" void JAMOMA_EXPORT_MAXOBJ setup_j0x2emodel(
void)
26 ModularSpec *spec =
new ModularSpec;
33 TTModelInfo::registerClass();
44 eclass_addmethod(c->pdClass, (method)
model_assist,
"assist", A_CANT, 0L);
54 eclass_addmethod(c->pdClass, (method)
model_address,
"model_address", A_CANT, 0);
61 eclass_addmethod(c->pdClass, (method)
model_preset_read,
"preset_read", A_CANT, 0);
70 eclass_addmethod(c->pdClass, (method)model_preset_read,
"preset:read", A_GIMME, 0);
71 eclass_addmethod(c->pdClass, (method)model_preset_write,
"preset:write", A_GIMME, 0);
72 eclass_addmethod(c->pdClass, (method)model_preset_edit,
"preset:edit", A_GIMME, 0);
74 eclass_addmethod(c->pdClass, (method)model_preset_read_again,
"preset:read/again", A_CANT, 0);
75 eclass_addmethod(c->pdClass, (method)model_preset_write_again,
"preset:write/again", A_CANT, 0);
78 eclass_addmethod(c->pdClass, (method)model_signal_amenities,
"output_created", A_CANT, 0);
88 eclass_addmethod(c->pdClass, (method)
model_subscribe,
"loadbang", A_NULL, 0);
91 CLASS_ATTR_DEFAULT(c->pdClass,
"amenities", 0,
"all");
93 CLASS_ATTR_STYLE(c->pdClass,
"amenities", 0,
"text");
96 CLASS_ATTR_DEFAULT(c->pdClass,
"presets", 0,
"none");
98 CLASS_ATTR_STYLE(c->pdClass,
"presets", 0,
"text");
111 pd_error((t_object*)x,
"can't have two models or views in the same patcher");
127 x->
outlets = (TTHandle)sysmem_newptr(
sizeof(
TTPtr) * 1);
128 x->
outlets[data_out] = outlet_new((t_object*)x, NULL);
133 EXTRA->containerAddress = kTTAdrsEmpty;
134 EXTRA->argAddress = kTTAdrsEmpty;
136 EXTRA->textEditor = NULL;
137 EXTRA->presetManager =
new TTObject();
138 EXTRA->attr_presets = kTTSym_none;
139 EXTRA->filewatcher = NULL;
142 EXTRA->presetName = kTTSymEmpty;
143 EXTRA->attr_amenities =
new TTHash();
144 EXTRA->all_amenities = NO;
145 EXTRA->no_amenities = NO;
147 EXTRA->attr_amenities->append(
TTSymbol(
"all"), none);
150 attr_args_process(x, argc, argv);
168 if (EXTRA->modelInfo && EXTRA->modelInfo->valid()) {
170 modelAddress = EXTRA->containerAddress.appendAddress(
TTAddress(
"model"));
173 JamomaApplication.
send(
"ObjectUnregister", modelAddress, none);
175 delete EXTRA->modelInfo;
177 if (EXTRA->presetManager && EXTRA->presetManager->valid()) {
179 presetAddress = EXTRA->containerAddress.appendAddress(
TTAddress(
"preset"));
182 JamomaApplication.
send(
"ObjectUnregister", presetAddress, none);
184 delete EXTRA->presetManager;
194 delete EXTRA->toEdit;
216 t_canvas* aPatcher = ((t_eobj*)x)->o_canvas;
220 if (EXTRA->modelInfo && EXTRA->modelInfo->valid()) {
222 modelAddress = EXTRA->containerAddress.appendAddress(
TTAddress(
"model"));
225 JamomaApplication.
send(
"ObjectUnregister", modelAddress, none);
228 if (EXTRA->presetManager && EXTRA->presetManager->valid()) {
230 presetAddress = EXTRA->containerAddress.appendAddress(
TTAddress(
"preset"));
233 JamomaApplication.
send(
"ObjectUnregister", presetAddress, none);
251 EXTRA->containerAddress = returnedAddress;
268 EXTRA->modelInfo->set(
"class", x->patcherClass);
272 args =
TTValue(adrs, *EXTRA->modelInfo, x->patcherPtr);
274 if (JamomaApplication.
send(
"ObjectRegister", args, none))
275 pd_error((t_object*)x,
"can't subscribe model object");
278 if (x->patcherContext == kTTSym_model) {
280 EXTRA->modelInfo->set(kTTSym_address, returnedAddress);
283 TTModelInfoPtr(EXTRA->modelInfo->instance())->setAddressReadOnly(YES);
300 if ( ac > 0 && av[0].a_type == A_SYMBOL )
301 isSubModel = atom_getsym(av) == _sym_pd;
308 if (atom_getsym(av) == _sym_pd) {
320 if (x->patcherContext == kTTSym_model) {
324 attr_args_process(x, ac, av);
327 aTextHandler =
TTObject(kTTSym_TextHandler);
328 x->internals->append(kTTSym_TextHandler, aTextHandler);
330 if (!EXTRA->attr_amenities->lookup(
TTSymbol(
"all"), v))
331 EXTRA->all_amenities = YES;
333 if (!EXTRA->attr_amenities->lookup(
TTSymbol(
"none"), v))
334 EXTRA->no_amenities = YES;
352 if (x->patcherContext == kTTSym_view)
357 x->subscriberObject.get(
"nodeAddress", v);
360 returnedAddress = v[0];
361 atom_setsym(&a, gensym((
char*)returnedAddress.
c_str()));
362 outlet_anything(x->dumpOut, gensym(
"address"),1,&a);
379 TTList whereToSearch;
389 if (argc > 0 && atom_gettype(argv) == A_SYM) {
391 argAdrs =
TTAddress(atom_getsym(argv)->s_name);
394 if (hierarchy == gensym(
"poly"))
396 argAdrs = argAdrs.
appendInstance(EXTRA->containerAddress.getInstance());
402 EXTRA->modelInfo->set(kTTSym_address, argAdrs);
410 if (EXTRA->containerAddress.getParent() != kTTAdrsRoot) {
413 EXTRA->argAddress = argAdrs;
416 makeInternals_receiver(
self, EXTRA->containerAddress.getParent(),
TTAddress(
"model:address"), gensym(
"return_upper_view_model_address"), aReceiver, YES);
422 EXTRA->modelInfo->set(kTTSym_address, kTTAdrsRoot.
appendAddress(argAdrs));
445 EXTRA->modelInfo->set(kTTSym_address, modelAdrs);
460 EXTRA->modelInfo->get(kTTSym_address, v);
464 if (modelAdrs == kTTSymEmpty)
465 modelAdrs =
TTAddress(
"/no_model_address");
468 EXTRA->modelInfo->set(kTTSym_address, modelAdrs);
478 upperViewModelAddress = v[0];
481 if (upperViewModelAddress != kTTSymEmpty)
482 upperViewModelAddress = upperViewModelAddress.
appendAddress(EXTRA->argAddress);
484 upperViewModelAddress = kTTAdrsRoot.
appendAddress(EXTRA->argAddress);
487 EXTRA->modelInfo->set(kTTSym_address, upperViewModelAddress);
514 strcpy(dst,
"model feeback");
516 strcpy(dst,
"view feeback");
518 strcpy(dst,
"feeback");
521 strcpy(dst,
"dumpout");
530 patcherInfo->
clear();
572 outlet_anything((t_outlet*)x->
outlets[data_out], x->msg, argc, argv);
584 char filename[MAX_FILENAME_CHARS];
593 snprintf(filename, MAX_FILENAME_CHARS, DocumentationFormat->data(), x->
patcherClass.
c_str());
605 aTextHandler.
send(kTTSym_Write, v, none);
618 if (atom_gettype(argv) == A_SYM) {
623 EXTRA->modelInfo->set(kTTSym_address, modelAdrs);
633 EXTRA->attr_amenities->getKeysSorted(keys);
641 if (!(*av = (t_atom*)getbytes(
sizeof(t_atom)*(*ac)))) {
658 EXTRA->attr_amenities->clear();
667 EXTRA->attr_amenities->append(key, none);
671 EXTRA->attr_amenities->append(
TTSymbol(
"all"), none);
681 return !EXTRA->no_amenities && (EXTRA->all_amenities || !EXTRA->attr_amenities->lookup(name, v));
void model_signal_return_audio_mix(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
TTAddress appendAddress(const TTAddress &toAppend)
Return a new TTAddress with the appended part.
t_max_err model_preset_set_presets(TTPtr self, TTPtr attr, long ac, const t_atom *av)
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.
j.model / j.view - The main control center of Jamoma model and view patcher
TTSymbol & getInstance()
Get the instance part.
TTHandle outlets
an array of outlet
void model_preset_return_names(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
TTErr lookup(const TTSymbol key, TTValue &value)
Find the value for the given key.
void model_signal_amenities(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_subscribe_view(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
void WrappedContainerClass_anything(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
t_max_err model_set_amenities(TTPtr self, TTPtr attr, long ac, t_atom *av)
TTSymbol patcherClass
the patcher class in which the external is
TTPtr getContext()
Get a pointer to the context of this node.
void model_preset_amenities(TTPtr self)
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
void model_preset_edclose(TTPtr self, char **text, long size)
size_type size() const noexcept
Return the number of elements.
void model_return_value(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_return_address(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void * extra
used to keep very specific things
TTAddress appendInstance(const TTSymbol anInstance)
Return a new TTAddress with a instance part.
t_object * patcherPtr
the patcher in which the external is (ignoring subpatcher)
void model_preset_edit(TTPtr self, t_symbol *msg, long argc, const t_atom *argv)
void model_signal_return_audio_mute(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
TTHashPtr internals
An hash table to store any internal TTObjectBases (like TTData, TTViewer, ...)
t_max_err model_get_amenities(TTPtr self, TTPtr attr, long *ac, t_atom **av)
void model_share_patcher_info(TTPtr self, TTValuePtr patcherInfo)
Maintain a collection of TTValue objects indexed by TTSymbol pointers.
void model_share_patcher_node(TTPtr self, TTNodePtr *patcherNode)
void model_signal_return_audio_gain(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void append(const T &anElementValueToAppend)
Insert a single TTElement at the end.
void * TTPtr
A generic pointer.
void WrappedContainerClass_new(TTPtr self, long argc, t_atom *argv)
Constructor: Initiate the wrapped object instance.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
TTBoolean model_test_amenities(TTPtr self, TTSymbol name)
t_object obj
Max control object header.
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...
void model_preset_write_again(TTPtr self)
TTObject wrappedObject
The instance of the Jamoma object we are wrapping.
void model_preset_read_again(TTPtr self)
void model_address(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
this flag means that an address have a leading slash
void model_reference_dowrite(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
const char * c_str() const
Return a pointer to the internal string as a C-string.
void model_return_upper_view_model_address(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_reference_write(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void clear()
Clear all values from the vector, leaving with size of 0.
void model_preset_filechanged(TTPtr self, char *filename, short path)
t_max_err model_preset_get_presets(TTPtr self, TTPtr attr, long *ac, t_atom **av)
void model_preset_write(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
TTErr getAddress(TTAddress &returnedAddress, TTAddress from=kTTAdrsEmpty)
Get the address of the node.
Data Structure for this object.
TTAddressType getType()
Get the type.
void model_subscribe(TTPtr self)
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
void model_init(TTPtr self)
void WrappedContainerClass_free(TTPtr self)
Deconstructor: Destroy the object and free memory assigned to it.
TTSymbol patcherContext
the patcher context in which the external is (model, view)
A base class for Jamoma models.
void model_signal_return_data_active(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_assist(TTPtr self, void *b, long msg, long arg, char *dst)
Display assist messages for inlets and outlets in Max.
TTSymbol patcherName
the patcher name in which the external is
void model_signal_return_audio_bypass(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_preset_read(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void model_signal_return_data_bypass(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
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.
#define accessApplicationLocalDirectory
Access to the local application directory.
[doxygenAppendixC_copyExample]
void WrapTTContainerClass(WrappedClassPtr c)
Set up what methods (Max messages) that the wrapped class is to respond to.
TTNodePtr getParent()
Get a pointer to the parent node of the node.
TTErr wrapTTModularClassAsPdClass(TTSymbol &ttblueClassName, const char *pdClassName, WrappedClassPtr *c, ModularSpec *specificities)
Wrap a Jamoma class as a Pd class.
unsigned char TTUInt8
8 bit unsigned integer (char)