From 2efd5a3a126f9aaf179cf7085f10a9132b777421 Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Mon, 22 Jun 2015 15:02:14 -0700
Subject: [PATCH] clean up menu stuff

---
 js/menus/CompositeMenuView.js          |  5 +++
 js/menus/ImportMenuView.js             |  4 ++
 js/menus/MenuParentView.js             |  4 ++
 js/menus/MenuWrapperView.js            | 62 ++++++++++++++++----------
 js/menus/SetupCommMenuView.js          | 43 ++++--------------
 js/menus/templates/ImportMenuView.html |  8 ++--
 js/models/SerialComm.js                |  4 +-
 js/three/FillGeometry.js               |  4 +-
 8 files changed, 68 insertions(+), 66 deletions(-)

diff --git a/js/menus/CompositeMenuView.js b/js/menus/CompositeMenuView.js
index 71c28390..bafc8fea 100644
--- a/js/menus/CompositeMenuView.js
+++ b/js/menus/CompositeMenuView.js
@@ -32,6 +32,11 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'lattice', 'globals', 'ma
             dimensions = lattice.compositeEditor.calculateBoundingBox();
         },
 
+        getPropertyOwner: function($target){
+            if ($target.hasClass("compositeEditor")) return lattice.compositeEditor;
+            return null;
+        },
+
         _changeRandomColor: function(e){
             e.preventDefault();
             lattice.compositeEditor._changeRandomColor();
diff --git a/js/menus/ImportMenuView.js b/js/menus/ImportMenuView.js
index 9bbb3b2a..a9f36a71 100644
--- a/js/menus/ImportMenuView.js
+++ b/js/menus/ImportMenuView.js
@@ -24,6 +24,10 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'lattice', 'text!importMe
             this.listenTo(this.fillGeometry, "change", this.render);
         },
 
+        getPropertyOwner: function($target){
+            if ($target.hasClass("fillGeometry")) return this.fillGeometry;
+        },
+
         _uploadSTL: function(e){//select a mesh to upload
             e.preventDefault();
             var input = $(e.target),
diff --git a/js/menus/MenuParentView.js b/js/menus/MenuParentView.js
index 4ac9728d..defecd9e 100644
--- a/js/menus/MenuParentView.js
+++ b/js/menus/MenuParentView.js
@@ -16,6 +16,10 @@ define(['jquery', 'underscore', 'backbone'], function($, _, Backbone){
             if (this._initialize) this._initialize();//call subclass
         },
 
+        getPropertyOwner: function($target){
+            return null;//override in subclasses
+        },
+
         render: function(){
             if (this.model.changedAttributes()["currentNav"]) return;
             if ($("input[type=text]").is(":focus")) return;
diff --git a/js/menus/MenuWrapperView.js b/js/menus/MenuWrapperView.js
index d67bf628..201e4f0c 100644
--- a/js/menus/MenuWrapperView.js
+++ b/js/menus/MenuWrapperView.js
@@ -46,7 +46,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
 
             if ($(".floatInput").is(":focus")) this._updateFloat(e);
             if ($(".intInput").is(":focus")) this._updateInt(e);
-            if ($(".textInput").is(":focus")) this._updateString(e)
+            if ($(".textInput").is(":focus")) this._updateString(e);
             if ($(".hexInput").is(":focus")) this._updateHex(e);
         },
 
@@ -58,7 +58,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
                 console.warn("no property associated with string input");
                 return;
             }
-            this._getPropertyOwner($target).set(property, $target.val());
+            this._setProperty($target, $target.val());
         },
 
         _updateHex: function(e){
@@ -71,8 +71,8 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
                 console.warn("no property associated with string input");
                 return;
             }
-            this._getPropertyOwner($target).set(property, hex);
-            if (this.menu.updateHex) this.menu.updateHex(hex);
+            this._setProperty($target, property, hex);
+            if (this.menu.updateHex) this.menu.updateHex(hex);//no render when input in focus, this forces update of the inputs color
         },
 
         _isValidHex: function(hex){
@@ -121,14 +121,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
             //remove trailing zeros
             newVal = newVal.toString();
             newVal = parseFloat(newVal);
-
-            if (key){
-                var value = this._getPropertyOwner($target).get(property).clone();
-                value[key] = newVal;
-                this._getPropertyOwner($target).set(property, value);
-                return;
-            }
-            this._getPropertyOwner($target).set(property, newVal);
+            this._setProperty($target, property, newVal, key);
         },
 
         _makeDropdownSelection: function(e){
@@ -136,8 +129,7 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
             var property = $target.data("property");
             var value = $target.data("value");
             if (!property || !value) return;
-            var owner = this._getPropertyOwner($target, property, value);
-            if (owner) owner.set(property, value);
+            this._setProperty($target, property, value);
         },
 
         _clickCheckbox: function(e){
@@ -149,13 +141,15 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
                 console.warn("no property associated with checkbox input");
                 return;
             }
