mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-26 15:54:55 +01:00
Refactor and create INode and IMindmap
This commit is contained in:
parent
71b761081f
commit
21f848e3df
@ -16,9 +16,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
mindplot.collaboration.framework.brix.model.Mindmap = new Class({
|
mindplot.collaboration.framework.brix.model.Mindmap = new Class({
|
||||||
Extends:mindplot.model.Mindmap,
|
Extends:mindplot.model.IMindmap,
|
||||||
initialize:function(brixModel, brixFramework) {
|
initialize:function(brixModel, brixFramework) {
|
||||||
this.parent();
|
|
||||||
this._brixModel = brixModel;
|
this._brixModel = brixModel;
|
||||||
this._brixFramework = brixFramework;
|
this._brixFramework = brixFramework;
|
||||||
if (!$defined(this._brixModel)) {
|
if (!$defined(this._brixModel)) {
|
||||||
@ -32,6 +31,7 @@ mindplot.collaboration.framework.brix.model.Mindmap = new Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_createBrixModel:function() {
|
_createBrixModel:function() {
|
||||||
var model = this._brixFramework.getBrixModel().create("Map");
|
var model = this._brixFramework.getBrixModel().create("Map");
|
||||||
var branches = this._brixFramework.getBrixModel().create("List");
|
var branches = this._brixFramework.getBrixModel().create("List");
|
||||||
@ -39,22 +39,33 @@ mindplot.collaboration.framework.brix.model.Mindmap = new Class({
|
|||||||
this._brixFramework.addMindmap(model);
|
this._brixFramework.addMindmap(model);
|
||||||
return model;
|
return model;
|
||||||
},
|
},
|
||||||
|
|
||||||
getBrixModel:function() {
|
getBrixModel:function() {
|
||||||
return this._brixModel;
|
return this._brixModel;
|
||||||
},
|
},
|
||||||
setId : function(id) {
|
|
||||||
this._iconType = id;
|
getBranches : function() {
|
||||||
|
var result = [];
|
||||||
|
var branches = this._brixModel.get("branches");
|
||||||
|
|
||||||
|
for (var i = 0; i < branches.size(); i++) {
|
||||||
|
result.push();
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
setVersion : function(version) {
|
|
||||||
this._version = version;
|
addBranch : function(nodeModel) {
|
||||||
},
|
$assert(nodeModel, "nodeModel can not be null");
|
||||||
addBranch : function(nodeModel, addToModel) {
|
|
||||||
this.parent(nodeModel);
|
|
||||||
if($defined(addToModel) && addToModel){
|
|
||||||
var branches = this._brixModel.get("branches");
|
var branches = this._brixModel.get("branches");
|
||||||
branches.add(nodeModel.getBrixModel());
|
branches.add(nodeModel.getBrixModel());
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeBranch : function(nodeModel) {
|
||||||
|
$assert(nodeModel, "nodeModel can not be null");
|
||||||
|
var branches = this._brixModel.get("branches");
|
||||||
|
branches.remove(nodeModel.getBrixModel());
|
||||||
|
},
|
||||||
|
|
||||||
connect : function(parent, child) {
|
connect : function(parent, child) {
|
||||||
this.parent(parent, child);
|
this.parent(parent, child);
|
||||||
|
|
||||||
@ -72,36 +83,8 @@ mindplot.collaboration.framework.brix.model.Mindmap = new Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
disconnect : function(child) {
|
createNode : function(type, id) {
|
||||||
var parent = child.getParent();
|
return mindplot.collaboration.framework.brix.model.NodeModel.create(this._brixFramework, type, id, this);
|
||||||
$assert(child, 'Child can not be null.');
|
|
||||||
$assert(parent, 'Child model seems to be already connected');
|
|
||||||
|
|
||||||
parent._removeChild(child);
|
|
||||||
|
|
||||||
var branches = this.getBranches();
|
|
||||||
branches.push(child);
|
|
||||||
|
|
||||||
},
|
|
||||||
_createNode : function(type, id) {
|
|
||||||
$assert(type, 'Node type must be specified.');
|
|
||||||
var result = new mindplot.collaboration.framework.brix.model.NodeModel(null, this._brixFramework, type, this, id);
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
createRelationship : function(fromNode, toNode) {
|
|
||||||
$assert(fromNode, 'from node cannot be null');
|
|
||||||
$assert(toNode, 'to node cannot be null');
|
|
||||||
|
|
||||||
return new mindplot.model.RelationshipModel(fromNode, toNode);
|
|
||||||
},
|
|
||||||
|
|
||||||
addRelationship : function(relationship) {
|
|
||||||
this._relationships.push(relationship);
|
|
||||||
},
|
|
||||||
|
|
||||||
removeRelationship : function(relationship) {
|
|
||||||
this._relationships.erase(relationship);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
@ -17,70 +17,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
mindplot.collaboration.framework.brix.model.NodeModel = new Class({
|
mindplot.collaboration.framework.brix.model.NodeModel = new Class({
|
||||||
Extends: mindplot.model.NodeModel,
|
Extends: mindplot.model.INodeModel,
|
||||||
Attributes: ['text','fontSize','fontFamily','fontStyle','fontColor','fontWeight','borderColor','backgroundColor','shapeType'],
|
initialize : function(brixModel, brixFramework, mindmap) {
|
||||||
initialize : function(brixModel, brixFramework, type, mindmap, id) {
|
$assert(brixModel, "brixModel can not null");
|
||||||
// Inject property getters and setters ...
|
$assert(brixFramework, "brixFramework can not null");
|
||||||
this._injectSetAndGet();
|
|
||||||
|
|
||||||
|
this.parent(mindmap);
|
||||||
this._brixModel = brixModel;
|
this._brixModel = brixModel;
|
||||||
this._brixFramework = brixFramework;
|
this._brixFramework = brixFramework;
|
||||||
if ($defined(this._brixModel)) {
|
this._injectSetAndGet();
|
||||||
type = this._brixModel.get("type");
|
|
||||||
id = this._brixModel.get("id");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parent(type, mindmap, id);
|
|
||||||
if (!$defined(this._brixModel)) {
|
|
||||||
this._brixModel = this._createBrixModel();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// Call all the required setters for simple properties ...
|
|
||||||
var keys = mindplot.collaboration.framework.brix.model.NodeModel.prototype.Attributes;
|
|
||||||
keys.forEach(function(key) {
|
|
||||||
|
|
||||||
// Call setters ...
|
|
||||||
var funName = 'set' + key.capitalize();
|
|
||||||
var value = this._brixModel.get(key);
|
|
||||||
if (value != null) {
|
|
||||||
this[funName](value, false);
|
|
||||||
}
|
|
||||||
}.bind(this));
|
|
||||||
|
|
||||||
var position = this._brixModel.get("position");
|
|
||||||
this.setPosition(position.get("x"), position.get("y"), false);
|
|
||||||
|
|
||||||
var children = this._brixModel.get("children");
|
|
||||||
for (var i = 0; i < children.size(); i++) {
|
|
||||||
var bChild = children.get(i);
|
|
||||||
var child = new mindplot.collaboration.framework.brix.model.NodeModel(bChild, this._brixFramework, null, mindmap);
|
|
||||||
this._appendChild(child, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._addBrixListeners();
|
this._addBrixListeners();
|
||||||
},
|
},
|
||||||
|
|
||||||
_injectSetAndGet : function() {
|
|
||||||
var keys = mindplot.collaboration.framework.brix.model.NodeModel.prototype.Attributes;
|
|
||||||
|
|
||||||
keys.forEach(function(key) {
|
|
||||||
// Create setters ...
|
|
||||||
var setterName = 'set' + key.capitalize();
|
|
||||||
this[setterName] = function(value, updateModel) {
|
|
||||||
console.log('Calling setter for:' + setterName);
|
|
||||||
if (!$defined(updateModel) || updateModel) {
|
|
||||||
this._brixModel.put(key, value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create getters ...
|
|
||||||
var getterName = 'get' + key.capitalize();
|
|
||||||
this[getterName] = function() {
|
|
||||||
return this._brixModel.get(key);
|
|
||||||
};
|
|
||||||
}.bind(this));
|
|
||||||
},
|
|
||||||
|
|
||||||
_addBrixListeners:function() {
|
_addBrixListeners:function() {
|
||||||
// Register listener for properties changes ....
|
// Register listener for properties changes ....
|
||||||
this._brixModel.addListener("valueChanged", function(event) {
|
this._brixModel.addListener("valueChanged", function(event) {
|
||||||
@ -110,325 +58,20 @@ mindplot.collaboration.framework.brix.model.NodeModel = new Class({
|
|||||||
var y = position.get("y");
|
var y = position.get("y");
|
||||||
model.setPosition(x, y);
|
model.setPosition(x, y);
|
||||||
this._brixFramework.getActionDispatcher().addTopic(model, this.getId(), true);
|
this._brixFramework.getActionDispatcher().addTopic(model, this.getId(), true);
|
||||||
}
|
},
|
||||||
,
|
|
||||||
|
|
||||||
_createBrixModel:function() {
|
|
||||||
var model = this._brixFramework.getBrixModel().create("Map");
|
|
||||||
model.put("type", this._type);
|
|
||||||
model.put("id", this._id);
|
|
||||||
model.put("text", this._type == mindplot.model.NodeModel.CENTRAL_TOPIC_TYPE ? "Central Topic" : "Main Topic");
|
|
||||||
var position = this._brixFramework.getBrixModel().create("Map");
|
|
||||||
position.put("x", 0);
|
|
||||||
position.put("y", 0);
|
|
||||||
model.put("position", position);
|
|
||||||
var children = this._brixFramework.getBrixModel().create("List");
|
|
||||||
model.put("children", children);
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
getBrixModel:function() {
|
getBrixModel:function() {
|
||||||
return this._brixModel;
|
return this._brixModel;
|
||||||
}
|
}
|
||||||
,
|
|
||||||
clone : function() {
|
|
||||||
var result = new mindplot.model.NodeModel(this._type, this._mindmap);
|
|
||||||
result._order = this._order;
|
|
||||||
result._type = this._type;
|
|
||||||
result._children = this._children.map(function(item, index) {
|
|
||||||
var model = item.clone();
|
|
||||||
model._parent = result;
|
|
||||||
return model;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mindplot.collaboration.framework.brix.model.NodeModel.create = function(brixFramework, type, id, mindmap) {
|
||||||
|
var brixModel = brixFramework.getBrixModel().create("Map");
|
||||||
|
brixModel.put("type", type);
|
||||||
|
brixModel.put("id", this._id); // @todo...
|
||||||
|
|
||||||
result._icons = this._icons;
|
var children = brixFramework.getBrixModel().create("List");
|
||||||
result._links = this._links;
|
brixModel.put("children", children);
|
||||||
result._notes = this._notes;
|
|
||||||
result._size = this._size;
|
|
||||||
result._position = this._position;
|
|
||||||
result._id = this._id;
|
|
||||||
result._mindmap = this._mindmap;
|
|
||||||
result._text = this._text;
|
|
||||||
result._shapeType = this._shapeType;
|
|
||||||
result._fontFamily = this._fontFamily;
|
|
||||||
result._fontSize = this._fontSize;
|
|
||||||
result._fontStyle = this._fontStyle;
|
|
||||||
result._fontWeight = this._fontWeight;
|
|
||||||
result._fontColor = this._fontColor;
|
|
||||||
result._borderColor = this._borderColor;
|
|
||||||
result._backgroundColor = this._backgroundColor;
|
|
||||||
result._areChildrenShrinked = this._areChildrenShrinked;
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
areChildrenShrinked : function() {
|
return new mindplot.collaboration.framework.brix.model.NodeModel(brixFramework, brixModel, mindmap);
|
||||||
return this._areChildrenShrinked;
|
};
|
||||||
},
|
|
||||||
|
|
||||||
setChildrenShrinked : function(value) {
|
|
||||||
this._areChildrenShrinked = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
getId : function() {
|
|
||||||
return this._id;
|
|
||||||
},
|
|
||||||
|
|
||||||
setId : function(id) {
|
|
||||||
this._id = id;
|
|
||||||
if (mindplot.model.NodeModel._uuid < id) {
|
|
||||||
mindplot.model.NodeModel._uuid = id;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
getType : function() {
|
|
||||||
return this._type;
|
|
||||||
},
|
|
||||||
|
|
||||||
isNodeModel : function() {
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
isConnected : function() {
|
|
||||||
return this._parent != null;
|
|
||||||
},
|
|
||||||
|
|
||||||
createLink : function(url) {
|
|
||||||
$assert(url, 'Link URL must be specified.');
|
|
||||||
return new mindplot.model.LinkModel(url, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
addLink : function(link) {
|
|
||||||
$assert(link && link.isLinkModel(), 'Only LinkModel can be appended to Mindmap object as links');
|
|
||||||
this._links.push(link);
|
|
||||||
},
|
|
||||||
|
|
||||||
_removeLink : function(link) {
|
|
||||||
$assert(link && link.isLinkModel(), 'Only LinkModel can be appended to Mindmap object as links');
|
|
||||||
this._links.erase(link);
|
|
||||||
},
|
|
||||||
|
|
||||||
createNote : function(text) {
|
|
||||||
$assert(text != null, 'note text must be specified.');
|
|
||||||
return new mindplot.model.NoteModel(text, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
addNote : function(note) {
|
|
||||||
$assert(note && note.isNoteModel(), 'Only NoteModel can be appended to Mindmap object as links');
|
|
||||||
this._notes.push(note);
|
|
||||||
},
|
|
||||||
|
|
||||||
removeNote : function(note) {
|
|
||||||
$assert(note && note.isNoteModel(), 'Only NoteModel can be appended to Mindmap object as links');
|
|
||||||
this._notes.erase(note);
|
|
||||||
},
|
|
||||||
|
|
||||||
createIcon : function(iconType) {
|
|
||||||
$assert(iconType, 'IconType must be specified.');
|
|
||||||
return new mindplot.model.IconModel(iconType, this);
|
|
||||||
},
|
|
||||||
|
|
||||||
addIcon : function(icon) {
|
|
||||||
$assert(icon && icon.isIconModel(), 'Only IconModel can be appended to Mindmap object as icons');
|
|
||||||
this._icons.push(icon);
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
removeIcon : function(icon) {
|
|
||||||
$assert(icon && icon.isIconModel(), 'Only IconModel can be appended to Mindmap object as icons');
|
|
||||||
this._icons.erase(icon);
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
removeLastIcon : function() {
|
|
||||||
this._icons.pop();
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
_appendChild : function(child, updateModel) {
|
|
||||||
this.parent(child);
|
|
||||||
if (!$defined(updateModel) || ($defined(updateModel) && updateModel)) {
|
|
||||||
this.getBrixModel().get("children").add(child.getBrixModel());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
_removeChild : function(child) {
|
|
||||||
$assert(child && child.isNodeModel(), 'Only NodeModel can be appended to Mindmap object.');
|
|
||||||
this._children.erase(child);
|
|
||||||
child._parent = null;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
setPosition : function(x, y, updateModel) {
|
|
||||||
this.parent(x, y);
|
|
||||||
if (!$defined(updateModel) || ($defined(updateModel) && updateModel)) {
|
|
||||||
var position = this.getBrixModel().get("position");
|
|
||||||
position.put("x", this._position.x);
|
|
||||||
position.put("y", this._position.y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
setFinalPosition : function(x, y) {
|
|
||||||
$assert(x, "x coordinate must be defined");
|
|
||||||
$assert(y, "y coordinate must be defined");
|
|
||||||
|
|
||||||
if (!$defined(this._finalPosition)) {
|
|
||||||
this._finalPosition = new core.Point();
|
|
||||||
}
|
|
||||||
this._finalPosition.x = parseInt(x);
|
|
||||||
this._finalPosition.y = parseInt(y);
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
getFinalPosition : function() {
|
|
||||||
return this._finalPosition;
|
|
||||||
},
|
|
||||||
|
|
||||||
setSize : function(width, height) {
|
|
||||||
this._size.width = width;
|
|
||||||
this._size.height = height;
|
|
||||||
},
|
|
||||||
|
|
||||||
getSize : function() {
|
|
||||||
return {width:this._size.width,height:this._size.height};
|
|
||||||
},
|
|
||||||
|
|
||||||
getChildren : function() {
|
|
||||||
return this._children;
|
|
||||||
},
|
|
||||||
|
|
||||||
getIcons : function() {
|
|
||||||
return this._icons;
|
|
||||||
},
|
|
||||||
|
|
||||||
getLinks : function() {
|
|
||||||
return this._links;
|
|
||||||
},
|
|
||||||
|
|
||||||
getNotes : function() {
|
|
||||||
return this._notes;
|
|
||||||
},
|
|
||||||
|
|
||||||
getParent : function() {
|
|
||||||
return this._parent;
|
|
||||||
},
|
|
||||||
|
|
||||||
getMindmap : function() {
|
|
||||||
return this._mindmap;
|
|
||||||
},
|
|
||||||
|
|
||||||
setParent : function(parent) {
|
|
||||||
$assert(parent != this, 'The same node can not be parent and child if itself.');
|
|
||||||
this._parent = parent;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
canBeConnected : function(sourceModel, sourcePosition, targetTopicHeight) {
|
|
||||||
$assert(sourceModel != this, 'The same node can not be parent and child if itself.');
|
|
||||||
$assert(sourcePosition, 'childPosition can not be null.');
|
|
||||||
$assert(targetTopicHeight, 'childrenWidth can not be null.');
|
|
||||||
|
|
||||||
// Only can be connected if the node is in the left or rigth.
|
|
||||||
var targetModel = this;
|
|
||||||
var mindmap = targetModel.getMindmap();
|
|
||||||
var targetPosition = targetModel.getPosition();
|
|
||||||
var result = false;
|
|
||||||
|
|
||||||
if (sourceModel.getType() == mindplot.model.NodeModel.MAIN_TOPIC_TYPE) {
|
|
||||||
// Finally, check current node ubication.
|
|
||||||
var targetTopicSize = targetModel.getSize();
|
|
||||||
var yDistance = Math.abs(sourcePosition.y - targetPosition.y);
|
|
||||||
var gap = 35 + targetTopicHeight / 2;
|
|
||||||
if (targetModel.getChildren().length > 0) {
|
|
||||||
gap += Math.abs(targetPosition.y - targetModel.getChildren()[0].getPosition().y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (yDistance <= gap) {
|
|
||||||
// Circular connection ?
|
|
||||||
if (!sourceModel._isChildNode(this)) {
|
|
||||||
var toleranceDistance = (targetTopicSize.width / 2) + targetTopicHeight;
|
|
||||||
|
|
||||||
var xDistance = sourcePosition.x - targetPosition.x;
|
|
||||||
var isTargetAtRightFromCentral = targetPosition.x >= 0;
|
|
||||||
|
|
||||||
if (isTargetAtRightFromCentral) {
|
|
||||||
if (xDistance >= -targetTopicSize.width / 2 && xDistance <= mindplot.model.NodeModel.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE / 2 + (targetTopicSize.width / 2)) {
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (xDistance <= targetTopicSize.width / 2 && Math.abs(xDistance) <= mindplot.model.NodeModel.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE / 2 + (targetTopicSize.width / 2)) {
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw "No implemented yet";
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
_isChildNode : function(node) {
|
|
||||||
var result = false;
|
|
||||||
if (node == this) {
|
|
||||||
result = true;
|
|
||||||
} else {
|
|
||||||
var children = this.getChildren();
|
|
||||||
for (var i = 0; i < children.length; i++) {
|
|
||||||
var child = children[i];
|
|
||||||
result = child._isChildNode(node);
|
|
||||||
if (result) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
disconnect : function() {
|
|
||||||
var mindmap = this.getMindmap();
|
|
||||||
mindmap.disconnect(this);
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
getOrder : function() {
|
|
||||||
return this._order;
|
|
||||||
},
|
|
||||||
|
|
||||||
setOrder : function(value) {
|
|
||||||
this._order = value;
|
|
||||||
},
|
|
||||||
|
|
||||||
deleteNode : function() {
|
|
||||||
var mindmap = this._mindmap;
|
|
||||||
|
|
||||||
// if it has children nodes, Their must be disconnected.
|
|
||||||
var lenght = this._children;
|
|
||||||
for (var i = 0; i < lenght; i++) {
|
|
||||||
var child = this._children[i];
|
|
||||||
mindmap.disconnect(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
var parent = this._parent;
|
|
||||||
if ($defined(parent)) {
|
|
||||||
// if it is connected, I must remove it from the parent..
|
|
||||||
mindmap.disconnect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// It's an isolated node. It must be a hole branch ...
|
|
||||||
var branches = mindmap.getBranches();
|
|
||||||
branches.erase(this);
|
|
||||||
|
|
||||||
}
|
|
||||||
,
|
|
||||||
|
|
||||||
inspect : function() {
|
|
||||||
return '(type:' + this.getType() + ' , id: ' + this.getId() + ')';
|
|
||||||
}
|
|
||||||
});
|
|
Loading…
Reference in New Issue
Block a user