We have a winner! :D
static void entry_save(t_gobj *z, t_binbuf *b) { t_entry *x = (t_entry *)z; t_symbol *classname = atom_getsymbol(binbuf_getvec(x-
x_obj.te_binbuf));
binbuf_addv(b, "ssiisiiss", gensym("#X"),gensym("obj"), x->x_obj.te_xpix, x->x_obj.te_ypix, classname, x->x_width, x->x_height, x->x_bgcolour, x->x_fgcolour); binbuf_addv(b, ";"); }
.hc
On Oct 29, 2007, at 12:51 PM, Miller Puckette wrote:
So you can probably just use x->x_obj.ob_binbuf -- that's the text the object is "created" with.
On Mon, Oct 29, 2007 at 12:36:16PM -0400, Hans-Christoph Steiner wrote:
I want to get the full classname that an object was instantiated with. Basically, lots of GUI objects use gensym("nbx") in the binbuf_addv() in the save function. This means that if they were instantiated with a namespace prefix, i.e. [iemgui/nbx], the "save" function will save it as [nbx].
The "new" function gets the correct classname in the t_symbol it's passed. So the question is how to get this from the object's struct. I understand the concepts, just not how the the data structures are organized.
.hc
On Oct 29, 2007, at 12:28 PM, Miller Puckette wrote:
Hmm, well, the way Pd gets it is looking in the binbuf. But perhaps you need to look in the binbuf for the object you're looking at, not that of the containing canvas, no? Or, on the other hand. perhaps you're trying to get the name of the abstraction the object is part of?
cheers M
On Sun, Oct 28, 2007 at 10:57:52PM -0400, Hans-Christoph Steiner wrote:
It sounds like this isn't the way to do it then. But somewhere the whole classname with the namespace prefix must be stored for every single object instantiated, since it will get written out to the file. How do I access that?
.hc
On Oct 28, 2007, at 10:50 PM, Miller Puckette wrote:
I think the binbuf is always present, but in the case of a top- level canvas, it might be empty; binbuf_getnatom() tells you how many atoms there are.
cheers Miller
On Sun, Oct 28, 2007 at 10:14:48PM -0400, Hans-Christoph Steiner wrote:
On Oct 28, 2007, at 8:47 PM, Martin Peach wrote:
> Hans-Christoph Steiner wrote: >> >> I tried this in entry_new() and entry_save(), and in both, >> "binbuf" ends being nothing useful (i.e. segfault): >> >> t_glist *glist = (t_glist *) canvas_getcurrent(); >> t_canvas *canvas = (t_canvas*) glist_getcanvas(glist); >> t_binbuf *binbuf = canvas->gl_obj.te_binbuf; >> t_atom *ap = binbuf_getvec(binbuf); >> t_symbol *classname = atom_getsymbol(ap); >> >> What's going on here? Am I doing something wrong? >> > I don't know what you're trying to do but it's normal to > check for > NULL pointers after each of the above statements. That should > give > you a clue. > I suspect that the binbuf doesn't exist if you didn't > allocate it > yourself.
I am just following IOhannes' code, which he says works (I haven't tested it...)
http://pure-data.cvs.sourceforge.net/pure-data/externals/iem/ iemguts/ src/saveargs.c?view=markup
Somehow, he magically gets a binbuf with contents in it! ;)
.hc
--
There is no way to peace, peace is the way. -A.J. Muste
PD-dev mailing list PD-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
--
You can't steal a gift. Bird gave the world his music, and if you can hear it, you can have it. - Dizzy Gillespie
PD-dev mailing list PD-dev@iem.at http://lists.puredata.info/listinfo/pd-dev
All information should be free. - the hacker ethic
------------------------------------------------------------------------ ----
"[W]e have invented the technology to eliminate scarcity, but we are deliberately throwing it away to benefit those who profit from scarcity." -John Gilmore