From f7a258c0a5bdaa150f81c670a521449a1b8479db Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Sun, 24 Jan 2016 17:47:42 -0500
Subject: [PATCH] port GUI code for pddplink

---
 externals/pddp/pddplink.c | 25 ++++++++++++++-----------
 pd/nw/pdgui.js            | 21 ++++++++++++++++++++-
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/externals/pddp/pddplink.c b/externals/pddp/pddplink.c
index 268f1aa98..e12dc38dc 100644
--- a/externals/pddp/pddplink.c
+++ b/externals/pddp/pddplink.c
@@ -99,19 +99,19 @@ static void pddplink_select(t_gobj *z, t_glist *glist, int state)
     if (glist_isvisible(glist) && glist->gl_havewindow)
     {
         if (state) {
-            sys_vgui(".x%lx.c itemconfigure %s -fill $::pd_colors(selection)\n",
-                glist, rtext_gettag(y));
-            sys_vgui(".x%lx.c addtag selected withtag %s\n",
-                glist, rtext_gettag(y));
+            //sys_vgui(".x%lx.c itemconfigure %s -fill $::pd_colors(selection)\n",
+            //    glist, rtext_gettag(y));
+            //sys_vgui(".x%lx.c addtag selected withtag %s\n",
+            //    glist, rtext_gettag(y));
             gui_vmess("gui_gobj_select", "xs",
                 glist, rtext_gettag(y));
         }
         else
         {
-            sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
-                glist, rtext_gettag(y), x->x_vistext);
-            sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)glist_getcanvas(glist));
-            sys_vgui(".x%lx.c dtag %s selected\n", glist, rtext_gettag(y));
+            //sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
+            //    glist, rtext_gettag(y), x->x_vistext);
+            //sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)glist_getcanvas(glist));
+            //sys_vgui(".x%lx.c dtag %s selected\n", glist, rtext_gettag(y));
             gui_vmess("gui_gobj_deselect", "xs",
                 glist, rtext_gettag(y));
         }
@@ -160,7 +160,7 @@ static void pddplink_vis(t_gobj *z, t_glist *glist, int vis)
         if ((glist->gl_havewindow || x->x_isgopvisible)
             && (y = glist_findrtext(glist, (t_text *)x)))
         {
-	    	sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n", glist_getcanvas(glist), rtext_gettag(y), x->x_vistext);
+            //sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n", glist_getcanvas(glist), rtext_gettag(y), x->x_vistext);
             gui_vmess("gui_text_create_gobj", "xssiii",
                 glist_getcanvas(glist),
                 rtext_gettag(y),
@@ -231,8 +231,11 @@ static void pddplink_click(t_pddplink *x, t_floatarg xpos, t_floatarg ypos,
     x->x_ishit = 1;
     char final_name[FILENAME_MAX];
     sys_expandpathelems(x->x_ulink->s_name, final_name);
-    sys_vgui("pddplink_open {%s} {%s}\n",               \
-             final_name, x->x_dirsym->s_name);
+    //sys_vgui("pddplink_open {%s} {%s}\n",               \
+    //         final_name, x->x_dirsym->s_name);
+    gui_vmess("gui_pddplink_open", "ss",
+        final_name,
+        x->x_dirsym->s_name);
     x->x_ishit = 0;
 }
 
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 7b7e3cc4d..d4d39b200 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -216,7 +216,7 @@ function enquote (x) {
 }
 
 // from stackoverflow.com/questions/21698906/how-to-check-if-a-path-is-absolute-or-relative
-// this doesn't seem to be needed atm
+// only seems to be used by pddplink_open
 function path_is_absolute(myPath) {
     var ret = (path.resolve(myPath) ===
         path.normalize(myPath).replace(/(.+)([\/]\\])$/, "$1"));
@@ -3745,3 +3745,22 @@ exports.resize_window = function(did) {
     dialogwin[did].width = w;
     dialogwin[did].height = h;
 }
+
+// External GUI classes
+
+function gui_pddplink_open(filename, dir) {
+    var full_path, revised_dir, revised_filename;
+    if (filename.indexOf("://") > -1) {
+        external_doc_open(filename);
+    } else if (path_is_absolute(filename)) {
+        doc_open(path.dirname(filename), path.basename(filename));
+    } else if (fs.existsSync(path.join(dir, filename))) {
+        full_path = path.normalize(path.join(dir, filename));
+        revised_dir = path.dirname(full_path);
+        revised_filename = path.basename(full_path);
+        doc_open(revised_dir, revised_filename);
+    } else {
+        // Give feedback to let user know the link didn't work...
+        post("pddplink: error: file not found: " + filename);
+    }
+}
-- 
GitLab