[PD-cvs] SF.net SVN: pure-data: [10037] trunk/externals/postlude/getpatchname

lukeiannini at users.sourceforge.net lukeiannini at users.sourceforge.net
Wed Jun 18 23:06:16 CEST 2008


Revision: 10037
          http://pure-data.svn.sourceforge.net/pure-data/?rev=10037&view=rev
Author:   lukeiannini
Date:     2008-06-18 14:06:16 -0700 (Wed, 18 Jun 2008)

Log Message:
-----------
getpatchname parent query capability and helpfile to match

Modified Paths:
--------------
    trunk/externals/postlude/getpatchname/doc/getpatchname-help.pd
    trunk/externals/postlude/getpatchname/src/getpatchname.c

Modified: trunk/externals/postlude/getpatchname/doc/getpatchname-help.pd
===================================================================
--- trunk/externals/postlude/getpatchname/doc/getpatchname-help.pd	2008-06-18 20:57:21 UTC (rev 10036)
+++ trunk/externals/postlude/getpatchname/doc/getpatchname-help.pd	2008-06-18 21:06:16 UTC (rev 10037)
@@ -1,4 +1,4 @@
-#N canvas 0 0 450 300 10;
+#N canvas 0 22 426 546 10;
 #X obj 160 101 loadbang;
 #X symbolatom 160 170 20 0 0 0 - - -;
 #X obj 239 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
@@ -9,6 +9,23 @@
 #X text 26 236 Note: at the moment it retains the name of the patch
 returned when the object was instantiated. This will be revised in
 future versions;
+#X msg 87 359 bang;
+#X obj 87 435 print;
+#X msg 282 356 bang;
+#X obj 282 432 print;
+#X text 26 468 If there is no parent at that level \, it returns the
+directory as if there was no argument \, i.e. level 0;
+#X text 26 302 You can also get the name of the parent patch \, if
+this patch is an object embedded in another patch. You use the argument
+to set how many levels up to go:;
+#X obj 87 397 getpatchname 1;
+#X obj 282 394 getpatchname 2;
+#X text 27 509 (thanks to Gunter Geiger for "parent" code and helptext)
+;
 #X connect 0 0 4 0;
 #X connect 2 0 4 0;
 #X connect 4 0 1 0;
+#X connect 6 0 12 0;
+#X connect 8 0 13 0;
+#X connect 12 0 7 0;
+#X connect 13 0 9 0;

Modified: trunk/externals/postlude/getpatchname/src/getpatchname.c
===================================================================
--- trunk/externals/postlude/getpatchname/src/getpatchname.c	2008-06-18 20:57:21 UTC (rev 10036)
+++ trunk/externals/postlude/getpatchname/src/getpatchname.c	2008-06-18 21:06:16 UTC (rev 10037)
@@ -1,4 +1,3 @@
-
 /* getpatchname - Returns the filename of the current patch 
  * 
  * Copyright (C) 2006 Jamie Bullock 
@@ -27,28 +26,38 @@
   t_object  x_obj;
   t_symbol *patch_name;
   t_outlet *outlet;
+  t_canvas *x_canvas;
+  int x_level;
 } t_getpatchname;
 
 void getpatchname_bang(t_getpatchname *x)
 {
 /* At some point we need to be to get the new patch name if it changes, couldn't make this work though */
-    outlet_symbol(x->outlet, x->patch_name);
+    int i = x->x_level;
+    t_canvas* last = x->x_canvas;
+    
+    while (i>0) {
+        i--;
+        if (last->gl_owner) last = last->gl_owner;
+    }
+    
+    outlet_symbol(x->outlet, last->gl_name);
 }
 
-void *getpatchname_new(void)
+void *getpatchname_new(t_floatarg level)
 {
   t_getpatchname *x = (t_getpatchname *)pd_new(getpatchname_class);
   x->patch_name = canvas_getcurrent()->gl_name;
+  x->x_canvas = canvas_getcurrent();
   x->outlet = outlet_new(&x->x_obj, &s_symbol);
+  x->x_level = level;
   return (void *)x;
 }
 
 void getpatchname_setup(void) {
   getpatchname_class = class_new(gensym("getpatchname"),
         (t_newmethod)getpatchname_new,
-        0, sizeof(t_getpatchname),
-        CLASS_DEFAULT, 0);
+        0, sizeof(t_getpatchname), 0,
+        A_DEFFLOAT, 0);
   class_addbang(getpatchname_class, getpatchname_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