From 5d32723f19d5534d153eb6e3dbbe7598eda24b0e Mon Sep 17 00:00:00 2001
From: Aayush <suranaaayush98@gmail.com>
Date: Wed, 17 Jul 2019 22:32:24 +0530
Subject: [PATCH] added ascii_art parser and UI to take ascii_art input

---
 pd/nw/locales/de/translation.json |  5 +++-
 pd/nw/locales/en/translation.json |  5 +++-
 pd/nw/pd_canvas.html              | 12 ++++++++++
 pd/nw/pd_canvas.js                | 39 +++++++++++++++++++++++++++----
 pd/nw/pd_menus.js                 | 18 +++++++++-----
 pd/nw/pd_shortcuts.js             |  1 +
 6 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/pd/nw/locales/de/translation.json b/pd/nw/locales/de/translation.json
index 28cf2507f..02ed2ee28 100644
--- a/pd/nw/locales/de/translation.json
+++ b/pd/nw/locales/de/translation.json
@@ -73,7 +73,8 @@
       "mknob_steps":  "# of steps",
       "mknob_steps_tt": "number of dial positions for the knob",
       "mknob_size":   "size",
-      "mknob_size_tt": "size of the knob"
+      "mknob_size_tt": "size of the knob",
+      "submit_tt": "submit ascii_art to parser"
     }
   },
   "gatom": {
@@ -200,6 +201,8 @@
     "comment_tt": "Füge dem Patch einen Kommentar hinzu",
     "dropdown": "Dropdown",
     "dropdown_tt": "Dropdown menu",
+    "ascii_art": "Ascii_Art",
+    "ascii_art_tt": "ASCII_ART menu",
     "bang": "Bang",
     "bang_tt": "Füge dem Patch einen Taster zum Senden von Bang-Nachrichten hinzu",
     "toggle": "Toggle",
diff --git a/pd/nw/locales/en/translation.json b/pd/nw/locales/en/translation.json
index e7a851019..9479e97f0 100644
--- a/pd/nw/locales/en/translation.json
+++ b/pd/nw/locales/en/translation.json
@@ -72,7 +72,8 @@
       "mknob_steps":  "# of steps",
       "mknob_steps_tt": "number of dial positions for the knob",
       "mknob_size":   "size",
-      "mknob_size_tt": "size of the knob"
+      "mknob_size_tt": "size of the knob",
+      "submit_tt": "submit ascii_art to parser"
     }
   },
   "gatom": {
@@ -199,6 +200,8 @@
     "comment_tt": "Write a comment on the canvas",
     "dropdown": "Dropdown",
     "dropdown_tt": "Dropdown menu",
+    "ascii_art": "Ascii_art",
+    "ascii_art_tt": "ASCII_ART menu",
     "bang": "Bang",
     "bang_tt": "Add a graphical button to the canvas for sending bang messages",
     "toggle": "Toggle",
diff --git a/pd/nw/pd_canvas.html b/pd/nw/pd_canvas.html
index 5b6da1ff2..c52aae1d2 100644
--- a/pd/nw/pd_canvas.html
+++ b/pd/nw/pd_canvas.html
@@ -51,6 +51,18 @@
         <span data-i18n="canvas.find.search"></span>
       </button>
     </div>
+    <div id="ascii_art" style="display:none;">
+      <textarea id="ascii_art_text_area"
+                rows="10" cols="50">
+                write your ascii art here
+      </textarea>
+      <button type="button"
+              id="canvas_ascii_art_button"
+              data-i18n="[title]canvas.ascii_art.submit_tt">
+              submit ascii_art
+      </button>
+        <span data-i18n="canvas.ascii_art.submit"></span>
+    </div>
     <div style="display:none;" id="dropdown_list" class="noselect">
       <ol></ol>
     </div>
diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js
index d2fb09295..da73d7b27 100644
--- a/pd/nw/pd_canvas.js
+++ b/pd/nw/pd_canvas.js
@@ -3,6 +3,7 @@
 var gui = require("nw.gui");
 var pdgui = require("./pdgui.js");
 var pd_menus = require("./pd_menus.js");
+var pd_ascii_art = require("./pd_ascii_art.js");
 
 // Apply gui preset to this canvas
 pdgui.skin.apply(window);
@@ -426,6 +427,13 @@ var canvas_events = (function() {
                     events.find_click(evt);
                 }
             },
+            submit_ascii_art : function(evt) {
+                var art = document.getElementById("ascii_art_text_area").value;
+                var parsed_art = pd_ascii_art.parse_ascii_art(art);
+                // to check the create pd_message
+                document.getElementById("ascii_art_text_area").innerHTML = parsed_art.pd_message; 
+                canvas_events[canvas_events.get_previous_state()]();     
+            },
             scalar_draggable_mousemove: function(evt) {
                 var new_x = evt.pageX,
                     new_y = evt.pageY,
@@ -1020,6 +1028,10 @@ var canvas_events = (function() {
             document.querySelector("#canvas_find_button")
                 .addEventListener("click", events.find_click
             );
+            //submit ascii art to parser
+            document.querySelector("#canvas_ascii_art_button")
+                .addEventListener("click", events.submit_ascii_art
+            );
             // We need to separate these into nw_window events and html5 DOM
             // events closing the Window this isn't actually closing the window
             // yet
@@ -1358,11 +1370,11 @@ function nw_create_patch_window_menus(gui, w, name) {
     minit(m.edit.paste_clipboard, {
         enabled: true,
         click: function () {
-	    var clipboard = nw.Clipboard.get();
-	    var text = clipboard.get('text');
-	    //pdgui.post("** paste from clipboard: "+text);
-	    canvas_events.paste_from_pd_file(name, text);
-	}
+        var clipboard = nw.Clipboard.get();
+        var text = clipboard.get('text');
+        //pdgui.post("** paste from clipboard: "+text);
+        canvas_events.paste_from_pd_file(name, text);
+    }
     });
     minit(m.edit.duplicate, {
         enabled: true,
@@ -1566,6 +1578,23 @@ function nw_create_patch_window_menus(gui, w, name) {
             pdgui.pdsend(name, "dropdown 0");
         }
     });
+    minit(m.put.ascii_art, {
+        enabled: true,
+        click: function() {
+            var ascii_art = w.document.getElementById("ascii_art"),
+                ascii_art_text_area = w.document.getElementById("ascii_art_text_area"),
+                state = ascii_art.style.getPropertyValue("display");
+            // if there's a box being edited, try to instantiate it in Pd
+            instantiate_live_box();
+            if (state === "none") {
+                ascii_art.style.setProperty("display", "block");
+                ascii_art_text_area.focus();
+                canvas_events.none();
+            } else {
+                ascii_art.style.setProperty("display", "none");
+            }
+        }
+    });
     minit(m.put.bang, {
         enabled: true,
         click: function(e) {
diff --git a/pd/nw/pd_menus.js b/pd/nw/pd_menus.js
index 34a8435d1..8c42ffde2 100644
--- a/pd/nw/pd_menus.js
+++ b/pd/nw/pd_menus.js
@@ -362,24 +362,24 @@ function create_menu(gui, type) {
         tooltip: l("menu.zoomreset_tt")
     }));
     if (canvas_menu) {
-	view_menu.append(m.view.optimalzoom = new gui.MenuItem({
+    view_menu.append(m.view.optimalzoom = new gui.MenuItem({
             label: l("menu.zoomoptimal"),
             key: shortcuts.menu.zoomoptimal.key,
             modifiers: shortcuts.menu.zoomoptimal.modifiers,
             tooltip: l("menu.zoomoptimal_tt")
-	}));
-	view_menu.append(m.view.horizzoom = new gui.MenuItem({
+    }));
+    view_menu.append(m.view.horizzoom = new gui.MenuItem({
             label: l("menu.zoomhoriz"),
             key: shortcuts.menu.zoomhoriz.key,
             modifiers: shortcuts.menu.zoomhoriz.modifiers,
             tooltip: l("menu.zoomhoriz_tt")
-	}));
-	view_menu.append(m.view.vertzoom = new gui.MenuItem({
+    }));
+    view_menu.append(m.view.vertzoom = new gui.MenuItem({
             label: l("menu.zoomvert"),
             key: shortcuts.menu.zoomvert.key,
             modifiers: shortcuts.menu.zoomvert.modifiers,
             tooltip: l("menu.zoomvert_tt")
-	}));
+    }));
     }
     view_menu.append(new gui.MenuItem({ type: "separator" }));
     view_menu.append(m.view.fullscreen = new gui.MenuItem({
@@ -431,6 +431,12 @@ function create_menu(gui, type) {
             modifiers: shortcuts.menu.dropdown.modifiers,
             tooltip: l("menu.dropdown_tt")
         }));
+        put_menu.append(m.put.ascii_art = new gui.MenuItem({
+            label: l("menu.ascii_art"),
+            key: shortcuts.menu.ascii_art.key,
+            modifiers: shortcuts.menu.ascii_art.modifiers,
+            tooltip: l("menu.ascii_art_tt")
+        }));
         put_menu.append(new gui.MenuItem({ type: "separator" }));
         put_menu.append(m.put.bang = new gui.MenuItem({
             label: l("menu.bang"),
diff --git a/pd/nw/pd_shortcuts.js b/pd/nw/pd_shortcuts.js
index 75c9cdd82..da2c096b4 100644
--- a/pd/nw/pd_shortcuts.js
+++ b/pd/nw/pd_shortcuts.js
@@ -47,6 +47,7 @@ exports.menu = {
   "symbol": { key: "4", modifiers: cmd_or_ctrl },
   "comment": { key: "5", modifiers: cmd_or_ctrl },
   "dropdown": { key: "6", modifiers: cmd_or_ctrl },
+  "ascii_art": { key: "7", modifiers: cmd_or_ctrl },
   "bang": { key: "b", modifiers: cmd_or_ctrl + "+shift" },
   "toggle": { key: "t", modifiers: cmd_or_ctrl + "+shift" },
   "number2": { key: "n", modifiers: cmd_or_ctrl + "+shift" },
-- 
GitLab