diff options
Diffstat (limited to 'js/controllers')
-rwxr-xr-x | js/controllers/document-controller.js | 26 | ||||
-rwxr-xr-x | js/controllers/elements/element-controller.js | 15 | ||||
-rwxr-xr-x | js/controllers/elements/shapes-controller.js | 442 | ||||
-rw-r--r-- | js/controllers/presets-controller.js | 131 | ||||
-rwxr-xr-x | js/controllers/selection-controller.js | 154 |
5 files changed, 514 insertions, 254 deletions
diff --git a/js/controllers/document-controller.js b/js/controllers/document-controller.js index d5556fa8..a308f191 100755 --- a/js/controllers/document-controller.js +++ b/js/controllers/document-controller.js | |||
@@ -32,22 +32,30 @@ var DocumentController = exports.DocumentController = Montage.create(Component, | |||
32 | _iframeHolder: { value: null, enumerable: false }, | 32 | _iframeHolder: { value: null, enumerable: false }, |
33 | _textHolder: { value: null, enumerable: false }, | 33 | _textHolder: { value: null, enumerable: false }, |
34 | _codeMirrorCounter: {value: 1, enumerable: false}, | 34 | _codeMirrorCounter: {value: 1, enumerable: false}, |
35 | |||
36 | canSave:{value: false},//for Save menu state update | ||
37 | canSaveAll:{value: false},//for Save All menu state update | ||
35 | 38 | ||
36 | activeDocument: { | 39 | activeDocument: { |
37 | get: function() { | 40 | get: function() { |
38 | return this._activeDocument; | 41 | return this._activeDocument; |
39 | }, | 42 | }, |
40 | set: function(doc) { | 43 | set: function(doc) { |
41 | if(!!this._activeDocument) this._activeDocument.isActive = false; | 44 | if(!!this._activeDocument){ this._activeDocument.isActive = false;} |
42 | |||
43 | this._activeDocument = doc; | 45 | this._activeDocument = doc; |
44 | if(!!this._activeDocument){ | 46 | if(!!this._activeDocument){ |
45 | |||
46 | if(this._documents.indexOf(doc) === -1) this._documents.push(doc); | 47 | if(this._documents.indexOf(doc) === -1) this._documents.push(doc); |
47 | this._activeDocument.isActive = true; | 48 | this._activeDocument.isActive = true; |
49 | |||
48 | if(!!this._activeDocument.editor){ | 50 | if(!!this._activeDocument.editor){ |
49 | this._activeDocument.editor.focus(); | 51 | this._activeDocument.editor.focus(); |
50 | } | 52 | } |
53 | |||
54 | this.canSave = doc.needsSave; | ||
55 | this.canSaveAll = doc.needsSave; | ||
56 | }else{ | ||
57 | this.canSave = false; | ||
58 | this.canSaveAll = false; | ||
51 | } | 59 | } |
52 | } | 60 | } |
53 | }, | 61 | }, |
@@ -61,6 +69,7 @@ var DocumentController = exports.DocumentController = Montage.create(Component, | |||
61 | this.eventManager.addEventListener("executeSaveAs", this, false); | 69 | this.eventManager.addEventListener("executeSaveAs", this, false); |
62 | this.eventManager.addEventListener("executeSaveAll", this, false); | 70 | this.eventManager.addEventListener("executeSaveAll", this, false); |
63 | this.eventManager.addEventListener("executeFileClose", this, false); | 71 | this.eventManager.addEventListener("executeFileClose", this, false); |
72 | this.eventManager.addEventListener("executeFileCloseAll", this, false); | ||
64 | 73 | ||
65 | this.eventManager.addEventListener("styleSheetDirty", this, false); | 74 | this.eventManager.addEventListener("styleSheetDirty", this, false); |
66 | 75 | ||
@@ -180,6 +189,17 @@ var DocumentController = exports.DocumentController = Montage.create(Component, | |||
180 | } | 189 | } |
181 | }, | 190 | }, |
182 | //////////////////////////////////////////////////////////////////// | 191 | //////////////////////////////////////////////////////////////////// |
192 | handleExecuteFileCloseAll:{ | ||
193 | value: function(event) { | ||
194 | var i=0; | ||
195 | if(this.activeDocument && this.application.ninja.coreIoApi.cloudAvailable()){ | ||
196 | while(this._documents.length > 0){ | ||
197 | this.closeDocument(this._documents[this._documents.length -1].uuid); | ||
198 | } | ||
199 | } | ||
200 | } | ||
201 | }, | ||
202 | //////////////////////////////////////////////////////////////////// | ||
183 | // | 203 | // |
184 | fileSaveResult: { | 204 | fileSaveResult: { |
185 | value: function (result) { | 205 | value: function (result) { |
diff --git a/js/controllers/elements/element-controller.js b/js/controllers/elements/element-controller.js index 9cba6d94..fda3a3c5 100755 --- a/js/controllers/elements/element-controller.js +++ b/js/controllers/elements/element-controller.js | |||
@@ -5,22 +5,27 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
5 | </copyright> */ | 5 | </copyright> */ |
6 | 6 | ||
7 | var Montage = require("montage/core/core").Montage, | 7 | var Montage = require("montage/core/core").Montage, |
8 | NJComponent = require("js/lib/nj-base").NJComponent; | 8 | Component = require("montage/ui/component").Component; |
9 | 9 | ||
10 | var ElementController = exports.ElementController = Montage.create(NJComponent, { | 10 | exports.ElementController = Montage.create(Component, { |
11 | 11 | ||
12 | addElement: { | 12 | addElement: { |
13 | value: function(el, styles) { | 13 | value: function(el, styles) { |
14 | this.application.ninja.currentDocument.documentRoot.appendChild(el); | 14 | this.application.ninja.currentDocument.documentRoot.appendChild(el); |
15 | // Nested elements - | 15 | // Nested elements - TODO make sure the CSS is correct before nesting elements |
16 | // TODO make sure the CSS is correct before nesting elements | ||
17 | // this.application.ninja.currentSelectedContainer.appendChild(el); | 16 | // this.application.ninja.currentSelectedContainer.appendChild(el); |
18 | this.application.ninja.stylesController.setElementStyles(el, styles); | 17 | if(styles) { |
18 | this.application.ninja.stylesController.setElementStyles(el, styles); | ||
19 | } | ||
19 | } | 20 | } |
20 | }, | 21 | }, |
21 | 22 | ||
23 | // Remove the element from the DOM and clear the GLWord. | ||
22 | removeElement: { | 24 | removeElement: { |
23 | value: function(el) { | 25 | value: function(el) { |
26 | if(el.elementModel && el.elementModel.shapeModel && el.elementModel.shapeModel.GLWorld) { | ||
27 | el.elementModel.shapeModel.GLWorld.clearTree(); | ||
28 | } | ||
24 | el.parentNode.removeChild(el); | 29 | el.parentNode.removeChild(el); |
25 | } | 30 | } |
26 | }, | 31 | }, |
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js index f18801fd..b97d04b0 100755 --- a/js/controllers/elements/shapes-controller.js +++ b/js/controllers/elements/shapes-controller.js | |||
@@ -13,12 +13,62 @@ var Montage = require("montage/core/core").Montage, | |||
13 | exports.ShapesController = Montage.create(CanvasController, { | 13 | exports.ShapesController = Montage.create(CanvasController, { |
14 | 14 | ||
15 | setProperty: { | 15 | setProperty: { |
16 | value: function(el, p, value) { | 16 | value: function(el, p, value, eventType, source) { |
17 | var val = parseInt(value); | 17 | var val = parseInt(value), |
18 | canvas, | ||
19 | m, | ||
20 | color; | ||
18 | switch(p) { | 21 | switch(p) { |
19 | case "strokeSize": | 22 | case "strokeSize": |
20 | // TODO - For now, just handling px units. | 23 | // TODO - For now, just handling px units. |
21 | this.setShapeProperty(el, "strokeSize", value); | 24 | this.setShapeProperty(el, "strokeSize", value); |
25 | // Changing stroke size should grow/shrink the shape from the center. | ||
26 | var delta = ~~(val - el.elementModel.shapeModel.GLGeomObj.getStrokeWidth()), | ||
27 | l = this.application.ninja.elementMediator.getProperty(el, "left", parseInt), | ||
28 | t = this.application.ninja.elementMediator.getProperty(el, "top", parseInt), | ||
29 | w = this.application.ninja.elementMediator.getProperty(el, "width", parseInt), | ||
30 | h = this.application.ninja.elementMediator.getProperty(el, "height", parseInt); | ||
31 | |||
32 | if(el.elementModel.selection === "Line") | ||
33 | { | ||
34 | var slope = el.elementModel.shapeModel.slope; | ||
35 | // set the dimensions | ||
36 | if(slope === "horizontal") | ||
37 | { | ||
38 | h = Math.max(val, 1); | ||
39 | } | ||
40 | else if(slope === "vertical") | ||
41 | { | ||
42 | w = Math.max(val, 1); | ||
43 | } | ||
44 | else | ||
45 | { | ||
46 | var oldXAdj = el.elementModel.shapeModel.GLGeomObj.getXAdj(); | ||
47 | var oldYAdj = el.elementModel.shapeModel.GLGeomObj.getYAdj(); | ||
48 | var theta = Math.atan(el.elementModel.shapeModel.slope); | ||
49 | var xAdj = Math.abs((val/2)*Math.sin(theta)); | ||
50 | var yAdj = Math.abs((val/2)*Math.cos(theta)); | ||
51 | var dX = ~~(xAdj*2 - oldXAdj*2); | ||
52 | var dY = ~~(yAdj*2 - oldYAdj*2); | ||
53 | |||
54 | if(delta > 0) | ||
55 | { | ||
56 | l -= dX*2; | ||
57 | t -= dY*2; | ||
58 | w += dX*2; | ||
59 | h += dY*2; | ||
60 | } | ||
61 | |||
62 | el.elementModel.shapeModel.GLGeomObj.setXAdj(xAdj); | ||
63 | el.elementModel.shapeModel.GLGeomObj.setYAdj(yAdj); | ||
64 | |||
65 | } | ||
66 | } | ||
67 | this.application.ninja.elementMediator.setProperties([el], | ||
68 | { "left": [l + "px"], | ||
69 | "top": [t + "px"], | ||
70 | "width": [w + "px"], | ||
71 | "height": [h + "px"] }, eventType, source ); | ||
22 | el.elementModel.shapeModel.GLGeomObj.setStrokeWidth(val); | 72 | el.elementModel.shapeModel.GLGeomObj.setStrokeWidth(val); |
23 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); | 73 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); |
24 | el.elementModel.shapeModel.GLWorld.render(); | 74 | el.elementModel.shapeModel.GLWorld.render(); |
@@ -68,42 +118,47 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
68 | el.elementModel.shapeModel.GLWorld.render(); | 118 | el.elementModel.shapeModel.GLWorld.render(); |
69 | break; | 119 | break; |
70 | case "useWebGl": | 120 | case "useWebGl": |
71 | var canvas = njModule.NJUtils.makeNJElement("canvas", "Canvas", "shape", el.className, true); | 121 | canvas = njModule.NJUtils.makeNJElement("canvas", "Canvas", "shape", el.className, true); |
72 | canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom()); | 122 | canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom()); |
73 | canvas.width = el.width; | 123 | canvas.width = el.width; |
74 | canvas.height = el.height; | 124 | canvas.height = el.height; |
75 | this.application.ninja.elementMediator.replaceElement(el, canvas); | 125 | canvas.elementModel = el.elementModel; |
76 | NJevent("elementDeleted", el); | 126 | this.toggleWebGlMode(canvas, value); |
77 | el = canvas; | 127 | this.application.ninja.elementMediator.replaceElement(canvas, el); |
78 | this.toggleWebGlMode(el, value); | 128 | break; |
79 | el.elementModel.shapeModel.GLWorld.render(); | ||
80 | this.application.ninja.selectionController.selectElement(el); | ||
81 | return; | ||
82 | case "strokeMaterial": |