Files
luos/workflow/engine/templates/bpmn/Annotation.js

322 lines
9.8 KiB
JavaScript
Executable File

ArrowLine=function(){
this.lineColor=new Color(0,0,0);
this.stroke=1;
this.canvas=null;
this.workflow=null;
this.html=null;
this.graphics=null;
//this.id=UUID.create();
this.startX=30;
this.startY=30;
this.endX=100;
this.endY=100;
this.zOrder=Line.ZOrderBaseIndex;
this.setSelectable(true);
this.setDeleteable(true);
this.arrowWidth=8;
this.arrowLength=20;
this.lineWidth=2;
};
ArrowLine.prototype=new Line();
ArrowLine.prototype.type="ArrowLine";
ArrowLine.prototype.paint=function(){
if(this.graphics===null){
this.graphics=new jsGraphics(this.id);
}
else{
this.graphics.clear();
}
//this.graphics.setStroke(this.stroke);
this.graphics.setStroke( Stroke.DOTTED );
this.graphics.setColor(this.lineColor.getHTMLStyle());
var endY=this.getLength();
var _3e2a=[0 ,0 ,endY ];
var _3e2b=[-this.lineWidth,+this.lineWidth,-(this.lineWidth)];
var _3e2c=this.getAngle()*Math.PI/180;
var rotX=[];
var rotY=[];
for(var i=0;i<_3e2a.length;i++){
rotX[i]=this.startX+_3e2a[i]*Math.cos(_3e2c)-_3e2b[i]*Math.sin(_3e2c);
rotY[i]=this.startY+_3e2a[i]*Math.sin(_3e2c)+_3e2b[i]*Math.cos(_3e2c);
}
this.graphics.drawPolyLine(rotX,rotY);
this.graphics.paint();
};
DottedConnection=function(){
ArrowLine.call(this);
this.sourcePort=null;
this.targetPort=null;
this.lineSegments=[];
this.setColor(new Color(0,0,115));
this.setLineWidth(1);
};
DottedConnection.prototype=new ArrowLine();
DottedConnection.prototype.type="DottedConnection";
DottedConnection.prototype.disconnect=function(){
if(this.sourcePort!==null){
this.sourcePort.detachMoveListener(this);
}
if(this.targetPort!==null){
this.targetPort.detachMoveListener(this);
}
};
DottedConnection.prototype.reconnect=function(){
if(this.sourcePort!==null){
this.sourcePort.attachMoveListener(this);
}
if(this.targetPort!==null){
this.targetPort.attachMoveListener(this);
}
};
DottedConnection.prototype.isConnector=function(){
return true;
};
DottedConnection.prototype.isResizeable=function(){
return false;
};
DottedConnection.prototype.setSource=function(port){
if(this.sourcePort!==null){
this.sourcePort.detachMoveListener(this);
}
this.sourcePort=port;
if(this.sourcePort===null){
return;
}
this.sourcePort.attachMoveListener(this);
this.setStartPoint(port.getAbsoluteX(),port.getAbsoluteY());
};
DottedConnection.prototype.getSource=function(){
return this.sourcePort;
};
DottedConnection.prototype.setTarget=function(port){
if(this.targetPort!==null){
this.targetPort.detachMoveListener(this);
}
this.targetPort=port;
if(this.targetPort===null){
return;
}
this.targetPort.attachMoveListener(this);
this.setEndPoint(port.getAbsoluteX(),port.getAbsoluteY());
};
DottedConnection.prototype.getTarget=function(){
return this.targetPort;
};
DottedConnection.prototype.onOtherFigureMoved=function(_3824){
if(_3824==this.sourcePort){
this.setStartPoint(this.sourcePort.getAbsoluteX(),this.sourcePort.getAbsoluteY());
}else{
this.setEndPoint(this.targetPort.getAbsoluteX(),this.targetPort.getAbsoluteY());
}
};
bpmnAnnotation = function (oWorkflow) {
VectorFigure.call(this);
//Getting width and height from DB
if(typeof oWorkflow.anno_width != 'undefined' && typeof oWorkflow.anno_height != 'undefined'){
this.width = oWorkflow.anno_width;
this.height = oWorkflow.anno_height;
}
else{
this.width = 110;
this.height = 50;
}
this.setAnnotationName(oWorkflow.annotationName); //It will set the Default Task Name with appropriate count While dragging a task on the canvas
};
bpmnAnnotation.prototype = new VectorFigure;
bpmnAnnotation.prototype.type = "bpmnAnnotation";
bpmnAnnotation.prototype.setAnnotationName = function (name) {
if(typeof name != 'undefined')
this.annotationName = name;
else
this.annotationName = 'Annotation 1';
};
bpmnAnnotation.prototype.coord_converter = function (bound_width, bound_height, text_length) {
//bound_width = this.workflow.currentSelection.width;
//bound_height = this.workflow.currentSelection.height;
input_width = text_length * 6
input_height = 10
temp_width = bound_width - input_width;
temp_width /= 2;
temp_x = temp_width;
temp_height = bound_height - 10;
temp_height /= 2;
temp_y = temp_height;
var temp_coord = new Object();
temp_coord.temp_x = temp_x;
temp_coord.temp_y = temp_y;
return temp_coord;
};
bpmnAnnotation.prototype.paint = function () {
VectorFigure.prototype.paint.call(this);
if(typeof workflow.zoomfactor == 'undefined')
workflow.zoomfactor = 1;
//Set the Task Limitation
if(typeof this.limitFlag == 'undefined' || this.limitFlag == false)
{
this.originalWidth = 110;
this.originalHeight = 50;
this.orgXPos = this.getX();
this.orgYPos = this.getY();
this.orgFontSize =this.fontSize;
}
var zoomRate = workflow.zoomfactor;
this.width = this.originalWidth * workflow.zoomfactor;
this.height = this.originalHeight * workflow.zoomfactor;
//this.graphics.setColor("#ffffff");
this.graphics.setColor("#f8f8f8");
this.graphics.fillRect(0,0, this.getWidth(), this.getHeight());
this.graphics.setStroke(1.5);
this.graphics.setColor("#202020");
this.graphics.drawLine(this.getWidth()/4,0,0,0);
this.graphics.drawLine(0,0,0,this.getHeight());
this.graphics.drawLine(0,this.getHeight(),this.getWidth()/4,this.getHeight());
this.graphics.setStroke(1);
this.graphics.paint();
/* New object is created to implement changing of Text functionality
*/
this.bpmnText = new jsGraphics(this.id) ;
this.padleft = 0.05*this.getWidth();
this.padtop = 0.13*this.getHeight() -1;
this.rectwidth = this.getWidth() - this.padleft;
this.rectheight = this.getHeight() - 2 * this.padtop;
//Setting text size to zoom font size if Zoomed
this.fontSize = 11;
var fontSize = zoomRate * this.fontSize;
this.bpmnText.setFont('verdana', + fontSize+'px', Font.PLAIN);
this.bpmnText.drawStringAnno(this.annotationName,0,this.padtop,this.rectwidth,this.rectheight,'left');
this.bpmnText.paint();
if( this.input1!=null ){
this.input1.setPosition(0,this.height/2);
}
};
jsGraphics.prototype.drawStringAnno = function(txt, x, y, width,height, halign)
{
this.htm += '<div style="position:absolute;overflow:hidden;'+
'left:' + x + 'px;'+
'top:' + y + 'px;'+
'width:'+width +'px;'+
'height:'+height +'px;'+
'text-align:'+halign+';'+
'font-family:' + this.ftFam + ';'+
'font-size:' + this.ftSz + ';'+ 'padding-left:6px;'+
'color:' + this.color + ';' + this.ftSty + '">'+
txt +
'<\/div>';
};
bpmnAnnotation.prototype.setWorkflow=function(_40c5){
VectorFigure.prototype.setWorkflow.call(this,_40c5);
if(_40c5!=null){
this.input1=new InputPort();
this.input1.setWorkflow(_40c5);
this.input1.setName('input1');
this.input1.setZOrder(-1);
this.input1.setBackgroundColor(new Color(255, 255, 255));
this.input1.setColor(new Color(255, 255, 255));
//this.addPort(this.input1,0,this.height/2);
this.addPort(this.input1,-this.getWidth()/2,-this.getHeight()/4);
};
};
bpmnAnnotationDialog = function (_2e5e) {
this.figure = _2e5e;
var title = 'Annotation';
Dialog.call(this, title);
this.setDimension(400, 150); //Set the width and height of the Dialog box
}
bpmnAnnotationDialog.prototype = new Dialog();
bpmnAnnotationDialog.prototype.createHTMLElement = function () {
var item = Dialog.prototype.createHTMLElement.call(this);
var inputDiv = document.createElement("form");
inputDiv.style.position = "absolute";
inputDiv.style.left = "10px";
inputDiv.style.top = "30px";
inputDiv.style.width = "375px";
inputDiv.style.font = "normal 10px verdana";
item.appendChild(inputDiv);
this.label = document.createTextNode("Annotation Name");
inputDiv.appendChild(this.label);
this.input = document.createElement("textarea");
this.input.style.border = "1px solid gray";
this.input.style.font = "normal 10px verdana";
//this.input.type = "text";
this.input.maxLength = "500";
this.input.cols = "50";
this.input.rows = "3";
var value = bpmnTask.prototype.trim(this.figure.workflow.currentSelection.annotationName);
if (value) this.input.value = value;
else this.input.value = "";
this.input.style.width = "100%";
inputDiv.appendChild(this.input);
this.input.focus();
return item;
};
/*Double Click Event for opening the dialog Box*/
bpmnAnnotation.prototype.onDoubleClick = function () {
var _409d = new bpmnAnnotationDialog(this);
this.workflow.showDialog(_409d, this.workflow.currentSelection.x, this.workflow.currentSelection.y);
};
/**
* This method will be called if the user pressed the OK button in buttonbar of the dialog.<br>
* The string is first cleared and new string is painted.<br><br>
**/
bpmnAnnotationDialog.prototype.onOk = function () {
this.figure.bpmnText.clear();
len = Math.ceil(this.input.value.length/16);
if(this.input.value.length < 19)
{
len = 1.5;
if(this.input.value.length > 9)
this.figure.rectWidth = this.input.value.length*8;
else
this.figure.rectWidth = 48;
}
else
this.figure.rectWidth = 150;
//tempcoord = this.workflow.currentSelection.coord_converter(this.workflow.currentSelection.width, this.workflow.currentSelection.height, this.input.value.length)
this.figure.bpmnText.drawStringAnno(this.input.value,20,20,this.figure.rectWidth,'left');
// this.figure.bpmnNewText.drawTextString(this.input.value, this.workflow.currentSelection.width, this.workflow.currentSelection.height, tempcoord.temp_x, tempcoord.temp_y);
this.figure.bpmnText.paint();
this.figure.annotationName = this.input.value; //Set Updated Text value
//Updating Annotation Text Async into the DB
this.figure.actiontype = 'updateText';
this.workflow.saveShape(this.figure);
if(this.figure.rectWidth<80)
tempW = 110;
else
tempW = this.figure.rectWidth+35;
this.workflow.currentSelection.setDimension(tempW, len*13+40);
this.workflow.removeFigure(this);
};