[PD-cvs] SF.net SVN: pure-data:[10383] trunk/externals/iem/iemguts/src/canvasname.c

zmoelnig at users.sourceforge.net zmoelnig at users.sourceforge.net
Tue Nov 25 11:10:43 CET 2008


Revision: 10383
          http://pure-data.svn.sourceforge.net/pure-data/?rev=10383&view=rev
Author:   zmoelnig
Date:     2008-11-25 10:10:43 +0000 (Tue, 25 Nov 2008)

Log Message:
-----------
an object for getting and setting the name of (parent) abstractions

Added Paths:
-----------
    trunk/externals/iem/iemguts/src/canvasname.c

Added: trunk/externals/iem/iemguts/src/canvasname.c
===================================================================
--- trunk/externals/iem/iemguts/src/canvasname.c	                        (rev 0)
+++ trunk/externals/iem/iemguts/src/canvasname.c	2008-11-25 10:10:43 UTC (rev 10383)
@@ -0,0 +1,120 @@
+
+/******************************************************
+ *
+ * canvasname - implementation file
+ *
+ * copyleft (c) IOhannes m zm-b\xF6lnig-A
+ *
+ *   2007:forum::f-b\xFCr::uml\xE4ute:2007-A
+ *
+ *   institute of electronic music and acoustics (iem)
+ *
+ ******************************************************
+ *
+ * license: GNU General Public License v.2
+ *
+ ******************************************************/
+
+
+/* 
+ * this object provides a way to manipulate the parent-patches arguments (and name!)
+ * usage:
+ *   + put this object into an abstraction
+ *   + put the abstraction in a patch
+ *   + send the object a _list_ of arguments
+ *    + the next time the patch (wherein the abstraction that holds this object lives)
+ *      is saved, it will be saved with the new arguments instead of the old ones!
+ *    - example: "list 2 3 4" will save the object as [<absname> 2 3 4]
+ *   + you can also change the abstraction name itself by using a selector other than "list"
+ *    - example: "bonkers 8 9" will save the object as [bonkers 8 9] regardless of it's original name
+ *    - use with care!
+ *
+ * nice, eh?
+ */
+
+#include "m_pd.h"
+#include "g_canvas.h"
+
+
+/* ------------------------- canvasname ---------------------------- */
+
+static t_class *canvasname_class;
+
+typedef struct _canvasname
+{
+  t_object  x_obj;
+
+  t_canvas  *x_canvas;
+} t_canvasname;
+
+
+static void canvasname_bang(t_canvasname *x)
+{
+  t_canvas*c=x->x_canvas;
+  t_binbuf*b=0;
+  t_atom name[1];
+
+  if(!x->x_canvas) return;
+  b=x->x_canvas->gl_obj.te_binbuf;
+  if(b) {
+    /* get the binbufs atomlist */
+    t_atom*ap=binbuf_getvec(b);
+    t_symbol*s=atom_getsymbol(ap);
+    outlet_symbol(x->x_obj.ob_outlet, s);
+
+    return;
+  } else {
+    //post("empty binbuf for %x", x->x_canvas);
+  }
+}
+
+static void canvasname_symbol(t_canvasname *x, t_symbol*s)
+{
+  t_canvas*c=x->x_canvas;
+  t_binbuf*b=0;
+  t_atom name[1];
+
+  if(!x->x_canvas) return;
+  b=x->x_canvas->gl_obj.te_binbuf;
+
+  if(b) {
+    /* get the binbufs atomlist */
+    t_atom*ap=binbuf_getvec(b);
+
+    SETSYMBOL(ap, s);
+    return;
+  }
+}
+
+static void canvasname_free(t_canvasname *x)
+{
+}
+
+static void *canvasname_new(t_floatarg f)
+{
+  t_canvasname *x = (t_canvasname *)pd_new(canvasname_class);
+  t_glist *glist=(t_glist *)canvas_getcurrent();
+  t_canvas *canvas=(t_canvas*)glist_getcanvas(glist);
+
+  int depth=(int)f;
+  if(depth<0)depth=0;
+
+  while(depth && canvas) {
+    canvas=canvas->gl_owner;
+    depth--;
+  }
+
+  x->x_canvas = canvas;
+
+  outlet_new(&x->x_obj, &s_symbol);
+  
+  return (x);
+}
+
+void canvasname_setup(void)
+{
+  canvasname_class = class_new(gensym("canvasname"), (t_newmethod)canvasname_new,
+                               (t_method)canvasname_free, sizeof(t_canvasname), 0, A_DEFFLOAT, 0);
+  class_addsymbol(canvasname_class, (t_method)canvasname_symbol);
+  class_addbang  (canvasname_class, (t_method)canvasname_bang);
+}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Pd-cvs mailing list