mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-26 07:44:56 +01:00
- Remove all old layout classes.
- Rename nloyout to layout - Drag integrated.
This commit is contained in:
parent
1b3ad1b42d
commit
90644c201a
@ -82,28 +82,14 @@
|
|||||||
<filelist dir="${basedir}/src/main/javascript/" files="DragTopic.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="DragTopic.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="DragManager.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="DragManager.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="DragPivot.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="DragPivot.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/layout/boards/original/"
|
|
||||||
files="Board.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/layout/boards/original/"
|
|
||||||
files="CentralTopicBoard.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/layout/boards/original/"
|
|
||||||
files="MainTopicBoard.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/layout/boards/original/"
|
|
||||||
files="FixedDistanceBoard.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript//layout/boards/original/"
|
|
||||||
files="VariableDistanceBoard.js"/>
|
|
||||||
|
|
||||||
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="ConnectionLine.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="ConnectionLine.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="RelationshipLine.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="RelationshipLine.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="DragTopicPositioner.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="DragConnector.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="TextEditor.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="TextEditor.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="MultilineTextEditor.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="MultilineTextEditor.js"/>
|
||||||
<!--<filelist dir="${basedir}/src/main/javascript/" files="RichTextEditor.js"/>-->
|
<!--<filelist dir="${basedir}/src/main/javascript/" files="RichTextEditor.js"/>-->
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="TextEditorFactory.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="TextEditorFactory.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="util/Shape.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="util/Shape.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/layout/boards/original/"
|
|
||||||
files="BoardEntry.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/" files="ModelCodeName.js"/>
|
<filelist dir="${basedir}/src/main/javascript/" files="ModelCodeName.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
<filelist dir="${basedir}/src/main/javascript/"
|
||||||
files="XMLMindmapSerializer_Pela.js"/>
|
files="XMLMindmapSerializer_Pela.js"/>
|
||||||
@ -159,17 +145,7 @@
|
|||||||
files="commands/AddRelationshipCommand.js"/>
|
files="commands/AddRelationshipCommand.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
<filelist dir="${basedir}/src/main/javascript/"
|
||||||
files="commands/MoveControlPointCommand.js"/>
|
files="commands/MoveControlPointCommand.js"/>
|
||||||
|
<filelist dir="${basedir}/src/main/javascript/"
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
|
||||||
files="layout/boards/Board.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
|
||||||
files="layout/BaseLayoutManager.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
|
||||||
files="layout/OriginalLayoutManager.js"/>
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
|
||||||
files="layout/LayoutManagerFactory.js"/>
|
|
||||||
|
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
|
||||||
files="collaboration/CollaborationManager.js"/>
|
files="collaboration/CollaborationManager.js"/>
|
||||||
<filelist dir="${basedir}/src/main/javascript/"
|
<filelist dir="${basedir}/src/main/javascript/"
|
||||||
files="collaboration/framework/AbstractCollaborativeFramework.js"/>
|
files="collaboration/framework/AbstractCollaborativeFramework.js"/>
|
||||||
|
@ -48,7 +48,7 @@ mindplot.Designer = new Class({
|
|||||||
this._registerEvents();
|
this._registerEvents();
|
||||||
|
|
||||||
// Init drag related classes ...
|
// Init drag related classes ...
|
||||||
this._dragTopicPositioner = new mindplot.DragTopicPositioner(this.getModel(), this._workspace);
|
this._dragConnector = new mindplot.DragConnector(this.getModel(), this._workspace);
|
||||||
this._dragger = this._buildDragManager(this._workspace);
|
this._dragger = this._buildDragManager(this._workspace);
|
||||||
mindplot.DragTopic.init(this._workspace);
|
mindplot.DragTopic.init(this._workspace);
|
||||||
}
|
}
|
||||||
@ -91,22 +91,11 @@ mindplot.Designer = new Class({
|
|||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
// Create nodes on double click...
|
// Create nodes on double click...
|
||||||
screenManager.addEvent('dblclick', function(event) {
|
screenManager.addEvent('dblclick', function() {
|
||||||
if (workspace.isWorkspaceEventsEnabled()) {
|
if (workspace.isWorkspaceEventsEnabled()) {
|
||||||
// Get mouse position
|
|
||||||
var pos = screenManager.getWorkspaceMousePosition(event);
|
|
||||||
|
|
||||||
// Create a new topic model ...
|
|
||||||
var mindmap = this.getMindmap();
|
|
||||||
var model = mindmap.createNode(mindplot.model.INodeModel.MAIN_TOPIC_TYPE);
|
|
||||||
model.setPosition(pos.x, pos.y);
|
|
||||||
|
|
||||||
// Get central topic ...
|
|
||||||
var centralTopic = this.getModel().getCentralTopic();
|
var centralTopic = this.getModel().getCentralTopic();
|
||||||
var centralTopicId = centralTopic.getId();
|
var model = this._createChildModel(centralTopic);
|
||||||
|
this._actionDispatcher.addTopic(model, centralTopic.getId());
|
||||||
// Execute action ...
|
|
||||||
this._actionDispatcher.addTopic(model, centralTopicId, true);
|
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
@ -127,7 +116,7 @@ mindplot.Designer = new Class({
|
|||||||
var dragger = new mindplot.DragManager(workspace);
|
var dragger = new mindplot.DragManager(workspace);
|
||||||
var topics = this.getModel().getTopics();
|
var topics = this.getModel().getTopics();
|
||||||
|
|
||||||
var dragTopicPositioner = this._dragTopicPositioner;
|
var dragConnector = this._dragConnector;
|
||||||
|
|
||||||
dragger.addEvent('startdragging', function(event, node) {
|
dragger.addEvent('startdragging', function(event, node) {
|
||||||
// Enable all mouse events.
|
// Enable all mouse events.
|
||||||
@ -138,7 +127,7 @@ mindplot.Designer = new Class({
|
|||||||
|
|
||||||
dragger.addEvent('dragging', function(event, dragTopic) {
|
dragger.addEvent('dragging', function(event, dragTopic) {
|
||||||
// Update the state and connections of the topic ...
|
// Update the state and connections of the topic ...
|
||||||
dragTopicPositioner.positionateDragTopic(dragTopic);
|
dragConnector.update(dragTopic);
|
||||||
});
|
});
|
||||||
|
|
||||||
dragger.addEvent('enddragging', function(event, dragTopic) {
|
dragger.addEvent('enddragging', function(event, dragTopic) {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mindplot.DragTopicPositioner = new Class({
|
mindplot.DragConnector = new Class({
|
||||||
initialize:function(designerModel, workspace) {
|
initialize:function(designerModel, workspace) {
|
||||||
$assert(designerModel, 'designerModel can not be null');
|
$assert(designerModel, 'designerModel can not be null');
|
||||||
$assert(workspace, 'workspace can not be null');
|
$assert(workspace, 'workspace can not be null');
|
||||||
@ -26,24 +26,12 @@ mindplot.DragTopicPositioner = new Class({
|
|||||||
this._workspace = workspace;
|
this._workspace = workspace;
|
||||||
},
|
},
|
||||||
|
|
||||||
positionateDragTopic : function(dragTopic) {
|
update : function(dragTopic) {
|
||||||
// Workout the real position of the element on the board.
|
|
||||||
var dragTopicPosition = dragTopic.getPosition();
|
|
||||||
var draggedTopic = dragTopic.getDraggedTopic();
|
|
||||||
|
|
||||||
// Topic can be connected ?
|
// Topic can be connected ?
|
||||||
this._checkDragTopicConnection(dragTopic);
|
this._checkConnection(dragTopic);
|
||||||
|
|
||||||
// Position topic in the board
|
|
||||||
if (dragTopic.isConnected()) {
|
|
||||||
var targetTopic = dragTopic.getConnectedToTopic();
|
|
||||||
// @todo: Hack ...
|
|
||||||
var position = designer._eventBussDispatcher._layoutManager.predict(targetTopic.getId(),dragTopicPosition);
|
|
||||||
console.log(position);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_checkDragTopicConnection : function(dragTopic) {
|
_checkConnection : function(dragTopic) {
|
||||||
var topics = this._designerModel.getTopics();
|
var topics = this._designerModel.getTopics();
|
||||||
|
|
||||||
// Must be disconnected from their current connection ?.
|
// Must be disconnected from their current connection ?.
|
||||||
@ -65,7 +53,7 @@ mindplot.DragTopicPositioner = new Class({
|
|||||||
// I have to change the current connection to a main topic.
|
// I have to change the current connection to a main topic.
|
||||||
dragTopic.disconnect(this._workspace);
|
dragTopic.disconnect(this._workspace);
|
||||||
} else
|
} else
|
||||||
if (Math.abs(dragXPosition - currentXPosition) > mindplot.DragTopicPositioner.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
|
if (Math.abs(dragXPosition - currentXPosition) > mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
|
||||||
dragTopic.disconnect(this._workspace);
|
dragTopic.disconnect(this._workspace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,11 +61,11 @@ mindplot.DragTopicPositioner = new Class({
|
|||||||
|
|
||||||
// Finally, connect nodes ...
|
// Finally, connect nodes ...
|
||||||
if (!dragTopic.isConnected()) {
|
if (!dragTopic.isConnected()) {
|
||||||
var centalTopic = topics[0];
|
var centralTopic = topics[0];
|
||||||
if ($defined(mainTopicToMainTopicConnection)) {
|
if ($defined(mainTopicToMainTopicConnection)) {
|
||||||
dragTopic.connectTo(mainTopicToMainTopicConnection);
|
dragTopic.connectTo(mainTopicToMainTopicConnection);
|
||||||
} else if (Math.abs(dragTopic.getPosition().x - centalTopic.getPosition().x) <= mindplot.DragTopicPositioner.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
|
} else if (Math.abs(dragTopic.getPosition().x - centralTopic.getPosition().x) <= mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
|
||||||
dragTopic.connectTo(centalTopic);
|
dragTopic.connectTo(centralTopic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -114,4 +102,4 @@ mindplot.DragTopicPositioner = new Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mindplot.DragTopicPositioner.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE = 400;
|
mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE = 400;
|
@ -72,10 +72,6 @@ mindplot.DragManager.prototype.remove = function(node)
|
|||||||
index = i;
|
index = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (contained)
|
|
||||||
{
|
|
||||||
elem = new Array();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mindplot.DragManager.prototype._buildMouseMoveListener = function(workspace, dragNode, dragManager)
|
mindplot.DragManager.prototype._buildMouseMoveListener = function(workspace, dragNode, dragManager)
|
||||||
|
@ -51,58 +51,45 @@ mindplot.DragPivot = new Class({
|
|||||||
return line;
|
return line;
|
||||||
},
|
},
|
||||||
|
|
||||||
_redraw : function(pivotPosition) {
|
|
||||||
|
_redrawLine : function() {
|
||||||
// Update line position.
|
// Update line position.
|
||||||
$assert(this.getTargetTopic(), 'Illegal invocation. Target node can not be null');
|
$assert(this.getTargetTopic(), 'Illegal invocation. Target node can not be null');
|
||||||
|
|
||||||
var pivotRect = this._getPivotRect();
|
var pivotRect = this._getPivotRect();
|
||||||
var currentPivotPosition = pivotRect.getPosition();
|
|
||||||
|
|
||||||
// Pivot position has not changed. In this case, position change is not required.
|
// Pivot position has not changed. In this case, position change is not required.
|
||||||
var targetTopic = this.getTargetTopic();
|
var targetTopic = this.getTargetTopic();
|
||||||
if (currentPivotPosition.x != pivotPosition.x || currentPivotPosition.y != pivotPosition.y) {
|
var position = this._position;
|
||||||
var position = this._position;
|
|
||||||
var fromPoint = targetTopic.workoutIncomingConnectionPoint(position);
|
|
||||||
|
|
||||||
// Calculate pivot connection point ...
|
// Calculate pivot connection point ...
|
||||||
var size = this._size;
|
var size = this._size;
|
||||||
var targetPosition = targetTopic.getPosition();
|
var targetPosition = targetTopic.getPosition();
|
||||||
var line = this._line;
|
var line = this._line;
|
||||||
|
|
||||||
// Update Line position.
|
// Update Line position.
|
||||||
var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, position);
|
var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, position);
|
||||||
var pivotPoint = mindplot.util.Shape.calculateRectConnectionPoint(position, size, isAtRight);
|
var pivotPoint = mindplot.util.Shape.calculateRectConnectionPoint(position, size, isAtRight);
|
||||||
line.setFrom(pivotPoint.x, pivotPoint.y);
|
line.setFrom(pivotPoint.x, pivotPoint.y);
|
||||||
|
|
||||||
// Update rect position
|
// Update rect position
|
||||||
pivotRect.setPosition(pivotPosition.x, pivotPosition.y);
|
var cx = position.x - (parseInt(size.width) / 2);
|
||||||
|
var cy = position.y - (parseInt(size.height) / 2);
|
||||||
|
pivotRect.setPosition(cx, cy);
|
||||||
|
|
||||||
// Display elements if it's required...
|
// Display elements if it's required...
|
||||||
if (!pivotRect.isVisible()) {
|
if (!pivotRect.isVisible()) {
|
||||||
// Make line visible only when the position has been already changed.
|
// Make line visible only when the position has been already changed.
|
||||||
// This solve several strange effects ;)
|
// This solve several strange effects ;)
|
||||||
var targetPoint = targetTopic.workoutIncomingConnectionPoint(pivotPoint);
|
var targetPoint = targetTopic.workoutIncomingConnectionPoint(pivotPoint);
|
||||||
line.setTo(targetPoint.x, targetPoint.y);
|
line.setTo(targetPoint.x, targetPoint.y);
|
||||||
|
this.setVisibility(true);
|
||||||
this.setVisibility(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setPosition : function(point) {
|
setPosition : function(point) {
|
||||||
this._position = point;
|
this._position = point;
|
||||||
|
this._redrawLine();
|
||||||
// Update visual position.
|
|
||||||
var size = this.getSize();
|
|
||||||
|
|
||||||
var cx = point.x - (parseInt(size.width) / 2);
|
|
||||||
var cy = point.y - (parseInt(size.height) / 2);
|
|
||||||
|
|
||||||
// Update line ...
|
|
||||||
if (this.getTargetTopic()) {
|
|
||||||
var pivotPosition = {x:cx,y:cy};
|
|
||||||
this._redraw(pivotPosition);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getPosition : function() {
|
getPosition : function() {
|
||||||
@ -117,13 +104,6 @@ mindplot.DragPivot = new Class({
|
|||||||
return rect;
|
return rect;
|
||||||
},
|
},
|
||||||
|
|
||||||
_buildConnectRect : function() {
|
|
||||||
var size = this._size;
|
|
||||||
var rectAttributes = {fillColor:'#CC0033',opacity:0.4,width:size.width,height:size.height,strokeColor:'#FF9933'};
|
|
||||||
var result = new web2d.Rect(0, rectAttributes);
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getPivotRect : function() {
|
_getPivotRect : function() {
|
||||||
return this._dragPivot;
|
return this._dragPivot;
|
||||||
},
|
},
|
||||||
@ -139,9 +119,7 @@ mindplot.DragPivot = new Class({
|
|||||||
|
|
||||||
var connectRect = this._connectRect;
|
var connectRect = this._connectRect;
|
||||||
connectRect.setVisibility(value);
|
connectRect.setVisibility(value);
|
||||||
if ($defined(this._line)) {
|
this._line.setVisibility(value);
|
||||||
this._line.setVisibility(value);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
addToWorkspace : function(workspace) {
|
addToWorkspace : function(workspace) {
|
||||||
@ -186,11 +164,14 @@ mindplot.DragPivot = new Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
connectTo : function(targetTopic) {
|
connectTo : function(targetTopic, position) {
|
||||||
$assert(!this._outgoingLine, 'Could not connect an already connected node');
|
$assert(!this._outgoingLine, 'Could not connect an already connected node');
|
||||||
$assert(targetTopic != this, 'Cilcular connection are not allowed');
|
$assert(targetTopic != this, 'Circular connection are not allowed');
|
||||||
|
$assert(position, 'position can not be null');
|
||||||
$assert(targetTopic, 'parent can not be null');
|
$assert(targetTopic, 'parent can not be null');
|
||||||
|
|
||||||
|
this._position = position;
|
||||||
|
|
||||||
this._targetTopic = targetTopic;
|
this._targetTopic = targetTopic;
|
||||||
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
|
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
|
||||||
this._line = this._straightLine;
|
this._line = this._straightLine;
|
||||||
@ -216,7 +197,9 @@ mindplot.DragPivot = new Class({
|
|||||||
// Change elements position ...
|
// Change elements position ...
|
||||||
var pivotRect = this._getPivotRect();
|
var pivotRect = this._getPivotRect();
|
||||||
pivotRect.moveToFront();
|
pivotRect.moveToFront();
|
||||||
|
pivotRect.setPosition(position.x, position.y);
|
||||||
|
|
||||||
|
this._redrawLine();
|
||||||
},
|
},
|
||||||
|
|
||||||
disconnect : function(workspace) {
|
disconnect : function(workspace) {
|
||||||
|
@ -44,6 +44,17 @@ mindplot.DragTopic = new Class({
|
|||||||
|
|
||||||
// Update visual position.
|
// Update visual position.
|
||||||
this._elem2d.setPosition(cx, cy);
|
this._elem2d.setPosition(cx, cy);
|
||||||
|
|
||||||
|
if (this.isConnected()) {
|
||||||
|
var parent = this.getConnectedToTopic();
|
||||||
|
var predict = designer._eventBussDispatcher._layoutManager.predict(parent.getId(), this.getPosition());
|
||||||
|
if (this._order != predict.order) {
|
||||||
|
var dragPivot = this._getDragPivot();
|
||||||
|
var position = predict.position;
|
||||||
|
dragPivot.connectTo(parent, position);
|
||||||
|
this.setOrder(predict.order);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
getInnerShape : function() {
|
getInnerShape : function() {
|
||||||
@ -82,15 +93,21 @@ mindplot.DragTopic = new Class({
|
|||||||
connectTo : function(parent) {
|
connectTo : function(parent) {
|
||||||
$assert(parent, 'Parent connection node can not be null.');
|
$assert(parent, 'Parent connection node can not be null.');
|
||||||
|
|
||||||
|
// Where it should be connected ?
|
||||||
|
var predict = designer._eventBussDispatcher._layoutManager.predict(parent.getId(), this.getPosition());
|
||||||
|
|
||||||
|
// Connect pivot ...
|
||||||
var dragPivot = this._getDragPivot();
|
var dragPivot = this._getDragPivot();
|
||||||
dragPivot.connectTo(parent);
|
var position = predict.position;
|
||||||
|
dragPivot.connectTo(parent, position);
|
||||||
|
|
||||||
|
this.setOrder(predict.order);
|
||||||
},
|
},
|
||||||
|
|
||||||
getDraggedTopic : function() {
|
getDraggedTopic : function() {
|
||||||
return this._draggedNode;
|
return this._draggedNode;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
removeFromWorkspace : function(workspace) {
|
removeFromWorkspace : function(workspace) {
|
||||||
// Remove drag shadow.
|
// Remove drag shadow.
|
||||||
workspace.removeChild(this._elem2d);
|
workspace.removeChild(this._elem2d);
|
||||||
@ -114,8 +131,7 @@ mindplot.DragTopic = new Class({
|
|||||||
|
|
||||||
getPosition:function() {
|
getPosition:function() {
|
||||||
return this._position;
|
return this._position;
|
||||||
}
|
},
|
||||||
,
|
|
||||||
|
|
||||||
isDragTopic : function() {
|
isDragTopic : function() {
|
||||||
return true;
|
return true;
|
||||||
@ -124,52 +140,24 @@ mindplot.DragTopic = new Class({
|
|||||||
applyChanges : function(workspace) {
|
applyChanges : function(workspace) {
|
||||||
$assert(workspace, 'workspace can not be null');
|
$assert(workspace, 'workspace can not be null');
|
||||||
|
|
||||||
var dragPivot = this._getDragPivot();
|
|
||||||
var draggedTopic = this.getDraggedTopic();
|
var draggedTopic = this.getDraggedTopic();
|
||||||
|
|
||||||
var isDragConnected = this.isConnected();
|
var isDragConnected = this.isConnected();
|
||||||
// @Todo: Remove this static ...
|
|
||||||
var actionDispatcher = mindplot.ActionDispatcher.getInstance();
|
var actionDispatcher = mindplot.ActionDispatcher.getInstance();
|
||||||
var topicId = draggedTopic.getId();
|
var topicId = draggedTopic.getId();
|
||||||
|
|
||||||
|
var dragPosition = this.getPosition();
|
||||||
|
var order = null;
|
||||||
|
var parent = null;
|
||||||
if (isDragConnected) {
|
if (isDragConnected) {
|
||||||
|
|
||||||
var targetTopic = this.getConnectedToTopic();
|
var targetTopic = this.getConnectedToTopic();
|
||||||
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
|
order = this._order;
|
||||||
// Update topic position ...
|
parent = targetTopic;
|
||||||
var dragPivotPosition = dragPivot.getPosition();
|
|
||||||
|
|
||||||
// Must position the dragged topic taking into account the current node size.
|
|
||||||
var pivotSize = dragPivot.getSize();
|
|
||||||
var draggedTopicSize = draggedTopic.getSize();
|
|
||||||
var xOffset = draggedTopicSize.width - pivotSize.width;
|
|
||||||
xOffset = Math.round(xOffset / 2);
|
|
||||||
|
|
||||||
if (dragPivotPosition.x > 0) {
|
|
||||||
dragPivotPosition.x = parseInt(dragPivotPosition.x) + xOffset;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
dragPivotPosition.x = parseInt(dragPivotPosition.x) - xOffset;
|
|
||||||
}
|
|
||||||
// Set new position ...
|
|
||||||
actionDispatcher.dragTopic(topicId, dragPivotPosition, null, targetTopic);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// Main topic connections can be positioned only with the order ...
|
|
||||||
actionDispatcher.dragTopic(topicId, null, this._order, targetTopic);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// If the node is not connected, positionate based on the original drag topic position.
|
|
||||||
var dragPosition = this.getPosition();
|
|
||||||
actionDispatcher.dragTopic(topicId, dragPosition);
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
setBoardPosition : function(point) {
|
// If the node is not connected, position based on the original drag topic position.
|
||||||
$assert(point, 'point can not be null');
|
actionDispatcher.dragTopic(topicId, dragPosition, order, parent);
|
||||||
var dragPivot = this._getDragPivot();
|
|
||||||
dragPivot.setPosition(point);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getConnectedToTopic : function() {
|
getConnectedToTopic : function() {
|
||||||
@ -181,9 +169,10 @@ mindplot.DragTopic = new Class({
|
|||||||
return this.getConnectedToTopic() != null;
|
return this.getConnectedToTopic() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
})
|
||||||
|
;
|
||||||
|
|
||||||
mindplot.DragTopic.PIVOT_SIZE = {width:50,height:10};
|
mindplot.DragTopic.PIVOT_SIZE = {width:50,height:6};
|
||||||
|
|
||||||
mindplot.DragTopic.init = function(workspace) {
|
mindplot.DragTopic.init = function(workspace) {
|
||||||
|
|
||||||
|
@ -1,115 +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.layout.BaseLayoutManager = new Class({
|
|
||||||
|
|
||||||
options: {
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
initialize: function(designer, options) {
|
|
||||||
this.setOptions(options);
|
|
||||||
this._createBoard();
|
|
||||||
this._designer = designer;
|
|
||||||
// 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.ONodeDisconnectEvent, this._nodeDisconnectEvent.bind(this));
|
|
||||||
// mindplot.EventBus.instance.addEvent(mindplot.EventBus.events.ONodeConnectEvent, 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));
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeResizeEvent:function(node) {
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeMoveEvent:function(node) {
|
|
||||||
var modifiedTopics = [];
|
|
||||||
this.getTopicBoardForTopic(node).updateChildrenPosition(node, modifiedTopics);
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeDisconnectEvent:function(targetNode, node) {
|
|
||||||
var modifiedTopics = [];
|
|
||||||
this.getTopicBoardForTopic(targetNode).removeTopicFromBoard(node, modifiedTopics);
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeConnectEvent:function(targetNode, node) {
|
|
||||||
var modifiedTopics = [];
|
|
||||||
this.getTopicBoardForTopic(targetNode).addBranch(node, modifiedTopics);
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeRepositionateEvent:function(node) {
|
|
||||||
var modifiedTopics = [];
|
|
||||||
this.getTopicBoardForTopic(node).updateChildrenPosition(node, modifiedTopics);
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeShrinkEvent:function(node) {
|
|
||||||
},
|
|
||||||
|
|
||||||
_createBoard:function() {
|
|
||||||
this._boards = new Hash();
|
|
||||||
},
|
|
||||||
getTopicBoardForTopic:function(node) {
|
|
||||||
var id = node.getId();
|
|
||||||
var result = this._boards[id];
|
|
||||||
if (!$defined(result)) {
|
|
||||||
result = this._addNode(node);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
_addNode:function(node) {
|
|
||||||
var board = null;
|
|
||||||
if (this._isCentralTopic(node))
|
|
||||||
board = this._createCentralTopicBoard(node);
|
|
||||||
else
|
|
||||||
board = this._createMainTopicBoard(node);
|
|
||||||
var id = node.getId();
|
|
||||||
this._boards[id] = board;
|
|
||||||
return board;
|
|
||||||
},
|
|
||||||
_createMainTopicBoard:function(node) {
|
|
||||||
return new mindplot.layout.boards.Board(node, this);
|
|
||||||
},
|
|
||||||
_createCentralTopicBoard:function(node) {
|
|
||||||
return new mindplot.layout.boards.Board(node, this);
|
|
||||||
},
|
|
||||||
prepareNode:function(node, children) {
|
|
||||||
|
|
||||||
},
|
|
||||||
addHelpers:function(node) {
|
|
||||||
|
|
||||||
},
|
|
||||||
needsPrepositioning:function() {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
getDesigner:function() {
|
|
||||||
return this._designer;
|
|
||||||
},
|
|
||||||
_isCentralTopic:function(node) {
|
|
||||||
var type = node.getModel().getType();
|
|
||||||
return type == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
|
|
||||||
},
|
|
||||||
|
|
||||||
getClassName:function() {
|
|
||||||
return mindplot.layout.BaseLayoutManager.NAME;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mindplot.layout.BaseLayoutManager.NAME = "BaseLayoutManager";
|
|
||||||
|
|
||||||
mindplot.layout.BaseLayoutManager.implement(new Events);
|
|
||||||
mindplot.layout.BaseLayoutManager.implement(new Options);
|
|
@ -1,34 +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.layout.LayoutManagerFactory = {};
|
|
||||||
mindplot.layout.LayoutManagerFactory.managers = {
|
|
||||||
OriginalLayoutManager:mindplot.layout.OriginalLayoutManager,
|
|
||||||
FreeMindLayoutManager:mindplot.layout.FreeMindLayoutManager
|
|
||||||
};
|
|
||||||
mindplot.layout.LayoutManagerFactory.getManagerByName = function(name) {
|
|
||||||
var manager = mindplot.layout.LayoutManagerFactory.managers[name + "Manager"];
|
|
||||||
if ($defined(manager)) {
|
|
||||||
return manager;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return mindplot.layout.LayoutManagerFactory.managers["OriginalLayoutManager"];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
@ -1,88 +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.layout.OriginalLayoutManager = new Class({
|
|
||||||
Extends:mindplot.layout.BaseLayoutManager,
|
|
||||||
options:{
|
|
||||||
|
|
||||||
},
|
|
||||||
initialize:function(designer, options) {
|
|
||||||
this.parent(designer, options);
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
prepareNode:function(node, children) {
|
|
||||||
// Sort children by order to solve adding order in for OriginalLayoutManager...
|
|
||||||
var nodesByOrder = new Hash();
|
|
||||||
var maxOrder = 0;
|
|
||||||
var result = [];
|
|
||||||
if (children.length > 0) {
|
|
||||||
for (var i = 0; i < children.length; i++) {
|
|
||||||
var child = children[i];
|
|
||||||
var order = child.getOrder();
|
|
||||||
if (!$defined(order)) {
|
|
||||||
order = ++maxOrder;
|
|
||||||
child.setOrder(order);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nodesByOrder.has(order)) {
|
|
||||||
if (Math.sign(child.getPosition().x) == Math.sign(nodesByOrder.get(order).getPosition().x)) {
|
|
||||||
//duplicated order. Change order to next available.
|
|
||||||
order = ++maxOrder;
|
|
||||||
child.setOrder(order);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
nodesByOrder.set(order, child);
|
|
||||||
if (order > maxOrder)
|
|
||||||
maxOrder = order;
|
|
||||||
}
|
|
||||||
result[order] = child;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nodesByOrder = null;
|
|
||||||
return node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE ? result : children;
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeResizeEvent:function(node) {
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
_nodeRepositionateEvent:function(node) {
|
|
||||||
this.getTopicBoardForTopic(node).repositionate();
|
|
||||||
},
|
|
||||||
|
|
||||||
getDragTopicPositioner : function() {
|
|
||||||
return this._dragTopicPositioner;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_createMainTopicBoard:function(node) {
|
|
||||||
return new mindplot.layout.boards.original.MainTopicBoard(node, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
_createCentralTopicBoard:function(node) {
|
|
||||||
return new mindplot.layout.boards.original.CentralTopicBoard(node, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
getClassName:function() {
|
|
||||||
return mindplot.layout.OriginalLayoutManager.NAME;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mindplot.layout.OriginalLayoutManager.NAME = "OriginalLayoutManager";
|
|
@ -1,31 +0,0 @@
|
|||||||
mindplot.layout.boards.Board = new Class({
|
|
||||||
Implements: [Events,Options],
|
|
||||||
options: {
|
|
||||||
|
|
||||||
},
|
|
||||||
initialize: function(node, layoutManager, options) {
|
|
||||||
this.setOptions(options);
|
|
||||||
this._node = node;
|
|
||||||
this._layoutManager = layoutManager;
|
|
||||||
},
|
|
||||||
getClassName:function() {
|
|
||||||
return mindplot.layout.boards.Board.NAME;
|
|
||||||
},
|
|
||||||
removeTopicFromBoard:function(node, modifiedTopics) {
|
|
||||||
$assert(false, "no Board implementation found!");
|
|
||||||
},
|
|
||||||
addBranch:function(node, modifiedTopics) {
|
|
||||||
$assert(false, "no Board implementation found!");
|
|
||||||
},
|
|
||||||
updateChildrenPosition:function(node, modifiedTopics) {
|
|
||||||
$assert(false, "no Board implementation found!");
|
|
||||||
},
|
|
||||||
setNodeMarginTop:function(node, delta) {
|
|
||||||
$assert(false, "no Board implementation found!");
|
|
||||||
},
|
|
||||||
getNode:function() {
|
|
||||||
return this._node;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mindplot.layout.boards.Board.NAME = "Board";
|
|
@ -1,132 +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.layout.boards.original.Board = new Class({
|
|
||||||
initialize : function(defaultHeight, referencePoint) {
|
|
||||||
$assert(referencePoint, "referencePoint can not be null");
|
|
||||||
this._defaultWidth = defaultHeight;
|
|
||||||
this._entries = new mindplot.layout.boards.original.BidirectionalArray();
|
|
||||||
this._referencePoint = referencePoint;
|
|
||||||
},
|
|
||||||
|
|
||||||
getReferencePoint : function() {
|
|
||||||
return this._referencePoint;
|
|
||||||
},
|
|
||||||
|
|
||||||
_removeEntryByOrder : function(order, position) {
|
|
||||||
var board = this._getBoard(position);
|
|
||||||
var entry = board.lookupEntryByOrder(order);
|
|
||||||
|
|
||||||
$assert(!entry.isAvailable(), 'Entry must not be available in order to be removed.Entry Order:' + order);
|
|
||||||
entry.removeTopic();
|
|
||||||
board.update(entry);
|
|
||||||
},
|
|
||||||
|
|
||||||
removeTopicFromBoard : function(topic) {
|
|
||||||
var position = topic.getPosition();
|
|
||||||
var order = topic.getOrder();
|
|
||||||
|
|
||||||
this._removeEntryByOrder(order, position);
|
|
||||||
topic.setOrder(null);
|
|
||||||
},
|
|
||||||
|
|
||||||
positionateDragTopic :function(dragTopic) {
|
|
||||||
throw "this method must be overrided";
|
|
||||||
},
|
|
||||||
|
|
||||||
getHeight: function() {
|
|
||||||
var board = this._getBoard();
|
|
||||||
return board.getHeight();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ---------------------------------------
|
|
||||||
*/
|
|
||||||
mindplot.layout.boards.original.BidirectionalArray = new Class({
|
|
||||||
|
|
||||||
initialize: function() {
|
|
||||||
this._leftElem = [];
|
|
||||||
this._rightElem = [];
|
|
||||||
},
|
|
||||||
|
|
||||||
get :function(index, sign) {
|
|
||||||
$assert($defined(index), 'Illegal argument, index must be passed.');
|
|
||||||
if ($defined(sign)) {
|
|
||||||
$assert(index >= 0, 'Illegal absIndex value');
|
|
||||||
index = index * sign;
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = null;
|
|
||||||
if (index >= 0 && index < this._rightElem.length) {
|
|
||||||
result = this._rightElem[index];
|
|
||||||
} else if (index < 0 && Math.abs(index) < this._leftElem.length) {
|
|
||||||
result = this._leftElem[Math.abs(index)];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
set : function(index, elem) {
|
|
||||||
$assert($defined(index), 'Illegal index value');
|
|
||||||
|
|
||||||
var array = (index >= 0) ? this._rightElem : this._leftElem;
|
|
||||||
array[Math.abs(index)] = elem;
|
|
||||||
},
|
|
||||||
|
|
||||||
length : function(index) {
|
|
||||||
$assert($defined(index), 'Illegal index value');
|
|
||||||
return (index >= 0) ? this._rightElem.length : this._leftElem.length;
|
|
||||||
},
|
|
||||||
|
|
||||||
upperLength : function() {
|
|
||||||
return this.length(1);
|
|
||||||
},
|
|
||||||
|
|
||||||
lowerLength : function() {
|
|
||||||
return this.length(-1);
|
|
||||||
},
|
|
||||||
|
|
||||||
inspect : function() {
|
|
||||||
var result = '{';
|
|
||||||
var lenght = this._leftElem.length;
|
|
||||||
for (var i = 0; i < lenght; i++) {
|
|
||||||
var entry = this._leftElem[lenght - i - 1];
|
|
||||||
if (entry != null) {
|
|
||||||
if (i != 0) {
|
|
||||||
result += ', ';
|
|
||||||
}
|
|
||||||
result += entry.inspect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lenght = this._rightElem.length;
|
|
||||||
for (var i = 0; i < lenght; i++) {
|
|
||||||
var entry = this._rightElem[i];
|
|
||||||
if (entry != null) {
|
|
||||||
if (i != 0) {
|
|
||||||
result += ', ';
|
|
||||||
}
|
|
||||||
result += entry.inspect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result += '}';
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,141 +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.layout.boards.original.BoardEntry = new Class({
|
|
||||||
initialize:function(lowerLimit, upperLimit, order) {
|
|
||||||
if ($defined(lowerLimit) && $defined(upperLimit)) {
|
|
||||||
$assert(lowerLimit < upperLimit, 'lowerLimit can not be greater that upperLimit');
|
|
||||||
}
|
|
||||||
this._upperLimit = upperLimit;
|
|
||||||
this._lowerLimit = lowerLimit;
|
|
||||||
this._order = order;
|
|
||||||
this._topic = null;
|
|
||||||
this._xPos = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
getUpperLimit : function() {
|
|
||||||
return this._upperLimit;
|
|
||||||
},
|
|
||||||
|
|
||||||
setXPosition : function(xPosition) {
|
|
||||||
this._xPos = xPosition;
|
|
||||||
},
|
|
||||||
|
|
||||||
workoutEntryYCenter : function() {
|
|
||||||
return this._lowerLimit + ((this._upperLimit - this._lowerLimit) / 2);
|
|
||||||
},
|
|
||||||
|
|
||||||
setUpperLimit : function(value) {
|
|
||||||
$assert(!isNaN(value), "upper limit can not be null");
|
|
||||||
$assert(!isNaN(value), "illegal value");
|
|
||||||
this._upperLimit = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
isCoordinateIn : function(coord) {
|
|
||||||
return this._lowerLimit <= coord && coord < this._upperLimit;
|
|
||||||
},
|
|
||||||
|
|
||||||
getLowerLimit : function() {
|
|
||||||
return this._lowerLimit;
|
|
||||||
},
|
|
||||||
|
|
||||||
setLowerLimit : function(value) {
|
|
||||||
$assert(!isNaN(value), "upper limit can not be null");
|
|
||||||
$assert(!isNaN(value), "illegal value");
|
|
||||||
this._lowerLimit = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
setOrder : function(value) {
|
|
||||||
this._order = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
getWidth : function() {
|
|
||||||
return Math.abs(this._upperLimit - this._lowerLimit);
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
getTopic : function() {
|
|
||||||
return this._topic;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
removeTopic : function() {
|
|
||||||
$assert(!this.isAvailable(), "Entry doesn't have a topic.");
|
|
||||||
var topic = this.getTopic();
|
|
||||||
this.setTopic(null);
|
|
||||||
topic.setOrder(null);
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
update : function() {
|
|
||||||
var topic = this.getTopic();
|
|
||||||
this.setTopic(topic);
|
|
||||||
},
|
|
||||||
|
|
||||||
setTopic : function(topic, updatePosition) {
|
|
||||||
if (!$defined(updatePosition) || ($defined(updatePosition) && !updatePosition)) {
|
|
||||||
updatePosition = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._topic = topic;
|
|
||||||
if ($defined(topic)) {
|
|
||||||
// Fixed positioning. Only for main topic ...
|
|
||||||
var position = null;
|
|
||||||
var topicPosition = topic.getPosition();
|
|
||||||
|
|
||||||
// Must update position base on the border limits?
|
|
||||||
if ($defined(this._xPos)) {
|
|
||||||
position = new core.Point();
|
|
||||||
|
|
||||||
// Update x position ...
|
|
||||||
var topicSize = topic.getSize();
|
|
||||||
var halfTopicWidh = parseInt(topicSize.width / 2);
|
|
||||||
halfTopicWidh = (this._xPos > 0) ? halfTopicWidh : -halfTopicWidh;
|
|
||||||
position.x = this._xPos + halfTopicWidh;
|
|
||||||
position.y = this.workoutEntryYCenter();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// Central topic
|
|
||||||
this._height = topic.getSize().height;
|
|
||||||
var xPos = topicPosition.x;
|
|
||||||
var yPos = this.workoutEntryYCenter();
|
|
||||||
position = new core.Point(xPos, yPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
// @todo: No esta de mas...
|
|
||||||
topic.setPosition(position);
|
|
||||||
topic.setOrder(this._order);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this._height = this._defaultWidth;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
isAvailable : function() {
|
|
||||||
return !$defined(this._topic);
|
|
||||||
},
|
|
||||||
|
|
||||||
getOrder : function() {
|
|
||||||
return this._order;
|
|
||||||
},
|
|
||||||
|
|
||||||
inspect : function() {
|
|
||||||
return '(order: ' + this._order + ', lowerLimit:' + this._lowerLimit + ', upperLimit: ' + this._upperLimit + ', available:' + this.isAvailable() + ')';
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,106 +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.layout.boards.original.CentralTopicBoard = new Class({
|
|
||||||
Extends:mindplot.layout.boards.original.Board,
|
|
||||||
initialize:function(centralTopic, layoutManager) {
|
|
||||||
var point = new core.Point(0, 0);
|
|
||||||
this._layoutManager = layoutManager;
|
|
||||||
this._rightBoard = new mindplot.layout.boards.original.VariableDistanceBoard(50, point);
|
|
||||||
this._leftBoard = new mindplot.layout.boards.original.VariableDistanceBoard(50, point);
|
|
||||||
this._centralTopic = centralTopic;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getBoard : function(position) {
|
|
||||||
return (position.x >= 0) ? this._rightBoard : this._leftBoard;
|
|
||||||
},
|
|
||||||
|
|
||||||
positionateDragTopic : function(dragTopic) {
|
|
||||||
$assert(dragTopic != null, 'dragTopic can not be null');
|
|
||||||
$assert(dragTopic.isDragTopic, 'dragTopic must be DragTopic instance');
|
|
||||||
|
|
||||||
// This node is a main topic node. Position
|
|
||||||
var dragPos = dragTopic.getPosition();
|
|
||||||
var board = this._getBoard(dragPos);
|
|
||||||
|
|
||||||
// Look for entry ...
|
|
||||||
var entry = board.lookupEntryByPosition(dragPos);
|
|
||||||
|
|
||||||
// Calculate 'y' position base on the entry ...
|
|
||||||
var yCoord;
|
|
||||||
if (!entry.isAvailable() && entry.getTopic() != dragTopic.getDraggedTopic()) {
|
|
||||||
yCoord = entry.getLowerLimit();
|
|
||||||
} else {
|
|
||||||
yCoord = entry.workoutEntryYCenter();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// MainTopic can not be positioned over the drag topic ...
|
|
||||||
var centralTopic = this._centralTopic;
|
|
||||||
var centralTopicSize = centralTopic.getSize();
|
|
||||||
var halfWidth = (centralTopicSize.width / 2);
|
|
||||||
if (Math.abs(dragPos.x) < halfWidth + 60) {
|
|
||||||
var distance = halfWidth + 60;
|
|
||||||
dragPos.x = (dragPos.x > 0) ? distance : -distance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update board position.
|
|
||||||
var pivotPos = new core.Point(dragPos.x, yCoord);
|
|
||||||
dragTopic.setBoardPosition(pivotPos);
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
addBranch : function(topic) {
|
|
||||||
// Update topic position ...
|
|
||||||
var position = topic.getPosition();
|
|
||||||
|
|
||||||
var order = topic.getOrder();
|
|
||||||
var board = this._getBoard(position);
|
|
||||||
var entry = null;
|
|
||||||
if (order != null) {
|
|
||||||
entry = board.lookupEntryByOrder(order);
|
|
||||||
} else {
|
|
||||||
entry = board.lookupEntryByPosition(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the entry is not available, I must swap the the entries...
|
|
||||||
if (!entry.isAvailable()) {
|
|
||||||
board.freeEntry(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add it to the board ...
|
|
||||||
entry.setTopic(topic);
|
|
||||||
board.update(entry);
|
|
||||||
},
|
|
||||||
|
|
||||||
updateChildrenPosition : function(topic, xOffset, modifiedTopics) {
|
|
||||||
var board = this._rightBoard;
|
|
||||||
var oldReferencePosition = board.getReferencePoint();
|
|
||||||
var newReferencePosition = new core.Point(oldReferencePosition.x + xOffset, oldReferencePosition.y);
|
|
||||||
board.updateReferencePoint(newReferencePosition);
|
|
||||||
|
|
||||||
board = this._leftBoard;
|
|
||||||
oldReferencePosition = board.getReferencePoint();
|
|
||||||
newReferencePosition = new core.Point(oldReferencePosition.x - xOffset, oldReferencePosition.y);
|
|
||||||
board.updateReferencePoint(newReferencePosition);
|
|
||||||
},
|
|
||||||
|
|
||||||
repositionate : function() {
|
|
||||||
//@todo: implement ..
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,286 +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.layout.boards.original.FixedDistanceBoard = new Class({
|
|
||||||
Extends:mindplot.layout.boards.original.Board,
|
|
||||||
initialize:function(defaultHeight, topic, layoutManager) {
|
|
||||||
this._topic = topic;
|
|
||||||
this._layoutManager = layoutManager;
|
|
||||||
var reference = topic.getPosition();
|
|
||||||
this.parent(defaultHeight, reference);
|
|
||||||
this._height = defaultHeight;
|
|
||||||
this._entries = [];
|
|
||||||
},
|
|
||||||
|
|
||||||
getHeight : function() {
|
|
||||||
return this._height;
|
|
||||||
},
|
|
||||||
|
|
||||||
lookupEntryByOrder : function(order) {
|
|
||||||
var result = null;
|
|
||||||
var entries = this._entries;
|
|
||||||
if (order < entries.length) {
|
|
||||||
result = entries[order];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == null) {
|
|
||||||
var defaultHeight = this._defaultWidth;
|
|
||||||
var reference = this.getReferencePoint();
|
|
||||||
if (entries.length == 0) {
|
|
||||||
var yReference = reference.y;
|
|
||||||
result = this.createBoardEntry(yReference - (defaultHeight / 2), yReference + (defaultHeight / 2), 0);
|
|
||||||
} else {
|
|
||||||
var entriesLenght = entries.length;
|
|
||||||
var lastEntry = entries[entriesLenght - 1];
|
|
||||||
var lowerLimit = lastEntry.getUpperLimit();
|
|
||||||
var upperLimit = lowerLimit + defaultHeight;
|
|
||||||
result = this.createBoardEntry(lowerLimit, upperLimit, entriesLenght + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
createBoardEntry : function(lowerLimit, upperLimit, order) {
|
|
||||||
var result = new mindplot.layout.boards.original.BoardEntry(lowerLimit, upperLimit, order);
|
|
||||||
var xPos = this.workoutXBorderDistance();
|
|
||||||
result.setXPosition(xPos);
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
updateReferencePoint : function() {
|
|
||||||
var entries = this._entries;
|
|
||||||
var parentTopic = this.getTopic();
|
|
||||||
var parentPosition = parentTopic.workoutIncomingConnectionPoint(parentTopic.getPosition());
|
|
||||||
var referencePoint = this.getReferencePoint();
|
|
||||||
var yOffset = parentPosition.y - referencePoint.y;
|
|
||||||
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var entry = entries[i];
|
|
||||||
|
|
||||||
if ($defined(entry)) {
|
|
||||||
var upperLimit = entry.getUpperLimit() + yOffset;
|
|
||||||
var lowerLimit = entry.getLowerLimit() + yOffset;
|
|
||||||
entry.setUpperLimit(upperLimit);
|
|
||||||
entry.setLowerLimit(lowerLimit);
|
|
||||||
|
|
||||||
// Fix x position ...
|
|
||||||
var xPos = this.workoutXBorderDistance();
|
|
||||||
entry.setXPosition(xPos);
|
|
||||||
entry.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._referencePoint = parentPosition.clone();
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This x distance doesn't take into account the size of the shape.
|
|
||||||
*/
|
|
||||||
workoutXBorderDistance : function() {
|
|
||||||
var topic = this.getTopic();
|
|
||||||
|
|
||||||
var topicPosition = topic.getPosition();
|
|
||||||
var topicSize = topic.getSize();
|
|
||||||
var halfTargetWidth = topicSize.width / 2;
|
|
||||||
var result;
|
|
||||||
if (topicPosition.x >= 0) {
|
|
||||||
// It's at right.
|
|
||||||
result = topicPosition.x + halfTargetWidth + mindplot.layout.boards.original.FixedDistanceBoard.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE;
|
|
||||||
} else {
|
|
||||||
result = topicPosition.x - (halfTargetWidth + mindplot.layout.boards.original.FixedDistanceBoard.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
getTopic : function() {
|
|
||||||
return this._topic;
|
|
||||||
},
|
|
||||||
|
|
||||||
freeEntry : function(entry) {
|
|
||||||
var newEntries = [];
|
|
||||||
var entries = this._entries;
|
|
||||||
var order = 0;
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var e = entries[i];
|
|
||||||
if (e == entry) {
|
|
||||||
order++;
|
|
||||||
}
|
|
||||||
newEntries[order] = e;
|
|
||||||
order++;
|
|
||||||
}
|
|
||||||
this._entries = newEntries;
|
|
||||||
},
|
|
||||||
|
|
||||||
repositionate : function() {
|
|
||||||
// Workout width and update topic height.
|
|
||||||
var entries = this._entries;
|
|
||||||
var height = 0;
|
|
||||||
var model = this._topic.getModel();
|
|
||||||
if (entries.length >= 1 && !model.areChildrenShrunken()) {
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var e = entries[i];
|
|
||||||
if (e && e.getTopic()) {
|
|
||||||
var topic = e.getTopic();
|
|
||||||
var topicBoard = this._layoutManager.getTopicBoardForTopic(topic);
|
|
||||||
var topicBoardHeight = topicBoard.getHeight();
|
|
||||||
|
|
||||||
|
|
||||||
height += topicBoardHeight + mindplot.layout.boards.original.FixedDistanceBoard.INTER_TOPIC_DISTANCE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var topic = this._topic;
|
|
||||||
height = topic.getSize().height + mindplot.layout.boards.original.FixedDistanceBoard.INTER_TOPIC_DISTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
var oldHeight = this._height;
|
|
||||||
this._height = height;
|
|
||||||
|
|
||||||
// I must update all the parent nodes first...
|
|
||||||
if (oldHeight != this._height) {
|
|
||||||
var topic = this._topic;
|
|
||||||
var parentTopic = topic.getParent();
|
|
||||||
if (parentTopic != null) {
|
|
||||||
var board = this._layoutManager.getTopicBoardForTopic(parentTopic);
|
|
||||||
board.repositionate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Workout center the new topic center...
|
|
||||||
var refence = this.getReferencePoint();
|
|
||||||
var lowerLimit;
|
|
||||||
if (entries.length > 0) {
|
|
||||||
var l = 0;
|
|
||||||
for (l = 0; l < entries.length; l++) {
|
|
||||||
if ($defined(entries[l]))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
var topic = entries[l].getTopic();
|
|
||||||
var firstNodeHeight = topic.getSize().height;
|
|
||||||
lowerLimit = refence.y - (height / 2) - (firstNodeHeight / 2) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var upperLimit = null;
|
|
||||||
|
|
||||||
// Start moving all the elements ...
|
|
||||||
var newEntries = [];
|
|
||||||
var order = 0;
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var e = entries[i];
|
|
||||||
if (e && e.getTopic()) {
|
|
||||||
|
|
||||||
var currentTopic = e.getTopic();
|
|
||||||
e.setLowerLimit(lowerLimit);
|
|
||||||
|
|
||||||
// Update entry ...
|
|
||||||
var topicBoard = this._layoutManager.getTopicBoardForTopic(currentTopic);
|
|
||||||
var topicBoardHeight = topicBoard.getHeight();
|
|
||||||
|
|
||||||
upperLimit = lowerLimit + topicBoardHeight + mindplot.layout.boards.original.FixedDistanceBoard.INTER_TOPIC_DISTANCE;
|
|
||||||
e.setUpperLimit(upperLimit);
|
|
||||||
lowerLimit = upperLimit;
|
|
||||||
|
|
||||||
e.setOrder(order);
|
|
||||||
currentTopic.setOrder(order);
|
|
||||||
|
|
||||||
e.update();
|
|
||||||
newEntries[order] = e;
|
|
||||||
order++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._entries = newEntries;
|
|
||||||
},
|
|
||||||
|
|
||||||
removeTopic : function(topic) {
|
|
||||||
var order = topic.getOrder();
|
|
||||||
var entry = this.lookupEntryByOrder(order);
|
|
||||||
$assert(!entry.isAvailable(), "Illegal state");
|
|
||||||
|
|
||||||
entry.setTopic(null);
|
|
||||||
topic.setOrder(null);
|
|
||||||
this._entries.erase(entry);
|
|
||||||
|
|
||||||
// Repositionate all elements ...
|
|
||||||
this.repositionate();
|
|
||||||
},
|
|
||||||
|
|
||||||
addTopic : function(order, topic) {
|
|
||||||
|
|
||||||
// If the entry is not available, I must swap the the entries...
|
|
||||||
var entry = this.lookupEntryByOrder(order);
|
|
||||||
if (!entry.isAvailable()) {
|
|
||||||
this.freeEntry(entry);
|
|
||||||
// Create a dummy entry ...
|
|
||||||
// Puaj, do something with this...
|
|
||||||
entry = this.createBoardEntry(-1, 0, order);
|
|
||||||
this._entries[order] = entry;
|
|
||||||
}
|
|
||||||
this._entries[order] = entry;
|
|
||||||
|
|
||||||
// Add to the board ...
|
|
||||||
entry.setTopic(topic, false);
|
|
||||||
|
|
||||||
// Repositionate all elements ...
|
|
||||||
this.repositionate();
|
|
||||||
},
|
|
||||||
|
|
||||||
lookupEntryByPosition : function(pos) {
|
|
||||||
$assert(pos, 'position can not be null');
|
|
||||||
|
|
||||||
var entries = this._entries;
|
|
||||||
var result = null;
|
|
||||||
for (var i = 0; i < entries.length; i++) {
|
|
||||||
var entry = entries[i];
|
|
||||||
if (pos.y < entry.getUpperLimit() && pos.y >= entry.getLowerLimit()) {
|
|
||||||
result = entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == null) {
|
|
||||||
var defaultHeight = this._defaultWidth;
|
|
||||||
if (entries.length == 0) {
|
|
||||||
var reference = this.getReferencePoint();
|
|
||||||
var yReference = reference.y;
|
|
||||||
result = this.createBoardEntry(yReference - (defaultHeight / 2), yReference + (defaultHeight / 2), 0);
|
|
||||||
} else {
|
|
||||||
var firstEntry = entries[0];
|
|
||||||
if (pos.y < firstEntry.getLowerLimit()) {
|
|
||||||
var upperLimit = firstEntry.getLowerLimit();
|
|
||||||
var lowerLimit = upperLimit - defaultHeight;
|
|
||||||
result = this.createBoardEntry(lowerLimit, upperLimit, 0);
|
|
||||||
} else {
|
|
||||||
var entriesLenght = entries.length;
|
|
||||||
var lastEntry = entries[entriesLenght - 1];
|
|
||||||
var lowerLimit = lastEntry.getUpperLimit();
|
|
||||||
var upperLimit = lowerLimit + defaultHeight;
|
|
||||||
result = this.createBoardEntry(lowerLimit, upperLimit, entriesLenght);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mindplot.layout.boards.original.FixedDistanceBoard.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE = 60;
|
|
||||||
mindplot.layout.boards.original.FixedDistanceBoard.INTER_TOPIC_DISTANCE = 6;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,127 +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.layout.boards.original.MainTopicBoard = new Class({
|
|
||||||
Extends:mindplot.layout.boards.original.Board,
|
|
||||||
initialize:function(topic, layoutManager) {
|
|
||||||
this._layoutManager = layoutManager;
|
|
||||||
this._topic = topic;
|
|
||||||
this._board = null;
|
|
||||||
this._height = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
_getBoard: function() {
|
|
||||||
if (!$defined(this._board)) {
|
|
||||||
var topic = this._topic;
|
|
||||||
this._board = new mindplot.layout.boards.original.FixedDistanceBoard(mindplot.MainTopic.DEFAULT_MAIN_TOPIC_HEIGHT, topic, this._layoutManager);
|
|
||||||
}
|
|
||||||
return this._board;
|
|
||||||
},
|
|
||||||
|
|
||||||
updateReferencePoint : function(position) {
|
|
||||||
this._board.updateReferencePoint(position);
|
|
||||||
},
|
|
||||||
|
|
||||||
updateChildrenPosition : function(topic) {
|
|
||||||
var board = this._getBoard();
|
|
||||||
board.updateReferencePoint();
|
|
||||||
},
|
|
||||||
|
|
||||||
positionateDragTopic : function(dragTopic) {
|
|
||||||
$assert(dragTopic != null, 'dragTopic can not be null');
|
|
||||||
$assert(dragTopic.isDragTopic, 'dragTopic must be DragTopic instance');
|
|
||||||
|
|
||||||
// This node is a main topic node. Position
|
|
||||||
var dragPos = dragTopic.getPosition();
|
|
||||||
var board = this._getBoard();
|
|
||||||
|
|
||||||
// Look for entry ...
|
|
||||||
var entry = board.lookupEntryByPosition(dragPos);
|
|
||||||
|
|
||||||
// Calculate 'y' position base on the entry ...
|
|
||||||
var yCoord;
|
|
||||||
if (!entry.isAvailable() && entry.getTopic() != dragTopic.getDraggedTopic()) {
|
|
||||||
yCoord = entry.getLowerLimit();
|
|
||||||
} else {
|
|
||||||
yCoord = entry.workoutEntryYCenter();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update board position.
|
|
||||||
var targetTopic = dragTopic.getConnectedToTopic();
|
|
||||||
var xCoord = this._workoutXBorderDistance(targetTopic);
|
|
||||||
|
|
||||||
// Add the size of the pivot to the distance ...
|
|
||||||
var halfPivotWidth = mindplot.DragTopic.PIVOT_SIZE.width / 2;
|
|
||||||
xCoord = xCoord + ((dragPos.x > 0) ? halfPivotWidth : -halfPivotWidth);
|
|
||||||
|
|
||||||
var pivotPos = new core.Point(xCoord, yCoord);
|
|
||||||
dragTopic.setBoardPosition(pivotPos);
|
|
||||||
|
|
||||||
var order = entry.getOrder();
|
|
||||||
dragTopic.setOrder(order);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This x distance doesn't take into account the size of the shape.
|
|
||||||
*/
|
|
||||||
_workoutXBorderDistance : function(topic) {
|
|
||||||
$assert(topic, 'topic can not be null');
|
|
||||||
var board = this._getBoard();
|
|
||||||
return board.workoutXBorderDistance(topic);
|
|
||||||
},
|
|
||||||
|
|
||||||
addBranch : function(topic) {
|
|
||||||
var order = topic.getOrder();
|
|
||||||
$assert($defined(order), "Order must be defined");
|
|
||||||
|
|
||||||
// If the entry is not available, I must swap the the entries...
|
|
||||||
var board = this._getBoard();
|
|
||||||
var entry = board.lookupEntryByOrder(order);
|
|
||||||
if (!entry.isAvailable()) {
|
|
||||||
board.freeEntry(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the topic to the board ...
|
|
||||||
board.addTopic(order, topic);
|
|
||||||
|
|
||||||
// Repositionate all the parent topics ...
|
|
||||||
var currentTopic = this._topic;
|
|
||||||
if (currentTopic.getOutgoingConnectedTopic()) {
|
|
||||||
var parentTopic = currentTopic.getOutgoingConnectedTopic();
|
|
||||||
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeRepositionateEvent, [parentTopic]);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
repositionate : function() {
|
|
||||||
var board = this._getBoard();
|
|
||||||
board.repositionate();
|
|
||||||
},
|
|
||||||
|
|
||||||
removeTopicFromBoard : function(topic) {
|
|
||||||
var board = this._getBoard();
|
|
||||||
board.removeTopic(topic);
|
|
||||||
|
|
||||||
// Repositionate all the parent topics ...
|
|
||||||
var parentTopic = this._topic;
|
|
||||||
if (parentTopic.getOutgoingConnectedTopic()) {
|
|
||||||
var connectedTopic = parentTopic.getOutgoingConnectedTopic();
|
|
||||||
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeRepositionateEvent, [connectedTopic]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,214 +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.layout.boards.original.VariableDistanceBoard = new Class({
|
|
||||||
Extends: mindplot.layout.boards.original.Board,
|
|
||||||
initialize: function(defaultHeight, referencePoint) {
|
|
||||||
this.parent(defaultHeight, referencePoint);
|
|
||||||
var zeroEntryCoordinate = referencePoint.y;
|
|
||||||
var entry = this.createBoardEntry(zeroEntryCoordinate - (defaultHeight / 2), zeroEntryCoordinate + (defaultHeight / 2), 0);
|
|
||||||
this._entries.set(0, entry);
|
|
||||||
},
|
|
||||||
|
|
||||||
lookupEntryByOrder:function(order) {
|
|
||||||
var entries = this._entries;
|
|
||||||
var index = this._orderToIndex(order);
|
|
||||||
|
|
||||||
var result = entries.get(index);
|
|
||||||
if (!$defined(result)) {
|
|
||||||
// I've not found a entry. I have to create a new one.
|
|
||||||
var i = 1;
|
|
||||||
var zeroEntry = entries.get(0);
|
|
||||||
var distance = zeroEntry.getWidth() / 2;
|
|
||||||
var indexSign = Math.sign(index);
|
|
||||||
var absIndex = Math.abs(index);
|
|
||||||
while (i < absIndex) {
|
|
||||||
// Move to the next entry ...
|
|
||||||
var entry = entries.get(i, indexSign);
|
|
||||||
if (entry != null) {
|
|
||||||
distance += entry.getWidth();
|
|
||||||
} else {
|
|
||||||
distance += this._defaultWidth;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate limits ...
|
|
||||||
var upperLimit = -1;
|
|
||||||
var lowerLimit = -1;
|
|
||||||
var offset = zeroEntry.workoutEntryYCenter();
|
|
||||||
if (index >= 0) {
|
|
||||||
lowerLimit = offset + distance;
|
|
||||||
upperLimit = lowerLimit + this._defaultWidth;
|
|
||||||
} else {
|
|
||||||
upperLimit = offset - distance;
|
|
||||||
lowerLimit = upperLimit - this._defaultWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = this.createBoardEntry(lowerLimit, upperLimit, order);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
createBoardEntry:function(lowerLimit, upperLimit, order) {
|
|
||||||
return new mindplot.layout.boards.original.BoardEntry(lowerLimit, upperLimit, order);
|
|
||||||
},
|
|
||||||
|
|
||||||
updateReferencePoint:function(position) {
|
|
||||||
var entries = this._entries;
|
|
||||||
var referencePoint = this._referencePoint;
|
|
||||||
|
|
||||||
// Update zero entry current position.
|
|
||||||
this._referencePoint = position.clone();
|
|
||||||
var yOffset = position.y - referencePoint.y;
|
|
||||||
|
|
||||||
var i = -entries.lowerLength();
|
|
||||||
for (; i <= entries.length(1); i++) {
|
|
||||||
var entry = entries.get(i);
|
|
||||||
if (entry != null) {
|
|
||||||
var upperLimit = entry.getUpperLimit() + yOffset;
|
|
||||||
var lowerLimit = entry.getLowerLimit() + yOffset;
|
|
||||||
entry.setUpperLimit(upperLimit);
|
|
||||||
entry.setLowerLimit(lowerLimit);
|
|
||||||
|
|
||||||
// Update topic position ...
|
|
||||||
if (!entry.isAvailable()) {
|
|
||||||
var topic = entry.getTopic();
|
|
||||||
var topicPosition = topic.getPosition();
|
|
||||||
topicPosition.y = topicPosition.y + yOffset;
|
|
||||||
|
|
||||||
// MainTopicToCentral must be positioned based on the referencePoint.
|
|
||||||
var xOffset = position.x - referencePoint.x;
|
|
||||||
topicPosition.x = topicPosition.x + xOffset;
|
|
||||||
|
|
||||||
topic.setPosition(topicPosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
lookupEntryByPosition:function(pos) {
|
|
||||||
$assert(pos, 'position can not be null');
|
|
||||||
var entries = this._entries;
|
|
||||||
var zeroEntry = entries.get(0);
|
|
||||||
if (zeroEntry.isCoordinateIn(pos.y)) {
|
|
||||||
return zeroEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is Upper or lower ?
|
|
||||||
var sign = -1;
|
|
||||||
if (pos.y >= zeroEntry.getUpperLimit()) {
|
|
||||||
sign = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
var i = 1;
|
|
||||||
var tempEntry = this.createBoardEntry();
|
|
||||||
var currentEntry = zeroEntry;
|
|
||||||
while (true) {
|
|
||||||
// Move to the next entry ...
|
|
||||||
var index = i * sign;
|
|
||||||
var entry = entries.get(index);
|
|
||||||
if ($defined(entry)) {
|
|
||||||
currentEntry = entry;
|
|
||||||
} else {
|
|
||||||
// Calculate boundaries...
|
|
||||||
var lowerLimit, upperLimit;
|
|
||||||
if (sign > 0) {
|
|
||||||
lowerLimit = currentEntry.getUpperLimit();
|
|
||||||
upperLimit = lowerLimit + this._defaultWidth;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
upperLimit = currentEntry.getLowerLimit();
|
|
||||||
lowerLimit = upperLimit - this._defaultWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update current entry.
|
|
||||||
currentEntry = tempEntry;
|
|
||||||
currentEntry.setLowerLimit(lowerLimit);
|
|
||||||
currentEntry.setUpperLimit(upperLimit);
|
|
||||||
|
|
||||||
var order = this._indexToOrder(index);
|
|
||||||
currentEntry.setOrder(order);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Have I found the item?
|
|
||||||
if (currentEntry.isCoordinateIn(pos.y)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return currentEntry;
|
|
||||||
},
|
|
||||||
|
|
||||||
update:function(entry) {
|
|
||||||
$assert(entry, 'Entry can not be null');
|
|
||||||
var order = entry.getOrder();
|
|
||||||
var index = this._orderToIndex(order);
|
|
||||||
|
|
||||||
this._entries.set(index, entry);
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
freeEntry:function(entry) {
|
|
||||||
var order = entry.getOrder();
|
|
||||||
var entries = this._entries;
|
|
||||||
|
|
||||||
var index = this._orderToIndex(order);
|
|
||||||
var indexSign = Math.sign(index);
|
|
||||||
|
|
||||||
var currentTopic = entry.getTopic();
|
|
||||||
var i = Math.abs(index) + 1;
|
|
||||||
while (currentTopic) {
|
|
||||||
var e = entries.get(i, indexSign);
|
|
||||||
if ($defined(currentTopic) && !$defined(e)) {
|
|
||||||
var entryOrder = this._indexToOrder(i * indexSign);
|
|
||||||
e = this.lookupEntryByOrder(entryOrder);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the topic to the next entry ...
|
|
||||||
var topic = null;
|
|
||||||
if ($defined(e)) {
|
|
||||||
topic = e.getTopic();
|
|
||||||
if ($defined(currentTopic)) {
|
|
||||||
e.setTopic(currentTopic);
|
|
||||||
}
|
|
||||||
this.update(e);
|
|
||||||
}
|
|
||||||
currentTopic = topic;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear the entry topic ...
|
|
||||||
entry.setTopic(null);
|
|
||||||
},
|
|
||||||
|
|
||||||
_orderToIndex:function(order) {
|
|
||||||
var index = Math.round(order / 2);
|
|
||||||
return ((order % 2) == 0) ? index : -index;
|
|
||||||
},
|
|
||||||
|
|
||||||
_indexToOrder:function(index) {
|
|
||||||
var order = Math.abs(index) * 2;
|
|
||||||
return (index >= 0) ? order : order - 1;
|
|
||||||
},
|
|
||||||
|
|
||||||
inspect:function() {
|
|
||||||
return this._entries.inspect();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
@ -1,12 +0,0 @@
|
|||||||
<map name="mapId" version="pela">
|
|
||||||
<topic central="true" id="0">
|
|
||||||
<topic position="156,-49" order="0" id="1"/>
|
|
||||||
<topic position="-156,-49" order="1" id="2"/>
|
|
||||||
<topic position="156,-16" order="2" id="3"/>
|
|
||||||
<topic position="-156,-16" order="3" id="4"/>
|
|
||||||
<topic position="156,16" order="4" id="5"/>
|
|
||||||
<topic position="-156,16" order="5" id="6"/>
|
|
||||||
<topic position="156,49" order="6" id="7"/>
|
|
||||||
<topic position="-156,49" order="7" id="8"/>
|
|
||||||
</topic>
|
|
||||||
</map>
|
|
Loading…
Reference in New Issue
Block a user