35 #define EXTRA ((t_extra*)x->extra)
129 void score_edit(
TTPtr self, t_symbol *msg,
long argc,
const t_atom *argv);
144 void score_eventStatusCallback(
const TTValue& baton,
const TTValue& value);
145 void score_processStartedCallback(
const TTValue& baton,
const TTValue& value);
146 void score_processEndedCallback(
const TTValue& baton,
const TTValue& value);
148 void score_doreport(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
152 ModularSpec *spec =
new ModularSpec;
165 class_addmethod(c->maxClass, (method)
score_assist,
"assist", A_CANT, 0L);
166 class_addmethod(c->maxClass, (method)
score_filechanged,
"filechanged", A_CANT, 0);
168 class_addmethod(c->maxClass, (method)
score_read,
"read", A_GIMME, 0);
169 class_addmethod(c->maxClass, (method)
score_write,
"write", A_GIMME, 0);
170 class_addmethod(c->maxClass, (method)
score_edit,
"edit", A_GIMME, 0);
179 long attrstart = attr_args_offset(argc, argv);
194 EXTRA->eventStatusCallback =
new TTObject(
"callback");
195 EXTRA->eventStatusCallback->set(
"baton",
TTPtr(
self));
196 EXTRA->eventStatusCallback->set(
"function",
TTPtr(&score_eventStatusCallback));
197 EXTRA->eventStatusCallback->set(
"notification",
TTSymbol(
"EventStatusChanged"));
199 EXTRA->processStartedCallback =
new TTObject(
"callback");
200 EXTRA->processStartedCallback->set(
"baton",
TTPtr(
self));
201 EXTRA->processStartedCallback->set(
"function",
TTPtr(&score_processEndedCallback));
202 EXTRA->processStartedCallback->set(
"notification",
TTSymbol(
"ProcessEnded"));
204 EXTRA->processEndedCallback =
new TTObject(
"callback");
205 EXTRA->processEndedCallback->set(
"baton",
TTPtr(
self));
206 EXTRA->processEndedCallback->set(
"function",
TTPtr(&score_processStartedCallback));
207 EXTRA->processEndedCallback->set(
"notification",
TTSymbol(
"ProcessStarted"));
209 EXTRA->xmlHandler =
new TTObject(kTTSym_XmlHandler);
210 EXTRA->textHandler =
new TTObject(kTTSym_TextHandler);
212 EXTRA->textEditor = NULL;
213 EXTRA->filewatcher = NULL;
219 if (attrstart && argv)
220 attr_args_process(x, argc, argv);
231 if (EXTRA->filewatcher)
233 filewatcher_stop(EXTRA->filewatcher);
234 object_free(EXTRA->filewatcher);
244 strcpy(dst,
"input");
249 strcpy(dst,
"dumpout");
258 atom_setsym(&a, gensym(filename));
259 defer_low(
self, (method)
score_doread, gensym(
"read"), 1, &a);
279 TTErr err = EXTRA->xmlHandler->send(kTTSym_Read, userpath);
283 object_obex_dumpout(
self, _sym_read, argc, argv);
285 object_obex_dumpout(
self, _sym_error, 0, NULL);
288 if (EXTRA->filewatcher)
290 filewatcher_stop(EXTRA->filewatcher);
291 object_free(EXTRA->filewatcher);
295 t_fourcc outtype, filetype =
'TEXT';
296 char filepath[MAX_FILENAME_CHARS];
298 strncpy_zero(filepath, userpath.
c_str(), MAX_FILENAME_CHARS);
299 if (locatefile_extended((
char*)filepath, &outvol, &outtype, &filetype, 0))
302 EXTRA->filewatcher = filewatcher_new((t_object*)x, outvol, (
char*)filepath);
303 filewatcher_start(EXTRA->filewatcher);
348 TTErr err = EXTRA->xmlHandler->send(kTTSym_ReadAgain);
352 object_obex_dumpout(
self, _sym_read, 0, NULL);
354 object_obex_dumpout(
self, _sym_error, 0, NULL);
370 if (EXTRA->filewatcher)
371 filewatcher_stop(EXTRA->filewatcher);
374 char filename[MAX_FILENAME_CHARS];
375 snprintf(filename, MAX_FILENAME_CHARS,
"untitled.score");
380 TTErr err = EXTRA->xmlHandler->send(kTTSym_Write, userpath);
384 object_obex_dumpout(
self, _sym_write, argc, argv);
386 object_obex_dumpout(
self, _sym_error, 0, NULL);
389 if (EXTRA->filewatcher)
391 filewatcher_stop(EXTRA->filewatcher);
392 object_free(EXTRA->filewatcher);
396 t_fourcc outtype, filetype =
'TEXT';
397 char filepath[MAX_FILENAME_CHARS];
399 strncpy_zero(filepath, userpath.
c_str(), MAX_FILENAME_CHARS);
400 if (locatefile_extended((
char*)filepath, &outvol, &outtype, &filetype, 0))
403 EXTRA->filewatcher = filewatcher_new((t_object*)x, outvol, (
char*)filepath);
404 filewatcher_start(EXTRA->filewatcher);
420 if (EXTRA->filewatcher)
421 filewatcher_stop(EXTRA->filewatcher);
424 TTErr err = EXTRA->xmlHandler->send(kTTSym_WriteAgain);
428 object_obex_dumpout(
self, _sym_write, 0, NULL);
430 object_obex_dumpout(
self, _sym_error, 0, NULL);
433 if (EXTRA->filewatcher)
434 filewatcher_start(EXTRA->filewatcher);
442 char title[MAX_FILENAME_CHARS];
448 if (atom_gettype(argv) == A_SYM)
456 for (TTElementIter it = events.begin(); it != events.end(); it++)
460 event.get(
"name", name);
462 if (name ==
TTSymbol(atom_getsym(argv)->s_name))
465 event.
get(
"state", state);
466 EXTRA->textHandler->set(kTTSym_object, state);
473 object_error((t_object*)x,
"%s event does'nt exist", atom_getsym(argv)->s_name);
480 if (!EXTRA->textEditor)
482 EXTRA->textEditor = (t_object*)object_new(_sym_nobox, _sym_jed, x, 0);
488 TTErr err = EXTRA->textHandler->send(kTTSym_Write, (
TTPtr)buffer);
492 object_method(EXTRA->textEditor, _sym_settext, buffer->c_str(), _sym_utf_8);
493 object_attr_setchar(EXTRA->textEditor, gensym(
"scratch"), 1);
495 snprintf(title, MAX_FILENAME_CHARS,
"state editor");
496 object_attr_setsym(EXTRA->textEditor, _sym_title, gensym(title));
501 object_obex_dumpout(
self, _sym_error, 0, NULL);
506 atom_setsym(&a, gensym(
"opened"));
507 object_obex_dumpout(
self, gensym(
"editor"), 1, &a);
521 EXTRA->textEditor = NULL;
523 defer_low((t_object*)x, (method)
score_doedit, NULL, 0, NULL);
533 TTErr err = EXTRA->textHandler->send(kTTSym_Read, (
TTPtr)EXTRA->text);
539 object_obex_dumpout(
self, _sym_error, 0, NULL);
544 atom_setsym(&a, gensym(
"closed"));
545 object_obex_dumpout(
self, gensym(
"editor"), 1, &a);
550 EXTRA->textEditor = NULL;
553 void score_eventStatusCallback(
const TTValue& baton,
const TTValue& value)
567 event.
get(
"name", v);
571 event.
get(
"status", v);
575 if (status == kTTSym_eventWaiting) status =
TTSymbol(
"waiting");
576 else if (status == kTTSym_eventPending) status =
TTSymbol(
"pending");
577 else if (status == kTTSym_eventHappened) status =
TTSymbol(
"happened");
578 else if (status == kTTSym_eventDisposed) status =
TTSymbol(
"disposed");
581 atom_setsym(report, gensym((
char*)name.
c_str()));
582 atom_setsym(report+1, gensym((
char*)status.
c_str()));
583 defer_low((t_object*)x, (method)score_doreport, gensym(
"event"), 2, report);
586 void score_processStartedCallback(
const TTValue& baton,
const TTValue& value)
600 process.
get(
"name", v);
604 atom_setsym(report, gensym((
char*)name.
c_str()));
605 atom_setsym(report+1, gensym(
"started"));
606 defer_low((t_object*)x, (method)score_doreport, gensym(
"process"), 2, report);
609 void score_processEndedCallback(
const TTValue& baton,
const TTValue& value)
623 process.
get(
"name", v);
627 atom_setsym(report, gensym((
char*)name.
c_str()));
628 atom_setsym(report+1, gensym(
"ended"));
629 defer_low((t_object*)x, (method)score_doreport, gensym(
"process"), 2, report);
632 void score_doreport(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
634 object_obex_dumpout(
self, msg, argc, argv);
void score_filechanged(TTPtr self, char *filename, short path)
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
void score_assist(TTPtr self, void *b, long msg, long arg, char *dst)
Display assist messages for inlets and outlets in Max.
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTErr wrapTTModularClassAsMaxClass(TTSymbol &ttblueClassName, const char *maxClassName, WrappedClassPtr *c, ModularSpec *specificities)
Wrap a Jamoma class as a Max class.
void WrappedScoreClass_new(TTPtr self, long argc, t_atom *argv)
Constructor: Initiate the wrapped object instance.
void WrapTTScoreClass(WrappedClassPtr c)
Set up what methods (Max messages) that the wrapped class is to respond to.
void score_edit(TTPtr self, t_symbol *msg, long argc, const t_atom *argv)
void score_dowrite_again(TTPtr self)
Create and use Jamoma object instances.
size_type size() const noexcept
Return the number of elements.
void * extra
used to keep very specific things
void score_write(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
void score_doread_again(TTPtr self)
void WrappedScoreClass_free(TTPtr self)
Deconstructor: Destroy the object and free memory assigned to it.
void * TTPtr
A generic pointer.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
void score_write_again(TTPtr self)
TTMODULAR_EXPORT TTApplicationManagerPtr TTModularApplicationManager
Export a pointer to a TTApplicationManager instance.
TTErr registerObserverForNotifications(const TTObject &anObservingObject)
Register an observer.
void score_dowrite(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
void get(const TTUInt16 index, T &returnedElementValue) const
DEPRECATED.
TTObject wrappedObject
The instance of the Jamoma object we are wrapping.
Individual items found in a TTValue.
int C74_EXPORT main(void)
Set up this class as a Max external the first time an object of this kind is instantiated.
const char * c_str() const
Return a pointer to the internal string as a C-string.
void score_doedit(TTPtr self)
Data Structure for this object.
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
Wraps Jamoma Core classes as objects for Max/MSP.
std::uint32_t TTUInt32
32 bit unsigned integer
void score_read(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
The TTString class is used to represent a string.
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.
void score_doread(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
[doxygenAppendixC_copyExample]
void score_read_again(TTPtr self)
void score_edclose(TTPtr self, char **text, long size)