Commit e3974368 authored by techird's avatar techird

stash

parent ff77b6ff
KityMinder 渲染和布局重构方案
=====
## 背景
当前的节点渲染和布局把很多部分的功能都揉在一起来实现,维护和添加新功能都比较困难,所以决定把现有的 layout.js、layout.default.js 和 layout.bottom.js 重构。
## 约定
为了不产生误会,下面约定一些词汇的意思。
渲染:对节点的绘制的过程。渲染参照的坐标系是节点画布的坐标系。
布局:对节点定位的过程,发生在渲染之后。定位使用的坐标系是脑图画布的坐标系。
节点树多边形:表示一个节点以及其子树所占的多边形区域。
### Layout
Layout
### Render
### Connect
### Expander
...@@ -8,17 +8,17 @@ utils.extend( KityMinder, function () { ...@@ -8,17 +8,17 @@ utils.extend( KityMinder, function () {
registerUI: function ( uiname, fn ) { registerUI: function ( uiname, fn ) {
utils.each( uiname.split( /\s+/ ), function ( i, name ) { utils.each( uiname.split( /\s+/ ), function ( i, name ) {
_kityminderUI[ name ] = fn; _kityminderUI[ name ] = fn;
} ) } );
}, },
registerToolbarUI: function ( uiname, fn ) { registerToolbarUI: function ( uiname, fn ) {
utils.each( uiname.split( /\s+/ ), function ( i, name ) { utils.each( uiname.split( /\s+/ ), function ( i, name ) {
_kityminderToolbarUI[ name ] = fn; _kityminderToolbarUI[ name ] = fn;
} ) } );
}, },
loadUI: function ( km ) { loadUI: function ( km ) {
utils.each( _kityminderUI, function ( i, fn ) { utils.each( _kityminderUI, function ( i, fn ) {
fn.call( km ) fn.call( km );
} ) } );
}, },
_createUI: function ( id ) { _createUI: function ( id ) {
var $cont = $( '<div class="kmui-container"></div>' ), var $cont = $( '<div class="kmui-container"></div>' ),
...@@ -43,21 +43,21 @@ utils.extend( KityMinder, function () { ...@@ -43,21 +43,21 @@ utils.extend( KityMinder, function () {
$.each( toolbars, function ( i, uiNames ) { $.each( toolbars, function ( i, uiNames ) {
$.each( uiNames.split( /\s+/ ), function ( index, name ) { $.each( uiNames.split( /\s+/ ), function ( index, name ) {
if ( name == '|' ) { if ( name == '|' ) {
$.kmuiseparator && btns.push( $.kmuiseparator() ); if ($.kmuiseparator) btns.push( $.kmuiseparator() );
} else { } else {
if ( _kityminderToolbarUI[ name ] ) { if ( _kityminderToolbarUI[ name ] ) {
var ui = _kityminderToolbarUI[ name ].call( km, name ); var ui = _kityminderToolbarUI[ name ].call( km, name );
ui && btns.push( ui ); if (ui) btns.push( ui );
} }
} }
} ); } );
btns.length && $toolbar.kmui().appendToBtnmenu( btns ); if (btns.length) $toolbar.kmui().appendToBtnmenu( btns );
} ); } );
$toolbar.append( $( '<div class="kmui-dialog-container"></div>' ) ); $toolbar.append( $( '<div class="kmui-dialog-container"></div>' ) );
}else{ }else{
$toolbar.hide() $toolbar.hide();
} }
}, },
...@@ -91,7 +91,7 @@ utils.extend( KityMinder, function () { ...@@ -91,7 +91,7 @@ utils.extend( KityMinder, function () {
} }
}, },
getWidgetData: function ( name ) { getWidgetData: function ( name ) {
return _widgetData[ name ] return _widgetData[ name ];
}, },
setWidgetBody: function ( name, $widget, km ) { setWidgetBody: function ( name, $widget, km ) {
if ( !km._widgetData ) { if ( !km._widgetData ) {
...@@ -104,10 +104,10 @@ utils.extend( KityMinder, function () { ...@@ -104,10 +104,10 @@ utils.extend( KityMinder, function () {
getWidgetCallback: function ( widgetName ) { getWidgetCallback: function ( widgetName ) {
var me = this; var me = this;
return function () { return function () {
return _widgetCallBack[ widgetName ].apply( me, [ me, $widget ].concat( utils.argsToArray( arguments, 0 ) ) ) return _widgetCallBack[ widgetName ].apply( me, [ me, $widget ].concat( utils.argsToArray( arguments, 0 ) ) );
} };
} }
} ) } );
} }
var pro = _widgetData[ name ]; var pro = _widgetData[ name ];
...@@ -125,18 +125,19 @@ utils.extend( KityMinder, function () { ...@@ -125,18 +125,19 @@ utils.extend( KityMinder, function () {
//清除光标 //清除光标
km.fire('selectionclear'); km.fire('selectionclear');
pro.initContent( km, $widget ); pro.initContent( km, $widget );
//在dialog上阻止键盘冒泡,导致跟编辑输入冲突的问题 //在dialog上阻止键盘冒泡,导致跟编辑输入冲突的问题
$widget.on('keydown keyup keypress',function(e){ $widget.on('keydown keyup keypress',function(e){
e.stopPropagation() e.stopPropagation();
}); });
if ( !pro._preventDefault ) { if ( !pro._preventDefault ) {
pro.initEvent( km, $widget ); pro.initEvent( km, $widget );
} }
pro.width && $widget.width( pro.width ); if (pro.width) $widget.width( pro.width );
}, },
setActiveWidget: function ( $widget ) { setActiveWidget: function ( $widget ) {
_activeWidget = $widget; _activeWidget = $widget;
} }
} };
}() ); }() );
\ No newline at end of file
...@@ -8,7 +8,7 @@ kity.extendClass( Minder, { ...@@ -8,7 +8,7 @@ kity.extendClass( Minder, {
this._query = {}; this._query = {};
this._modules = {}; this._modules = {};
var i, name, module, moduleDeals, dealCommands, dealEvents; var i, name, type, module, moduleDeals, dealCommands, dealEvents;
var me = this; var me = this;
for ( i = 0; i < modulesToLoad.length; i++ ) { for ( i = 0; i < modulesToLoad.length; i++ ) {
...@@ -26,14 +26,14 @@ kity.extendClass( Minder, { ...@@ -26,14 +26,14 @@ kity.extendClass( Minder, {
//command加入命令池子 //command加入命令池子
dealCommands = moduleDeals.commands; dealCommands = moduleDeals.commands;
for ( var name in dealCommands ) { for ( name in dealCommands ) {
this._commands[ name.toLowerCase() ] = new dealCommands[ name ]; this._commands[ name.toLowerCase() ] = new dealCommands[ name ]();
} }
//绑定事件 //绑定事件
dealEvents = moduleDeals.events; dealEvents = moduleDeals.events;
if ( dealEvents ) { if ( dealEvents ) {
for ( var type in dealEvents ) { for ( type in dealEvents ) {
me.on( type, dealEvents[ type ] ); me.on( type, dealEvents[ type ] );
} }
} }
...@@ -43,12 +43,12 @@ kity.extendClass( Minder, { ...@@ -43,12 +43,12 @@ kity.extendClass( Minder, {
} }
//添加模块的快捷键 //添加模块的快捷键
if ( moduleDeals.addShortcutKeys ) { if ( moduleDeals.addShortcutKeys ) {
this.addShortcutKeys( moduleDeals.addShortcutKeys ) this.addShortcutKeys( moduleDeals.addShortcutKeys );
} }
//添加邮件菜单 //添加邮件菜单
if(moduleDeals.contextmenu){ if(moduleDeals.contextmenu){
this.addContextmenu(moduleDeals.contextmenu) this.addContextmenu(moduleDeals.contextmenu);
} }
} }
}, },
......
...@@ -12,20 +12,20 @@ KityMinder.registerModule( "basestylemodule", function () { ...@@ -12,20 +12,20 @@ KityMinder.registerModule( "basestylemodule", function () {
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
n.setData( 'bold' ); n.setData( 'bold' );
n.getTextShape().setAttr( 'font-weight' ); n.getTextShape().setAttr( 'font-weight' );
km.updateLayout( n ) km.updateLayout( n );
} ) } );
} else { } else {
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
n.setData( 'bold', true ); n.setData( 'bold', true );
n.getTextShape().setAttr( 'font-weight', 'bold' ); n.getTextShape().setAttr( 'font-weight', 'bold' );
km.updateLayout( n ) km.updateLayout( n );
} ) } );
} }
}, },
queryState: function () { queryState: function () {
var nodes = km.getSelectedNodes(), var nodes = km.getSelectedNodes(),
result = 0; result = 0;
if ( nodes.length == 0 ) { if ( nodes.length === 0 ) {
return -1; return -1;
} }
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
...@@ -47,20 +47,20 @@ KityMinder.registerModule( "basestylemodule", function () { ...@@ -47,20 +47,20 @@ KityMinder.registerModule( "basestylemodule", function () {
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
n.setData( 'italic' ); n.setData( 'italic' );
n.getTextShape().setAttr( 'font-style' ); n.getTextShape().setAttr( 'font-style' );
km.updateLayout( n ) km.updateLayout( n );
} ) } );
} else { } else {
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
n.setData( 'italic', true ); n.setData( 'italic', true );
n.getTextShape().setAttr( 'font-style', 'italic' ); n.getTextShape().setAttr( 'font-style', 'italic' );
km.updateLayout( n ) km.updateLayout( n );
} ) } );
} }
}, },
queryState: function () { queryState: function () {
var nodes = km.getSelectedNodes(), var nodes = km.getSelectedNodes(),
result = 0; result = 0;
if ( nodes.length == 0 ) { if ( nodes.length === 0 ) {
return -1; return -1;
} }
utils.each( nodes, function ( i, n ) { utils.each( nodes, function ( i, n ) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment