wisemapping-open-source/mindplot/src/main/javascript/Workspace.js

228 lines
8.0 KiB
JavaScript
Raw Normal View History

2010-11-20 23:43:54 +01:00
/*
2015-04-12 05:15:12 +02:00
* Copyright [2015] [wisemapping]
2011-07-26 20:07:53 +02:00
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
mindplot.Workspace = new Class({
2015-04-12 05:23:24 +02:00
initialize: function (screenManager, zoom) {
2011-07-26 20:07:53 +02:00
// Create a suitable container ...
$assert(screenManager, 'Div container can not be null');
$assert(zoom, 'zoom container can not be null');
2011-07-26 20:07:53 +02:00
this._zoom = zoom;
this._screenManager = screenManager;
var divContainer = screenManager.getContainer();
2014-03-05 02:59:39 +01:00
this._screenWidth = parseInt(divContainer.css('width'));
this._screenHeight = parseInt(divContainer.css('height'));
2011-07-26 20:07:53 +02:00
// Initialize web2d workspace.
var workspace = this._createWorkspace();
this._workspace = workspace;
2011-07-26 20:07:53 +02:00
// Append to the workspace...
workspace.addItAsChildTo(divContainer);
2011-07-26 20:07:53 +02:00
this.setZoom(zoom, true);
// Register drag events ...
this._registerDragEvents();
this._eventsEnabled = true;
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
_createWorkspace: function () {
2011-07-26 20:07:53 +02:00
// Initialize workspace ...
var coordOriginX = -(this._screenWidth / 2);
var coordOriginY = -(this._screenHeight / 2);
var workspaceProfile = {
width: this._screenWidth + "px",
height: this._screenHeight + "px",
2015-04-12 05:23:24 +02:00
coordSizeWidth: this._screenWidth,
coordSizeHeight: this._screenHeight,
coordOriginX: coordOriginX,
coordOriginY: coordOriginY,
fillColor: 'transparent',
strokeWidth: 0
2011-07-26 20:07:53 +02:00
};
web2d.peer.Toolkit.init();
2015-04-12 05:23:24 +02:00
return new web2d.Workspace(workspaceProfile);
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
append: function (shape) {
if ($defined(shape.addToWorkspace)) {
2011-07-26 20:07:53 +02:00
shape.addToWorkspace(this);
} else {
2014-03-05 04:14:28 +01:00
this._workspace.append(shape);
2011-07-26 20:07:53 +02:00
}
},
2015-04-12 05:23:24 +02:00
removeChild: function (shape) {
2011-07-26 20:07:53 +02:00
// Element is a node, not a web2d element?
if ($defined(shape.removeFromWorkspace)) {
2011-07-26 20:07:53 +02:00
shape.removeFromWorkspace(this);
} else {
this._workspace.removeChild(shape);
}
},
2015-04-12 05:23:24 +02:00
addEvent: function (type, listener) {
2011-08-21 17:42:00 +02:00
this._workspace.addEvent(type, listener);
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
removeEvent: function (type, listener) {
2011-10-09 22:59:16 +02:00
$assert(type, 'type can not be null');
$assert(listener, 'listener can not be null');
2011-08-21 17:42:00 +02:00
this._workspace.removeEvent(type, listener);
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
getSize: function () {
2011-07-26 20:07:53 +02:00
return this._workspace.getCoordSize();
},
2015-04-12 05:23:24 +02:00
setZoom: function (zoom, center) {
2011-07-26 20:07:53 +02:00
this._zoom = zoom;
var workspace = this._workspace;
// Update coord scale...
var coordWidth = zoom * this._screenWidth;
var coordHeight = zoom * this._screenHeight;
workspace.setCoordSize(coordWidth, coordHeight);
2011-08-28 15:58:41 +02:00
// View port coords ...
if (this._viewPort) {
this._viewPort.width = this._viewPort.width * zoom;
this._viewPort.height = this._viewPort.height * zoom;
}
2011-07-26 20:07:53 +02:00
// Center topic....
var coordOriginX;
var coordOriginY;
2011-08-28 15:58:41 +02:00
if (center) {
if (this._viewPort) {
coordOriginX = -(this._viewPort.width / 2);
coordOriginY = -(this._viewPort.height / 2);
} else {
coordOriginX = -(coordWidth / 2);
coordOriginY = -(coordHeight / 2);
}
2011-07-26 20:07:53 +02:00
} else {
var coordOrigin = workspace.getCoordOrigin();
coordOriginX = coordOrigin.x;
coordOriginY = coordOrigin.y;
}
2009-06-07 20:59:43 +02:00
2011-07-26 20:07:53 +02:00
workspace.setCoordOrigin(coordOriginX, coordOriginY);
// Update screen.
this._screenManager.setOffset(coordOriginX, coordOriginY);
this._screenManager.setScale(zoom);
2011-08-20 15:50:48 +02:00
// Some changes in the screen. Let's fire an update event...
2011-08-22 03:53:37 +02:00
this._screenManager.fireEvent('update');
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
getScreenManager: function () {
2011-07-26 20:07:53 +02:00
return this._screenManager;
},
2015-04-12 05:23:24 +02:00
enableWorkspaceEvents: function (value) {
2011-07-26 20:07:53 +02:00
this._eventsEnabled = value;
},
2015-04-12 05:23:24 +02:00
isWorkspaceEventsEnabled: function () {
2011-07-26 20:07:53 +02:00
return this._eventsEnabled;
},
2015-04-12 05:23:24 +02:00
dumpNativeChart: function () {
return this._workspace.dumpNativeChart();
2011-07-26 20:07:53 +02:00
},
2015-04-12 05:23:24 +02:00
_registerDragEvents: function () {
2011-07-26 20:07:53 +02:00
var workspace = this._workspace;
var screenManager = this._screenManager;
var mWorkspace = this;
2015-04-12 05:23:24 +02:00
var mouseDownListener = function (event) {
2011-08-20 15:50:48 +02:00
if (!$defined(workspace._mouseMoveListener)) {
if (mWorkspace.isWorkspaceEventsEnabled()) {
2011-07-26 20:07:53 +02:00
mWorkspace.enableWorkspaceEvents(false);
2009-06-07 20:59:43 +02:00
2011-07-26 20:07:53 +02:00
var mouseDownPosition = screenManager.getWorkspaceMousePosition(event);
var originalCoordOrigin = workspace.getCoordOrigin();
2009-06-07 20:59:43 +02:00
var wasDragged = false;
2015-04-12 05:23:24 +02:00
workspace._mouseMoveListener = function (event) {
2009-06-07 20:59:43 +02:00
var currentMousePosition = screenManager.getWorkspaceMousePosition(event);
var offsetX = currentMousePosition.x - mouseDownPosition.x;
var coordOriginX = -offsetX + originalCoordOrigin.x;
var offsetY = currentMousePosition.y - mouseDownPosition.y;
var coordOriginY = -offsetY + originalCoordOrigin.y;
workspace.setCoordOrigin(coordOriginX, coordOriginY);
// Change cursor.
2011-08-09 07:27:59 +02:00
if (Browser.firefox) {
2009-06-07 20:59:43 +02:00
window.document.body.style.cursor = "-moz-grabbing";
2011-07-26 20:07:53 +02:00
} else {
2009-06-07 20:59:43 +02:00
window.document.body.style.cursor = "move";
}
2011-07-26 20:07:53 +02:00
event.preventDefault();
// Fire drag event ...
2011-08-22 03:53:37 +02:00
screenManager.fireEvent('update');
wasDragged = true;
2011-08-20 15:50:48 +02:00
2014-12-26 22:07:31 +01:00
};
screenManager.addEvent('mousemove', workspace._mouseMoveListener);
2011-07-26 20:07:53 +02:00
// Register mouse up listeners ...
2015-04-12 05:23:24 +02:00
workspace._mouseUpListener = function (event) {
2011-07-26 20:07:53 +02:00
screenManager.removeEvent('mousemove', workspace._mouseMoveListener);
screenManager.removeEvent('mouseup', workspace._mouseUpListener);
workspace._mouseUpListener = null;
workspace._mouseMoveListener = null;
2011-07-26 20:07:53 +02:00
window.document.body.style.cursor = 'default';
// Update screen manager offset.
var coordOrigin = workspace.getCoordOrigin();
screenManager.setOffset(coordOrigin.x, coordOrigin.y);
mWorkspace.enableWorkspaceEvents(true);
2011-08-20 15:50:48 +02:00
if (!wasDragged) {
2011-08-22 03:53:37 +02:00
screenManager.fireEvent('click');
}
};
screenManager.addEvent('mouseup', workspace._mouseUpListener);
2011-07-26 20:07:53 +02:00
}
} else {
workspace._mouseUpListener();
2009-06-07 20:59:43 +02:00
}
2011-07-26 20:07:53 +02:00
};
screenManager.addEvent('mousedown', mouseDownListener);
},
2015-04-12 05:23:24 +02:00
setViewPort: function (size) {
this._viewPort = size;
2011-07-26 20:07:53 +02:00
}
});
2009-06-07 20:59:43 +02:00