123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { is } from '../../../util/ModelUtil';
- import {
- getLanesRoot,
- computeLanesResize
- } from '../util/LaneUtil';
- import {
- eachElement
- } from 'diagram-js/lib/util/Elements';
- import {
- asTRBL
- } from 'diagram-js/lib/layout/LayoutUtil';
- import {
- substractTRBL
- } from 'diagram-js/lib/features/resize/ResizeUtil';
- /**
- * A handler that resizes a lane.
- *
- * @param {Modeling} modeling
- */
- export default function ResizeLaneHandler(modeling, spaceTool) {
- this._modeling = modeling;
- this._spaceTool = spaceTool;
- }
- ResizeLaneHandler.$inject = [
- 'modeling',
- 'spaceTool'
- ];
- ResizeLaneHandler.prototype.preExecute = function(context) {
- var shape = context.shape,
- newBounds = context.newBounds,
- balanced = context.balanced;
- if (balanced !== false) {
- this.resizeBalanced(shape, newBounds);
- } else {
- this.resizeSpace(shape, newBounds);
- }
- };
- /**
- * Resize balanced, adjusting next / previous lane sizes.
- *
- * @param {djs.model.Shape} shape
- * @param {Bounds} newBounds
- */
- ResizeLaneHandler.prototype.resizeBalanced = function(shape, newBounds) {
- var modeling = this._modeling;
- var resizeNeeded = computeLanesResize(shape, newBounds);
- // resize the lane
- modeling.resizeShape(shape, newBounds);
- // resize other lanes as needed
- resizeNeeded.forEach(function(r) {
- modeling.resizeShape(r.shape, r.newBounds);
- });
- };
- /**
- * Resize, making actual space and moving below / above elements.
- *
- * @param {djs.model.Shape} shape
- * @param {Bounds} newBounds
- */
- ResizeLaneHandler.prototype.resizeSpace = function(shape, newBounds) {
- var spaceTool = this._spaceTool;
- var shapeTrbl = asTRBL(shape),
- newTrbl = asTRBL(newBounds);
- var trblDiff = substractTRBL(newTrbl, shapeTrbl);
- var lanesRoot = getLanesRoot(shape);
- var allAffected = [],
- allLanes = [];
- eachElement(lanesRoot, function(element) {
- allAffected.push(element);
- if (is(element, 'bpmn:Lane') || is(element, 'bpmn:Participant')) {
- allLanes.push(element);
- }
- return element.children;
- });
- var change,
- spacePos,
- direction,
- offset,
- adjustments;
- if (trblDiff.bottom || trblDiff.top) {
- change = trblDiff.bottom || trblDiff.top;
- spacePos = shape.y + (trblDiff.bottom ? shape.height : 0) + (trblDiff.bottom ? -10 : 10);
- direction = trblDiff.bottom ? 's' : 'n';
- offset = trblDiff.top > 0 || trblDiff.bottom < 0 ? -change : change;
- adjustments = spaceTool.calculateAdjustments(allAffected, 'y', offset, spacePos);
- spaceTool.makeSpace(adjustments.movingShapes, adjustments.resizingShapes, { x: 0, y: change }, direction);
- }
- if (trblDiff.left || trblDiff.right) {
- change = trblDiff.right || trblDiff.left;
- spacePos = shape.x + (trblDiff.right ? shape.width : 0) + (trblDiff.right ? -10 : 100);
- direction = trblDiff.right ? 'e' : 'w';
- offset = trblDiff.left > 0 || trblDiff.right < 0 ? -change : change;
- adjustments = spaceTool.calculateAdjustments(allLanes, 'x', offset, spacePos);
- spaceTool.makeSpace(adjustments.movingShapes, adjustments.resizingShapes, { x: change, y: 0 }, direction);
- }
- };
|