diff --git a/mindplot/pom.xml b/mindplot/pom.xml
index 2dca66a1..13a7cdff 100644
--- a/mindplot/pom.xml
+++ b/mindplot/pom.xml
@@ -61,7 +61,6 @@
-
@@ -158,28 +157,13 @@
files="commands/AddRelationshipCommand.js"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -213,6 +197,25 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mindplot/src/main/javascript/Designer.js b/mindplot/src/main/javascript/Designer.js
index 60b74cee..0df8afc4 100644
--- a/mindplot/src/main/javascript/Designer.js
+++ b/mindplot/src/main/javascript/Designer.js
@@ -43,8 +43,6 @@ mindplot.Designer = new Class({
this._workspace = new mindplot.Workspace(screenManager, this._model.getZoom());
this._readOnly = profile.readOnly ? true : false;
- // Init layout managers ...
- this._layoutManager = new mindplot.layout.OriginalLayoutManager(this);
// Register events
if (!profile.readOnly) {
@@ -52,6 +50,14 @@ mindplot.Designer = new Class({
}
this._relPivot = new mindplot.RelationshipPivot(this._workspace, this);
+
+ // Init layout manager ...
+ this._eventBussDispatcher = new mindplot.nlayout.EventBusDispatcher(this.getModel());
+
+ // @todo: To be removed ...
+ this._layoutManager = new mindplot.layout.OriginalLayoutManager(this);
+
+
},
_registerEvents : function() {
@@ -370,6 +376,9 @@ mindplot.Designer = new Class({
// Place the focus on the Central Topic
var centralTopic = this.getModel().getCentralTopic();
this.goToNode(centralTopic);
+
+ // Finally, sort the map ...
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.DoLayout);
},
getMindmap : function() {
@@ -395,14 +404,16 @@ mindplot.Designer = new Class({
var children = nodeModel.getChildren().slice();
children = this._layoutManager.prepareNode(nodeGraph, children);
+ var workspace = this._workspace;
+ workspace.appendChild(nodeGraph);
+
for (var i = 0; i < children.length; i++) {
var child = children[i];
if ($defined(child))
this._nodeModelToNodeGraph(child, false);
}
- var workspace = this._workspace;
- workspace.appendChild(nodeGraph);
+
return nodeGraph;
},
diff --git a/mindplot/src/main/javascript/EventBus.js b/mindplot/src/main/javascript/EventBus.js
deleted file mode 100644
index b2eb09ac..00000000
--- a/mindplot/src/main/javascript/EventBus.js
+++ /dev/null
@@ -1,24 +0,0 @@
-mindplot.EventBus = new Class({
- Extends:Options,
- Implements:Events,
- options: {
-
- },
- initialize: function(options) {
- this.setOptions(options);
- }
-
-});
-
-mindplot.EventBus.events = {
- NodeResizeEvent:'NodeResizeEvent',
- NodeMoveEvent:'NodeMoveEvent',
- NodeDisconnectEvent:'NodeDisconnectEvent',
- NodeConnectEvent:'NodeConnectEvent',
- 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/Topic.js b/mindplot/src/main/javascript/Topic.js
index 25eccba9..1f9bc010 100644
--- a/mindplot/src/main/javascript/Topic.js
+++ b/mindplot/src/main/javascript/Topic.js
@@ -313,7 +313,7 @@ mindplot.Topic = new Class({
//Links
var links = model.getLinks();
for (var i = 0; i < links.length; i++) {
- this._link = new mindplot.LinkIcon(this,links[i]);
+ this._link = new mindplot.LinkIcon(this, links[i]);
result.addIcon(this._link);
}
@@ -1074,7 +1074,8 @@ mindplot.Topic = new Class({
outgoingLine.removeFromWorkspace(workspace);
// Remove from workspace.
- mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeDisconnectEvent, [targetTopic, this]);
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.ONodeDisconnectEvent, [targetTopic, this]);
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeDisconnectEvent, this.getModel());
// Change text based on the current connection ...
var model = this.getModel();
@@ -1121,7 +1122,7 @@ mindplot.Topic = new Class({
childModel.connectTo(targetModel);
// Update topic position based on the state ...
- mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent, [targetTopic, this]);
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.ONodeConnectEvent, [targetTopic, this]);
// Create a connection line ...
var outgoingLine = new mindplot.ConnectionLine(this, targetTopic);
@@ -1151,6 +1152,12 @@ mindplot.Topic = new Class({
// Redraw line ...
outgoingLine.redraw();
+
+ // Fire connection event ...
+ if (this.isInWorkspace()) {
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent, {parentNode:targetTopic.getModel(), childNode: this.getModel()});
+ }
+
},
appendChild : function(child) {
@@ -1185,6 +1192,13 @@ mindplot.Topic = new Class({
addToWorkspace : function(workspace) {
var elem = this.get2DElement();
workspace.appendChild(elem);
+ if (!this.isInWorkspace()) {
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeAdded, this.getModel());
+
+ if (this.getModel().isConnected())
+ mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent, {parentNode:this.getOutgoingConnectedTopic().getModel(), childNode: this.getModel()});
+
+ }
this._isInWorkspace = true;
this._adjustShapes();
},
diff --git a/mindplot/src/main/javascript/commands/freeMind/DragTopicCommand.js b/mindplot/src/main/javascript/commands/freeMind/DragTopicCommand.js
deleted file mode 100644
index a8452359..00000000
--- a/mindplot/src/main/javascript/commands/freeMind/DragTopicCommand.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-* 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={};
-
-mindplot.commands.freeMind.DragTopicCommand = mindplot.Command.extend(
-{
- initialize: function()
- {
- this._modifiedTopics=null;
- this._id = mindplot.Command._nextUUID();
- },
- execute: function(commandContext)
- {
- var keys = this._modifiedTopics.keys();
- for(var i=0; in2.getPosition().y;
- else
- return true;
- });
- } else {
- //sort childs by order
- var result = children.sort(function(n1, n2){
- if(n1.getOrder() && n2.getOrder())
- return n1.getOrder()>n2.getOrder();
- else
- return true;
- });
- delete node.getModel()._finalPosition;
- result = children;
- }
- return result;
- },
- registerListenersOnNode : function(topic)
- {
- var id = topic.getId();
- // Register node listeners ...
- var designer = this.getDesigner();
- topic.addEvent('click', function(event)
- {
- designer.onObjectFocusEvent.attempt([topic, event], designer);
- });
-
- // Add drag behaviour ...
- if (topic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE)
- {
- topic.addEvent("mousedown",this._reconnectMouseDownListener.bindWithEvent(this,[topic]));
- }
-
- },
- _mousedownListener:function(event,topic){
-
- var workSpace = this._designer.getWorkSpace();
- if (workSpace.isWorkspaceEventsEnabled())
- {
- // Disable double drag...
- workSpace.enableWorkspaceEvents(false);
-
- var id = topic.getId();
- this._command = new mindplot.commands.freeMind.DragTopicCommand();
- this._modifiedTopics = new Hash();
-
- var topics = this.getDesigner()._getTopics();
- // Disable all mouse events.
- for (var i = 0; i < topics.length; i++)
- {
- topics[i].setMouseEventsEnabled(false);
- }
-
- var ev = new Event(event);
-
- var screen = workSpace.getScreenManager();
-
- // Set initial position.
- 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;
-
- // Register mouse move listener ...
- this._mouseMoveListenerInstance = this._mouseMoveListener.bindWithEvent(this,[topic]);
- screen.addEvent('mousemove', this._mouseMoveListenerInstance);
-
- // Register mouse up listeners ...
- this._mouseUpListenerInstance = this._mouseUpListener.bindWithEvent(this,[topic]);
- screen.addEvent('mouseup', this._mouseUpListenerInstance);
-
- // Change cursor.
- window.document.body.style.cursor = 'move';
- }
- },
- _mouseMoveListener:function(event, node){
- if(!this._isMovingNode){
- 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);
- //if isolated topic
- if(node.getParent()==null){
- //If still in same side
- if(Math.sign(nodePos.x)==Math.sign(pos.x)){
- var x = nodePos.x - pos.x;
- var y = nodePos.y - pos.y;
- var delta = new core.Point(Math.round(x), Math.round(y));
- var actualPos = node.getPosition().clone();
- var newPos = new core.Point(actualPos.x-(delta.x==null?0:delta.x), actualPos.y-delta.y);
- node.setPosition(newPos, false);
- this._addToModifiedList(this._modifiedTopics, node.getId(), actualPos, newPos);
- this._updateChildrenBoards(node, delta, this._modifiedTopics);
- }else{
- this._changeChildrenSide(node, pos, this._modifiedTopics);
- node.setPosition(pos.clone(), false);
- this._addToModifiedList(this._modifiedTopics, node.getId(), nodePos, pos);
- }
- }else{
- //If still in same side
- if(Math.sign(nodePos.x)==Math.sign(pos.x) || (Math.sign(nodePos.x)!=Math.sign(pos.x) && !this._isCentralTopic(node.getParent()))){
- var x = nodePos.x - pos.x;
- var y = nodePos.y - pos.y;
- var delta = new core.Point(Math.round(x), Math.round(y));
- var board = this.getTopicBoardForTopic(node.getParent());
- board.updateEntry(node, delta, this._modifiedTopics);
- } else {
- var parentBoard = this.getTopicBoardForTopic(node.getParent());
- var entryObj = parentBoard.findNodeEntryIndex(node);
- var entry = entryObj.table[entryObj.index];
- parentBoard._removeEntry(node, entryObj.table, entryObj.index, this._modifiedTopics);
- this._changeChildrenSide(node, pos, this._modifiedTopics);
- node.setPosition(pos.clone(), false);
- if($defined(this._modifiedTopics.set)){
- var key = node.getId();
- if(this._modifiedTopics.has(key)){
- nodePos = this._modifiedTopics.get(key).originalPos;
- }
- this._modifiedTopics.set(key,{originalPos:nodePos, newPos:pos});
- }
- entryObj = parentBoard.findNewNodeEntryIndex(entry);
- parentBoard._addEntry(entry, entryObj.table, entryObj.index);
- parentBoard._updateTable(entryObj.index, entryObj.table, this._modifiedTopics, true);
-
- }
- }
- this._isMovingNode=false;
- }
- event.preventDefault();
- },
- _changeChildrenSide:function(node, newPos, modifiedTopics){
- var children = node._getChildren();
- if(children.length>0){
- var refPos = node.getPosition();
- for( var i = 0 ; i< children.length ; i++){
- var child = children[i];
- 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($defined(modifiedTopics.set)){
- var key = node.getId();
- if(modifiedTopics.has(key)){
- oldPos = this._modifiedTopics.get(key).originalPos;
- }
- this._modifiedTopics.set(key,{originalPos:oldPos, newPos:childPos});
- }
- }
- }
- },
- _mouseUpListener:function(event, node){
-
- var screen = this._designer.getWorkSpace().getScreenManager();
- // Remove all the events.
- screen.removeEvent('mousemove', this._mouseMoveListenerInstance);
- screen.removeEvent('mouseup', this._mouseUpListenerInstance);
- delete this._mouseMoveListenerInstance;
- delete this._mouseUpListenerInstance;
-
- var topics = this.getDesigner()._getTopics();
- // Disable all mouse events.
- for (var i = 0; i < topics.length; i++)
- {
- topics[i].setMouseEventsEnabled(true);
- }
-
- // Change the cursor to the default.
- window.document.body.style.cursor = 'default';
-
- this._designer.getWorkSpace().enableWorkspaceEvents(true);
-
- this._command.setModifiedTopics(this._modifiedTopics);
- var actionRunner = mindplot.DesignerActionRunner.getInstance();
- actionRunner.execute(this._command);
- this._command=null;
- this._modifiedTopics=null;
- this._mouseInitialPos=null;
-
- },
- getClassName:function(){
- return mindplot.layout.FreeMindLayoutManager.NAME;
- },
- _createMainTopicBoard:function(node){
- return new mindplot.layout.boards.freemind.MainTopicBoard(node, this);
- },
- _createCentralTopicBoard:function(node){
- return new mindplot.layout.boards.freemind.CentralTopicBoard(node, this);
- }
- ,
- _updateParentBoard:function(node, modifiedTopics){
- this._updateBoard(node.getParent(), modifiedTopics);
- },
- _updateBoard:function(node, modifiedTopics){
- var parent = node;
- if(!this._isCentralTopic(parent) && parent.getParent()!=null){
- var parentBoard = this.getTopicBoardForTopic(parent.getParent());
- var result = parentBoard.findNodeEntryIndex(parent);
- var parentEntry = result.table[result.index];
- var board = this.getTopicBoardForTopic(parent);
- var table = board._getTableForNode(null);
- if(table.length>0){
- var firstChild = table[0];
- var marginTop = parentEntry.getPosition()-(firstChild.getPosition()-firstChild.getTotalMarginTop());
- parentBoard.setNodeChildrenMarginTop(parentEntry,marginTop);
- var lastChild = table[table.length-1];
- var marginBottom = (lastChild.getPosition()+lastChild.getTotalMarginBottom())-parentEntry.getPosition();
- parentBoard.setNodeChildrenMarginBottom(parentEntry,marginBottom);
- } else {
- parentBoard.setNodeChildrenMarginTop(parentEntry, 0);
- parentBoard.setNodeChildrenMarginBottom(parentEntry, 0);
- }
- parentBoard._updateTable(result.index, result.table, modifiedTopics, false);
- this._updateParentBoard(parent, modifiedTopics);
- }
- },
- _updateChildrenBoards:function(node, delta, modifiedTopics){
- var board = this.getTopicBoardForTopic(node);
- var topics = board._getTableForNode(null);
- 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].removeEvent('mouseover',overListener);
- var outListener = this._mouseOutListeners.get(topics[i].getId());
- topics[i].removeEvent('mouseout',outListener);
- }
- }
-
- this._restoreTopicsForReconnect(node);
-
- this._removeIndicatorShapes(node);
-
- //Check that it has to be relocated
- if(this._createShape !=null){
- if(this._createShape == "Child"){
- if(node.getParent()!=null && node.getParent().getId() == this._targetNode.getId()){
- var mod = this._modifiedTopics.get(node.getId());
- if(Math.sign(mod.originalPos.x) == Math.sign(node.getPosition().x))
- this._createShape = null;
- }
- }else if(node.getParent()!=null && this._targetNode.getParent()!= null && node.getParent().getId() == this._targetNode.getParent().getId()){
- var chkboard = this.getTopicBoardForTopic(this._targetNode.getParent());
- var mod = this._modifiedTopics.get(node.getId());
- var chk = chkboard.findNodeEntryIndex(node, mod.originalPos);
- if(this._createShape == "Sibling_top"){
- if(chk.table>this._currentIndex+1){
- var nextEntry = chk.table[this._currentIndex+1];
- if(nextEntry.getNode().getId() == this._targetNode.getId()){
- this._createShape = null;
- }
- }
- } else if(this._currentIndex>0){
- var prevEntry = chk.table[this._currentIndex-1];
- if(prevEntry.getNode().getId() == this._targetNode.getId()){
- this._createShape = null;
- }
- }
- }
- }
-
- if(this._createShape == null){
- //cancel everything.
- var line = node.getOutgoingLine();
- if($defined(line)){
- line.setVisibility(true);
- }
- core.Utils.animatePosition(this._modifiedTopics, null, this.getDesigner());
- }else{
- this._command.setModifiedTopics(this._modifiedTopics);
- this._command.setDraggedTopic(node, this._currentIndex);
- 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(!this.areChildrenShrinked() && (layoutManager._isCentralTopic(this) || this.getParent()==null || ((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.layout.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.layout.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){
- var firstChild = table[0];
- var marginTop = entry.getPosition()-(firstChild.getPosition()-firstChild.getTotalMarginTop());
- board.setNodeChildrenMarginTop(entry,marginTop);
- var lastChild = table[table.length-1];
- var marginBottom = (lastChild.getPosition()+lastChild.getTotalMarginBottom())-entry.getPosition();
- board.setNodeChildrenMarginBottom(entry,marginBottom);
- } else {
- board.setNodeChildrenMarginTop(entry, 0);
- board.setNodeChildrenMarginBottom(entry, 0);
- }
- }
- var targetBoard = this.getTopicBoardForTopic(targetNode);
- var table = targetBoard._getTableForNode(node);
- var index;
- if(node.relationship == 'undo'){
- index = node._relationship_index;
- //I need to update all entries because nodes position have been changed by command
-
- }else{
- if(node.relationship == "Child"){
-
- var newNodePos=new core.Point();
- 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];
- 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"){
- if(sibObj.index==0){
- newNodePos.y = siblingEntry.getPosition();
- }else{
- newNodePos.y =siblingEntry.getPosition()-siblingEntry.getTotalMarginTop()+entry.getTotalMarginTop();
- }
- index = sibObj.index;
- }
- 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;
- 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);
- }
- }
- 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, []);
- }
- targetBoard._addEntry(entry, table, index);
- targetBoard._updateTable(index, table, [], true);
- this._updateBoard(targetNode,[]);
- if(node._relationship_oldParent!=null)
- this._updateBoard(node._relationship_oldParent,[]);
-
- mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeMouseOutEvent,[node ]);
- },
- _addToModifiedList:function(modifiedTopics, key, originalpos, newPos){
- if($defined(modifiedTopics.set)){
- if(modifiedTopics.has(key)){
- originalpos = modifiedTopics.get(key).originalPos;
- }
- modifiedTopics.set(key,{originalPos:originalpos, newPos:newPos});
- }
- }
-});
-
-mindplot.layout.FreeMindLayoutManager.NAME ="FreeMindLayoutManager";
-mindplot.layout.FreeMindLayoutManager.MOVE_IMAGE_URL = "../images/move.png";
-mindplot.layout.FreeMindLayoutManager.RECONNECT_NODES_OPACITY = 0.4;
-mindplot.layout.FreeMindLayoutManager.RECONNECT_SHAPE_CHILD = "child";
-mindplot.layout.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_TOP = "top";
-mindplot.layout.FreeMindLayoutManager.RECONNECT_SHAPE_SIBLING_BOTTOM = "bottom";
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/layout/boards/freemind/Board.js b/mindplot/src/main/javascript/layout/boards/freemind/Board.js
deleted file mode 100644
index 8c5d6904..00000000
--- a/mindplot/src/main/javascript/layout/boards/freemind/Board.js
+++ /dev/null
@@ -1,194 +0,0 @@
-mindplot.layout.boards.freemind = {};
-
-mindplot.layout.boards.freemind.Board = mindplot.layout.boards.Board.extend({
- options:{
-
- },
- initialize:function(node, layoutManager, options){
- this.parent(node, layoutManager, options);
- this._positionTables = this._createTables();
- },
- _createTables:function(){
- $assert(false, "no Board implementation found!")
- },
- _getTableForNode:function(node, position){
- $assert(false, "no Board implementation found!")
- },
- removeTopicFromBoard:function(node, modifiedTopics){
- var pos;
- if($defined(node._originalPosition))
- pos = node._originalPosition;
- var result = this.findNodeEntryIndex(node, pos);
- $assert(result.index0){
- var selectedNode = this._layoutManager.getDesigner().filterSelectedTopics()[0];
- if(!$defined(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;
- }
- }
- }
- this._addEntry(entry, result.table, result.index);
- if($defined(pos)){
- if(result.index>0){
- var prevEntry =result.table[result.index-1];
- entry.setMarginTop(pos.y-(prevEntry.getPosition() + prevEntry.getTotalMarginBottom()));
- }
- else if(result.table.length>1){
- var nextEntry = result.table[1];
- nextEntry.setMarginTop((nextEntry.getPosition() - nextEntry.getTotalMarginTop())-pos.y);
- }
- }
- this._updateTable(result.index, result.table,modifiedTopics, false);
- this._layoutManager._updateParentBoard(node, modifiedTopics);
- },
- _removeEntry:function(node, table, index, modifiedTopics){
- table.splice(index, 1);
- this._updateTable(index>0?index-1:index, table, modifiedTopics, false);
- },
- _addEntry:function(entry, table, index){
- table.splice(index, 0, entry);
- },
- _updateTable:function(index, table, modifiedTopics, updateParents){
- var i = index;
- if(index >= table.length){
- i = table.length -1;
- }
- var delta = null;
- //check from index to 0;
- if(i>0){
- var entry = table[i];
- var prevEntry = table[i-1];
-
- var margin = entry.getTotalMarginTop() + prevEntry.getTotalMarginBottom();
- var distance = Math.abs(prevEntry.getPosition() - entry.getPosition());
- if(distance!=margin){
- delta = (distance - margin)*Math.sign(prevEntry.getPosition() - entry.getPosition());
- i--;
- while(i >= 0){
- this._updateEntryPos(table[i], new core.Point(null, delta), modifiedTopics, updateParents);
- i--;
- }
- }
- }
-
- i = index;
- delta = null;
-
- //check from index to length
- if( i position){
- break;
- }
- }
- return {index:i, table:table};
- },
- setNodeMarginTop:function(entry, delta){
- var marginTop = entry.getMarginTop()-delta.y;
- entry.setMarginTop(marginTop);
- },
- setNodeMarginBottom:function(entry, delta){
- var marginBottom = entry.getMarginBottom()-delta.y;
- entry.setMarginBottom(marginBottom);
- },
- setNodeChildrenMarginTop:function(entry, delta){
- entry.setChildrenMarginTop(delta);
- },
- setNodeChildrenMarginBottom:function(entry, delta){
- entry.setChildrenMarginBottom(delta);
- },
- updateEntry:function(node, delta, modifiedTopics){
- var result = this.findNodeEntryIndex(node);
- if(result.index < result.table.length){
- var entry = result.table[result.index];
- if(result.index!=0)
- this.setNodeMarginTop(entry, delta);
- this._updateEntryPos(entry, delta, modifiedTopics, false);
- this._updateTable(result.index, result.table, modifiedTopics, false);
- this._layoutManager._updateParentBoard(entry.getNode(), modifiedTopics);
- }
- },
- _updateEntryPos:function(entry, delta, modifiedTopics, updateParents){
- var pos = entry.getNode().getPosition().clone();
- 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($defined(modifiedTopics.set)){
- var key = entry.getId();
- if(modifiedTopics.has(key)){
- pos = modifiedTopics.get(key).originalPos;
- }
- modifiedTopics.set(key,{originalPos:pos, newPos:newPos});
- }
- }
-});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/layout/boards/freemind/CentralTopicBoard.js b/mindplot/src/main/javascript/layout/boards/freemind/CentralTopicBoard.js
deleted file mode 100644
index 50b824ca..00000000
--- a/mindplot/src/main/javascript/layout/boards/freemind/CentralTopicBoard.js
+++ /dev/null
@@ -1,27 +0,0 @@
-mindplot.layout.boards.freemind.CentralTopicBoard = mindplot.layout.boards.freemind.Board.extend({
- options:{
-
- },
- initialize:function(node, layoutManager, options){
- this.parent(node, layoutManager, options);
- },
- _createTables:function(){
- return [[],[]];
- },
- _getTableForNode:function(node, altPosition){
- var i = 0;
- var position = node.getPosition();
- if(typeof altPosition != "undefined" && altPosition!=null)
- {
- position = altPosition;
- }
- if(!$defined(position)){
- if(Math.sign(node.getParent().getPosition().x) == -1){
- i=1;
- }
- }
- else if(Math.sign(position.x)==-1)
- i=1;
- return this._positionTables[i];
- }
-});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/layout/boards/freemind/Entry.js b/mindplot/src/main/javascript/layout/boards/freemind/Entry.js
deleted file mode 100644
index 6034e89b..00000000
--- a/mindplot/src/main/javascript/layout/boards/freemind/Entry.js
+++ /dev/null
@@ -1,89 +0,0 @@
-mindplot.layout.boards.freemind.Entry = new Class({
- initialize:function(node, useFinalPosition){
- this._node = node;
- this._DEFAULT_X_GAP = 30;
- var pos = node.getModel().getFinalPosition();
- if(useFinalPosition && $defined(pos)){
- this.setPosition(pos.x, pos.y);
- }
- else{
- pos = node.getPosition();
- if(!$defined(pos)){
- var parent = node.getParent();
- pos = parent.getPosition().clone();
- var pwidth = parent.getSize().width;
- var width = node.getSize().width;
- pos.x = pos.x + Math.sign(pos.x) * (this._DEFAULT_X_GAP + pwidth/2 + width/2);
- node.setPosition(pos);
-
- }
- }
- this._DEFAULT_GAP = 10;
- var height = this.getNode().getSize().height;
- this._minimalMargin = this._DEFAULT_GAP + height/2;
- this._marginTop = this._minimalMargin;
- this._marginBottom = this._minimalMargin;
- this._marginTopChildren=0;
- this._marginBottomChildren=0;
- },
- getNode:function(){
- return this._node;
- },
- getId:function(){
- return this.getNode().getId();
- },
- getPosition:function(){
- return this._node.getPosition().y;
- },
- setPosition:function(x,y){
- var position = this._node.getPosition().clone();
- position.y = y;
- if(null != x){
- position.x = x;
- }
-
- this._node.setPosition(position);
- },
- getMarginTop:function(){
- return this._marginTop;
- },
- setMarginTop:function(value){
- if(value >= this._minimalMargin){
- this._marginTop = value;
- }
- },
- setMarginBottom:function(value){
- if(value >= this._minimalMargin){
- this._marginBottom = value;
- }
- },
- getMarginBottom:function(){
- return this._marginBottom;
- },
- getChildrenMarginTop:function(){
- return this._marginTopChildren;
- },
- setChildrenMarginTop:function(value){
- if(value >= this._minimalMargin){
- this._marginTopChildren = value - this._minimalMargin;
- }else{
- this._marginTopChildren=0;
- }
- },
- setChildrenMarginBottom:function(value){
- if(value >= this._minimalMargin){
- this._marginBottomChildren = value - this._minimalMargin;
- }else{
- this._marginBottomChildren=0;
- }
- },
- getChildrenMarginBottom:function(){
- return this._marginBottomChildren;
- },
- getTotalMarginTop:function(){
- return (this._node.areChildrenShrinked()?0:this._marginTopChildren)+this._marginTop;
- },
- getTotalMarginBottom:function(){
- return (this._node.areChildrenShrinked()?0:this._marginBottomChildren) + this._marginBottom;
- }
-});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/layout/boards/freemind/MainTopicBoard.js b/mindplot/src/main/javascript/layout/boards/freemind/MainTopicBoard.js
deleted file mode 100644
index 15f41392..00000000
--- a/mindplot/src/main/javascript/layout/boards/freemind/MainTopicBoard.js
+++ /dev/null
@@ -1,14 +0,0 @@
-mindplot.layout.boards.freemind.MainTopicBoard = mindplot.layout.boards.freemind.Board.extend({
- options:{
-
- },
- initialize:function(node, layoutManager, options){
- this.parent(node, layoutManager, options);
- },
- _createTables:function(){
- return [[]];
- },
- _getTableForNode:function(node){
- return this._positionTables[0];
- }
-});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/nlayout/ChangeEvent.js b/mindplot/src/main/javascript/nlayout/ChangeEvent.js
index f7b1f81d..c67842f6 100644
--- a/mindplot/src/main/javascript/nlayout/ChangeEvent.js
+++ b/mindplot/src/main/javascript/nlayout/ChangeEvent.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.ChangeEvent = new Class({
initialize:function(id) {
$assert(!isNaN(id), "id can not be null");
diff --git a/mindplot/src/main/javascript/nlayout/ChildrenSorterStrategy.js b/mindplot/src/main/javascript/nlayout/ChildrenSorterStrategy.js
index b9d7b163..7d922d04 100644
--- a/mindplot/src/main/javascript/nlayout/ChildrenSorterStrategy.js
+++ b/mindplot/src/main/javascript/nlayout/ChildrenSorterStrategy.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.ChildrenSorterStrategy = new Class({
initialize:function() {
diff --git a/mindplot/src/main/javascript/nlayout/EventBus.js b/mindplot/src/main/javascript/nlayout/EventBus.js
new file mode 100644
index 00000000..d98efa57
--- /dev/null
+++ b/mindplot/src/main/javascript/nlayout/EventBus.js
@@ -0,0 +1,41 @@
+/*
+ * 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.EventBus = new Class({
+ Implements:Events,
+ initialize: function() {
+ }
+});
+
+mindplot.EventBus.events = {
+ NodeResizeEvent:'NodeResizeEvent',
+ NodeMoveEvent:'NodeMoveEvent',
+ ONodeDisconnectEvent:'ONodeDisconnectEvent',
+ ONodeConnectEvent:'ONodeConnectEvent',
+ NodeRepositionateEvent:'NodeRepositionateEvent',
+ NodeShrinkEvent:'NodeShrinkEvent',
+ NodeMouseOverEvent:'NodeMouseOverEvent',
+ NodeMouseOutEvent:'NodeMouseOutEvent',
+
+ NodeConnectEvent:'NodeConnectEvent',
+ NodeDisconnectEvent:'NodeDisconnectEvent',
+ NodeAdded:'NodeAdded',
+ NodeRemoved:'NodeRemoved',
+ DoLayout:'DoLayout'
+};
+
+mindplot.EventBus.instance = new mindplot.EventBus();
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/nlayout/EventBusDispatcher.js b/mindplot/src/main/javascript/nlayout/EventBusDispatcher.js
new file mode 100644
index 00000000..c643302e
--- /dev/null
+++ b/mindplot/src/main/javascript/nlayout/EventBusDispatcher.js
@@ -0,0 +1,86 @@
+/*
+ * 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.nlayout.EventBusDispatcher = new Class({
+
+ initialize:function(designerModel) {
+ $assert(designerModel, "designerModel cannot be null");
+ this.registerBusEvents();
+
+ var size = {width:25,height:25};
+ this._layoutManager = new mindplot.nlayout.LayoutManager(0, size);
+ },
+
+ registerBusEvents:function () {
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeAdded, this._nodeAdded.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeRemoved, this._nodeRemoved.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeResizeEvent, this._nodeResizeEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeMoveEvent, this._nodeMoveEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeDisconnectEvent, this._nodeDisconnectEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeConnectEvent, this._nodeConnectEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeRepositionateEvent, this._nodeRepositionateEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.NodeShrinkEvent, this._nodeShrinkEvent.bind(this));
+ mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.DoLayout, this._doLayout.bind(this));
+ },
+
+ _nodeResizeEvent: function(node) {
+ console.log("mindplot.nlayout.EventBusDispatcher._nodeResizeEvent: Not Implemented yet");
+ },
+
+ _nodeMoveEvent: function(node) {
+ console.log("mindplot.nlayout.EventBusDispatcher._nodeMoveEvent: Not Implemented yet");
+
+ },
+
+ _nodeDisconnectEvent: function(node) {
+ this._layoutManager.disconnectNode(node.getId());
+ },
+
+ _nodeConnectEvent: function(args) {
+ this._layoutManager.connectNode(args.parentNode.getId(), args.childNode.getId(), args.childNode.getOrder());
+
+ },
+
+ _nodeRepositionateEvent: function(node) {
+ console.log("mindplot.nlayout.EventBusDispatcher._nodeRepositionateEvent: Not Implemented yet");
+
+ },
+
+ _nodeShrinkEvent: function(node) {
+ console.log("mindplot.nlayout.EventBusDispatcher._nodeShrinkEvent: Not Implemented yet");
+ },
+
+ _nodeAdded: function(node) {
+ // Centra topic must not be added twice ...
+ if (node.getId() != 0) {
+ this._layoutManager.addNode(node.getId(), {width:10,height:10}, node.getPosition());
+ }
+ },
+
+ _nodeRemoved: function(node) {
+ console.log("mindplot.nlayout.EventBusDispatcher._nodeRemoved: Not Implemented yet");
+ },
+
+ _doLayout: function() {
+ this._layoutManager.layout(true);
+ console.log("---------");
+ this._layoutManager.dump();
+ console.log("---------");
+
+ }
+
+});
\ No newline at end of file
diff --git a/mindplot/src/main/javascript/nlayout/GridSorter.js b/mindplot/src/main/javascript/nlayout/GridSorter.js
index 83e9b276..75bbe773 100644
--- a/mindplot/src/main/javascript/nlayout/GridSorter.js
+++ b/mindplot/src/main/javascript/nlayout/GridSorter.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.GridSorter = new Class({
Extends: mindplot.nlayout.SymetricSorter,
diff --git a/mindplot/src/main/javascript/nlayout/LayoutManager.js b/mindplot/src/main/javascript/nlayout/LayoutManager.js
index ad43535f..2cbb6385 100644
--- a/mindplot/src/main/javascript/nlayout/LayoutManager.js
+++ b/mindplot/src/main/javascript/nlayout/LayoutManager.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.LayoutManager = new Class({
Extends: Events,
initialize: function(rootNodeId, rootSize) {
diff --git a/mindplot/src/main/javascript/nlayout/Node.js b/mindplot/src/main/javascript/nlayout/Node.js
index 9107583e..1bd9125e 100644
--- a/mindplot/src/main/javascript/nlayout/Node.js
+++ b/mindplot/src/main/javascript/nlayout/Node.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.Node = new Class({
initialize:function(id, size, position, sorter) {
$assert(typeof id === 'number' && isFinite(id), "id can not be null");
diff --git a/mindplot/src/main/javascript/nlayout/OriginalLayout.js b/mindplot/src/main/javascript/nlayout/OriginalLayout.js
index f14c54b7..c1d42974 100644
--- a/mindplot/src/main/javascript/nlayout/OriginalLayout.js
+++ b/mindplot/src/main/javascript/nlayout/OriginalLayout.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.OriginalLayout = new Class({
initialize: function(treeSet) {
this._treeSet = treeSet;
diff --git a/mindplot/src/main/javascript/nlayout/RootedTreeSet.js b/mindplot/src/main/javascript/nlayout/RootedTreeSet.js
index 22399183..11f98431 100644
--- a/mindplot/src/main/javascript/nlayout/RootedTreeSet.js
+++ b/mindplot/src/main/javascript/nlayout/RootedTreeSet.js
@@ -1,3 +1,20 @@
+/*
+ * 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.nlayout.RootedTreeSet = new Class({
initialize:function() {
this._rootNodes = [];
@@ -19,10 +36,12 @@ mindplot.nlayout.RootedTreeSet = new Class({
add: function(node) {
$assert(node, 'node can not be null');
+ $assert(!this.find(node.getId(), false), 'node already exits with this id. Id:' + node.getId());
$assert(!node._children, 'node already added');
this._rootNodes.push(this._decodate(node));
},
+
remove: function(nodeId) {
$assert($defined(nodeId), 'nodeId can not be null');
var node = this.find(nodeId);
@@ -64,7 +83,8 @@ mindplot.nlayout.RootedTreeSet = new Class({
break;
}
}
- $assert($defined(validate) ? result : true, 'node could not be found id:' + id);
+ validate = !$defined(validate) ? true : validate;
+ $assert(validate ? result : true, 'node could not be found id:' + id);
return result;
},
@@ -120,7 +140,7 @@ mindplot.nlayout.RootedTreeSet = new Class({
plot: function(canvas) {
var branches = this._rootNodes;
- for (var i=0; i