-           this._getPropertyOwner($target).set(property, !this._getPropertyOwner($target).get(property));
+            this._toggleProperty($target, property);
         },
 
         _radioSelection: function(e){
             e.preventDefault();
             var $target = $(e.target);
-            this._getPropertyOwner($target).set($target.attr("name"), $target.val());
+            var property = $target.attr("name");
+            var newVal = $target.val();
+            this._setProperty($target, property, newVal);
             $target.blur();
         },
 
@@ -164,21 +158,41 @@ define(['jquery', 'underscore', 'plist', 'backbone', 'lattice', 'text!menuWrappe
             lattice.getUItarget().clearCells();
         },
 
-        _getPropertyOwner: function($target, property, value){
+        _getPropertyOwner: function($target){
             if ($target.hasClass("lattice")) return lattice;
-            if ($target.hasClass("compositeEditor")) return lattice.compositeEditor;
             if ($target.hasClass("assembler")) return globals.cam;
             if ($target.hasClass("appState")) return this.model;
-            if ($target.hasClass("serialComm")) {
-                require(['serialComm'], function(serialComm){
-                    serialComm.changeProperty(property, value);
-                });
-                return null;
+            if (this.menu) {
+                var owner = this.menu.getPropertyOwner($target);
+                if (owner) return owner;
             }
-            console.warn("no owner found for " + $target);
+            else console.warn("no menu found for ui change");
+            console.warn("no owner found for target");
+            console.warn($target);
             return null;
         },
 
+        _toggleProperty: function($target, property){ //val = !val
+            var owner = this._getPropertyOwner($target);
+            if (owner) owner.set(property, !owner.get(property));
+        },
+
+        _setProperty: function($target, property, newVal, key){
+            var owner = this._getPropertyOwner($target);
+            if (!owner) return;
+            if (owner.setProperty){
+                owner.setProperty(property, newVal, key);
+                return;
+            }
+            if (key){
+                var propObject = owner.get(property).clone();
+                propObject[key] = newVal;
+                owner.set(property, propObject);
+            } else {
+                owner.set(property, newVal);
+            }
+        },
+
 
 
 
diff --git a/js/menus/SetupCommMenuView.js b/js/menus/SetupCommMenuView.js
index f03f52ca..3c594ffc 100644
--- a/js/menus/SetupCommMenuView.js
+++ b/js/menus/SetupCommMenuView.js
@@ -3,7 +3,8 @@
  */
 
 
-define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($, _, MenuParentView, plist, serialComm){
+define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm', 'text!setupCommMenuTemplate'],
+    function($, _, MenuParentView, plist, serialComm, template){
 
 
 
@@ -27,6 +28,11 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
             this.inTimeout = false;
         },
 
+        getPropertyOwner: function($target){
+            if ($target.hasClass("serialComm")) return serialComm;
+            return null
+        },
+
         _sendTestMessage: function(e){
             e.preventDefault();
             var message = $("#seriallTestMessage").val();
@@ -80,40 +86,7 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'serialComm'], function($
             return _.extend(this.model.toJSON(), serialComm.toJSON(), {allBaudRates: [300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200]});
         },
 
-        template: _.template('\
-        <% if(error){ %> \
-        <div class="postWarning"><%= error %></div>\
-        <% } %>\
-        <% if(connected){ %>\
-        Status: &nbsp;&nbsp;<% if (portConnected){ %> Connected <% } else { %> <span class="red">Disconnected</span> <% } %><br/><br/>\
-        Baud Rate: &nbsp;&nbsp;\
-                <div class="btn-group">\
-                    <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= baudRate %><span class="caret"></span></button>\
-                    <ul role="menu" class="dropdown-menu">\
-                        <% _.each(allBaudRates, function(rate){ %>\
-                            <li><a class="serialComm dropdownSelector" data-property="baudRate" data-value="<%= rate %>" href="#"><%= rate %></a></li>\
-                        <% }); %>\
-                    </ul>\
-                </div><br/><br/>\
-        Port: &nbsp;&nbsp;\
-                <div class="btn-group">\
-                    <button data-toggle="dropdown" class="btn dropdown-toggle" type="button"><%= portName %><span class="caret"></span></button>\
-                    <ul role="menu" class="dropdown-menu">\
-                        <% _.each(availablePorts, function(port){ %>\
-                            <li><a class="serialComm dropdownSelector" data-property="portName" data-value="<%= port %>" href="#"><%= port %></a></li>\
-                        <% }); %>\
-                    </ul>\
-                </div>\
-            &nbsp;&nbsp;<a href="#" id="refreshPorts" class="btn btn-lg btn-default btn-icon"><img src="assets/imgs/refreshIcon.png"></a><br/><br/>\
-        Incoming: &nbsp;&nbsp;<pre id="incomingSerialMessage"></pre><br/><br/>\
-        Out: &nbsp;&nbsp;<input id="seriallTestMessage" value="<%= testMessage %>" placeholder="Send Message" class="seventyFiveWidth form-control unresponsiveInput" type="text"><br/><br/>\
-        <a href="#" id="serialFlushBuffer" class="btn btn-block btn-lg btn-danger">Flush Buffer</a><br/>\
-        <% }else{ %>\
-        No node server found.<br/><br/>\
-        <a href="#" id="nodeSetupInstructions" class="btn btn-block btn-lg btn-default">Setup Instructions</a><br/>\
-        <a href="#" id="reconnectToNode" class="btn btn-block btn-lg btn-success">Reconnect</a><br/>\
-        <% } %>\
-            '),
+        template: _.template(template),
 
         helpFile: "" +
             "Download and install node.js and npm either via the installer:<br/>" +
diff --git a/js/menus/templates/ImportMenuView.html b/js/menus/templates/ImportMenuView.html
index 282d29cd..625cf5eb 100644
--- a/js/menus/templates/ImportMenuView.html
+++ b/js/menus/templates/ImportMenuView.html
@@ -1,9 +1,9 @@
 Filename: &nbsp;&nbsp;<%= filename %><br/><br/>
 <% if (mesh){ %>
-    Scale:<br/><br/>
-        <a href="#" id="doFillGeo" class=" btn btn-block btn-lg btn-default">Fill Mesh</a><br/>
-        <a href="#" id="removeFillGeo" class=" btn btn-block btn-lg btn-default">Remove Mesh</a><br/>
-        <hr>
+    Scale: &nbsp;&nbsp;<input data-property="scale" value="<%= scale %>" placeholder="Scale" class="form-control floatInput fillGeometry" type="text"><br/><br/>
+    <a href="#" id="doFillGeo" class=" btn btn-block btn-lg btn-default">Fill Mesh</a><br/>
+    <a href="#" id="removeFillGeo" class=" btn btn-block btn-lg btn-default">Remove Mesh</a><br/>
+    <hr>
 <% } %>
 <a href="#" class=" btn btn-block btn-lg btn-danger clearCells">Clear All Cells</a><br/><br/>
 <br/><span class="btn btn-default btn-lg btn-file fullWidth">
diff --git a/js/models/SerialComm.js b/js/models/SerialComm.js
index e880a6c0..6e769fbf 100644
--- a/js/models/SerialComm.js
+++ b/js/models/SerialComm.js
@@ -46,7 +46,7 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
             this.socket.emit("flush");
         },
 
-        changeProperty: function(property, value){//portName, baudRate
+        setProperty: function(property, value){//portName, baudRate
             if (property === null || property === undefined || value === null || value === undefined) return;
             this.socket.emit(property, value);//always pass user interaction on
             this.set(property, value);
@@ -74,7 +74,7 @@ define(['underscore', 'backbone', 'socketio'], function(_, Backbone, io){
         socket.on('portConnected', function(data){
             console.log("connected port " + data.portName + " at " + data.baudRate);
             serialComm.set("baudRate", data.baudRate);
-            serialComm.set("portName", data.portName)
+            serialComm.set("portName", data.portName);
             serialComm.set("portConnected", true);
             serialComm.set("error", false);
         });
diff --git a/js/three/FillGeometry.js b/js/three/FillGeometry.js
index 5bb69554..30ce41d0 100644
--- a/js/three/FillGeometry.js
+++ b/js/three/FillGeometry.js
@@ -17,6 +17,7 @@ define(['three', 'underscore', 'backbone', 'lattice', 'threeModel'],
         initialize: function(){
     
             //bind events
+            this.listenTo(this, "change:scale", this._changeScale);
         },
     
         buildNewMesh:function(geometry){
@@ -125,7 +126,8 @@ define(['three', 'underscore', 'backbone', 'lattice', 'threeModel'],
             three.render();
         },
     
-        scale: function(scale){
+        _changeScale: function(){
+            console.log(this.get("scale"));
     //        var currentScale = this.get("scale");
     //        for (var i=0;i<currentScale.length;i++){
     //            if (!scale[i]) scale[i] = currentScale[i];
-- 
GitLab