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);
};