diff --git a/core-js/pom.xml b/core-js/pom.xml index f899e925..d9008d1b 100644 --- a/core-js/pom.xml +++ b/core-js/pom.xml @@ -58,6 +58,7 @@ ${basedir}/target/tmp/Utils-min.js ${basedir}/target/tmp/WaitDialog-min.js ${basedir}/target/tmp/footer-min.js + ${basedir}/target/tmp/Executor-min.js diff --git a/core-js/src/main/javascript/Executor.js b/core-js/src/main/javascript/Executor.js new file mode 100644 index 00000000..569777c2 --- /dev/null +++ b/core-js/src/main/javascript/Executor.js @@ -0,0 +1,55 @@ +/* +* 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. + */ + +/** + * I need this class to clean up things after loading has finished. Without this, async functions at startup are a + * nightmare. + */ + +core.Executor = new Class({ + options:{ + isLoading:true + }, + initialize:function(options){ + this._pendingFunctions=[]; + }, + setLoading:function(isLoading){ + this.options.isLoading = isLoading; + if(!isLoading){ + this._pendingFunctions.forEach(function(item){ + var result = item.fn.attempt(item.args, item.bind); + core.assert(result, "execution failed"); + }); + this._pendingFunctions=[]; + } + }, + isLoading:function(){ + return this.options.isLoading; + }, + delay:function(fn, delay, bind, args){ + if(this.options.isLoading){ + this._pendingFunctions.push({fn:fn, bind:bind, args:args}); + } + else{ + fn.delay(delay, bind, args); + } + } + +}); + +core.Executor.instance = new core.Executor(); \ No newline at end of file diff --git a/core-js/src/main/javascript/Utils.js b/core-js/src/main/javascript/Utils.js index 4ff9f160..c2830810 100644 --- a/core-js/src/main/javascript/Utils.js +++ b/core-js/src/main/javascript/Utils.js @@ -318,6 +318,47 @@ core.Utils.animateVisibility = function (elems, isVisible, doneFn){ _fadeEffect =fadeEffect.periodical(10); }; +core.Utils.animatePosition = function (elems, doneFn, designer){ + var _moveEffect = null; + var i = 10; + var step = 10; + var moveEffect = function (){ + if(i>0){ + var keys = elems.keys(); + for(var j = 0; j + @@ -126,6 +127,8 @@ files="commands/MoveControlPointCommand.js"/> + Icon-min.js LinkIcon-min.js Note-min.js + ActionIcon-min.js ImageIcon-min.js IconModel-min.js LinkModel-min.js @@ -244,6 +248,7 @@ commands/AddRelationshipCommand-min.js commands/MoveControlPointCommand-min.js commands/freeMind/DragTopicCommand-min.js + commands/freeMind/ReconnectTopicCommand-min.js layoutManagers/boards/Board-min.js layoutManagers/boards/freeMindBoards/Board-min.js diff --git a/mindplot/src/main/javascript/ActionIcon.js b/mindplot/src/main/javascript/ActionIcon.js new file mode 100644 index 00000000..43ef8a03 --- /dev/null +++ b/mindplot/src/main/javascript/ActionIcon.js @@ -0,0 +1,66 @@ +/* +* 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.ActionIcon = function(topic, url) { + mindplot.Icon.call(this, url); + this._node = topic; +}; + +objects.extend(mindplot.ActionIcon, mindplot.Icon); + +mindplot.ActionIcon.prototype.initialize = function() { + +}; + +mindplot.ActionIcon.prototype.getNode = function(){ + return this._node; +}; + +mindplot.ActionIcon.prototype.setPosition = function(x,y){ + var size = this.getSize(); + this.getImage().setPosition(x-size.width/2, y-size.height/2); +}; + +mindplot.ActionIcon.prototype.addEventListener = function(event, fn){ + this.getImage().addEventListener(event, fn); +}; + +mindplot.ActionIcon.prototype.addToGroup = function(group){ + group.appendChild(this.getImage()); +}; + +mindplot.ActionIcon.prototype.setVisibility = function(visible){ + this.getImage().setVisibility(visible); +}; + +mindplot.ActionIcon.prototype.isVisible = function(){ + return this.getImage().isVisible(); +}; + +mindplot.ActionIcon.prototype.setCursor = function(cursor){ + return this.getImage().setCursor(cursor); +}; + +mindplot.ActionIcon.prototype.moveToBack = function(cursor){ + return this.getImage().moveToBack(cursor); +}; + +mindplot.ActionIcon.prototype.moveToFront = function(cursor){ + return this.getImage().moveToFront(cursor); +}; + diff --git a/mindplot/src/main/javascript/CentralTopic.js b/mindplot/src/main/javascript/CentralTopic.js index b599f2b4..d1f25f3a 100644 --- a/mindplot/src/main/javascript/CentralTopic.js +++ b/mindplot/src/main/javascript/CentralTopic.js @@ -48,29 +48,30 @@ mindplot.CentralTopic.prototype.isConnectedToCentralTopic = function() return false; }; -mindplot.CentralTopic.prototype.createChildModel = function() +mindplot.CentralTopic.prototype.createChildModel = function(prepositionate) { // Create a new node ... var model = this.getModel(); var mindmap = model.getMindmap(); var childModel = mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE); - if (!core.Utils.isDefined(this.___siblingDirection)) - { - this.___siblingDirection = 1; + if(prepositionate){ + if (!core.Utils.isDefined(this.___siblingDirection)) + { + this.___siblingDirection = 1; + } + + // Positionate following taking into account this internal flag ... + if (this.___siblingDirection == 1) + { + + childModel.setPosition(100, 0); + } else + { + childModel.setPosition(-100, 0); + } + this.___siblingDirection = -this.___siblingDirection; } - - // Positionate following taking into account this internal flag ... - if (this.___siblingDirection == 1) - { - - childModel.setPosition(100, 0); - } else - { - childModel.setPosition(-100, 0); - } - this.___siblingDirection = -this.___siblingDirection; - // Create a new node ... childModel.setOrder(0); diff --git a/mindplot/src/main/javascript/ConnectionLine.js b/mindplot/src/main/javascript/ConnectionLine.js index 55622b7f..ce94b41a 100644 --- a/mindplot/src/main/javascript/ConnectionLine.js +++ b/mindplot/src/main/javascript/ConnectionLine.js @@ -204,6 +204,14 @@ mindplot.ConnectionLine.prototype.getId = function(){ return this._model.getId(); }; +mindplot.ConnectionLine.prototype.moveToBack = function(){ + this._line2d.moveToBack(); +}; + +mindplot.ConnectionLine.prototype.moveToFront = function(){ + this._line2d.moveToFront(); +}; + mindplot.ConnectionLine.SIMPLE=0; mindplot.ConnectionLine.POLYLINE=1; mindplot.ConnectionLine.CURVED=2; diff --git a/mindplot/src/main/javascript/EditorOptions.js b/mindplot/src/main/javascript/EditorOptions.js index 076ba379..ed615fe1 100644 --- a/mindplot/src/main/javascript/EditorOptions.js +++ b/mindplot/src/main/javascript/EditorOptions.js @@ -1,5 +1,5 @@ mindplot.EditorOptions = { - LayoutManager:"OriginalLayout" - // LayoutManager:"FreeMindLayout" +// LayoutManager:"OriginalLayout" + LayoutManager:"FreeMindLayout" }; \ No newline at end of file diff --git a/mindplot/src/main/javascript/EventBus.js b/mindplot/src/main/javascript/EventBus.js index 10684fff..8e62efd0 100644 --- a/mindplot/src/main/javascript/EventBus.js +++ b/mindplot/src/main/javascript/EventBus.js @@ -16,7 +16,10 @@ mindplot.EventBus.events ={ NodeMoveEvent:'NodeMoveEvent', NodeDisconnectEvent:'NodeDisconnectEvent', NodeConnectEvent:'NodeConnectEvent', - NodeRepositionateEvent:'NodeRepositionateEvent' + NodeRepositionateEvent:'NodeRepositionateEvent', + NodeShrinkEvent:'NodeShrinkEvent', + NodeMouseOverEvent:'NodeMouseOverEvent', + NodeMouseOutEvent:'NodeMouseOutEvent' }; mindplot.EventBus.instance = new mindplot.EventBus(); \ No newline at end of file diff --git a/mindplot/src/main/javascript/MainTopic.js b/mindplot/src/main/javascript/MainTopic.js index 0dcd5d91..df198905 100644 --- a/mindplot/src/main/javascript/MainTopic.js +++ b/mindplot/src/main/javascript/MainTopic.js @@ -27,7 +27,7 @@ objects.extend(mindplot.MainTopic, mindplot.Topic); mindplot.MainTopic.prototype.INNER_RECT_ATTRIBUTES = {stroke:'0.5 solid #009900'}; -mindplot.MainTopic.prototype.createSiblingModel = function() +mindplot.MainTopic.prototype.createSiblingModel = function(positionate) { var siblingModel = null; var parentTopic = this.getOutgoingConnectedTopic(); @@ -39,7 +39,7 @@ mindplot.MainTopic.prototype.createSiblingModel = function() siblingModel = mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE); // Positionate following taking into account the sibling positon. - if (parentTopic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) + if (positionate && parentTopic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { var pos = this.getPosition(); siblingModel.setPosition(pos.x, pos.y); @@ -52,7 +52,7 @@ mindplot.MainTopic.prototype.createSiblingModel = function() return siblingModel; }; -mindplot.MainTopic.prototype.createChildModel = function() +mindplot.MainTopic.prototype.createChildModel = function(prepositionate) { // Create a new node ... var model = this.getModel(); @@ -150,6 +150,9 @@ mindplot.MainTopic.prototype.updateTopicShape = function(targetTopic, workspace) var innerShape = this.getInnerShape(); innerShape.setVisibility(true); } + this._helpers.forEach(function(helper){ + helper.moveToFront(); + }); }; mindplot.MainTopic.prototype.disconnect = function(workspace) @@ -177,7 +180,7 @@ mindplot.MainTopic.prototype.getTopicType = function() mindplot.MainTopic.prototype._updatePositionOnChangeSize = function(oldSize, newSize, updatePosition) { - if(!updatePosition && this.getModel().getFinalPosition()){ + if(updatePosition==false && this.getModel().getFinalPosition()){ this.setPosition(this.getModel().getFinalPosition(), false); } else{ diff --git a/mindplot/src/main/javascript/MindmapDesigner.js b/mindplot/src/main/javascript/MindmapDesigner.js index 03624b08..536db1a2 100644 --- a/mindplot/src/main/javascript/MindmapDesigner.js +++ b/mindplot/src/main/javascript/MindmapDesigner.js @@ -128,6 +128,8 @@ mindplot.MindmapDesigner.prototype._buildNodeGraph = function(model) // Create node graph ... var topic = mindplot.NodeGraph.create(model); + this._layoutManager.addHelpers(topic); + // Append it to the workspace ... var topics = this._topics; topics.push(topic); @@ -231,7 +233,7 @@ mindplot.MindmapDesigner.prototype.createChildForSelectedNode = function() // Add new node ... var centalTopic = nodes[0]; var parentTopicId = centalTopic.getId(); - var childModel = centalTopic.createChildModel(); + var childModel = centalTopic.createChildModel(this._layoutManager.needsPrepositioning()); var command = new mindplot.commands.AddTopicCommand(childModel, parentTopicId, true); this._actionRunner.execute(command); @@ -263,7 +265,7 @@ mindplot.MindmapDesigner.prototype.createSiblingForSelectedNode = function() } else { var parentTopic = topic.getOutgoingConnectedTopic(); - var siblingModel = topic.createSiblingModel(); + var siblingModel = topic.createSiblingModel(this._layoutManager.needsPrepositioning()); var parentTopicId = parentTopic.getId(); var command = new mindplot.commands.AddTopicCommand(siblingModel, parentTopicId, true); @@ -425,6 +427,10 @@ mindplot.MindmapDesigner.prototype._loadMap = function(mapId, mindmapModel) var relationship = this._relationshipModelToRelationship(relationships[j]); } } + core.Executor.instance.setLoading(false); + this._getTopics().forEach(function(topic){ + delete topic.getModel()._finalPosition; + }); this._fireEvent("loadsuccess"); }; @@ -455,24 +461,7 @@ mindplot.MindmapDesigner.prototype._nodeModelToNodeGraph = function(nodeModel, i var children = nodeModel.getChildren().slice(); - // Sort children by order to solve adding order in for OriginalLayoutManager... - if (this._layoutManager.getClassName() == mindplot.layoutManagers.OriginalLayoutManager.NAME && nodeGraph.getTopicType()!=mindplot.NodeModel.CENTRAL_TOPIC_TYPE && children.length > 0) - { - var oldChildren = children; - children = []; - for (var i = 0; i < oldChildren.length; i++) - { - var child = oldChildren[i]; - var order = child.getOrder(); - if (order != null) - { - children[order] = child; - } else - { - children.push(child); - } - } - } + children = this._layoutManager.prepareChildrenList(nodeGraph, children); for (var i = 0; i < children.length; i++) { @@ -632,10 +621,11 @@ mindplot.MindmapDesigner.prototype.setFont2SelectedNode = function(font) var result = topic.getFontFamily(); topic.setFontFamily(font, true); - var updated = function() { + core.Executor.instance.delay(topic.updateNode, 0,topic); + /*var updated = function() { topic.updateNode(); }; - updated.delay(0); + updated.delay(0);*/ return result; } var command = new mindplot.commands.GenericFunctionCommand(commandFunc, font, topicsIds); @@ -784,10 +774,11 @@ mindplot.MindmapDesigner.prototype.setFontSize2SelectedNode = function(size) var result = topic.getFontSize(); topic.setFontSize(size, true); - var updated = function() { + core.Executor.instance.delay(topic.updateNode, 0,topic); + /*var updated = function() { topic.updateNode(); }; - updated.delay(0); + updated.delay(0);*/ return result; } var command = new mindplot.commands.GenericFunctionCommand(commandFunc, size, topicsIds); @@ -830,10 +821,11 @@ mindplot.MindmapDesigner.prototype.setWeight2SelectedNode = function() var weight = (result == "bold") ? "normal" : "bold"; topic.setFontWeight(weight, true); - var updated = function() { + core.Executor.instance.delay(topic.updateNode, 0,topic); + /*var updated = function() { topic.updateNode(); }; - updated.delay(0); + updated.delay(0);*/ return result; } var command = new mindplot.commands.GenericFunctionCommand(commandFunc, "", topicsIds); @@ -984,7 +976,8 @@ mindplot.MindmapDesigner.prototype.removeLastImageFromSelectedNode = function() { var elem = nodes[0]; elem.removeLastIcon(this); - var executor = function(editor) + core.Executor.instance.delay(elem.updateNode, 0,elem); + /*var executor = function(editor) { return function() { @@ -992,7 +985,7 @@ mindplot.MindmapDesigner.prototype.removeLastImageFromSelectedNode = function() }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ } }; diff --git a/mindplot/src/main/javascript/ShrinkConnector.js b/mindplot/src/main/javascript/ShrinkConnector.js index 55cc860f..0c15ec66 100644 --- a/mindplot/src/main/javascript/ShrinkConnector.js +++ b/mindplot/src/main/javascript/ShrinkConnector.js @@ -120,3 +120,13 @@ mindplot.ShirinkConnector.prototype.setPosition = function(x, y) { this._elipse.setPosition(x, y); } + +mindplot.ShirinkConnector.prototype.moveToBack = function() +{ + this._elipse.moveToBack(); +} + +mindplot.ShirinkConnector.prototype.moveToFront = function() +{ + this._elipse.moveToFront(); +} diff --git a/mindplot/src/main/javascript/Topic.js b/mindplot/src/main/javascript/Topic.js index 26f31c0e..5de53ad0 100644 --- a/mindplot/src/main/javascript/Topic.js +++ b/mindplot/src/main/javascript/Topic.js @@ -31,6 +31,7 @@ mindplot.Topic.prototype.initialize = function() this._lastIconId = -1; this._relationships = []; this._isInWorkspace = false; + this._helpers = []; this._buildShape(); this.setMouseEventsEnabled(true); @@ -75,7 +76,7 @@ mindplot.Topic.prototype._setShapeType = function(type, updateModel) innerShape = this.getInnerShape(); //Let's register all the events. The first one is the default one. The others will be copied. - this._registerDefaultListenersToElement(innerShape, this); + //this._registerDefaultListenersToElement(innerShape, this); var dispatcher = dispatcherByEventType['mousedown']; if(dispatcher) @@ -389,7 +390,7 @@ mindplot.Topic.prototype.removeLink = function(){ } this._link=null; this._hasLink=false; -} +}; mindplot.Topic.prototype.removeNote = function(){ var model = this.getModel(); @@ -404,7 +405,7 @@ mindplot.Topic.prototype.removeNote = function(){ this._icon=null; } } - var elem = this; + /*var elem = this; var executor = function(editor) { return function() @@ -413,10 +414,11 @@ mindplot.Topic.prototype.removeNote = function(){ }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ + core.Executor.instance.delay(this.updateNode, 0,this); this._note=null; this._hasNote=false; -} +}; mindplot.Topic.prototype.addRelationship = function(relationship){ this._relationships.push(relationship); @@ -511,7 +513,7 @@ mindplot.Topic.prototype.setFontFamily = function(value, updateModel) var model = this.getModel(); model.setFontFamily(value); } - var elem = this; + /*var elem = this; var executor = function(editor) { return function() @@ -520,7 +522,8 @@ mindplot.Topic.prototype.setFontFamily = function(value, updateModel) }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ + core.Executor.instance.delay(this.updateNode, 0,this, [updateModel]); }; mindplot.Topic.prototype.setFontSize = function(value, updateModel) @@ -532,7 +535,7 @@ mindplot.Topic.prototype.setFontSize = function(value, updateModel) var model = this.getModel(); model.setFontSize(value); } - var elem = this; + /*var elem = this; var executor = function(editor) { return function() @@ -541,7 +544,8 @@ mindplot.Topic.prototype.setFontSize = function(value, updateModel) }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ + core.Executor.instance.delay(this.updateNode, 0,this, [updateModel]); }; @@ -554,7 +558,7 @@ mindplot.Topic.prototype.setFontStyle = function(value, updateModel) var model = this.getModel(); model.setFontStyle(value); } - var elem = this; + /*var elem = this; var executor = function(editor) { return function() @@ -563,7 +567,8 @@ mindplot.Topic.prototype.setFontStyle = function(value, updateModel) }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ + core.Executor.instance.delay(this.updateNode, 0,this, [updateModel]); }; mindplot.Topic.prototype.setFontWeight = function(value, updateModel) @@ -652,7 +657,7 @@ mindplot.Topic.prototype._setText = function(text, updateModel) { var textShape = this.getTextShape(); textShape.setText(text); - var elem = this; + /*var elem = this; var executor = function(editor) { return function() @@ -661,7 +666,8 @@ mindplot.Topic.prototype._setText = function(text, updateModel) }; }; - setTimeout(executor(this), 0); + setTimeout(executor(this), 0);*/ + core.Executor.instance.delay(this.updateNode, 0,this, [updateModel]); if (updateModel) { @@ -782,9 +788,9 @@ mindplot.Topic.prototype._buildShape = function() } // Register listeners ... - this._registerDefaultListenersToElement(outerShape, this); - this._registerDefaultListenersToElement(innerShape, this); - this._registerDefaultListenersToElement(textShape, this); + this._registerDefaultListenersToElement(group, this); +// this._registerDefaultListenersToElement(innerShape, this); +// this._registerDefaultListenersToElement(textShape, this); }; @@ -848,6 +854,7 @@ mindplot.Topic.prototype.setChildrenShrinked = function(value) // Hide children ... core.Utils.setChildrenVisibilityAnimated(this, !value); + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeShrinkEvent,[this]); }; mindplot.Topic.prototype.getShrinkConnector = function() @@ -867,6 +874,7 @@ mindplot.Topic.prototype.handleMouseOver = function(event) { var outerShape = this.getOuterShape(); outerShape.setOpacity(1); + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOverEvent,[this]); }; mindplot.Topic.prototype.handleMouseOut = function(event) @@ -876,6 +884,7 @@ mindplot.Topic.prototype.handleMouseOut = function(event) { outerShape.setOpacity(0); } + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOutEvent,[this]); }; /** @@ -984,6 +993,40 @@ mindplot.Topic.prototype.setVisibility = function(value) this._setRelationshipLinesVisibility(value); }; +mindplot.Topic.prototype.moveToBack = function(){ +// this._helpers.forEach(function(helper, index){ +// helper.moveToBack(); +// }); + this.get2DElement().moveToBack(); + var outgoingLine = this.getOutgoingLine(); + + var connector = this.getShrinkConnector(); + if(connector){ + connector.moveToBack(); + } + + if(outgoingLine){ + outgoingLine.moveToBack(); + } + +}; + +mindplot.Topic.prototype.moveToFront = function(){ + + var outgoingLine = this.getOutgoingLine(); + if(outgoingLine){ + outgoingLine.moveToFront(); + } + var connector = this.getShrinkConnector(); + if(connector){ + connector.moveToFront(); + } + this.get2DElement().moveToFront(); +// this._helpers.forEach(function(helper, index){ +// helper.moveToFront(); +// }); +}; + mindplot.Topic.prototype.isVisible = function(){ var elem = this.get2DElement(); return elem.isVisible(); @@ -1066,14 +1109,36 @@ mindplot.Topic.prototype.addEventListener = function(type, listener) type = 'mousedown'; } - var textShape = this.getTextShape(); + /* var textShape = this.getTextShape(); textShape.addEventListener(type, listener); var outerShape = this.getOuterShape(); outerShape.addEventListener(type, listener); var innerShape = this.getInnerShape(); - innerShape.addEventListener(type, listener); + innerShape.addEventListener(type, listener);*/ + var shape = this.get2DElement(); + shape.addEventListener(type, listener); +}; + +mindplot.Topic.prototype.removeEventListener = function(type, listener) +{ + // Translate to web 2d events ... + if (type == 'onfocus') + { + type = 'mousedown'; + } + /*var textShape = this.getTextShape(); + textShape.removeEventListener(type, listener); + + var outerShape = this.getOuterShape(); + outerShape.removeEventListener(type, listener); + + var innerShape = this.getInnerShape(); + innerShape.removeEventListener(type, listener);*/ + + var shape = this.get2DElement(); + shape.removeEventListener(type, listener); }; @@ -1181,6 +1246,18 @@ mindplot.Topic.prototype.connectTo = function(targetTopic, workspace, isVisible) core.assert(targetTopic, 'Parent Graph can not be null'); core.assert(workspace, 'Workspace can not be null'); + // Connect Graphical Nodes ... + targetTopic._appendChild(this); + this._parent = targetTopic; + +// Update model ... + var targetModel = targetTopic.getModel(); + var childModel = this.getModel(); + childModel.connectTo(targetModel); + +// Update topic position based on the state ... + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent,[targetTopic, this]); + // Create a connection line ... var outgoingLine = new mindplot.ConnectionLine(this, targetTopic); if(core.Utils.isDefined(isVisible)) @@ -1188,15 +1265,6 @@ mindplot.Topic.prototype.connectTo = function(targetTopic, workspace, isVisible) this._outgoingLine = outgoingLine; workspace.appendChild(outgoingLine); - // Connect Graphical Nodes ... - targetTopic._appendChild(this); - this._parent = targetTopic; - - // Update model ... - var targetModel = targetTopic.getModel(); - var childModel = this.getModel(); - childModel.connectTo(targetModel); - // Update figure is necessary. this.updateTopicShape(targetTopic); @@ -1214,9 +1282,6 @@ mindplot.Topic.prototype.connectTo = function(targetTopic, workspace, isVisible) } var textShape = this.getTextShape(); - // Update topic position based on the state ... - mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent,[targetTopic, this]); - // Display connection node... var connector = targetTopic.getShrinkConnector(); connector.setVisibility(true); @@ -1312,3 +1377,8 @@ mindplot.Topic.prototype.updateNode = function(updatePosition) iconGroup.updateIconGroupPosition(); } }; + +mindplot.Topic.prototype.addHelper = function(helper){ + helper.addToGroup(this.get2DElement()); + this._helpers.push(helper); +}; \ No newline at end of file diff --git a/mindplot/src/main/javascript/commands/freeMind/ReconnectTopicCommand.js b/mindplot/src/main/javascript/commands/freeMind/ReconnectTopicCommand.js new file mode 100644 index 00000000..e4b710c3 --- /dev/null +++ b/mindplot/src/main/javascript/commands/freeMind/ReconnectTopicCommand.js @@ -0,0 +1,103 @@ +/* +* 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.commands.freeMind.ReconnectTopicCommand = mindplot.Command.extend( +{ + initialize: function() + { + this._modifiedTopics=null; + this._id = mindplot.Command._nextUUID(); + this._node = null; + this._targetNode = null; + this._relationship = null; + this._oldParent = null; + }, + execute: function(commandContext) + { + var node = commandContext.findTopics(parseInt(this._node))[0]; + var targetNode = commandContext.findTopics(parseInt(this._targetNode))[0]; + var keys = this._modifiedTopics.keys(); + for(var i=0; in2.getPosition().y; + }); + return result; + }, registerListenersOnNode : function(topic) { var id = topic.getId(); @@ -23,7 +43,7 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo // Add drag behaviour ... if (topic.getType() != mindplot.NodeModel.CENTRAL_TOPIC_TYPE) { - topic.addEventListener("mousedown",this._mousedownListener.bindWithEvent(this,[topic])); + topic.addEventListener("mousedown",this._reconnectMouseDownListener.bindWithEvent(this,[topic])); } // Register editor events ... @@ -57,7 +77,10 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo var screen = workSpace.getScreenManager(); // Set initial position. - // var mousePos = screen.getWorkspaceMousePosition(event); + this._mouseInitialPos = screen.getWorkspaceMousePosition(event); + var pos = topic.getPosition(); + this._mouseInitialPos.x = 0; + this._mouseInitialPos.y = pos.y - Math.round(this._mouseInitialPos.y); this._isMovingNode=false; @@ -78,6 +101,8 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo this._isMovingNode=true; var screen = this._designer.getWorkSpace().getScreenManager(); var nodePos = node.getPosition().clone(); + nodePos.x-=this._mouseInitialPos.x; + nodePos.y-=this._mouseInitialPos.y; var pos = screen.getWorkspaceMousePosition(event); pos.x = Math.round(pos.x); pos.y = Math.round(pos.y); @@ -92,7 +117,6 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo var parentBoard = this.getTopicBoardForTopic(node.getParent()); var entryObj = parentBoard.findNodeEntryIndex(node); var entry = entryObj.table[entryObj.index]; - //.removeTopicFromBoard(node,this._modifiedTopics); parentBoard._removeEntry(node, entryObj.table, entryObj.index, this._modifiedTopics); this._changeChildrenSide(node, pos, this._modifiedTopics); node.setPosition(pos.clone(), false); @@ -106,7 +130,6 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo entryObj = parentBoard.findNewNodeEntryIndex(entry); parentBoard._addEntry(entry, entryObj.table, entryObj.index); parentBoard._updateTable(entryObj.index, entryObj.table, this._modifiedTopics, true); - //this.getTopicBoardForTopic(node.getParent()).addBranch(node,this._modifiedTopics); } this._isMovingNode=false; @@ -119,16 +142,16 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo var refPos = node.getPosition(); for( var i = 0 ; i< children.length ; i++){ var child = children[i]; - this._changeChildrenSide(child); - var childPos = child.getPosition(); + var childPos = child.getPosition().clone(); var oldPos=childPos.clone(); childPos.x = newPos.x +(childPos.x - refPos.x)*-1; childPos.y = newPos.y +(childPos.y - refPos.y); + this._changeChildrenSide(child, childPos, modifiedTopics); child.setPosition(childPos, false); if(modifiedTopics.set){ var key = node.getId(); if(modifiedTopics.hasKey(key)){ - childPos = this._modifiedTopics.get(key).originalPos; + oldPos = this._modifiedTopics.get(key).originalPos; } this._modifiedTopics.set(key,{originalPos:oldPos, newPos:childPos}); } @@ -136,7 +159,6 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo } }, _mouseUpListener:function(event, node){ - var id = node.getId(); var screen = this._designer.getWorkSpace().getScreenManager(); // Remove all the events. @@ -162,10 +184,8 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo actionRunner.execute(this._command); this._command=null; this._modifiedTopics=null; + this._mouseInitialPos=null; -// var topicId = draggedTopic.getId(); -// var command = new mindplot.commands.DragTopicCommand(topicId); - }, getClassName:function(){ return mindplot.layoutManagers.FreeMindLayoutManager.NAME; @@ -175,9 +195,13 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo }, _createCentralTopicBoard:function(node){ return new mindplot.layoutManagers.boards.freeMindBoards.CentralTopicBoard(node, this); - }, + } + , _updateParentBoard:function(node, modifiedTopics){ - var parent = node.getParent(); + this._updateBoard(node.getParent(), modifiedTopics); + }, + _updateBoard:function(node, modifiedTopics){ + var parent = node; if(!this._isCentralTopic(parent)){ var parentBoard = this.getTopicBoardForTopic(parent.getParent()); var result = parentBoard.findNodeEntryIndex(parent); @@ -191,8 +215,11 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo var lastChild = table[table.length-1]; var marginBottom = (lastChild.getPosition()+lastChild.getTotalMarginBottom())-parentEntry.getPosition(); parentBoard.setNodeChildrenMarginBottom(parentEntry,marginBottom); - parentBoard._updateTable(result.index, result.table, modifiedTopics, false); + } else { + parentBoard.setNodeChildrenMarginTop(parentEntry, 0); + parentBoard.setNodeChildrenMarginBottom(parentEntry, 0); } + parentBoard._updateTable(result.index, result.table, modifiedTopics, false); this._updateParentBoard(parent, modifiedTopics); } }, @@ -202,7 +229,353 @@ mindplot.layoutManagers.FreeMindLayoutManager = mindplot.layoutManagers.BaseLayo for(var i=0; i=0; i--) + { + topics[i].setMouseEventsEnabled(true); + if(topics[i].getId()!=node.getId()){ + var overListener = this._mouseOverListeners.get(topics[i].getId()); + topics[i].removeEventListener('mouseover',overListener); + var outListener = this._mouseOutListeners.get(topics[i].getId()); + topics[i].removeEventListener('mouseout',outListener); + } + } + + this._restoreTopicsForReconnect(node); + + this._removeIndicatorShapes(node); + + if(this._createShape == null){ + //cancel everything. + var line = node.getOutgoingLine(); + if(line){ + line.setVisibility(true); + } + core.Utils.animatePosition(this._modifiedTopics, null, this.getDesigner()); + }else{ + this._command.setModifiedTopics(this._modifiedTopics); + this._command.setDraggedTopic(node); + this._command.setTargetNode(this._targetNode); + this._command.setAs(this._createShape); + //todo:Create command + var actionRunner = mindplot.DesignerActionRunner.getInstance(); + actionRunner.execute(this._command); + } + + // Change the cursor to the default. + window.document.body.style.cursor = 'default'; + + this._designer.getWorkSpace().enableWorkspaceEvents(true); + + this._command=null; + this._modifiedTopics=null; + this._mouseInitialPos=null; + this._mouseOverListeners=null; + this._mouseOutListeners=null; + this._targetNode = null; + this._createShape = null; + }, + //function binded to the node with the over event + _reconnectMouseOverListener:function(event, layoutManager){ + var size = this.getSize(); + var screen = layoutManager.getDesigner().getWorkSpace().getScreenManager(); + var pos = screen.getWorkspaceMousePosition(event); + pos.x = Math.round(pos.x); + pos.y = Math.round(pos.y); + var nodePos = this.getPosition(); + //if it is on the child half side, or it is central topic add it as child + if(layoutManager._isCentralTopic(this) || ((Math.sign(nodePos.x)>0 && pos.x>nodePos.x) || (Math.sign(nodePos.x)<0 && pos.x0?size.width/2:0, 0); + this._createChildShape.setVisibility(true); + this._createSiblingShape.setVisibility(false); + this._createShape = "Child"; + this._targetNode = topic; + } else if(shape == mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_TOP){ + this._createSiblingShape.setSize(size.width,size.height/2); + this._createSiblingShape.setPosition(0,0); + this._createSiblingShape.setVisibility(true); + this._createChildShape.setVisibility(false); + this._createShape = "Sibling_top"; + this._targetNode = topic; + }else if(shape == mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_BOTTOM){ + this._createSiblingShape.setSize(size.width,size.height/2); + this._createSiblingShape.setPosition(0,size.height/2); + this._createSiblingShape.setVisibility(true); + this._createChildShape.setVisibility(false); + this._createShape = "Sibling_bottom"; + this._targetNode = topic; + } else { + this._createSiblingShape.setVisibility(false); + this._createChildShape.setVisibility(false); + this._createShape = null; + this._targetNode = null; + } + }, + _removeIndicatorShapes:function(node){ + if(this._createChildShape.getParent()!=null|| this._createSiblingShape.getParent()!=null){ + this._createChildShape.getParent().removeChild(this._createChildShape._peer); + this._createSiblingShape.getParent().removeChild(this._createSiblingShape._peer); + } + }, + _reconnectMouseOutListener:function(event, layoutManager){ + layoutManager._updateIndicatorShapes(this, null); + }, + _updateTopicsForReconnect:function(topic, opacity){ + topic.setOpacity(opacity); + topic.moveToBack(); + var children = topic._getChildren(); + for(var k = 0; k0){ + //if no children use the position set by Entry initializer. Otherwise place as last child + var lastChild = table[table.length-1]; + newNodePos.y = lastChild.getPosition()+lastChild.getTotalMarginBottom() + entry.getTotalMarginTop(); + } else { + newNodePos.y = targetNode.getPosition().y; + } + var parentPos = targetNode.getPosition(); + var pwidth = targetNode.getSize().width; + var width = node.getSize().width; + if(this._isCentralTopic(targetNode)){ + newNodePos.x = Math.sign(node.getPosition().x) * (entry._DEFAULT_X_GAP + pwidth/2 + width/2) + } + else{ + newNodePos.x = parentPos.x + Math.sign(parentPos.x) * (entry._DEFAULT_X_GAP + pwidth/2 + width/2); + } + + index = table.length; + } else { + //moving as sibling of targetNode + + var sibObj = targetBoard.findNodeEntryIndex(node._relationship_sibling_node); + var siblingEntry =sibObj.table[sibObj.index]; + + var newNodePos=new core.Point(); + if(node.relationship == "Sibling_top"){ + newNodePos.y =siblingEntry.getPosition()-siblingEntry.getTotalMarginTop()+entry.getTotalMarginTop(); + index = sibObj.index==0?0:sibObj.index-1; + } + else{ + newNodePos.y = siblingEntry.getPosition()+siblingEntry.getTotalMarginBottom() + entry.getTotalMarginTop(); + index = sibObj.index+1; + } + var parentPos = targetNode.getPosition(); + var pwidth = targetNode.getSize().width; + var width = node.getSize().width; + newNodePos.x = parentPos.x + Math.sign(parentPos.x) * (entry._DEFAULT_X_GAP + pwidth/2 + width/2); + } + var nodePos = node.getPosition(); + var x = nodePos.x - newNodePos.x; + var y = nodePos.y - newNodePos.y; + var delta = new core.Point(Math.round(x), Math.round(y)); + entry.setPosition(newNodePos.x, newNodePos.y); + this._updateChildrenBoards(node, delta, this._modifiedTopics); + + targetBoard._addEntry(entry, table, index); + targetBoard._updateTable(index, table, [], true); + this._updateBoard(targetNode,[]); + this._updateBoard(node._relationship_oldParent,[]); + mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOutEvent,[node ]); } }); -mindplot.layoutManagers.FreeMindLayoutManager.NAME ="FreeMindLayoutManager"; \ No newline at end of file +mindplot.layoutManagers.FreeMindLayoutManager.NAME ="FreeMindLayoutManager"; +mindplot.layoutManagers.FreeMindLayoutManager.MOVE_IMAGE_URL = "../images/move.png"; +mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_NODES_OPACITY = 0.4; +mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_SHAPE_CHILD = "child"; +mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_TOP = "top"; +mindplot.layoutManagers.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_BOTTOM = "bottom"; \ No newline at end of file diff --git a/mindplot/src/main/javascript/layoutManagers/OriginalLayoutManager.js b/mindplot/src/main/javascript/layoutManagers/OriginalLayoutManager.js index e3814d1c..bb26305c 100644 --- a/mindplot/src/main/javascript/layoutManagers/OriginalLayoutManager.js +++ b/mindplot/src/main/javascript/layoutManagers/OriginalLayoutManager.js @@ -12,6 +12,26 @@ mindplot.layoutManagers.OriginalLayoutManager = mindplot.layoutManagers.BaseLayo // Add shapes to speed up the loading process ... mindplot.DragTopic.initialize(workSpace); }, + prepareChildrenList:function(node, children){ + // Sort children by order to solve adding order in for OriginalLayoutManager... + var result = []; + if (node.getTopicType()!=mindplot.NodeModel.CENTRAL_TOPIC_TYPE && children.length > 0) + { + for (var i = 0; i < children.length; i++) + { + var child = children[i]; + var order = child.getOrder(); + if (order != null) + { + result[order] = child; + } else + { + result.push(child); + } + } + } + return result; + }, _nodeResizeEvent:function(node){ if(this._isCentralTopic(node)){ var size = node.getSize(); @@ -19,7 +39,7 @@ mindplot.layoutManagers.OriginalLayoutManager = mindplot.layoutManagers.BaseLayo this.getTopicBoardForTopic(node).updateChildrenPosition(node,size.height/2, []); } }, - _NodeRepositionateEvent:function(node){ + _nodeRepositionateEvent:function(node){ this.getTopicBoardForTopic(node).repositionate(); }, getDragTopicPositioner : function() diff --git a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Board.js b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Board.js index 1bd0717d..1a77584a 100644 --- a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Board.js +++ b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Board.js @@ -11,24 +11,13 @@ mindplot.layoutManagers.boards.freeMindBoards.Board = mindplot.layoutManagers.bo _createTables:function(){ core.assert(false, "no Board implementation found!") }, - _getTableForNode:function(node){ + _getTableForNode:function(node, position){ core.assert(false, "no Board implementation found!") }, removeTopicFromBoard:function(node, modifiedTopics){ - var table = this._getTableForNode(node); - var id = node.getId(); - - //search for position - var i; - for(i = 0; i< table.length ; i++){ - var entry = table[i]; - if (entry.getId() == id){ - break; - } - } - core.assert(i0){ var selectedNode = this._layoutManager.getDesigner().getSelectedNodes()[0]; - if(selectedNode.getParent()!= null && node.getParent().getId() == selectedNode.getParent().getId() && !this._layoutManager._isCentralTopic(node.getParent())){ - //creating a sibling - Lets put the new node below the selected node. - var parentBoard = this._layoutManager.getTopicBoardForTopic(selectedNode.getParent()); - var selectedNodeResult = parentBoard.findNodeEntryIndex(selectedNode); - var selectedNodeEntry = selectedNodeResult.table[selectedNodeResult.index]; - entry.setPosition(null, selectedNodeEntry.getPosition()+selectedNodeEntry.getTotalMarginBottom() + entry.getMarginTop()); - result.index = selectedNodeResult.index+1; - } else if(node.getParent().getId() == selectedNode.getId()){ - //creating a child node - Lest put the new node as the last child. - var selectedNodeBoard = this._layoutManager.getTopicBoardForTopic(selectedNode); - var table = selectedNodeBoard._getTableForNode(node); - if(table.length>0){ - //if no children use the position set by Entry initializer. Otherwise place as last child - var lastChild = table[table.length-1]; - entry.setPosition(null, lastChild.getPosition()+lastChild.getTotalMarginBottom() + entry.getMarginTop()); + if(!pos){ + if(selectedNode.getParent()!= null && node.getParent().getId() == selectedNode.getParent().getId()){ + //creating a sibling - Lets put the new node below the selected node. + var parentBoard = this._layoutManager.getTopicBoardForTopic(selectedNode.getParent()); + var selectedNodeResult = parentBoard.findNodeEntryIndex(selectedNode); + var selectedNodeEntry = selectedNodeResult.table[selectedNodeResult.index]; + var x = null; + if(this._layoutManager._isCentralTopic(selectedNode.getParent())){ + var nodeX = entry.getNode().getPosition().x; + if(Math.sign(nodeX)!=Math.sign(selectedNode.getPosition().x)){ + x =nodeX *-1; + } + result.table = selectedNodeResult.table; + } + entry.setPosition(x, selectedNodeEntry.getPosition()+selectedNodeEntry.getTotalMarginBottom() + entry.getMarginTop()); + result.index = selectedNodeResult.index+1; + } else if(node.getParent().getId() == selectedNode.getId()){ + //creating a child node - Lest put the new node as the last child. + var selectedNodeBoard = this._layoutManager.getTopicBoardForTopic(selectedNode); + var table = selectedNodeBoard._getTableForNode(node); + if(table.length>0){ + //if no children use the position set by Entry initializer. Otherwise place as last child + var lastChild = table[table.length-1]; + entry.setPosition(null, lastChild.getPosition()+lastChild.getTotalMarginBottom() + entry.getMarginTop()); + } + result.index = table.length; } - result.index = table.length; } } this._addEntry(entry, result.table, result.index); @@ -89,7 +88,7 @@ mindplot.layoutManagers.boards.freeMindBoards.Board = mindplot.layoutManagers.bo }, _removeEntry:function(node, table, index, modifiedTopics){ table.splice(index, 1); - this._updateTable(index, table, modifiedTopics, false); + this._updateTable(index>0?index-1:index, table, modifiedTopics, false); }, _addEntry:function(entry, table, index){ table.splice(index, 0, entry); @@ -136,18 +135,13 @@ mindplot.layoutManagers.boards.freeMindBoards.Board = mindplot.layoutManagers.bo } } -// if(updateParents && (i==0 || i==table.length-1)){ -// this._layoutManager._updateParentBoard(table[i].getNode(), modifiedTopics); -// } }, updateChildrenPosition:function(node, modifiedTopics){ var result = this.findNodeEntryIndex(node); this._updateTable(result.index, result.table, modifiedTopics, false); }, - findNodeEntryIndex:function(node){ - var table = this._getTableForNode(node); - var position = node.getPosition(); - var y = position.y; + findNodeEntryIndex:function(node, position){ + var table = this._getTableForNode(node, position); //search for position var i; @@ -181,11 +175,9 @@ mindplot.layoutManagers.boards.freeMindBoards.Board = mindplot.layoutManagers.bo entry.setMarginBottom(marginBottom); }, setNodeChildrenMarginTop:function(entry, delta){ - var marginTop = entry.getChildrenMarginTop()-delta.y; entry.setChildrenMarginTop(delta); }, setNodeChildrenMarginBottom:function(entry, delta){ - var marginBottom = entry.getChildrenMarginBottom()-delta.y; entry.setChildrenMarginBottom(delta); }, updateEntry:function(node, delta, modifiedTopics){ @@ -204,8 +196,6 @@ mindplot.layoutManagers.boards.freeMindBoards.Board = mindplot.layoutManagers.bo var newPos = new core.Point(pos.x-(delta.x==null?0:delta.x), pos.y-delta.y); entry.setPosition(newPos.x, newPos.y); this._layoutManager._updateChildrenBoards(entry.getNode(), delta, modifiedTopics); -// if(updateParents) -// this._layoutManager._updateParentBoard(entry.getNode(), modifiedTopics); if(modifiedTopics.set){ var key = entry.getId(); if(modifiedTopics.hasKey(key)){ diff --git a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/CentralTopicBoard.js b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/CentralTopicBoard.js index ca810658..40cd5270 100644 --- a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/CentralTopicBoard.js +++ b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/CentralTopicBoard.js @@ -8,15 +8,19 @@ mindplot.layoutManagers.boards.freeMindBoards.CentralTopicBoard = mindplot.layou _createTables:function(){ return [[],[]]; }, - _getTableForNode:function(node){ + _getTableForNode:function(node, altPosition){ var i = 0; var position = node.getPosition(); + if(typeof altPosition != "undefined") + { + position = altPosition; + } if(!position){ if(Math.sign(node.getParent().getPosition().x) == -1){ i=1; } } - else if(mindplot.util.Shape.isAtRight(position, node.getParent().getPosition())) + else if(Math.sign(position.x)==-1) i=1; return this._positionTables[i]; } diff --git a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Entry.js b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Entry.js index ff6acd78..1d823e61 100644 --- a/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Entry.js +++ b/mindplot/src/main/javascript/layoutManagers/boards/freeMindBoards/Entry.js @@ -83,9 +83,9 @@ mindplot.layoutManagers.boards.freeMindBoards.Entry = new Class({ return this._marginBottomChildren; }, getTotalMarginTop:function(){ - return this._marginTopChildren+this._marginTop; + return (this._node.areChildrenShrinked()?0:this._marginTopChildren)+this._marginTop; }, getTotalMarginBottom:function(){ - return this._marginBottomChildren + this._marginBottom; + return (this._node.areChildrenShrinked()?0:this._marginBottomChildren) + this._marginBottom; } }); \ No newline at end of file