Переглянути джерело

Add multiple input drawing, UI only

dds
PaulStoffregen 10 роки тому
джерело
коміт
ceecd3302e
1 змінених файлів з 35 додано та 24 видалено
  1. +35
    -24
      gui/red/ui/view.js

+ 35
- 24
gui/red/ui/view.js Переглянути файл

// update drag line // update drag line
drag_line.attr("class", "drag_line"); drag_line.attr("class", "drag_line");
mousePos = mouse_position; mousePos = mouse_position;
var numOutputs = (mousedown_port_type === 0)?(mousedown_node.outputs || 1):1;
var numOutputs = (mousedown_port_type === 0)?(mousedown_node.outputs || 1):(mousedown_node._def.inputs || 1);
var sourcePort = mousedown_port_index; var sourcePort = mousedown_port_index;
var portY = -((numOutputs-1)/2)*13 +13*sourcePort; var portY = -((numOutputs-1)/2)*13 +13*sourcePort;


resetMouseVars(); resetMouseVars();
return; return;
} }
var src,dst,src_port;
var src,dst,src_port,dst_port;
if (mousedown_port_type === 0) { if (mousedown_port_type === 0) {
src = mousedown_node; src = mousedown_node;
src_port = mousedown_port_index; src_port = mousedown_port_index;
dst = mouseup_node; dst = mouseup_node;
dst_port = portIndex;
} else if (mousedown_port_type == 1) { } else if (mousedown_port_type == 1) {
src = mouseup_node; src = mouseup_node;
dst = mousedown_node;
src_port = portIndex; src_port = portIndex;
dst = mousedown_node;
dst_port = mousedown_port_index;
} }


var existingLink = false; var existingLink = false;
RED.nodes.eachLink(function(d) { RED.nodes.eachLink(function(d) {
existingLink = existingLink || (d.source === src && d.target === dst && d.sourcePort == src_port);
existingLink = existingLink || (d.source === src && d.target === dst && d.sourcePort == src_port && d.targetPort == dst_port);
}); });
if (!existingLink) { if (!existingLink) {
var link = {source: src, sourcePort:src_port, target: dst};
var link = {source: src, sourcePort:src_port, target: dst, targetPort: dst_port};
RED.nodes.addLink(link); RED.nodes.addLink(link);
RED.history.push({t:'add',links:[link],dirty:dirty}); RED.history.push({t:'add',links:[link],dirty:dirty});
setDirty(true); setDirty(true);
var l = d._def.label; var l = d._def.label;
l = (typeof l === "function" ? l.call(d) : l)||""; l = (typeof l === "function" ? l.call(d) : l)||"";
d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) ); d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) );
d.h = Math.max(node_height,(d.outputs||0) * 15);
d.h = Math.max(node_height,(Math.max(d.outputs,d._def.inputs)||0) * 15);


if (d._def.badge) { if (d._def.badge) {
var badge = node.append("svg:g").attr("class","node_badge_group"); var badge = node.append("svg:g").attr("class","node_badge_group");


//node.append("circle").attr({"class":"centerDot","cx":0,"cy":0,"r":5}); //node.append("circle").attr({"class":"centerDot","cx":0,"cy":0,"r":5});


if (d._def.inputs > 0) {
var numInputs = d._def.inputs;
for (var n=0; n < numInputs; n++) {
var y = (d.h/2)-((numInputs-1)/2)*13;
y = (y+13*n)-5;
text.attr("x",38); text.attr("x",38);
node.append("rect").attr("class","port port_input").attr("rx",3).attr("ry",3).attr("x",-5).attr("width",10).attr("height",10)
.on("mousedown",function(d){portMouseDown(d,1,0);})
.on("touchstart",function(d){portMouseDown(d,1,0);})
.on("mouseup",function(d){portMouseUp(d,1,0);} )
.on("touchend",function(d){portMouseUp(d,1,0);} )
node.append("rect").attr("class","port port_input").attr("rx",3).attr("ry",3).attr("y",y).attr("x",-5).attr("width",10).attr("height",10)
.on("mousedown", (function(nn){return function(d){portMouseDown(d,1,nn);}})(n))
.on("touchstart", (function(nn){return function(d){portMouseDown(d,1,nn);}})(n))
.on("mouseup", (function(nn){return function(d){portMouseUp(d,1,nn);}})(n))
.on("touchend", (function(nn){return function(d){portMouseUp(d,1,nn);}})(n))
.on("mouseover",function(d) { var port = d3.select(this); port.classed("port_hovered",(mouse_mode!=RED.state.JOINING || mousedown_port_type != 1 ));}) .on("mouseover",function(d) { var port = d3.select(this); port.classed("port_hovered",(mouse_mode!=RED.state.JOINING || mousedown_port_type != 1 ));})
.on("mouseout",function(d) { var port = d3.select(this); port.classed("port_hovered",false);}) .on("mouseout",function(d) { var port = d3.select(this); port.classed("port_hovered",false);})
} }
var l = d._def.label; var l = d._def.label;
l = (typeof l === "function" ? l.call(d) : l)||""; l = (typeof l === "function" ? l.call(d) : l)||"";
d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) ); d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) );
d.h = Math.max(node_height,(d.outputs||0) * 15);
d.h = Math.max(node_height,(Math.max(d.outputs,d._def.inputs)||0) * 15);
} }
var thisNode = d3.select(this); var thisNode = d3.select(this);
//thisNode.selectAll(".centerDot").attr({"cx":function(d) { return d.w/2;},"cy":function(d){return d.h/2}}); //thisNode.selectAll(".centerDot").attr({"cx":function(d) { return d.w/2;},"cy":function(d){return d.h/2}});
.classed("hidden",function(d) { return d.valid; }); .classed("hidden",function(d) { return d.valid; });


