19 void ui_register_info(t_ui* obj)
34 jamoma_patcher_get_info((t_object*)obj, &obj->patcherPtr, obj->patcherContext, obj->patcherClass, obj->patcherName);
37 obj->uiSubscriber.get(
"contextAddress", v);
38 obj->viewAddress = v[0];
41 ui_receiver_create(obj, anObject, gensym(
"return_model_address"),
TTSymbol(
"model:address"), obj->viewAddress, YES);
45 void ui_unregister_info(t_ui *obj)
48 if (obj->uiSubscriber.valid())
52 if (obj->uiInfo.valid())
56 void ui_data_interface(t_ui *x,
TTSymbol name)
58 char filename[MAX_FILENAME_CHARS];
60 t_fourcc type, filetype =
'JSON';
66 strncpy_zero(filename,
"j.reference_interface.maxpat", MAX_FILENAME_CHARS);
67 locatefile_extended(filename, &path, &type, &filetype, 1);
68 dictionary_read(filename, path, &d);
71 p = (t_object*)object_new_typed(_sym_nobox, _sym_jpatcher, 1, &a);
72 object_attr_setlong(p, _sym_locked, 1);
73 object_attr_setchar(p, _sym_enablehscroll, 0);
74 object_attr_setchar(p, _sym_enablevscroll, 0);
75 object_attr_setchar(p, _sym_openinpresentation, 1);
76 object_attr_setchar(p, _sym_toolbarvisible, 0);
77 object_attr_setsym(p, _sym_title, gensym(
"reference_interface"));
78 object_method_parse(p, _sym_window,
"constrain 5 320 200 500", NULL);
79 object_attach_byptr_register(x, p, _sym_nobox);
81 object_method(p, _sym_vis);
82 object_attr_setobj(jpatcher_get_firstview(p), _sym_owner, (t_object*)x);
86 OBJ_ATTR_SYM(p,
"arguments", 0, gensym((
char*)address.
c_str()));
88 object_method(p, _sym_loadbang);
100 returnValueCallback =
TTObject(
"callback");
103 returnValueCallback.
set(kTTSym_baton, baton);
105 args.
append(returnValueCallback);
107 returnedReceiver =
TTObject(kTTSym_Receiver, args);
110 if (appendNameAsAttribute)
116 obj->hash_receivers->append(name, returnedReceiver);
119 returnedReceiver.
set(kTTSym_address, adrs);
122 void ui_receiver_destroy_all(t_ui *obj)
129 if (obj->hash_receivers) {
131 if (!obj->hash_receivers->isEmpty()) {
133 obj->hash_receivers->getKeys(hk);
135 for (i=0; i<obj->hash_receivers->getSize(); i++) {
138 if (!obj->hash_receivers->lookup(key, v)) {
141 receiver.
set(kTTSym_address, kTTAdrsEmpty);
145 obj->hash_receivers->clear();
152 TTAddress viewAddress, viewerAddress, adrs;
154 returnedViewer =
TTObject(kTTSym_Viewer);
157 returnedViewer.
set(kTTSym_baton, baton);
162 obj->uiSubscriber.get(
"contextAddress", v);
166 args =
TTValue(viewerAddress, returnedViewer, (
TTPtr)obj->patcherPtr);
167 JamomaApplication.
send(
"ObjectRegister", args, none);
170 viewerAddress = kTTAdrsEmpty;
176 args =
TTValue(returnedViewer);
177 args.
append(viewerAddress);
178 obj->hash_viewers->append(name, args);
181 returnedViewer.
set(kTTSym_address, adrs);
184 void ui_viewer_destroy(t_ui *obj,
TTSymbol name)
189 if (obj->hash_viewers)
190 if (!obj->hash_viewers->lookup(name, v)) {
193 viewer.
set(kTTSym_address, kTTAdrsEmpty);
196 viewerAddress = v[1];
197 JamomaApplication.
send(
"ObjectUnregister", viewerAddress, none);
198 obj->hash_viewers->remove(name);
202 void ui_viewer_destroy_all(t_ui *obj)
209 if (obj->hash_viewers) {
211 if (!obj->hash_viewers->isEmpty()) {
213 obj->hash_viewers->getKeys(hk);
215 for (i=0; i<obj->hash_viewers->getSize(); i++) {
218 if (!obj->hash_viewers->lookup(key, v)) {
221 viewer.
set(kTTSym_address, kTTAdrsEmpty);
224 viewerAddress = v[1];
225 JamomaApplication.
send(
"ObjectUnregister", viewerAddress, none);
229 delete obj->hash_viewers;
230 obj->hash_viewers = NULL;
240 if (obj->hash_viewers) {
241 err = obj->hash_viewers->lookup(name, storedObject);
244 anObject = storedObject[0];
245 if (anObject.
valid())
246 anObject.
send(kTTSym_Send, v, none);
257 if (obj->hash_viewers) {
258 err = obj->hash_viewers->lookup(name, storedObject);
261 anObject = storedObject[0];
262 if (anObject.
valid())
263 anObject.
set(kTTSym_highlight, s);
274 if (obj->hash_viewers) {
275 err = obj->hash_viewers->lookup(name, storedObject);
278 anObject = storedObject[0];
279 if (anObject.
valid())
280 anObject.
set(kTTSym_freeze, f);
287 #pragma mark message handlers
290 void ui_explorer_create(t_object *x,
TTObject& returnedExplorer, t_symbol *method)
296 returnValueCallback =
TTObject(
"callback");
298 returnValueCallback.
set(kTTSym_baton, baton);
300 args.
append(returnValueCallback);
304 returnedExplorer =
TTObject(kTTSym_Explorer, args);
307 void ui_modelParamExplorer_callback(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
309 t_ui* obj = (t_ui*)
self;
310 t_symobject *item = NULL;
313 if (obj->modelAddress != kTTAdrsEmpty) {
316 for (
long i=0; i<argc; i++) {
317 item = (t_symobject *)symobject_new(atom_getsym(argv+i));
318 linklist_append(obj->refmenu_items, item);
323 void ui_modelMessExplorer_callback(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
325 t_ui* obj = (t_ui*)
self;
326 t_symobject *item = NULL;
329 if (obj->modelAddress != kTTAdrsEmpty) {
332 for (
long i=0; i<argc; i++) {
333 item = (t_symobject *)symobject_new(atom_getsym(argv+i));
334 linklist_append(obj->refmenu_items, item);
339 void ui_modelRetExplorer_callback(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
341 t_ui* obj = (t_ui*)
self;
342 t_symobject *item = NULL;
345 if (obj->modelAddress != kTTAdrsEmpty) {
348 for (
long i=0; i<argc; i++) {
349 item = (t_symobject *)symobject_new(atom_getsym(argv+i));
350 linklist_append(obj->refmenu_items, item);
355 void ui_view_panel_attach(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
357 t_ui *obj = (t_ui*)
self;
359 t_outlet *myoutlet = NULL;
360 t_dll *connecteds = NULL;
366 object_obex_lookup(obj, _sym_pound_B, &box);
367 myoutlet = (t_outlet*)jbox_getoutlet((t_jbox*)box, panel_out);
369 connecteds = (t_dll*)myoutlet->o_dll;
372 o = (t_object*)connecteds->d_x1;
373 name = object_classname(o);
374 if (name == _sym_inlet) {
375 o = ((t_inlet *)connecteds->d_x1)->i_owner;
376 name = object_classname(o);
377 if (name == _sym_jpatcher) {
379 obj->patcher_panel = o;
380 obj->has_panel =
true;
382 jbox_redraw(&obj->box);
388 connecteds = connecteds->d_next;
392 void ui_return_mute(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
394 t_ui* obj = (t_ui*)
self;
396 obj->is_muted = atom_getlong(argv);
397 jbox_redraw(&obj->box);
400 void ui_return_bypass(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
402 t_ui* obj = (t_ui*)
self;
404 obj->is_bypassed = atom_getlong(argv);
405 jbox_redraw(&obj->box);
408 void ui_return_mix(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
410 t_ui* obj = (t_ui*)
self;
412 obj->mix = atom_getlong(argv);
413 jbox_redraw(&obj->box);
416 void ui_return_gain(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
418 t_ui* obj = (t_ui*)
self;
420 obj->gain = atom_getlong(argv);
421 jbox_redraw(&obj->box);
424 void ui_return_freeze(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
426 t_ui* obj = (t_ui*)
self;
428 obj->is_frozen = atom_getlong(argv);
429 jbox_redraw(&obj->box);
432 void ui_return_active(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
434 t_ui* obj = (t_ui*)
self;
436 obj->is_active = atom_getlong(argv);
437 jbox_redraw(&obj->box);
440 void ui_return_model_address(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
442 t_object *obj = (t_object*)
self;
447 defer_low(obj, (method)ui_subscribe, atom_getsym(argv), 0, 0);
450 void ui_return_model_init(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
452 t_ui* obj = (t_ui*)
self;
453 long init = atom_getlong(argv);
460 if (obj->hash_receivers->lookup(kTTSym_content, v))
464 ui_receiver_create(obj, aReceiver, gensym(
"return_model_content"), kTTSym_content, obj->modelAddress, NO, YES);
470 aReceiver.
set(kTTSym_address, obj->modelAddress.appendAttribute(kTTSym_content));
475 void ui_return_model_content(
TTPtr self, t_symbol *msg,
long argc, t_atom* argv)
477 t_ui* obj = (t_ui*)
self;
495 if (!obj->hash_viewers)
499 if (obj->modelAddress != kTTAdrsEmpty) {
502 for (
long i=0; i<argc; i++) {
504 relativeAddress =
TTAddress(atom_getsym(argv+i)->s_name);
530 if (dataInput || dataOutput)
533 if (dataInput && dataOutput)
536 if (audioInput || audioOutput)
539 if (audioInput && audioOutput) {
550 if (gain != obj->has_gain) {
551 obj->has_gain = gain;
553 ui_viewer_create(obj, anObject, gensym(
"return_gain"),
TTSymbol(
"audio/gain"), obj->modelAddress, NO);
555 ui_viewer_destroy(obj,
TTSymbol(
"audio/gain"));
559 if (mix != obj->has_mix) {
562 ui_viewer_create(obj, anObject, gensym(
"return_mix"),
TTSymbol(
"audio/mix"), obj->modelAddress, NO);
564 ui_viewer_destroy(obj,
TTSymbol(
"audio/mix"));
570 if (bypass != obj->has_bypass) {
571 obj->has_bypass = bypass;
573 ui_viewer_create(obj, anObject, gensym(
"return_bypass"),
TTSymbol(
"*.*/bypass"), obj->modelAddress, NO);
575 ui_viewer_destroy(obj,
TTSymbol(
"*.*/bypass"));
581 if (freeze != obj->has_freeze) {
582 obj->has_freeze = freeze;
584 ui_viewer_create(obj, anObject, gensym(
"return_freeze"),
TTSymbol(
"data/freeze"), obj->modelAddress, NO);
586 ui_viewer_destroy(obj,
TTSymbol(
"data/freeze"));
592 if (active != obj->has_active) {
593 obj->has_active = active;
595 ui_viewer_create(obj, anObject, gensym(
"return_active"),
TTSymbol(
"data/active"), obj->modelAddress, NO);
597 ui_viewer_destroy(obj,
TTSymbol(
"data/active"));
598 obj->hash_viewers->remove(
TTSymbol(
"data/active"));
605 if (mute != obj->has_mute) {
606 obj->has_mute = mute;
608 ui_viewer_create(obj, anObject, gensym(
"return_mute"),
TTSymbol(
"*.*/mute"), obj->modelAddress, NO);
610 ui_viewer_destroy(obj,
TTSymbol(
"*.*/mute"));
616 if (preset != obj->has_preset) {
617 obj->has_preset = preset;
619 ui_viewer_create(obj, anObject, gensym(
"return_preset_names"),
TTSymbol(
"preset:names"), obj->modelAddress, NO);
622 ui_viewer_destroy(obj,
TTSymbol(
"preset:names"));
629 if (model != obj->has_model)
630 obj->has_model = model;
633 jbox_redraw(&obj->box);
TTAddress appendAddress(const TTAddress &toAppend)
Return a new TTAddress with the appended part.
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTAddress appendAttribute(TTSymbol anAttribute)
Return a new TTAddress with attribute part.
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
TTAddress getParent()
Get a pointer to the parent address.
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
void append(const T &anElementValueToAppend)
Insert a single TTElement at the end.
void * TTPtr
A generic pointer.
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...
const char * c_str() const
Return a pointer to the internal string as a C-string.
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
TTBoolean valid() const
Determine if the object contained by this TTObject is truly ready for use.
TTSymbol & getName()
Get the name part.
[doxygenAppendixC_copyExample]
j.ui : Provide standard user interface component for modules
unsigned char TTUInt8
8 bit unsigned integer (char)