Free Position tests asserted

This commit is contained in:
Gonzalo Bellver
2012-01-26 13:07:45 -03:00
parent 402226afbc
commit 9ada52d720
9 changed files with 116 additions and 18 deletions

View File

@@ -177,6 +177,10 @@ mindplot.layout.BalancedSorter = new Class({
}
},
getDirection: function(treeSet, node) {
return node.getOrder() % 2 == 0 ? 1 : -1;
},
toString:function() {
return "Balanced Sorter";
},

View File

@@ -44,6 +44,10 @@ mindplot.layout.ChildrenSorterStrategy = new Class({
throw "Method must be implemented";
},
getDirection: function(treeSet, node) {
throw "Method must be implemented";
},
toString:function() {
throw "Method must be implemented: print name";
}

View File

@@ -109,6 +109,8 @@ mindplot.layout.LayoutManager = new Class({
if (free) {
$assert($defined(position), "position cannot be null for predict in free positioning");
//TODO(gb): check this. Should direction be obtained by the sorter?
var rootNode = this._treeSet.getRootNode(parent);
var direction = parent.getPosition().x > rootNode.getPosition().x ? 1 : -1;

View File

@@ -124,6 +124,10 @@ mindplot.layout.Node = new Class({
this._setProperty('freeDisplacement', Object.clone(newDisplacement));
},
resetFreeDisplacement: function() {
this._setProperty('freeDisplacement', {x:0, y:0});
},
getFreeDisplacement: function() {
var freeDisplacement = this._getProperty('freeDisplacement');
return (freeDisplacement || {x:0, y:0});

View File

@@ -55,7 +55,7 @@ mindplot.layout.OriginalLayout = new Class({
// Make it fixed
node.setFree(false);
node.setFreeDisplacement({x:0, y:0});
node.resetFreeDisplacement();
// Remove from children list.
var sorter = parent.getSorter();
@@ -107,6 +107,14 @@ mindplot.layout.OriginalLayout = new Class({
children.forEach(function(child) {
var offset = offsetById[child.getId()];
var childFreeDisplacement = child.getFreeDisplacement();
var direction = node.getSorter().getDirection(this._treeSet, child);
if ((direction > 0 && childFreeDisplacement.x < 0) || (direction < 0 && childFreeDisplacement.x > 0)) {
child.resetFreeDisplacement();
child.setFreeDisplacement({x: -childFreeDisplacement.x, y:childFreeDisplacement.y});
}
offset.x += child.getFreeDisplacement().x;
offset.y += child.getFreeDisplacement().y;

View File

@@ -195,10 +195,10 @@ mindplot.layout.RootedTreeSet = new Class({
var rectPosition = {x: rect.attr("x") - canvas.width/2 + rect.attr("width")/2, y:rect.attr("y") - canvas.height/2 + rect.attr("height")/2};
var rectSize = {width: rect.attr("width"), height:rect.attr("height")};
rect.click(function() {
console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", sorter:" + node.getSorter() +"]");
console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y +")]");
});
text.click(function() {
console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", sorter:" + node.getSorter() +"]");
console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y +")]");
});
for (var i = 0; i < children.length; i++) {

View File

@@ -137,6 +137,12 @@ mindplot.layout.SymmetricSorter = new Class({
}
},
getDirection: function(treeSet, node) {
var parent = treeSet.getParent(node);
var rootNode = treeSet.getRootNode(node);
return parent.getPosition().x >= rootNode.getPosition().x ? 1 : -1;
},
toString:function() {
return "Symmetric Sorter";
}