dotty.protogt.set_an_attribute = function (gt, obj, attr, value) { if ( obj.attr == gt.graph.graphattr | obj.attr == gt.graph.edgeattr | obj.attr == gt.graph.nodeattr ) { obj.attr[attr] = value; return; } if (obj.nid >= 0) { gt.undrawnode (gt, gt.views, obj); obj.attr[attr] = value; gt.unpacknodeattr (gt, obj); gt.drawnode (gt, gt.views, obj); } else if (obj.eid >= 0) { gt.undrawedge (gt, gt.views, obj); obj.attr[attr] = value; gt.unpackedgeattr (gt, obj); gt.drawedge (gt, gt.views, obj); } }; dotty.protogt.setlabel = function (gt, obj) { local v; v = ask ('set label value'); gt.set_an_attribute(gt, obj, 'label', v); }; dotty.protogt.changelabel = function (gt, obj) { local v, lab; lab=obj.attr['label']; if ((~lab) | lab=="\N"){ lab=""; } v = ask ('change label value', null, lab); gt.set_an_attribute(gt, obj, 'label', v); }; dotty.protogt.node.colors = [ 'blue' = [ 'style' = 'filled'; 'fillcolor'='cyan'; 'color'='blue'; 'fontcolor'='black'; ]; 'red' = [ 'style' = 'filled'; 'fillcolor'='pink'; 'color'='red'; 'fontcolor'='black'; ]; 'green' = [ 'style' = 'filled'; 'fillcolor'='green'; 'color'='darkgreen'; 'fontcolor'='black'; ]; 'white' = [ 'style' = 'filled'; 'fillcolor'='white'; 'color'='black'; 'fontcolor'='black'; ]; 'black' = [ 'style' = 'filled'; 'fillcolor'='black'; 'color'='black'; 'fontcolor'='white'; ]; 'blackgrey' = [ 'style' = 'filled'; 'fillcolor'='black'; 'color'='grey'; 'fontcolor'='white'; ]; ]; dotty.protogt.edge.colors = [ 'blue' = [ 'color'='blue'; 'fontcolor'='blue'; ]; 'red' = [ 'color'='red'; 'fontcolor'='red'; ]; 'green' = [ 'color'='green'; 'fontcolor'='green'; ]; 'white' = [ 'color'='grey'; 'fontcolor'='grey'; ]; 'black' = [ 'color'='black'; 'fontcolor'='black'; ]; 'blackgrey' = [ 'color'='black'; 'fontcolor'='black'; ]; ]; dotty.protogt.setcolor = function (gt, obj, c) { if (obj.nid >= 0) { for (p in gt.node.colors[c]) { gt.set_an_attribute(gt, obj, p, gt.node.colors[c][p]); } } else if (obj.eid >= 0) { for (p in gt.edge.colors[c]) { gt.set_an_attribute(gt, obj, p, gt.edge.colors[c][p]); } } gt.layoutgraph (gt); gt.redrawgraph (gt, [vt.vtid = vt;]); }; dotty.protogt.graph.graphattr = [ ]; dotty.protogt.graph.nodeattr = [ 'shape' = 'ellipse'; ]; dotty.protogt.graph.edgeattr = [ ]; dotty.protogt.graph.type = 'graph'; dotty.protovt.normal.menus.general = [ 0 = "undo"; 1 = "paste"; 2 = "do layout"; 3 = "cancel layout"; 4 = "redraw"; 5 = "new graph"; 6 = "load graph"; 7 = "reload graph"; 8 = "save graph"; 9 = "save graph as"; 10 = "open view"; 11 = "copy view"; 12 = "clone view"; 13 = "birdseye view"; 14 = "close view"; 15 = "set graph attr"; 16 = "set node attr"; 17 = "set edge attr"; 18 = "zoom in"; 19 = "zoom out"; 20 = "find node"; 21 = "print graph"; 22 = "text view"; 23 = "add many nodes"; 24 = "quit"; ]; dotty.protovt.normal.menus.node=[ 0="set label"; 1="change label"; 2="color red"; 3="color blue"; 4="color green"; 5="color white"; 6="color black"; 7="color black/grey"; 8="delete"; ]; dotty.protovt.normal.menus.edge=[ 0="set label"; 1="change label"; 2="color red"; 3="color blue"; 4="color green"; 5="color white"; 6="color black"; 7="delete"; ]; dotty.protogt.actions.node["set label"] = function (gt, vt, obj, data) { gt.setlabel(gt, obj); gt.layoutgraph (gt); gt.redrawgraph (gt, gt.views); }; dotty.protogt.actions.node["change label"] = function (gt, vt, obj, data) { gt.changelabel(gt, obj); gt.layoutgraph (gt); gt.redrawgraph (gt, gt.views); }; dotty.protogt.actions.node["color red"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'red'); }; dotty.protogt.actions.node["color green"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'green'); }; dotty.protogt.actions.node["color blue"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'blue'); }; dotty.protogt.actions.node["color white"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'white'); }; dotty.protogt.actions.node["color black"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'black'); }; dotty.protogt.actions.node["color black/grey"] = function (gt, vt, obj, data) { gt.setcolor(gt, obj, 'blackgrey'); }; dotty.protogt.actions.general["direct/indirect"] = function (gt, vt, data) { if (gt.graph.type=='graph'){ gt.graph.type='digraph'; } else if (gt.graph.type=='digraph'){ gt.graph.type='graph'; } gt.layoutgraph (gt); }; dotty.protovt.normal.keys.general = [ 'u' = "undo"; ' ' = "do layout"; 'Z' = "zoom in slowly"; 'z' = "zoom out slowly"; 'l' = "set label"; 'L' = "change label"; 'r' = "color red"; 'g' = "color green"; 'b' = "color blue"; 'k' = "color black"; 'K' = "color black/grey"; 'w' = "color white"; 'd' = "delete"; 'x' = "direct/indirect"; 'a' = "add many nodes"; 's' = "save graph as"; 'p' = "print graph"; ]; dotty.protovt.normal.keys.node = [ ]; dotty.protovt.normal.keys.edge = [ ]; dotty.protogt.actions.general["add many nodes"] = function (gt, vt, data) { local str,attrib,i; str=split(ask('Add many nodes at once (~=separator)'),"~"); i=0; while (str[i]) { attrib.label=str[i]; gt.insertnode (gt, data.pos, null, null, attrib, 1); i=i+1; } gt.layoutgraph (gt); gt.redrawgraph (gt, gt.views); }; dotty.protogt.printorsave = function (gt, vt, otype, name, mode, ptype) { local fd, outfile, cmdline; outfile=concat('"',getenv('USERPROFILE'), '\Desktop\graph.dot.png"'); cmdline=concat('%e -Tpng -Gcharset=latin1 -o', outfile); if ( ~((fd = openio ('pipe', 'dot', 'w', cmdline)) >= 0) | ~writegraph (fd, gt.graph, 0) ) { dotty.message (0, 'cannot print graph', ' (cmdline was: ', cmdline, ')'); return; } closeio (fd); };