thisNode.selectAll(".port_input").each(function(d,i) { thisNode.selectAll(".port_input").each(function(d,i) {
var port = d3.select(this);
port.attr("y",function(d){return (d.h/2)-5;})
var port = d3.select(this);
var numInputs = d._def.inputs;
var y = (d.h/2)-((numInputs-1)/2)*13;
y = (y+13*i)-5;
port.attr("y",y)
}); });


thisNode.selectAll(".node_icon").attr("y",function(d){return (d.h-d3.select(this).attr("height"))/2;}); thisNode.selectAll(".node_icon").attr("y",function(d){return (d.h-d3.select(this).attr("height"))/2;});
}); });
} }


var link = vis.selectAll(".link").data(RED.nodes.links.filter(function(d) { return d.source.z == activeWorkspace && d.target.z == activeWorkspace }),function(d) { return d.source.id+":"+d.sourcePort+":"+d.target.id;});
var link = vis.selectAll(".link").data(RED.nodes.links.filter(function(d) { return d.source.z == activeWorkspace && d.target.z == activeWorkspace }),function(d) { return d.source.id+":"+d.sourcePort+":"+d.target.id+":"+d.targetPort;});


var linkEnter = link.enter().insert("g",".node").attr("class","link"); var linkEnter = link.enter().insert("g",".node").attr("class","link");
links.attr("d",function(d){ links.attr("d",function(d){
var numOutputs = d.source.outputs || 1; var numOutputs = d.source.outputs || 1;
var sourcePort = d.sourcePort || 0; var sourcePort = d.sourcePort || 0;
var y = -((numOutputs-1)/2)*13 +13*sourcePort;
var ysource = -((numOutputs-1)/2)*13 +13*sourcePort;
var numInputs = d.target._def.inputs || 1;
var targetPort = d.targetPort || 0;
var ytarget = -((numInputs-1)/2)*13 +13*targetPort;


var dy = d.target.y-(d.source.y+y);
var dy = (d.target.y+ytarget)-(d.source.y+ysource);
var dx = (d.target.x-d.target.w/2)-(d.source.x+d.source.w/2); var dx = (d.target.x-d.target.w/2)-(d.source.x+d.source.w/2);
var delta = Math.sqrt(dy*dy+dx*dx); var delta = Math.sqrt(dy*dy+dx*dx);
var scale = lineCurveScale; var scale = lineCurveScale;
} }


d.x1 = d.source.x+d.source.w/2; d.x1 = d.source.x+d.source.w/2;
d.y1 = d.source.y+y;
d.y1 = d.source.y+ysource;
d.x2 = d.target.x-d.target.w/2; d.x2 = d.target.x-d.target.w/2;
d.y2 = d.target.y;
d.y2 = d.target.y+ytarget;


return "M "+(d.source.x+d.source.w/2)+" "+(d.source.y+y)+
" C "+(d.source.x+d.source.w/2+scale*node_width)+" "+(d.source.y+y+scaleY*node_height)+" "+
(d.target.x-d.target.w/2-scale*node_width)+" "+(d.target.y-scaleY*node_height)+" "+
(d.target.x-d.target.w/2)+" "+d.target.y;
return "M "+(d.x1)+" "+(d.y1)+
" C "+(d.x1+scale*node_width)+" "+(d.y1+scaleY*node_height)+" "+
(d.x2-scale*node_width)+" "+(d.y2-scaleY*node_height)+" "+
(d.x2)+" "+d.y2;
}) })


link.classed("link_selected", function(d) { return d === selected_link || d.selected; }); link.classed("link_selected", function(d) { return d === selected_link || d.selected; });

Завантаження…
Відмінити
Зберегти