| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 | 
							- /*
 
-  * Activiti Modeler component part of the Activiti project
 
-  * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved.
 
-  * 
 
-  * This library is free software; you can redistribute it and/or
 
-  * modify it under the terms of the GNU Lesser General Public
 
-  * License as published by the Free Software Foundation; either
 
-  * version 2.1 of the License, or (at your option) any later version.
 
-  *
 
-  * This library is distributed in the hope that it will be useful,
 
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
-  * Lesser General Public License for more details.
 
-  * You should have received a copy of the GNU Lesser General Public
 
-  * License along with this library; if not, write to the Free Software
 
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-  */
 
- /*
 
-  * Controller for morph shape selection
 
-  */
 
- var KisBpmShapeSelectionCtrl = [ '$rootScope', '$scope', '$timeout', '$translate', function($rootScope, $scope, $timeout, $translate) {
 
-     $scope.selectedMorphShapes = [];
 
-     
 
-     $scope.availableMorphShapes = [];
 
-     for (var i = 0; i < $scope.morphShapes.length; i++)
 
-     {
 
-     	if ($scope.morphShapes[i].id != $scope.currentSelectedShape.getStencil().idWithoutNs())
 
-     	{
 
-     		$scope.availableMorphShapes.push($scope.morphShapes[i]);
 
-     	}
 
-     }
 
-     	
 
-     // Config for grid
 
-     $scope.gridOptions = {
 
-         data: 'availableMorphShapes',
 
-         enableRowReordering: true,
 
-         headerRowHeight: 28,
 
-         multiSelect: false,
 
-         keepLastSelected : false,
 
-         selectedItems: $scope.selectedMorphShapes,
 
-         columnDefs: [{ field: 'objectId', displayName: 'Icon', width: 50, cellTemplate: 'editor-app/popups/icon-template.html?version=' + Date.now() },
 
-             { field: 'name', displayName: 'Name'}]
 
-     };
 
-     // Click handler for save button
 
-     $scope.select = function() {
 
-         if ($scope.selectedMorphShapes.length > 0) 
 
-         {
 
-         	var MorphTo = ORYX.Core.Command.extend({
 
-     			construct: function(shape, stencil, facade){
 
-     				this.shape = shape;
 
-     				this.stencil = stencil;
 
-     				this.facade = facade;
 
-     			},
 
-     			execute: function(){
 
-     				
 
-     				var shape = this.shape;
 
-     				var stencil = this.stencil;
 
-     				var resourceId = shape.resourceId;
 
-     				
 
-     				// Serialize all attributes
 
-     				var serialized = shape.serialize();
 
-     				stencil.properties().each((function(prop) {
 
-     					if(prop.readonly()) {
 
-     						serialized = serialized.reject(function(serProp) {
 
-     							return serProp.name==prop.id();
 
-     						});
 
-     					}
 
-     				}).bind(this));
 
-     		
 
-     				// Get shape if already created, otherwise create a new shape
 
-     				if (this.newShape){
 
-     					newShape = this.newShape;
 
-     					this.facade.getCanvas().add(newShape);
 
-     				} else {
 
-     					newShape = this.facade.createShape({
 
-     									type: stencil.id(),
 
-     									namespace: stencil.namespace(),
 
-     									resourceId: resourceId
 
-     								});
 
-     				}
 
-     				
 
-     				// calculate new bounds using old shape's upperLeft and new shape's width/height
 
-     				var boundsObj = serialized.find(function(serProp){
 
-     					return (serProp.prefix === "oryx" && serProp.name === "bounds");
 
-     				});
 
-     				
 
-     				var changedBounds = null;
 
-     				
 
-     				if (!this.facade.getRules().preserveBounds(shape.getStencil())) {
 
-     					
 
-     					var bounds = boundsObj.value.split(",");
 
-     					if (parseInt(bounds[0], 10) > parseInt(bounds[2], 10)) { // if lowerRight comes first, swap array items
 
-     						var tmp = bounds[0];
 
-     						bounds[0] = bounds[2];
 
-     						bounds[2] = tmp;
 
-     						tmp = bounds[1];
 
-     						bounds[1] = bounds[3];
 
-     						bounds[3] = tmp;
 
-     					}
 
-     					bounds[2] = parseInt(bounds[0], 10) + newShape.bounds.width();
 
-     					bounds[3] = parseInt(bounds[1], 10) + newShape.bounds.height();
 
-     					boundsObj.value = bounds.join(",");
 
-     					
 
-     				}  else {
 
-     					
 
-     					var height = shape.bounds.height();
 
-     					var width  = shape.bounds.width();
 
-     					
 
-     					// consider the minimum and maximum size of
 
-     					// the new shape
 
-     					
 
-     					if (newShape.minimumSize) {
 
-     						if (shape.bounds.height() < newShape.minimumSize.height) {
 
-     							height = newShape.minimumSize.height;
 
-     						}
 
-     						
 
-     						
 
-     						if (shape.bounds.width() < newShape.minimumSize.width) {
 
-     							width = newShape.minimumSize.width;
 
-     						}
 
-     					}
 
-     					
 
-     					if(newShape.maximumSize) {
 
-     						if(shape.bounds.height() > newShape.maximumSize.height) {
 
-     							height = newShape.maximumSize.height;
 
-     						}	
 
-     						
 
-     						if(shape.bounds.width() > newShape.maximumSize.width) {
 
-     							width = newShape.maximumSize.width;
 
-     						}
 
-     					}
 
-     					
 
-     					changedBounds = {
 
-     						a : {
 
-     							x: shape.bounds.a.x,
 
-     							y: shape.bounds.a.y
 
-     						},
 
-     						b : {
 
-     							x: shape.bounds.a.x + width,
 
-     							y: shape.bounds.a.y + height
 
-     						}						
 
-     					};
 
-     					
 
-     				}
 
-     				
 
-     				var oPos = shape.bounds.center();
 
-     				if(changedBounds !== null) {
 
-     					newShape.bounds.set(changedBounds);
 
-     				}
 
-     				
 
-     				// Set all related dockers
 
-     				this.setRelatedDockers(shape, newShape);
 
-     				
 
-     				// store DOM position of old shape
 
-     				var parentNode = shape.node.parentNode;
 
-     				var nextSibling = shape.node.nextSibling;
 
-     				
 
-     				// Delete the old shape
 
-     				this.facade.deleteShape(shape);
 
-     				
 
-     				// Deserialize the new shape - Set all attributes
 
-     				newShape.deserialize(serialized);
 
-     				/*
 
-     				 * Change color to default if unchanged
 
-     				 * 23.04.2010
 
-     				 */
 
-     				if(shape.getStencil().property("oryx-bgcolor") 
 
-     						&& shape.properties["oryx-bgcolor"]
 
-     						&& shape.getStencil().property("oryx-bgcolor").value().toUpperCase()== shape.properties["oryx-bgcolor"].toUpperCase()){
 
-     						if(newShape.getStencil().property("oryx-bgcolor")){
 
-     							newShape.setProperty("oryx-bgcolor", newShape.getStencil().property("oryx-bgcolor").value());
 
-     						}
 
-     				}	
 
-     				if(changedBounds !== null) {
 
-     					newShape.bounds.set(changedBounds);
 
-     				}
 
-     				
 
-     				if(newShape.getStencil().type()==="edge" || (newShape.dockers.length==0 || !newShape.dockers[0].getDockedShape())) {
 
-     					newShape.bounds.centerMoveTo(oPos);
 
-     				} 
 
-     				
 
-     				if(newShape.getStencil().type()==="node" && (newShape.dockers.length==0 || !newShape.dockers[0].getDockedShape())) {
 
-     					this.setRelatedDockers(newShape, newShape);
 
-     					
 
-     				}
 
-     				
 
-     				// place at the DOM position of the old shape
 
-     				if(nextSibling) parentNode.insertBefore(newShape.node, nextSibling);
 
-     				else parentNode.appendChild(newShape.node);
 
-     				
 
-     				// Set selection
 
-     				this.facade.setSelection([newShape]);
 
-     				this.facade.getCanvas().update();
 
-     				this.facade.updateSelection();
 
-     				this.newShape = newShape;
 
-     				
 
-     			},
 
-     			rollback: function(){
 
-     				
 
-     				if (!this.shape || !this.newShape || !this.newShape.parent) {return;}
 
-     				
 
-     				// Append shape to the parent
 
-     				this.newShape.parent.add(this.shape);
 
-     				// Set dockers
 
-     				this.setRelatedDockers(this.newShape, this.shape);
 
-     				// Delete new shape
 
-     				this.facade.deleteShape(this.newShape);
 
-     				// Set selection
 
-     				this.facade.setSelection([this.shape]);
 
-     				// Update
 
-     				this.facade.getCanvas().update();
 
-     				this.facade.updateSelection();
 
-     			},
 
-     			
 
-     			/**
 
-     			 * Set all incoming and outgoing edges from the shape to the new shape
 
-     			 * @param {Shape} shape
 
-     			 * @param {Shape} newShape
 
-     			 */
 
-     			setRelatedDockers: function(shape, newShape){
 
-     				
 
-     				if(shape.getStencil().type()==="node") {
 
-     					
 
-     					(shape.incoming||[]).concat(shape.outgoing||[])
 
-     						.each(function(i) { 
 
-     							i.dockers.each(function(docker) {
 
-     								if (docker.getDockedShape() == shape) {
 
-     									var rPoint = Object.clone(docker.referencePoint);
 
-     									// Move reference point per percent
 
-     									var rPointNew = {
 
-     										x: rPoint.x*newShape.bounds.width()/shape.bounds.width(),
 
-     										y: rPoint.y*newShape.bounds.height()/shape.bounds.height()
 
-     									};
 
-     									docker.setDockedShape(newShape);
 
-     									// Set reference point and center to new position
 
-     									docker.setReferencePoint(rPointNew);
 
-     									if(i instanceof ORYX.Core.Edge) {
 
-     										docker.bounds.centerMoveTo(rPointNew);
 
-     									} else {
 
-     										var absXY = shape.absoluteXY();
 
-     										docker.bounds.centerMoveTo({x:rPointNew.x+absXY.x, y:rPointNew.y+absXY.y});
 
-     										//docker.bounds.moveBy({x:rPointNew.x-rPoint.x, y:rPointNew.y-rPoint.y});
 
-     									}
 
-     								}
 
-     							});	
 
-     						});
 
-     					
 
-     					// for attached events
 
-     					if(shape.dockers.length>0&&shape.dockers.first().getDockedShape()) {
 
-     						newShape.dockers.first().setDockedShape(shape.dockers.first().getDockedShape());
 
-     						newShape.dockers.first().setReferencePoint(Object.clone(shape.dockers.first().referencePoint));
 
-     					}
 
-     				
 
-     				} else { // is edge
 
-     					newShape.dockers.first().setDockedShape(shape.dockers.first().getDockedShape());
 
-     					newShape.dockers.first().setReferencePoint(shape.dockers.first().referencePoint);
 
-     					newShape.dockers.last().setDockedShape(shape.dockers.last().getDockedShape());
 
-     					newShape.dockers.last().setReferencePoint(shape.dockers.last().referencePoint);
 
-     				}
 
-     			}
 
-     		});
 
-     		
 
-         	var stencil = undefined;
 
-         	var stencilSets = $scope.editor.getStencilSets().values();
 
-         	
 
-         	var stencilId = $scope.selectedMorphShapes[0].id;
 
-         	if ($scope.selectedMorphShapes[0].genericTaskId)
 
-         	{
 
-         		stencilId = $scope.selectedMorphShapes[0].genericTaskId;
 
-         	}
 
-         	
 
-         	for (var i = 0; i < stencilSets.length; i++)
 
-         	{
 
-         		var stencilSet = stencilSets[i];
 
-     			var nodes = stencilSet.nodes();
 
-     			for (var j = 0; j < nodes.length; j++)
 
-             	{
 
-     				if (nodes[j].idWithoutNs() === stencilId)
 
-     				{
 
-     					stencil = nodes[j];
 
-     					break;
 
-     				}
 
-             	}
 
-         	}
 
-         	
 
-         	if (!stencil) return;
 
-         	
 
-     		// Create and execute command (for undo/redo)			
 
-     		var command = new MorphTo($scope.currentSelectedShape, stencil, $scope.editor);
 
-     		$scope.editor.executeCommands([command]);
 
-         }
 
-         $scope.close();
 
-     };
 
-     $scope.cancel = function() {
 
-     	$scope.$hide();
 
-     };
 
-     // Close button handler
 
-     $scope.close = function() {
 
-     	$scope.$hide();
 
-     };
 
- }];
 
 
  |