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: <% if (portConnected){ %> Connected <% } else { %> <span class="red">Disconnected</span> <% } %><br/><br/>\ - Baud Rate: \ - <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: \ - <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>\ - <a href="#" id="refreshPorts" class="btn btn-lg btn-default btn-icon"><img src="assets/imgs/refreshIcon.png"></a><br/><br/>\ - Incoming: <pre id="incomingSerialMessage"></pre><br/><br/>\ - Out: <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: <%= 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: <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