PaletteProvider.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import {
  2. assign
  3. } from 'min-dash';
  4. import { getDi } from '../../util/ModelUtil';
  5. /**
  6. * @typedef {import('diagram-js/lib/features/palette/Palette').default} Palette
  7. * @typedef {import('diagram-js/lib/features/create/Create').default} Create
  8. * @typedef {import('diagram-js/lib/core/ElementFactory').default} ElementFactory
  9. * @typedef {import('../space-tool/BpmnSpaceTool').default} SpaceTool
  10. * @typedef {import('diagram-js/lib/features/lasso-tool/LassoTool').default} LassoTool
  11. * @typedef {import('diagram-js/lib/features/hand-tool/HandTool').default} HandTool
  12. * @typedef {import('diagram-js/lib/features/global-connect/GlobalConnect').default} GlobalConnect
  13. * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
  14. *
  15. * @typedef {import('diagram-js/lib/features/palette/Palette').PaletteEntries} PaletteEntries
  16. */
  17. /**
  18. * A palette provider for BPMN 2.0 elements.
  19. *
  20. * @param {Palette} palette
  21. * @param {Create} create
  22. * @param {ElementFactory} elementFactory
  23. * @param {SpaceTool} spaceTool
  24. * @param {LassoTool} lassoTool
  25. * @param {HandTool} handTool
  26. * @param {GlobalConnect} globalConnect
  27. * @param {Translate} translate
  28. */
  29. export default function PaletteProvider(
  30. palette, create, elementFactory,
  31. spaceTool, lassoTool, handTool,
  32. globalConnect, translate) {
  33. this._palette = palette;
  34. this._create = create;
  35. this._elementFactory = elementFactory;
  36. this._spaceTool = spaceTool;
  37. this._lassoTool = lassoTool;
  38. this._handTool = handTool;
  39. this._globalConnect = globalConnect;
  40. this._translate = translate;
  41. palette.registerProvider(this);
  42. }
  43. PaletteProvider.$inject = [
  44. 'palette',
  45. 'create',
  46. 'elementFactory',
  47. 'spaceTool',
  48. 'lassoTool',
  49. 'handTool',
  50. 'globalConnect',
  51. 'translate'
  52. ];
  53. /**
  54. * @return {PaletteEntries}
  55. */
  56. PaletteProvider.prototype.getPaletteEntries = function() {
  57. var actions = {},
  58. create = this._create,
  59. elementFactory = this._elementFactory,
  60. spaceTool = this._spaceTool,
  61. lassoTool = this._lassoTool,
  62. handTool = this._handTool,
  63. globalConnect = this._globalConnect,
  64. translate = this._translate;
  65. function createAction(type, group, className, title, options) {
  66. function createListener(event) {
  67. var shape = elementFactory.createShape(assign({ type: type }, options));
  68. if (options) {
  69. var di = getDi(shape);
  70. di.isExpanded = options.isExpanded;
  71. }
  72. create.start(event, shape);
  73. }
  74. return {
  75. group: group,
  76. className: className,
  77. title: title,
  78. action: {
  79. dragstart: createListener,
  80. click: createListener
  81. }
  82. };
  83. }
  84. function createSubprocess(event) {
  85. var subProcess = elementFactory.createShape({
  86. type: 'bpmn:SubProcess',
  87. x: 0,
  88. y: 0,
  89. isExpanded: true
  90. });
  91. var startEvent = elementFactory.createShape({
  92. type: 'bpmn:StartEvent',
  93. x: 40,
  94. y: 82,
  95. parent: subProcess
  96. });
  97. create.start(event, [ subProcess, startEvent ], {
  98. hints: {
  99. autoSelect: [ subProcess ]
  100. }
  101. });
  102. }
  103. function createParticipant(event) {
  104. create.start(event, elementFactory.createParticipantShape());
  105. }
  106. assign(actions, {
  107. 'hand-tool': {
  108. group: 'tools',
  109. className: 'bpmn-icon-hand-tool',
  110. title: translate('Activate hand tool'),
  111. action: {
  112. click: function(event) {
  113. handTool.activateHand(event);
  114. }
  115. }
  116. },
  117. 'lasso-tool': {
  118. group: 'tools',
  119. className: 'bpmn-icon-lasso-tool',
  120. title: translate('Activate lasso tool'),
  121. action: {
  122. click: function(event) {
  123. lassoTool.activateSelection(event);
  124. }
  125. }
  126. },
  127. 'space-tool': {
  128. group: 'tools',
  129. className: 'bpmn-icon-space-tool',
  130. title: translate('Activate create/remove space tool'),
  131. action: {
  132. click: function(event) {
  133. spaceTool.activateSelection(event);
  134. }
  135. }
  136. },
  137. 'global-connect-tool': {
  138. group: 'tools',
  139. className: 'bpmn-icon-connection-multi',
  140. title: translate('Activate global connect tool'),
  141. action: {
  142. click: function(event) {
  143. globalConnect.start(event);
  144. }
  145. }
  146. },
  147. 'tool-separator': {
  148. group: 'tools',
  149. separator: true
  150. },
  151. 'create.start-event': createAction(
  152. 'bpmn:StartEvent', 'event', 'bpmn-icon-start-event-none',
  153. translate('Create start event')
  154. ),
  155. 'create.intermediate-event': createAction(
  156. 'bpmn:IntermediateThrowEvent', 'event', 'bpmn-icon-intermediate-event-none',
  157. translate('Create intermediate/boundary event')
  158. ),
  159. 'create.end-event': createAction(
  160. 'bpmn:EndEvent', 'event', 'bpmn-icon-end-event-none',
  161. translate('Create end event')
  162. ),
  163. 'create.exclusive-gateway': createAction(
  164. 'bpmn:ExclusiveGateway', 'gateway', 'bpmn-icon-gateway-none',
  165. translate('Create gateway')
  166. ),
  167. 'create.task': createAction(
  168. 'bpmn:Task', 'activity', 'bpmn-icon-task',
  169. translate('Create task')
  170. ),
  171. 'create.data-object': createAction(
  172. 'bpmn:DataObjectReference', 'data-object', 'bpmn-icon-data-object',
  173. translate('Create data object reference')
  174. ),
  175. 'create.data-store': createAction(
  176. 'bpmn:DataStoreReference', 'data-store', 'bpmn-icon-data-store',
  177. translate('Create data store reference')
  178. ),
  179. 'create.subprocess-expanded': {
  180. group: 'activity',
  181. className: 'bpmn-icon-subprocess-expanded',
  182. title: translate('Create expanded sub-process'),
  183. action: {
  184. dragstart: createSubprocess,
  185. click: createSubprocess
  186. }
  187. },
  188. 'create.participant-expanded': {
  189. group: 'collaboration',
  190. className: 'bpmn-icon-participant',
  191. title: translate('Create pool/participant'),
  192. action: {
  193. dragstart: createParticipant,
  194. click: createParticipant
  195. }
  196. },
  197. 'create.group': createAction(
  198. 'bpmn:Group', 'artifact', 'bpmn-icon-group',
  199. translate('Create group')
  200. ),
  201. });
  202. return actions;
  203. };