diff --git a/mindplot/src/main/javascript/CentralTopic.js b/mindplot/src/main/javascript/CentralTopic.js index 4ac5040d..e08458c2 100644 --- a/mindplot/src/main/javascript/CentralTopic.js +++ b/mindplot/src/main/javascript/CentralTopic.js @@ -40,20 +40,11 @@ mindplot.CentralTopic = new Class({ return 11; }, - getTopicType:function () { - return mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE; - }, - setCursor:function (type) { type = (type == 'move') ? 'default' : type; this.parent(type); }, - isConnectedToCentralTopic:function () { - return false; - }, - - _defaultShapeType:function () { return mindplot.model.TopicShape.ROUNDED_RECT; }, diff --git a/mindplot/src/main/javascript/Designer.js b/mindplot/src/main/javascript/Designer.js index c8c54296..c071f51b 100644 --- a/mindplot/src/main/javascript/Designer.js +++ b/mindplot/src/main/javascript/Designer.js @@ -116,7 +116,6 @@ mindplot.Designer = new Class({ }, - addEvent:function (type, listener) { if (type == mindplot.TopicEvent.EDIT || type == mindplot.TopicEvent.CLICK) { var editor = mindplot.TopicEventDispatcher.getInstance(); @@ -161,6 +160,48 @@ mindplot.Designer = new Class({ } }.bind(this)); + // Register mouse drag and drop event ... + function noopHandler(evt) { + evt.stopPropagation(); + evt.preventDefault(); + } + + // Enable drag events ... + Element.NativeEvents.dragenter = 2; + Element.NativeEvents.dragexit = 2; + Element.NativeEvents.dragover = 2; + Element.NativeEvents.drop = 2; + + screenManager.addEvent('dragenter', noopHandler); + screenManager.addEvent('dragexit', noopHandler); + screenManager.addEvent('dragover', noopHandler); + screenManager.addEvent('drop', function (evt) { + evt.stopPropagation(); + evt.preventDefault(); +// + var files = evt.event.dataTransfer.files; + console.log(event); + + var count = files.length; + + // Only call the handler if 1 or more files was dropped. + if (count > 0) { + + var model = this.getMindmap().createNode(); + model.setImageSize(80, 43); + model.setMetadata("{'media':'video,'url':'http://www.youtube.com/watch?v=P3FrXftyuzw&feature=g-vrec&context=G2b4ab69RVAAAAAAAAAA'}"); + model.setImageUrl("images/logo-small.png"); + model.setShapeType(mindplot.model.TopicShape.IMAGE); + + var position = screenManager.getWorkspaceMousePosition(evt); + model.setPosition(position.x, position.y); + model.setPosition(100, 100); + + this._actionDispatcher.addTopics([model]); + } + }.bind(this)); + + }, _buildDragManager:function (workspace) { @@ -362,7 +403,7 @@ mindplot.Designer = new Class({ // Exclude central topic .. topics = topics.filter(function (topic) { - return topic.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE + return !topic.isCentralTopic(); }); this._clipboard = topics.map(function (topic) { @@ -692,7 +733,7 @@ mindplot.Designer = new Class({ }, _removeTopic:function (node) { - if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (!node.isCentralTopic()) { var parent = node._parent; node.disconnect(this._workspace); @@ -722,14 +763,14 @@ mindplot.Designer = new Class({ // If there are more than one node selected, $notify($msg('ENTITIES_COULD_NOT_BE_DELETED')); return; - } else if (topics.length == 1 && topics[0].getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + } else if (topics.length == 1 && topics[0].isCentralTopic()) { $notify($msg('CENTRAL_TOPIC_CAN_NOT_BE_DELETED')); return; } // If the central topic has been selected, I must filter ir var topicIds = topics.filter(function (topic) { - return topic.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE + return !topic.isCentralTopic(); }).map(function (topic) { return topic.getId() }); diff --git a/mindplot/src/main/javascript/DesignerKeyboard.js b/mindplot/src/main/javascript/DesignerKeyboard.js index df992657..eefd8d09 100644 --- a/mindplot/src/main/javascript/DesignerKeyboard.js +++ b/mindplot/src/main/javascript/DesignerKeyboard.js @@ -228,7 +228,7 @@ mindplot.DesignerKeyboard = new Class({ 'right':function () { var node = model.selectedTopic(); if (node) { - if (node.getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (node.isCentralTopic()) { this._goToSideChild(designer, node, 'RIGHT'); } else { @@ -248,7 +248,7 @@ mindplot.DesignerKeyboard = new Class({ 'left':function () { var node = model.selectedTopic(); if (node) { - if (node.getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (node.isCentralTopic()) { this._goToSideChild(designer, node, 'LEFT'); } else { @@ -268,7 +268,7 @@ mindplot.DesignerKeyboard = new Class({ 'up':function () { var node = model.selectedTopic(); if (node) { - if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (!node.isCentralTopic()) { this._goToBrother(designer, node, 'UP'); } } else { @@ -280,7 +280,7 @@ mindplot.DesignerKeyboard = new Class({ 'down':function () { var node = model.selectedTopic(); if (node) { - if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (!node.isCentralTopic()) { this._goToBrother(designer, node, 'DOWN'); } } else { diff --git a/mindplot/src/main/javascript/MainTopic.js b/mindplot/src/main/javascript/MainTopic.js index f92920c7..86e6833a 100644 --- a/mindplot/src/main/javascript/MainTopic.js +++ b/mindplot/src/main/javascript/MainTopic.js @@ -1,248 +1,236 @@ -/* - * Copyright [2011] [wisemapping] - * - * 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.MainTopic = new Class({ - Extends:mindplot.Topic, - initialize:function (model, options) { - this.parent(model, options); - }, - - INNER_RECT_ATTRIBUTES:{stroke:'0.5 solid #009900'}, - - _buildDragShape:function () { - var innerShape = this._buildShape(this.INNER_RECT_ATTRIBUTES, this.getShapeType()); - var size = this.getSize(); - innerShape.setSize(size.width, size.height); - innerShape.setPosition(0, 0); - innerShape.setOpacity(0.5); - innerShape.setCursor('default'); - innerShape.setVisibility(true); - - var brColor = this.getBorderColor(); - innerShape.setAttribute("strokeColor", brColor); - - var bgColor = this.getBackgroundColor(); - innerShape.setAttribute("fillColor", bgColor); - - // Create group ... - var groupAttributes = {width:100, height:100, coordSizeWidth:100, coordSizeHeight:100}; - var group = new web2d.Group(groupAttributes); - group.appendChild(innerShape); - - // Add Text ... - if (this.getShapeType() != mindplot.model.TopicShape.IMAGE) { - var textShape = this._buildTextShape(true); - var text = this.getText(); - textShape.setText(text); - textShape.setOpacity(0.5); - group.appendChild(textShape); - } - return group; - }, - - - _defaultShapeType:function () { - return mindplot.model.TopicShape.LINE; - }, - - updateTopicShape:function (targetTopic, workspace) { - // Change figure based on the connected topic ... - var model = this.getModel(); - var shapeType = model.getShapeType(); - if (targetTopic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { - if (!$defined(shapeType)) { - // Get the real shape type ... - shapeType = this.getShapeType(); - this._setShapeType(shapeType, false); - } - } - }, - - disconnect:function (workspace) { - this.parent(workspace); - var size = this.getSize(); - - var model = this.getModel(); - var shapeType = model.getShapeType(); - if (!$defined(shapeType)) { - // Change figure ... - shapeType = this.getShapeType(); - this._setShapeType(mindplot.model.TopicShape.ROUNDED_RECT, false); - } - var innerShape = this.getInnerShape(); - innerShape.setVisibility(true); - }, - - getTopicType:function () { - return "MainTopic"; - }, - - _updatePositionOnChangeSize:function (oldSize, newSize) { - - var xOffset = Math.round((newSize.width - oldSize.width) / 2); - var pos = this.getPosition(); - if ($defined(pos)) { - if (pos.x > 0) { - pos.x = pos.x + xOffset; - } else { - pos.x = pos.x - xOffset; - } - this.setPosition(pos); - } - }, - - workoutIncomingConnectionPoint:function (sourcePosition) { - $assert(sourcePosition, 'sourcePoint can not be null'); - var pos = this.getPosition(); - var size = this.getSize(); - - var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos); - var result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight); - if (this.getShapeType() == mindplot.model.TopicShape.LINE) { - result.y = result.y + (this.getSize().height / 2); - } - - // Move a little the position... - var offset = mindplot.Topic.CONNECTOR_WIDTH / 2; - if (this.getPosition().x > 0) { - result.x = result.x + offset; - } else { - result.x = result.x - offset; - } - - result.x = Math.ceil(result.x); - result.y = Math.ceil(result.y); - return result; - - }, - - workoutOutgoingConnectionPoint:function (targetPosition) { - $assert(targetPosition, 'targetPoint can not be null'); - var pos = this.getPosition(); - var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos); - var size = this.getSize(); - - var result; - if (this.getShapeType() == mindplot.model.TopicShape.LINE) { - - result = new core.Point(); - var groupPosition = this._elem2d.getPosition(); - var innerShareSize = this.getInnerShape().getSize(); - - if (innerShareSize) { - var magicCorrectionNumber = 0.3; - if (!isAtRight) { - result.x = groupPosition.x + innerShareSize.width - magicCorrectionNumber; - } else { - result.x = groupPosition.x + magicCorrectionNumber; - } - result.y = groupPosition.y + innerShareSize.height; - } else { - // Hack: When the size has not being defined. This is because the node has not being added. - // Try to do our best ... - if (!isAtRight) { - result.x = pos.x + (size.width / 2); - } else { - result.x = pos.x - (size.width / 2); - } - result.y = pos.y + (size.height / 2); - } - - } else { - result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true); - } - return result; - }, - - _getInnerPadding:function () { - var result; - var parent = this.getModel().getParent(); - if (parent && mindplot.model.INodeModel.MAIN_TOPIC_TYPE == parent.getType()) { - result = 3; - } - else { - result = 4; - } - return result; - }, - - isConnectedToCentralTopic:function () { - var model = this.getModel(); - var parent = model.getParent(); - - return parent && parent.getType() === mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE; - }, - - _defaultText:function () { - var targetTopic = this.getOutgoingConnectedTopic(); - var result = ""; - if ($defined(targetTopic)) { - if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { - result = $msg('MAIN_TOPIC'); - } else { - result = $msg('SUB_TOPIC'); - } - } else { - result = $msg('ISOLATED_TOPIC'); - ; - } - return result; - }, - - _defaultFontStyle:function () { - var targetTopic = this.getOutgoingConnectedTopic(); - var result; - if ($defined(targetTopic)) { - if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { - result = { - font:"Arial", - size:8, - style:"normal", - weight:"normal", - color:"rgb(82,92,97)" - }; - } else { - result = { - font:"Arial", - size:6, - style:"normal", - weight:"normal", - color:"rgb(82,92,97)" - }; - } - } else { - result = { - font:"Verdana", - size:8, - style:"normal", - weight:"normal", - color:"rgb(82,92,97)" - }; - } - return result; - }, - - _defaultBackgroundColor:function () { - return "rgb(224,229,239)"; - }, - - _defaultBorderColor:function () { - return 'rgb(2,59,185)'; - } - +/* + * Copyright [2011] [wisemapping] + * + * 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.MainTopic = new Class({ + Extends:mindplot.Topic, + initialize:function (model, options) { + this.parent(model, options); + }, + + INNER_RECT_ATTRIBUTES:{stroke:'0.5 solid #009900'}, + + _buildDragShape:function () { + var innerShape = this._buildShape(this.INNER_RECT_ATTRIBUTES, this.getShapeType()); + var size = this.getSize(); + innerShape.setSize(size.width, size.height); + innerShape.setPosition(0, 0); + innerShape.setOpacity(0.5); + innerShape.setCursor('default'); + innerShape.setVisibility(true); + + var brColor = this.getBorderColor(); + innerShape.setAttribute("strokeColor", brColor); + + var bgColor = this.getBackgroundColor(); + innerShape.setAttribute("fillColor", bgColor); + + // Create group ... + var groupAttributes = {width:100, height:100, coordSizeWidth:100, coordSizeHeight:100}; + var group = new web2d.Group(groupAttributes); + group.appendChild(innerShape); + + // Add Text ... + if (this.getShapeType() != mindplot.model.TopicShape.IMAGE) { + var textShape = this._buildTextShape(true); + var text = this.getText(); + textShape.setText(text); + textShape.setOpacity(0.5); + group.appendChild(textShape); + } + return group; + }, + + + _defaultShapeType:function () { + return mindplot.model.TopicShape.LINE; + }, + + updateTopicShape:function (targetTopic, workspace) { + // Change figure based on the connected topic ... + var model = this.getModel(); + var shapeType = model.getShapeType(); + if (targetTopic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + if (!$defined(shapeType)) { + // Get the real shape type ... + shapeType = this.getShapeType(); + this._setShapeType(shapeType, false); + } + } + }, + + disconnect:function (workspace) { + this.parent(workspace); + var size = this.getSize(); + + var model = this.getModel(); + var shapeType = model.getShapeType(); + if (!$defined(shapeType)) { + // Change figure ... + shapeType = this.getShapeType(); + this._setShapeType(mindplot.model.TopicShape.ROUNDED_RECT, false); + } + var innerShape = this.getInnerShape(); + innerShape.setVisibility(true); + }, + + _updatePositionOnChangeSize:function (oldSize, newSize) { + + var xOffset = Math.round((newSize.width - oldSize.width) / 2); + var pos = this.getPosition(); + if ($defined(pos)) { + if (pos.x > 0) { + pos.x = pos.x + xOffset; + } else { + pos.x = pos.x - xOffset; + } + this.setPosition(pos); + } + }, + + workoutIncomingConnectionPoint:function (sourcePosition) { + $assert(sourcePosition, 'sourcePoint can not be null'); + var pos = this.getPosition(); + var size = this.getSize(); + + var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos); + var result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight); + if (this.getShapeType() == mindplot.model.TopicShape.LINE) { + result.y = result.y + (this.getSize().height / 2); + } + + // Move a little the position... + var offset = mindplot.Topic.CONNECTOR_WIDTH / 2; + if (this.getPosition().x > 0) { + result.x = result.x + offset; + } else { + result.x = result.x - offset; + } + + result.x = Math.ceil(result.x); + result.y = Math.ceil(result.y); + return result; + + }, + + workoutOutgoingConnectionPoint:function (targetPosition) { + $assert(targetPosition, 'targetPoint can not be null'); + var pos = this.getPosition(); + var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos); + var size = this.getSize(); + + var result; + if (this.getShapeType() == mindplot.model.TopicShape.LINE) { + + result = new core.Point(); + var groupPosition = this._elem2d.getPosition(); + var innerShareSize = this.getInnerShape().getSize(); + + if (innerShareSize) { + var magicCorrectionNumber = 0.3; + if (!isAtRight) { + result.x = groupPosition.x + innerShareSize.width - magicCorrectionNumber; + } else { + result.x = groupPosition.x + magicCorrectionNumber; + } + result.y = groupPosition.y + innerShareSize.height; + } else { + // Hack: When the size has not being defined. This is because the node has not being added. + // Try to do our best ... + if (!isAtRight) { + result.x = pos.x + (size.width / 2); + } else { + result.x = pos.x - (size.width / 2); + } + result.y = pos.y + (size.height / 2); + } + + } else { + result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true); + } + return result; + }, + + _getInnerPadding:function () { + var result; + var parent = this.getModel().getParent(); + if (parent && mindplot.model.INodeModel.MAIN_TOPIC_TYPE == parent.getType()) { + result = 3; + } + else { + result = 4; + } + return result; + }, + + _defaultText:function () { + var targetTopic = this.getOutgoingConnectedTopic(); + var result = ""; + if ($defined(targetTopic)) { + if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + result = $msg('MAIN_TOPIC'); + } else { + result = $msg('SUB_TOPIC'); + } + } else { + result = $msg('ISOLATED_TOPIC'); + } + return result; + }, + + _defaultFontStyle:function () { + var targetTopic = this.getOutgoingConnectedTopic(); + var result; + if ($defined(targetTopic)) { + if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) { + result = { + font:"Arial", + size:8, + style:"normal", + weight:"normal", + color:"rgb(82,92,97)" + }; + } else { + result = { + font:"Arial", + size:6, + style:"normal", + weight:"normal", + color:"rgb(82,92,97)" + }; + } + } else { + result = { + font:"Verdana", + size:8, + style:"normal", + weight:"normal", + color:"rgb(82,92,97)" + }; + } + return result; + }, + + _defaultBackgroundColor:function () { + return "rgb(224,229,239)"; + }, + + _defaultBorderColor:function () { + return 'rgb(2,59,185)'; + } + }); \ No newline at end of file diff --git a/mindplot/src/main/javascript/Topic.js b/mindplot/src/main/javascript/Topic.js index 17d4c29e..fc9317e6 100644 --- a/mindplot/src/main/javascript/Topic.js +++ b/mindplot/src/main/javascript/Topic.js @@ -1216,7 +1216,13 @@ mindplot.Topic = new Class({ } } return result; + }, + + isCentralTopic:function () { + return this.getModel().getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE; } + + });