mirror of
https://github.com/wisemapping/wisemapping-open-source.git
synced 2025-04-19 02:05:32 +08:00
131 lines
4.6 KiB
JavaScript
131 lines
4.6 KiB
JavaScript
/*
|
|
* 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.MainTopicBoard = new Class({
|
|
Extends:mindplot.Board,
|
|
initialize:function(topic, layoutManager) {
|
|
this._layoutManager = layoutManager;
|
|
this._topic = topic;
|
|
this._board = null;
|
|
this._height = 0;
|
|
},
|
|
|
|
|
|
_getBoard: function() {
|
|
if (!core.Utils.isDefined(this._board)) {
|
|
var topic = this._topic;
|
|
this._board = new mindplot.FixedDistanceBoard(mindplot.MainTopicBoard.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) {
|
|
core.assert(dragTopic != null, 'dragTopic can not be null');
|
|
core.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) {
|
|
core.assert(topic, 'topic can not be null');
|
|
var board = this._getBoard();
|
|
return board.workoutXBorderDistance(topic);
|
|
},
|
|
|
|
addBranch : function(topic) {
|
|
var order = topic.getOrder();
|
|
core.assert(core.Utils.isDefined(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]);
|
|
}
|
|
}
|
|
});
|
|
|
|
mindplot.MainTopicBoard.DEFAULT_MAIN_TOPIC_HEIGHT = 18;
|