From b89a7ee8b956c96a1dcee995ea840feddc5d4b27 Mon Sep 17 00:00:00 2001 From: Pierre Frisch Date: Thu, 22 Dec 2011 07:25:50 -0800 Subject: First commit of Ninja to ninja-internal Signed-off-by: Valerio Virgillito --- js/tools/ToolBase.js | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 js/tools/ToolBase.js (limited to 'js/tools/ToolBase.js') diff --git a/js/tools/ToolBase.js b/js/tools/ToolBase.js new file mode 100644 index 00000000..678d03ac --- /dev/null +++ b/js/tools/ToolBase.js @@ -0,0 +1,192 @@ +/* +This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + +var Montage = require("montage/core/core").Montage; +var Component = require("montage/ui/component").Component; + +//var snapManager = ("js/helper-classes/3D/snap-manager").SnapManager; + +exports.toolBase = Montage.create(Component, { + options: { value: null }, + + /** + * This property will make the stageManager return null when false + * or the Stage / PasteBoard when true + */ + _canOperateOnStage: { value: false }, + + _downPoint: { value: { "x": null, "y": null } }, + _upPoint: { value: { "x": null, "y": null } }, + + downPoint: { + get: function() { return this._downPoint; }, + set: function(value) { this._downPoint = value; } + }, + + upPoint: { + get: function() { return this._upPoint; }, + set: function(value) { this._upPoint = value; } + }, + + // Need to keep track of current mouse position for KEY modifiers event which do not have mouse coordinates. + _currentX: {value: 0, writable: true}, + _currentY: {value: 0, writable: true}, + + /** + * This function is for specifying custom feedback routine + * upon mouse over. + * For example, the drawing tools will add a glow when mousing + * over existing canvas elements to signal to the user that + * the drawing operation will act on the targeted canvas. + */ + _showFeedbackOnMouseMove : { value: null }, + + _canDraw: { value: true }, + _isDrawing: { value: false }, + _hasDraw: { value: false }, + _isSpace: { value: false }, + _escape: { value: false }, + + + HandleLeftButtonUp: { value : function () {} }, + HandleRightButtonDown: { value : function () {} }, + HandleRightButtonUp: { value : function () {} }, + HandleMouseMove: { value : function () {} }, + + HandleKeyPress: { value : function () {} }, + HandleKeyUp: { value : function () {} }, + HandleDoubleClick: { value : function () {} }, + HandleShiftKeyDown: { value : function () {} }, + HandleShiftKeyUp: { value : function () {} }, + HandleAltKeyDown: { value : function () {} }, + HandleAltKeyUp: { value : function () {} }, + + HandleSpaceDown: { value: function() { this._isSpace = true; } }, + HandleSpaceUp: { value: function() { this._isSpace = false; } }, + + HandleEscape: { value: function(event) {} }, + + /** + * If wasSelected, configure the tool by: + * 2) adding custom feedback + * 3) drawing handles + * If wasSelected is false, clean up after the tool by: + * 1) removing custom feedback + */ + _configure: { + value: function(selected) { + this.Configure(selected); + } + }, + + Configure: { value: function (wasSelected) {} }, + + doSelection: { + value: function(event) { + + if(this._canOperateOnStage) { + if(event.shiftKey) { + this.application.ninja.selectionController.shiftSelectElement(this.application.ninja.stage.GetElement(event)); + } else { + this.application.ninja.selectionController.selectElement(this.application.ninja.stage.GetElement(event)); + } + } + + // TODO - Code used to know if this is a GL Canvas container --> Move this to the selectionManager? + /* + if(selectedObject.Ninja && selectedObject.Ninja.GLWorld) { + selectedObject.Ninja.GLWorld.getShapeFromPoint(event.layerX - selectedObject.left, event.layerY - selectedObject.top); + } + */ + + } + }, + + zoomIn:{ + value:function(event){ + var upperBoundary ,previousZoomValue; + + previousZoomValue = this.application.Ninja._documentBarRef.zoomFactor ; + upperBoundary = previousZoomValue *1.2 ; + + if(upperBoundary > 2000) + this.application.Ninja._documentBarRef.zoomFactor = 2000; + else + this.application.Ninja._documentBarRef.zoomFactor*= 1.2; + + } + }, + + zoomOut:{ + value:function(){ + var lowerBoundary ,previousZoomValue; + + previousZoomValue = this.application.Ninja._documentBarRef.zoomFactor ; + lowerBoundary = previousZoomValue/1.2 ; + + if(lowerBoundary < 25) + this.application.Ninja._documentBarRef.zoomFactor = 25; + else + this.application.Ninja._documentBarRef.zoomFactor/= 1.2; + } + }, + + UpdateSelection: { + value : function (shouldDispatchEvent) { + if(shouldDispatchEvent) { +// documentControllerModule.DocumentController.DispatchElementChangedEvent(selectionManagerModule.selectionManager.selectedItems, []); + } else { +// if(!selectionManagerModule.selectionManager.isDocument) { +// stageManagerModule.stageManager.drawSelectionRec(true); +// drawLayoutModule.drawLayout.redrawDocument(); +// } +// else +// { +// stageManagerModule.stageManager.drawSelectionRec(true); +// drawLayoutModule.drawLayout.redrawDocument(); +// } + } + +// if (drawUtils.isDrawingGrid()) +// { +// snapManager.updateWorkingPlaneFromView(); +// } + } + }, + + // Should be an array of handles for each tool. + // The array should contain ToolHandle objects that define + // dimensions, cursor, functionality + // For example, the Selection Tool holds the 8 resize handles in this order because this + // is the order we retrieve a rectangle's points using viewUtils: + // 0 7 6 + // 1 5 + // 2 3 4 + _handles: { + value:null, + writable: true + }, + +// InitHandles: { +// value: function () { +// this.DrawHandles(); +// } +// }, + + // Used for figuring what the tool should do. + // For example, if the handle mode is 5, the tool should resize the element to the right + _handleMode: { + value:null, + writable: true + }, + + DrawHandles: { + value: function () { + // Tool should override this method if it implements handles + } + } + +}); -- cgit v1.2.3