From 45740f5e692902570661860552f32ec847566f4f Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Wed, 11 Mar 2015 18:46:49 -0400
Subject: [PATCH] working on gcode editor

---
 css/main.css              |  4 ++++
 js/cam/Assembler.js       | 48 +++++++++++++++++++--------------------
 js/cam/GCodeExporter.js   |  2 --
 js/cam/ShopbotExporter.js |  6 ++---
 js/menus/CamMenuView.js   |  2 +-
 js/menus/SendMenuView.js  | 10 +++++++-
 js/models/AppState.js     |  1 +
 7 files changed, 42 insertions(+), 31 deletions(-)

diff --git a/css/main.css b/css/main.css
index 0b56c36a..8dd5b138 100644
--- a/css/main.css
+++ b/css/main.css
@@ -156,3 +156,7 @@ hr {
     border-width: 0px;
     background-color: rgba(255,255,255,0.5);
 }
+
+#gcodeEditor:focus {
+    outline-width: 0;
+}
diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index cac5ebe1..c5b31d38 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -15,6 +15,8 @@ Assembler = Backbone.Model.extend({
 
     initialize: function(){
 
+        _.bindAll(this, "postProcess");
+
         //bind events
         this.listenTo(this, "change:camProcess", this._setNeedsPostProcessing);
         this.listenTo(dmaGlobals.appState, "change:units", this._setNeedsPostProcessing);
@@ -25,8 +27,9 @@ Assembler = Backbone.Model.extend({
         this.set("needsPostProcessing", true);
     },
 
-    setProgramEditsMade: function(){
-        this.set("editsMadeToProgram", true);
+    makeProgramEdits: function(data){
+        this.set("dataOut", data, {silent:true});
+        this.set("editsMadeToProgram", true, {silent: true});
     },
 
     _getExporter: function(){
@@ -43,40 +46,37 @@ Assembler = Backbone.Model.extend({
             } else {
                 return new GCodeExporter();
             }
-        }
+        } else console.warn("cam process not supported");
     },
 
     postProcess: function(){
-        var exporter = this._getExporter();
-        if (exporter) {
-            var data = "";
-            data += exporter.makeHeader();
-            data += "\n\n";
-            data += exporter.addComment("begin program");
-            data += "\n";
-            data += exporter.moveZ(3);
-            data += exporter.move3(1, 4, 5);
-            data += "\n\n";
-            data += exporter.addComment("end program");
-            data += "\n";
-            data += exporter.makeFooter();
-            this.set("dataOut", data);
-            this.set("exporter", exporter);
-        }
-        else console.warn("cam process not supported");
         this.set("needsPostProcessing", false);
+        var exporter = this._getExporter();
+
+        var data = "";
+        data += exporter.makeHeader();
+        data += "\n\n";
+        data += exporter.addComment("begin program");
+        data += "\n";
+        data += exporter.moveZ(3);
+        data += exporter.move3(1, 4, 5);
+        data += "\n\n";
+        data += exporter.addComment("end program");
+        data += "\n";
+        data += exporter.makeFooter();
+
+        this.set("dataOut", data);
+        this.set("exporter", exporter);
         return {data:data, exporter:exporter};
     },
 
-    save: function(data, exporter){
+    save: function(){
         if (this.get("needsPostProcessing")){
             var output = this.postProcess();
             output.exporter.save(output.data);
             return;
         }
-        if (!data) data = this.get("dataOut");
-        if (!exporter) exporter = this.get("exporter");
-        exporter.save(data);
+        this.get("exporter").save(this.get("dataOut"));
     },
 
     destroy: function(){
diff --git a/js/cam/GCodeExporter.js b/js/cam/GCodeExporter.js
index 968641e8..d2ef3bd2 100644
--- a/js/cam/GCodeExporter.js
+++ b/js/cam/GCodeExporter.js
@@ -59,8 +59,6 @@ GCodeExporter.prototype.moveZ = function(z){
 
 GCodeExporter.prototype.makeFooter = function(){
     var data = "";
-    data += "\n";
-    data += "\n";
     data += this.goHome();
     data += this.addLine("M30", [], "program stop");
 
diff --git a/js/cam/ShopbotExporter.js b/js/cam/ShopbotExporter.js
index 2852fabb..9845103a 100644
--- a/js/cam/ShopbotExporter.js
+++ b/js/cam/ShopbotExporter.js
@@ -10,9 +10,9 @@ ShopbotExporter.prototype.makeHeader = function(){
     data += this.addLine("FG", [], "single step mode");
     data += this.goHome();
     data += this.addLine("SA", [], "absolute distances");
-    data += this.addLine("SM", [], "move/cut mode (as opposed to preview mode)");
-    data += this.addLine("JS", [4, 1], "jog speed- xy, z inches per sec");
-    data += this.addLine("MS", [2, 0.5], "move speed- xy, z inches per sec");
+    data += this.addLine("SM", [], "move/cut mode");
+    data += this.addLine("JS", [4, 1], "jog speed xy, z");
+    data += this.addLine("MS", [2, 0.5], "move speed xy, z");
     return data;
 };
 
diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js
index 2e8bc61c..4edc02b2 100644
--- a/js/menus/CamMenuView.js
+++ b/js/menus/CamMenuView.js
@@ -63,7 +63,7 @@ CamMenuView = Backbone.View.extend({
                     <% }); %>\
                 </ul>\
             </div><br/><br/>\
-            <a href="#" id="saveCam" class=" btn btn-block btn-lg btn-default">Save</a><br/>\
+            <a href="#" id="saveCam" class=" btn btn-block btn-lg btn-default">Process and Save</a><br/>\
         ')
 
 });
\ No newline at end of file
diff --git a/js/menus/SendMenuView.js b/js/menus/SendMenuView.js
index 765e48ef..a92e62d8 100644
--- a/js/menus/SendMenuView.js
+++ b/js/menus/SendMenuView.js
@@ -15,6 +15,7 @@ SendMenuView = Backbone.View.extend({
 
         //bind events
         this.listenTo(dmaGlobals.assembler, "change", this.render);
+        $(document).bind('keyup', {state:false}, this._codeEdit);
 
         _.bindAll(this, "render");
     },
@@ -29,6 +30,13 @@ SendMenuView = Backbone.View.extend({
         dmaGlobals.assembler.postProcess();
     },
 
+    _codeEdit: function(e){
+        var textarea = $("#gcodeEditor");
+        if (!textarea.is(":focus")) return;
+        e.preventDefault();
+        dmaGlobals.assembler.makeProgramEdits(textarea.val());
+    },
+
     render: function(){
         if (this.model.get("currentTab") != "send") return;
         if (dmaGlobals.assembler.get("needsPostProcessing")) dmaGlobals.assembler.postProcess();
@@ -37,7 +45,7 @@ SendMenuView = Backbone.View.extend({
 
     template: _.template('\
         <a href="#" id="saveSendMenu" class=" btn btn-block btn-lg btn-default">Save</a><br/>\
-        <textarea id="gcodeEditor"><%= dataOut %></textarea>\
+        <textarea id="gcodeEditor"><%= dataOut %></textarea><br/><br/>\
         <a href="#" id="overrideEdits" class=" btn btn-block btn-lg btn-default">Undo Changes</a><br/>\
         ')
 
diff --git a/js/models/AppState.js b/js/models/AppState.js
index 09b7b2bd..846148a8 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -186,6 +186,7 @@ AppState = Backbone.Model.extend({
     _handleKeyStroke: function(e){//receives keyup and keydown
 
         if ($("input").is(':focus')) return;//we are typing in an input
+        if ($("textarea").is(':focus')) return;//we are typing in an input
 
         var state = e.data.state;
         var currentTab = this.get("currentTab");
-- 
GitLab