| |
| import { app } from "../../scripts/app.js"; |
|
|
| class MXStop |
| { |
| constructor(node) |
| { |
| this.node = node; |
| this.node.properties = this.node.properties || {}; |
|
|
| this.node.onGraphConfigured = function () |
| { |
| this.configured = true; |
| } |
|
|
| this.node.onConnectionsChange = function (type, index, connected, link_info) |
| { |
| if (link_info) |
| { |
| if (connected) |
| { |
| if (type === LiteGraph.INPUT) |
| { |
| const cnode = app.graph.getNodeById(link_info.origin_id); |
| const ctype = cnode.outputs[link_info.origin_slot].type; |
| const color = LGraphCanvas.link_type_colors[ctype]; |
| this.outputs[0].type = ctype; |
| this.outputs[0].name = ctype; |
| this.inputs[0].type = ctype; |
| if (link_info.id) { app.graph.links[link_info.id].color = color; } |
| if (this.outputs[0].links !== null) |
| for (let i = this.outputs[0].links.length; i > 0; i--) |
| { |
| const tlinkId = this.outputs[0].links[i-1]; |
| const tlink = app.graph.links[tlinkId]; |
| if (this.configured) if ( ctype !== tlink.type ) app.graph.getNodeById(tlink.target_id).disconnectInput(tlink.target_slot); |
| } |
| } |
| if (type === LiteGraph.OUTPUT && this.inputs[0].link === null) |
| { |
| this.inputs[0].type = link_info.type; |
| this.outputs[0].type = link_info.type; |
| this.outputs[0].name = link_info.type; |
| } |
| } |
| else if ((( type === LiteGraph.INPUT ) && ( this.outputs[0].links === null || this.outputs[0].links.length === 0 )) || (( type === LiteGraph.OUTPUT) && ( this.inputs[0].link === null ))) this.onAdded(); |
| } |
| this.computeSize(); |
| }; |
|
|
| this.node.onAdded = function () |
| { |
| this.inputs[0].type = "*"; |
| this.outputs[0].name = ""; |
| this.outputs[0].type = "*"; |
| }; |
|
|
| this.node.onMouseDown = function(e, pos, canvas) |
| { |
| let cWidth = this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH; |
| if ( e.canvasY-this.pos[1] > 0 ) return false; |
| if (this.flags.collapsed && (e.canvasX-this.pos[0] < LiteGraph.NODE_TITLE_HEIGHT)) return false; |
| if (!this.flags.collapsed && ((e.canvasX-this.pos[0]) < (this.size[0]-cWidth+LiteGraph.NODE_TITLE_HEIGHT))) return false; |
| this.updateThisNodeGraph?.(); |
| this.onTmpMouseUp(e, pos, canvas); |
| return true; |
| } |
|
|
| this.node.onTmpMouseUp = function(e, pos, canvas) |
| { |
| app.queuePrompt(0); |
| } |
|
|
| this.node.onDrawForeground = function(ctx) |
| { |
| this.configured = true; |
| if (this.size[1] > LiteGraph.NODE_SLOT_HEIGHT*1.3) this.size[1] = LiteGraph.NODE_SLOT_HEIGHT*1.3; |
| let titleHeight = LiteGraph.NODE_TITLE_HEIGHT; |
| let cWidth = this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH; |
| let buttonWidth = cWidth-titleHeight-6; |
| let cx = (this.flags.collapsed?cWidth:this.size[0])-buttonWidth-6; |
|
|
| ctx.fillStyle = this.color || LiteGraph.NODE_DEFAULT_COLOR; |
| ctx.beginPath(); |
| ctx.rect(cx, 2-titleHeight, buttonWidth, titleHeight-4); |
| ctx.fill(); |
|
|
| cx += buttonWidth/2; |
|
|
| ctx.lineWidth = 1; |
| if (this.mouseOver) |
| { |
| ctx.fillStyle = LiteGraph.NODE_SELECTED_TITLE_COLOR |
| ctx.beginPath(); ctx.moveTo(cx-8,-titleHeight/2-8); ctx.lineTo(cx+0,-titleHeight/2); ctx.lineTo(cx-8,-titleHeight/2+8); ctx.fill(); |
| ctx.beginPath(); ctx.moveTo(cx+1,-titleHeight/2-8); ctx.lineTo(cx+9,-titleHeight/2); ctx.lineTo(cx+1,-titleHeight/2+8); ctx.fill(); |
| } |
| else |
| { |
| ctx.fillStyle = (this.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR); |
| ctx.beginPath(); ctx.rect(cx-10,-titleHeight/2-8, 4, 16); ctx.fill(); |
| ctx.beginPath(); ctx.rect(cx-2,-titleHeight/2-8, 4, 16); ctx.fill(); |
| } |
| } |
|
|
| this.node.computeSize = function() |
| { |
| return [ (this.properties.showOutputText && this.outputs && this.outputs.length) ? LiteGraph.NODE_TEXT_SIZE * (this.outputs[0].name.length+5) * 0.6 + 140 : 140, LiteGraph.NODE_SLOT_HEIGHT*1.3 ]; |
| } |
| } |
| } |
|
|
| app.registerExtension( |
| { |
| name: "mxStop", |
| async beforeRegisterNodeDef(nodeType, nodeData, _app) |
| { |
| if (nodeData.name === "mxStop") |
| { |
| const onNodeCreated = nodeType.prototype.onNodeCreated; |
| nodeType.prototype.onNodeCreated = function () { |
| if (onNodeCreated) onNodeCreated.apply(this, []); |
| this.mxStop = new MXStop(this); |
| } |
| } |
| } |
| }); |
|
|