Activiti Modeler 二次开发(1)自定义快捷按钮

由于这个东西比较乱,所以首先先说下Activiti Modeler这玩意的历史,最开始这个流程设计器是由Oryx Editor开始的,这是一个开源的流程设计器(http://code.google.com/p/oryx-editor/),但是在2009年,Oryx Editor就停止更新了。后续又由jBPM借用,在Oryx Editor的js基础之上,开发了Signavio流程设计器(http://www.signavio.com/),随着版本的更新Signavio也走向了收费的道路。而Activiti Modeler最开始也是使用Signavio(jBPM赠与的),到后来又转变为了自己的设计器,经历过N手的玩意,其乱可想而知。
再说这篇博文的具体说明,这篇主要是说希望在原有的快捷菜单基础之上(如图红色虚线框中),加入自定义的快捷按钮,所以有比较弄明白js是如何实现这些操作的,经过一些简单的代码追踪,可以定位其源码功能位于oryx.debug.js这个js文件中,这里我只说下整个按钮的构建及显示过程(只研究到这一步)。

快捷菜单按钮执行过程简单描述:
先通过后台和stencilset.json文件,载入所有按钮的相关信息,成为ShapeMenuButton,并给予初始的willShow为false,即默认不在快捷菜单中显示;
通过ShapeMenuPlugin,将ShapeMenuButton与ShapeMenu结合起来,并通过一些判断,调用部分按钮prepareToShow()方法,给予其显示的属性willShow为true;
当点击某个图形后,调用ShapeMenu的show()函数,根据图形的位置,以及快捷菜单按钮的位置(上下左右),动态调整显示的位置,并将willShow为true的按钮进行显示。
Activiti Modeler 二次开发(1)自定义快捷按钮
加入自定义的快捷按钮思路:
1、根据stencilset.json文件创建新的ShapeMenuButton对象,并实现callback函数,绑定click事件;
2、对该ShapeMenuButton进行一些初始化操作,比如设置prepareToShow()修改willShow属性,将其显示出来;
3、注释19017行的设置,不对快捷按钮进行默认的不显示设置;
4、在ShapeMenu初始化时,加入该ShapeMenuButton。
(在19126行加入如下代码即可)
// 创建自定义按钮
var diyButton = new ORYX.Plugins.ShapeMenuButton({
	callback : function() {
		alert(123);
	},
	icon : ORYX.PATH + 'images/wrench_orange.png',
	align : ORYX.CONFIG.SHAPEMENU_TOP,
	group : 0,
	msg : '测试'
});
diyButton.prepareToShow();
this.shapeMenu.addButton(diyButton);

附件:oryx.debug.js.zip
附件辅助说明(oryx.debug.js):
13134 ORYX.Editor.graft函数定义
18967 ORYX.Plugins.ShapeMenuPlugin定义
19017 设置了所有快捷按钮默认全不显示
19067-19125 根据stencilset.json文件初始化右侧快捷按钮
19143 初始化底部快捷按钮
19276 控制右下侧快捷按钮的显示
19321 控制右侧全部快捷按钮的显示
19802 ORYX.Plugins.ShapeMenu快捷菜单定义
19913 点击某个图形后,快捷按钮位置变化
20058 ORYX.Plugins.ShapeMenuButton快捷按钮定义
20129 点击图形后,控制快捷按钮是否将会显示的变量

你可能感兴趣的:(Activiti)