85 行
2.6 KiB

define( function ( require, exports, module ) {
var Group = require( 'graphic/group' );
var Connection = require( '../graffle/bezierconnection' );
var Query = require( '../pathdiagram/dataquery' );
var Rect = require( 'graphic/rect' );
var Text = require( 'graphic/text' );
var TextSpan = require( 'graphic/textspan' );
var PathNode = require( '../pathdiagram/pathnode' );
var colors = require( '../pathdiagram/colors' );
var rHeight = 25;
var rWidth = 250;
var rMargin = 10;
var lMargin = 100;
var LevelContainer = require( 'core/class' ).createClass( 'LevelContainer', {
base: Group,
constructor: function ( level ) {
this.callBase();
this.level = level;
},
getPathNodes: function() {
return this.getItems();
},
render: function( stream, x, yMiddle ) {
this.clear();
if(!stream) {
return;
}
var yStart, i, y, node, data, text, pBox;
yStart = yMiddle - ( rHeight + rMargin ) * (stream.length - 1) / 2;
for(i = 0, y = yStart; i < stream.length; i++, y += rHeight + rMargin) {
data = stream[ i ];
node = new PathNode( x, y, rWidth, rHeight, data, this.level === 0 );
this.addShape( node );
node.on('click', this.onNodeClick.bind(this));
}
},
onNodeClick: function( e ) {
var node = e.targetShape;
while( false === (node instanceof PathNode)) {
node = node.container;
}
if( this.selected != node ) {
this.select(node);
} else {
this.select(null);
}
},
select: function(node) {
if(this.level === 0 && node === null) {
return;
}
if(typeof(node) === 'number') {
node = this.getItem(node);
}
var last = this.selected;
if(this.selected) {
this.selected.unselect();
}
this.selected = node;
if(node) {
node.select();
this.levelWord = node.data.word;
}
this.trigger('selected', {
level: this.level,
levelContainer: this,
pathNode: node,
lastPathNode: last
});
},
getSelected: function() {
return this.selected;
}
} );
LevelContainer.RECT_SIZE = {
width: rWidth,
height: rHeight
};
return LevelContainer;
} );