Graphviz: striped horizontally? - graphviz

In graphviz I can do something like
node [style=striped fillcolor="black;0.333:red;0.333:gold;0.333"]
to create vertical stripes that are next each other from left to right.
For example that would allow me to create the Belgian flag. Is there a way to stripe in the other direction, that is horizontally or stacked on top each other? So that I could create the German flag, for instance.

One way, using "html-like" node:
graph GF{
GF [shape=plaintext label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD FIXEDSIZE="true" HEIGHT="50" WIDTH="300" BGCOLOR="black"> </TD></TR>
<TR><TD FIXEDSIZE="true" HEIGHT="50" WIDTH="300" BGCOLOR="red"> </TD></TR>
<TR><TD FIXEDSIZE="true" HEIGHT="50" WIDTH="300" BGCOLOR="gold"> </TD></TR>
</TABLE>>]
}
Giving:

Related

How to add an edge with no impact?

I have a graph (dot), which gets rendered just fine. Now I would like to add some edges, which should have no impact on the rest of the graph. Ideally the additional edges should get drawn as straight lines between nodes. And these edges should cross nodes behind the nodes.
I tried constraint=false but this does not produce a straight line.
Example: The added line is the last gray one.
digraph K3LS {
rankdir=TB;
outputorder="edgesfirst";
// States
Start [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>Start</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>];
ScanBarcode [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>ScanBarcode</td></tr>
<tr>
<td port='onSerno' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSerno</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>];
HaveSerno [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveSerno</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>];
SearchingIssue [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingIssue</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>];
HaveIssue [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
IssueError [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>IssueError</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>];
SearchingRevocation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingRevocation</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>];
NeedRevocation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>NeedRevocation</td></tr>
<tr>
<td port='onRevoke' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onRevoke</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>];
RevokingCert [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>RevokingCert</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>];
HaveRevocation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
SearchingAffirmation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingAffirmation</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>];
NeedAffirmation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>NeedAffirmation</td></tr>
<tr>
<td port='onAffirm' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onAffirm</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>];
AffirmingReturn [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>AffirmingReturn</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>];
HaveAffirmation [shape=plain color="#cc0000" margin=0 label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveAffirmation</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>];
// Composables
ShowUsage [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowUsage</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowBarcodeScanner [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowBarcodeScanner</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowSerno [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowSerno</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
SearchIssue [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowIssueError [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowIssueError</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowIssue [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowIssue</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
SearchRevocation [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowRevocation [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowRevocation</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
RevokeCert [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>RevokeCert</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
SearchAffirmation [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchAffirmation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
AffirmReturn [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>AffirmReturn</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
ShowAffirmation [shape=plain color="#aa00ee" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowAffirmation</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
// Coroutines
BarcodeAnalyzer [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>BarcodeAnalyzer</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
JiraSearchIssue [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
JiraSearchRevocation [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
JiraSearchAffirmation [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchAffirmation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
JiraRevokeCert [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraRevokeCert</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
JiraAffirmReturn [shape=plain color="#0000cc" margin=0 label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraAffirmReturn</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>];
// Calls aiming a Composable
{ rank=same; Start ShowUsage }
Start:_:e -> ShowUsage:_:w [arrowhead=onormal minlen=2];
{ rank=same; ScanBarcode ShowBarcodeScanner }
ScanBarcode:_:e -> ShowBarcodeScanner:_:w [arrowhead=onormal minlen=2];
{ rank=same; HaveSerno ShowSerno }
HaveSerno:_:e -> ShowSerno:_:w [arrowhead=onormal minlen=2];
{ rank=same; SearchingIssue SearchIssue }
SearchingIssue:_:e -> SearchIssue:_:w [arrowhead=onormal minlen=2];
{ rank=same; IssueError ShowIssueError }
IssueError:_:e -> ShowIssueError:_:w [arrowhead=onormal minlen=2];
{ rank=same; HaveIssue ShowIssue }
HaveIssue:_:e -> ShowIssue:_:w [arrowhead=onormal minlen=2];
{ rank=same; SearchingRevocation SearchRevocation }
SearchingRevocation:_:e -> SearchRevocation:_:w [arrowhead=onormal minlen=2];
{ rank=same; RevokingCert RevokeCert }
RevokingCert:_:e -> RevokeCert:_:w [arrowhead=onormal minlen=2];
{ rank=same; HaveRevocation ShowRevocation }
HaveRevocation:_:e -> ShowRevocation:_:w [arrowhead=onormal minlen=2];
{ rank=same; SearchingAffirmation SearchAffirmation }
SearchingAffirmation:_:e -> SearchAffirmation:_:w [arrowhead=onormal minlen=2];
{ rank=same; AffirmingReturn AffirmReturn }
AffirmingReturn:_:e -> AffirmReturn:_:w [arrowhead=onormal minlen=2];
{ rank=same; HaveAffirmation ShowAffirmation }
HaveAffirmation:_:e -> ShowAffirmation:_:w [arrowhead=onormal minlen=2];
// Launches aiming a Coroutine
{ rank=same; ShowBarcodeScanner BarcodeAnalyzer }
ShowBarcodeScanner:_:e -> BarcodeAnalyzer:_:w [arrowhead=odiamond minlen=2];
{ rank=same; SearchIssue JiraSearchIssue }
SearchIssue:_:e -> JiraSearchIssue:_:w [arrowhead=odiamond minlen=2];
{ rank=same; SearchRevocation JiraSearchRevocation }
SearchRevocation:_:e -> JiraSearchRevocation:_:w [arrowhead=odiamond minlen=2];
{ rank=same; RevokeCert JiraRevokeCert }
RevokeCert:_:e -> JiraRevokeCert:_:w [arrowhead=odiamond minlen=2];
{ rank=same; SearchAffirmation JiraSearchAffirmation }
SearchAffirmation:_:e -> JiraSearchAffirmation:_:w [arrowhead=odiamond minlen=2];
{ rank=same; AffirmReturn JiraAffirmReturn }
AffirmReturn:_:e -> JiraAffirmReturn:_:w [arrowhead=odiamond minlen=2];
// Transitions aiming a State
Start:onScan:s -> ScanBarcode [arrowhead=normal];
ScanBarcode:onSerno:s -> HaveSerno [arrowhead=normal];
ScanBarcode:onScan:s -> Start [arrowhead=normal];
HaveSerno:onSearch:s -> SearchingIssue [arrowhead=normal];
SearchingIssue:onError:s -> IssueError [arrowhead=normal];
SearchingIssue:onSuccess:s -> HaveIssue [arrowhead=normal];
HaveIssue:_:s -> SearchingRevocation [arrowhead=normal];
SearchingRevocation:onSuccess:s -> HaveRevocation [arrowhead=normal];
SearchingRevocation:onError:s -> NeedRevocation [arrowhead=normal];
NeedRevocation:onRevoke:s -> RevokingCert [arrowhead=normal];
RevokingCert:onSuccess:s -> HaveRevocation [arrowhead=normal];
RevokingCert:onError:s -> NeedRevocation [arrowhead=normal];
HaveRevocation:_:s -> SearchingAffirmation [arrowhead=normal];
SearchingAffirmation:onSuccess:s -> HaveAffirmation [arrowhead=normal];
SearchingAffirmation:onError:s -> NeedAffirmation [arrowhead=normal];
NeedAffirmation:onAffirm:s -> AffirmingReturn [arrowhead=normal];
AffirmingReturn:onSuccess:s -> HaveAffirmation [arrowhead=normal];
AffirmingReturn:onError:s -> NeedAffirmation [arrowhead=normal];
// Additional line without impact.
HaveSerno -> IssueError [constraint=false color="#aaaaaa" dir=back arrowtail=onormal style=dashed];
}
The "easiest" way is to do this in a few steps
remove the new edges from your input
run this command dot myfile.gv >myfile.dot # This lays out all the nodes and "old" edges
edit myfile.dot and add the new edges (at the end of the file, but inside the last brace)
run neato -n2 -Tpng myfile.dot >myfile.png # adds the "new" edges, with splines=false (neato default)
For more info, see http://www.graphviz.org/faq/#FaqDotWithCoords
Here is the file I called myfile.dot. Note that it has position data for all the nodes and edges except the one that was by hand editing.
digraph K3LS {
graph [bb="0,0,598.5,1147",
outputorder=edgesfirst,
rankdir=TB
];
node [label="\N"];
{
graph [rank=same];
Start [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>Start</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>,
margin=0,
pos="236,1119.5",
shape=plain,
width=0.66667];
ShowUsage [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowUsage</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="338,1119.5",
shape=plain,
width=1.1806];
}
{
graph [rank=same];
ScanBarcode [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>ScanBarcode</td></tr>
<tr>
<td port='onSerno' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSerno</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>,
margin=0,
pos="225,1028.5",
shape=plain,
width=1.3056];
ShowBarcodeScanner [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowBarcodeScanner</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="378,1028.5",
shape=plain,
width=1.9444];
}
{
graph [rank=same];
HaveSerno [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveSerno</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>,
margin=0,
pos="202,937.5",
shape=plain,
width=1.1528];
ShowSerno [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowSerno</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="321,937.5",
shape=plain,
width=1.1528];
}
{
graph [rank=same];
SearchingIssue [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingIssue</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>,
margin=0,
pos="217,846.5",
shape=plain,
width=1.4444];
SearchIssue [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="347,846.5",
shape=plain,
width=1.1806];
}
{
graph [rank=same];
IssueError [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>IssueError</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>,
margin=0,
pos="321,755.5",
shape=plain,
width=1.0972];
ShowIssueError [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>ShowIssueError</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="450,755.5",
shape=plain,
width=1.5];
}
{
graph [rank=same];
HaveIssue [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="110,755.5",
shape=plain,
width=1.0972];
ShowIssue [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowIssue</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="224,755.5",
shape=plain,
width=1.0972];
}
{
graph [rank=same];
SearchingRevocation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingRevocation</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>,
margin=0,
pos="111,664.5",
shape=plain,
width=1.9167];
SearchRevocation [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="275,664.5",
shape=plain,
width=1.6528];
}
{
graph [rank=same];
RevokingCert [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>RevokingCert</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>,
margin=0,
pos="136,482.5",
shape=plain,
width=1.3611];
RevokeCert [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>RevokeCert</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="263,482.5",
shape=plain,
width=1.1806];
}
{
graph [rank=same];
HaveRevocation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="86,391.5",
shape=plain,
width=1.5694];
ShowRevocation [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowRevocation</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="235,391.5",
shape=plain,
width=1.5694];
}
{
graph [rank=same];
SearchingAffirmation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>SearchingAffirmation</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>,
margin=0,
pos="87,300.5",
shape=plain,
width=1.9722];
SearchAffirmation [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>SearchAffirmation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="255,300.5",
shape=plain,
width=1.7083];
}
{
graph [rank=same];
AffirmingReturn [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>AffirmingReturn</td></tr>
<tr>
<td port='onSuccess' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSuccess</font></td>
<td port='onError' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onError</font></td>
</tr>
</table>>,
margin=0,
pos="115,118.5",
shape=plain,
width=1.5972];
AffirmReturn [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'>AffirmReturn</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="256,118.5",
shape=plain,
width=1.3333];
}
{
graph [rank=same];
HaveAffirmation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>HaveAffirmation</td></tr>
<tr>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
</tr>
</table>>,
margin=0,
pos="58,27.5",
shape=plain,
width=1.6111];
ShowAffirmation [color="#aa00ee",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>composable</font></td></tr>
<tr><td colspan='4' border='1' color="#aa00ee" bgcolor="#ffeeff" port='_' cellpadding='4'><u>ShowAffirmation</u></td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="210,27.5",
shape=plain,
width=1.625];
}
{
graph [rank=same];
ShowBarcodeScanner;
BarcodeAnalyzer [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>BarcodeAnalyzer</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="541,1028.5",
shape=plain,
width=1.5972];
}
{
graph [rank=same];
SearchIssue;
JiraSearchIssue [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchIssue</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="478,846.5",
shape=plain,
width=1.4583];
}
{
graph [rank=same];
SearchRevocation;
JiraSearchRevocation [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchRevocation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="439,664.5",
shape=plain,
width=1.9167];
}
{
graph [rank=same];
RevokeCert;
JiraRevokeCert [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraRevokeCert</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="394,482.5",
shape=plain,
width=1.4583];
}
{
graph [rank=same];
SearchAffirmation;
JiraSearchAffirmation [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraSearchAffirmation</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="423,300.5",
shape=plain,
width=1.9722];
}
{
graph [rank=same];
AffirmReturn;
JiraAffirmReturn [color="#0000cc",
height=0.73611,
label=<
<table border='0' cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>coroutine</font></td></tr>
<tr><td colspan='4' border='1' color="#0000cc" bgcolor="#eeeeff" port='_' cellpadding='4'>JiraAffirmReturn</td></tr>
<tr><td color='#ffffff00' cellpadding='1'><font point-size='8'> </font></td></tr> </table>>,
margin=0,
pos="397,118.5",
shape=plain,
width=1.5972];
}
Start:onScan:s -> ScanBarcode [arrowhead=normal,
pos="e,228.63,1056.2 231,1093.5 231,1084.7 230.43,1075.2 229.64,1066.3"];
Start:_:e -> ShowUsage:_:w [arrowhead=onormal,
minlen=2,
pos="e,297,1122.5 258,1122.5 271.41,1122.5 277.04,1122.5 286.92,1122.5"];
ScanBarcode:onScan:s -> Start [arrowhead=normal,
pos="e,255.45,1091.9 242,1002.5 242,989.16 262.73,993.91 272,1003.5 288.22,1020.3 278.03,1033.5 272,1056 269.53,1065.2 265.33,1074.5 \
260.65,1083"];
ScanBarcode:onSerno:s -> HaveSerno [arrowhead=normal,
pos="e,202,965.28 202,1002.5 202,993.72 202,984.25 202,975.37"];
ScanBarcode:_:e -> ShowBarcodeScanner:_:w [arrowhead=onormal,
minlen=2,
pos="e,309,1031.5 270,1031.5 283.41,1031.5 289.04,1031.5 298.92,1031.5"];
HaveSerno:onSearch:s -> SearchingIssue [arrowhead=normal,
pos="e,217,874.28 217,911.5 217,902.72 217,893.25 217,884.37"];
HaveSerno:_:e -> ShowSerno:_:w [arrowhead=onormal,
minlen=2,
pos="e,281,940.5 242,940.5 255.41,940.5 261.04,940.5 270.92,940.5"];
SearchingIssue:onSuccess:s -> HaveIssue [arrowhead=normal,
pos="e,149.56,770.09 193,820.5 193,799.86 176.7,784.94 158.55,774.73"];
SearchingIssue:onError:s -> IssueError [arrowhead=normal,
pos="e,281.44,778.55 238,820.5 238,810.09 254.59,796.19 272.94,784.01"];
SearchingIssue:_:e -> SearchIssue:_:w [arrowhead=onormal,
minlen=2,
pos="e,306,849.5 267,849.5 280.41,849.5 286.04,849.5 295.92,849.5"];
HaveIssue:_:s -> SearchingRevocation [arrowhead=normal,
pos="e,111,692.19 111,744.5 111,730.76 111,715.67 111,702.39"];
HaveIssue:_:e -> ShowIssue:_:w [arrowhead=onormal,
minlen=2,
pos="e,186,758.5 148,758.5 160.93,758.5 166.44,758.5 175.89,758.5"];
IssueError:_:e -> ShowIssueError:_:w [arrowhead=onormal,
minlen=2,
pos="e,397,758.5 359,758.5 371.93,758.5 377.44,758.5 386.89,758.5"];
NeedRevocation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>NeedRevocation</td></tr>
<tr>
<td port='onRevoke' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onRevoke</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>,
margin=0,
pos="156,573.5",
shape=plain,
width=1.5694];
SearchingRevocation:onError:s -> NeedRevocation [arrowhead=normal,
pos="e,143.79,601.02 136,638.5 136,629.28 137.91,619.64 140.56,610.72"];
SearchingRevocation:onSuccess:s -> HaveRevocation [arrowhead=normal,
pos="e,81.824,419.19 78,638.5 78,556.94 72.812,536.39 78,455 78.534,446.62 79.468,437.64 80.513,429.18"];
SearchingRevocation:_:e -> SearchRevocation:_:w [arrowhead=onormal,
minlen=2,
pos="e,217,667.5 178,667.5 191.41,667.5 197.04,667.5 206.92,667.5"];
NeedRevocation:onRevoke:s -> RevokingCert [arrowhead=normal,
pos="e,126.84,510.27 121,547.5 121,538.46 122.44,528.89 124.42,519.98"];
RevokingCert:onError:s -> NeedRevocation [arrowhead=normal,
pos="e,171.54,545.72 156,456.5 156,443.6 176.04,448.22 185,457.5 201.21,474.28 190.03,487.21 185,510 183.03,518.91 179.66,528.06 175.9,\
536.52"];
RevokingCert:onSuccess:s -> HaveRevocation [arrowhead=normal,
pos="e,102.79,419.19 113,456.5 113,447.02 110.46,437.34 106.93,428.46"];
RevokingCert:_:e -> RevokeCert:_:w [arrowhead=onormal,
minlen=2,
pos="e,222,485.5 183,485.5 196.41,485.5 202.04,485.5 211.92,485.5"];
HaveRevocation:_:s -> SearchingAffirmation [arrowhead=normal,
pos="e,87,328.19 87,380.5 87,366.76 87,351.67 87,338.39"];
HaveRevocation:_:e -> ShowRevocation:_:w [arrowhead=onormal,
minlen=2,
pos="e,180,394.5 141,394.5 154.41,394.5 160.04,394.5 169.92,394.5"];
NeedAffirmation [color="#cc0000",
height=0.76389,
label=<
<table border='1' bgcolor="#ffeeee" cellborder='1'>
<tr><td colspan='4' border='0' align='right' cellpadding='0' cellspacing='10'><font point-size='6'>state</font></td></tr>
<tr><td colspan='4' border='1' color="#ffeeee" bgcolor="#ffeeee" port='_' cellpadding='4'>NeedAffirmation</td></tr>
<tr>
<td port='onAffirm' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onAffirm</font></td>
<td port='onScan' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onScan</font></td>
<td port='onSearch' color="#00aa00" bgcolor="#ffffff" cellpadding='1' cellspacing='3'><font point-size='8'>onSearch</font></td>
</tr>
</table>>,
margin=0,
pos="138,209.5",
shape=plain,
width=1.6111];
SearchingAffirmation:onError:s -> NeedAffirmation [arrowhead=normal,
pos="e,122.59,237.02 113,274.5 113,265.04 115.4,255.3 118.71,246.36"];
SearchingAffirmation:onSuccess:s -> HaveAffirmation [arrowhead=normal,
pos="e,53.302,55.174 53,274.5 53,192.93 43.172,172.37 49,91 49.601,82.604 50.652,73.623 51.827,65.161"];
SearchingAffirmation:_:e -> SearchAffirmation:_:w [arrowhead=onormal,
minlen=2,
pos="e,195,303.5 156,303.5 169.41,303.5 175.04,303.5 184.92,303.5"];
NeedAffirmation:onAffirm:s -> AffirmingReturn [arrowhead=normal,
pos="e,107.14,146.04 102,183.5 102,174.44 103.27,164.8 105.01,155.82"];
AffirmingReturn:onError:s -> NeedAffirmation [arrowhead=normal,
pos="e,156.64,181.77 138,92.5 138,77.16 161.81,82.497 172.5,93.5 188.76,110.24 178.32,123.4 172.5,146 170.14,155.17 166.11,164.43 161.63,\
172.91"];
AffirmingReturn:onSuccess:s -> HaveAffirmation [arrowhead=normal,
pos="e,76.829,55.271 88,92.5 88,82.948 85.226,73.287 81.365,64.467"];
AffirmingReturn:_:e -> AffirmReturn:_:w [arrowhead=onormal,
minlen=2,
pos="e,209,121.5 171,121.5 183.93,121.5 189.44,121.5 198.89,121.5"];
HaveAffirmation:_:e -> ShowAffirmation:_:w [arrowhead=onormal,
minlen=2,
pos="e,153,30.5 114,30.5 127.41,30.5 133.04,30.5 142.92,30.5"];
ShowBarcodeScanner:_:e -> BarcodeAnalyzer:_:w [arrowhead=odiamond,
minlen=2,
pos="e,485,1031.5 447,1031.5 459.01,1031.5 464.61,1031.5 472.92,1031.5"];
SearchIssue:_:e -> JiraSearchIssue:_:w [arrowhead=odiamond,
minlen=2,
pos="e,427,849.5 389,849.5 401.01,849.5 406.61,849.5 414.92,849.5"];
SearchRevocation:_:e -> JiraSearchRevocation:_:w [arrowhead=odiamond,
minlen=2,
pos="e,371,667.5 334,667.5 345.56,667.5 351.03,667.5 358.97,667.5"];
RevokeCert:_:e -> JiraRevokeCert:_:w [arrowhead=odiamond,
minlen=2,
pos="e,343,485.5 305,485.5 317.01,485.5 322.61,485.5 330.92,485.5"];
SearchAffirmation:_:e -> JiraSearchAffirmation:_:w [arrowhead=odiamond,
minlen=2,
pos="e,353,303.5 316,303.5 327.56,303.5 333.03,303.5 340.97,303.5"];
AffirmReturn:_:e -> JiraAffirmReturn:_:w [arrowhead=odiamond,
minlen=2,
pos="e,341,121.5 303,121.5 315.01,121.5 320.61,121.5 328.92,121.5"];
// added by hand
HaveSerno -> IssueError [constraint=false color="#aaaaaa" dir=back arrowtail=onormal style=dashed];
}
And the result:

p:ajax update of more than one element

I'm having trouble when trying to update two elements.
This is my code:
<h:form id="all">
<table id="gt" class="CartContents Stylize General" cellspacing="0" cellpadding="0" style="display:#{clothesBean_i.convertToList(clothesBean_i.cartclothes)}">
<tbody>
<!-- AFFICHAGE PRODUIT -->
<ui:repeat value="#{clothesBean_i.convertToList(clothesBean_i.cartclothes)}" var="c">
<tr>
<td class="CartThumb" style="">
<img src="" /> 
</td>
<td class="ProductName" colspan="1">
<h5></h5>
<br />
</td>
<td align="center" class="CartItemIndividualPrice">
$ #{c.price}
</td>
<td id="qt" align="center" class="CartItemIndividualPrice">
<h:outputLabel for="ajaxSpinner" value="" />
<p:outputPanel id="mypanel">
<p:spinner id="ajaxSpinner" value="#{clothesBean_i.qt}" min="1" max="100">
<p:ajax update="tot grandT" process="#this" />
</p:spinner>
</p:outputPanel>
</td>
<td align="center" class="CartItemIndividualPrice">
<h:outputText id="tot" value="$ #{clothesBean_i.getClothePriceQt(c)}" />
</td>
</tr>
</ui:repeat>
</tbody>
<tfoot >
<tr class="SubTotal GrandTotal">
<td colspan="4">Grand Total:</td>
<td >
<h:outputText id="grandT" value="$ #{clothesBean_i.getClothesPrice(clothesBean_i.convertToList(clothesBean_i.cartclothes))}" />
</td>
</tr>
</tfoot>
</table>
</h:form>
in this line
<p:ajax update="tot grandT" process="#this" />
when I give just one id (tot or grandT) it works fine,
but with two ids I just get a blank page (nothing is showing)!

Images in an email is not displaying in IE

I have created an HTML email for a client, who then asked me to post it to their server for viewing on the web. It is a basic table layout with images and some links.
Everything appears to work in all major email clients, as well as Chrome, Safari, and Firefox. However, All versions of IE simply do not display the images. You can see the site here.
http://poweredbyprofessionals.com/email/2012-10-MRF/
I verified that the images are RGB and not CMYK, as well as ran it through a validator. Nothing seems to fix the issue. Any ideas?
Solution
Replace width="auto" and height="auto" by the real width and height.
Demo
http://jsfiddle.net/yrVsL/1/
Code modified
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<table style="border-collapse: collapse;" align="center" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" align="center">
<font color="#005697" style="font-family:Arial, Helvetica, sans-serif; font-size:18px; line-height:36px;">
<strong> Join Us!! <br/></strong>
</font>
<font color="#008754" style="font-family:Arial, Helvetica, sans-serif; font-size:14px; line-height:20px;">
<strong>Wings of Hope for Melanoma</strong><br />
a fundraising gala to benefit the <br />
Melanoma Research Foundation<br /><br />
</font>
<font color="#000" style="font-family:Arial, Helvetica, sans-serif; font-size:14px; line-height:20px;">
<strong> Thursday, October 11, 2012<br/>
6:00 PM to 10:00 PM<br />
Gotham Hall <br />
1356 Broadway, New York<br /><br />
</strong>
<strong>Click here for more information, to purchase tickets or make a donation!</strong>
</font>
</td>
</tr>
<tr>
<td>
<a href="http://www.poweredbyprofessionals.com/melanoma/Purchase.html" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-1.jpg" alt="Slice-1" width="550" height="257" />
</a>
</td>
</tr>
<tr>
<td>
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-2.jpg" alt="Slice-2" width="550" height="446" />
</td>
</tr>
<tr>
<td>
<table style="border-collapse: collapse;" align="center" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-4.jpg" alt="Slice-4" width="275" height="99" />
</td>
<td>
<a href="http://www.poweredbyprofessionals.com/melanoma/Purchase.html" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-3.jpg" alt="Slice-3" width="275" height="99" />
</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-5.jpg" alt="Slice-5" width="550" height="319" />
</td>
</tr>
<tr>
<td>
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-6.jpg" alt="Slice-2" width="550" height="99" />
</td>
</tr>
<tr>
<td>
<a href="http://www.poweredbyprofessionals.com/melanoma/Purchase.html" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-7.jpg" alt="Slice-1" width="550" height="99" />
</a>
</td>
</tr>
<tr>
<td>
<table style="border-collapse: collapse;" align="center" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="http://www.poweredbyprofessionals.com" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-8.jpg" alt="Slice-3" width="180" height="87" />
</a> </td>
<td>
<a href="http://www.melanoma.org" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-9.jpg" alt="Slice-3" width="180" height="87" />
</a>
</td>
<td>
<a href="http://www.stanadler.com" target="_blank">
<img style="display: block;" src="http://poweredbyprofessionals.com/email/2012-10-MRF/images/Slice-10.jpg" alt="Slice-3" width="180" height="87" />
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

PrimeFaces Ajax

I am trying to make login with jsf.
I want to hide login panel when user registered.
I did this with jsf ajax.
When I try to do this with primefaces. I am failed.
I triy in jsf ajax like this.
<h:form id="register">
<table style="width: 49%; margin-right: auto; margin-left: auto;">
<tr>
<td colspan="3">
All fields are required.</td>
</tr>
<tr>
<td class="style2" style="height: 51px">Username</td>
<td style="width: 17px; height: 51px;">:</td>
<td class="style3" style="height: 51px"><h:inputText
id="regusername" style="width:155px;height:24px;"
value="#{userRegister.regUser.username}">
</h:inputText></td>
</tr>
<tr>
<td class="style2" style="height: 51px">Name</td>
<td style="width: 17px; height: 51px;">:</td>
<td class="style3" style="height: 51px"><h:inputText
id="regname" style="width:155px;height:24px;"
value="#{userRegister.regUser.name}">
</h:inputText></td>
</tr>
<tr>
<td class="style2" style="height: 51px">Mail</td>
<td style="width: 17px; height: 51px;">:</td>
<td class="style3" style="height: 51px"><h:inputText
id="regmail" style="width:155px;height:24px;"
value="#{userRegister.regUser.mail}">
</h:inputText></td>
</tr>
<tr>
<td class="style2" style="height: 51px">Password</td>
<td style="width: 17px; height: 51px;">:</td>
<td class="style3" style="height: 51px">
<h:inputSecret
id="regpassword" style="width:155px;height:24px;"
value="#{userRegister.regUser.password}">
</h:inputSecret></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td class="style3"><h:commandButton
style="width:76px;height:26px" value="Clear" type="reset">
</h:commandButton> <h:commandButton style="width:75px;height:26px"
value="Register" action="#{userRegister.register()}"
method="post">
<f:ajax execute="regname regusername regpassword regmail"
render="registermessage" />
</h:commandButton></td>
</tr>
<tr>
<td colspan="3"><h:outputText id="registermessage"
value="#{userRegister.message}"></h:outputText></td>
</tr>
</table>
</h:form>
</h:panelGroup>
<h:panelGroup rendered="#{userLogin.isLoggedin()== true}"
layout="block">
You are already loggedin !!
</h:panelGroup>
When ı try this in primefaces like this:
<p:panel id ="registerPanel" header="User Registration" align="center"
style="text-align:center;">
<table style="width: auto; margin: auto;">
<tr>
<td style="text-align: right;"><h:outputLabel for="regname"
value="Name Surname : * " /></td>
<td style="text-align: left"><p:inputText id="regname"
value="#{userRegister.regUser.name}" size="40" required="true"
label="Name and Surname">
<f:validateLength minimum="2" />
</p:inputText> <p:watermark for="regname" value="Name Surname" /></td>
</tr>
<tr>
<td style="text-align: right" colspan="2"><p:message
for="regname" /></td>
</tr>
<tr>
<td style="text-align: right;"><h:outputLabel
for="regusername" value="Username : * " /></td>
<td style="text-align: left"><p:inputText id="regusername"
value="#{userRegister.regUser.username}" size="40"
required="true" label="Username">
<f:validateLength minimum="3" />
</p:inputText> <p:watermark for="regusername" value="Username" /></td>
</tr>
<tr>
<td style="text-align: riht" colspan="2"><p:message
for="regusername" /></td>
</tr>
<tr>
<td style="text-align: right;"><h:outputLabel for="regmail"
value="E-Mail : * " /></td>
<td style="text-align: left"><p:inputText id="regmail"
value="#{userRegister.regUser.mail}" size="40" required="true"
label="Mail">
<f:validateLength minimum="2" />
</p:inputText> <p:watermark for="regmail" value="mail#example.com" /></td>
</tr>
<tr>
<td style="text-align: right" colspan="2"><p:message
for="regmail" /></td>
</tr>
<tr>
<td style="text-align: right;"><h:outputLabel for="paswword"
value="Password : * " /></td>
<td style="text-align: left"><p:password id="regpassword"
value="#{userRegister.regUser.password}" size="40"
required="true" label="Password">
<f:validateLength minimum="5" />
</p:password> <p:watermark for="regpassword" value="Password" /></td>
</tr>
<tr>
<td style="text-align: left" colspan="2"><p:message
for="regpassword" /></td>
</tr>
<tr>
<td style="text-align: right" colspan="2">
</td>
</tr>
<tr>
<td style="text-align: right" colspan="2">
<p:commandButton value="Clear" image="ui-icon ui-icon-arrowrefresh-1-w"
type="reset"/>
<p:commandButton value="Register" image="ui-icon ui-icon-disk"
action="#{userRegister.register()}" method="post">
<f:ajax
render="registerpaneli" />
</p:commandButton>
</td>
</tr>
</table>
-->
</h:panelGroup>
I registraion panel cant hiden.
What is the problem ?
Remove the
<p:commandButton ....>
<f:ajax render="what-ever">
</p:commandButton>
By
<p:commandButton update="what-ever" ../>
Furthermore, you can read Primefaces' Document and its demo.
Because in Primefaces, most components are compatible with Ajax, especially <p:commandButton/> because it has Ajax turned on by default.
In PrimeFaces, <p:commandButton> already has built-in ajax functionality. You don't need to use <f:ajax>. In fact, <f:ajax> cannot be used with PrimeFaces. If you really need to use it, you must use <p:ajax> instead.
To fix your issue, I think you should change you button like this:
<p:commandButton value="Register" actionListener="#{userRegister.register}" update="registerPanel" />

Flex 4 spark tabbar. How do I Reduce space between tabbar button and bordercontainer

How do I remove the space between tab button and border container.
The code is
<s:TabBar dataProvider="{vsApplication}" >
<s:layout>
<!--<s:ButtonBarHorizontalLayout gap="7" />-->
<s:HorizontalLayout gap="7" paddingBottom="0"/>
</s:layout>
</s:TabBar>
<mx:ViewStack id="vsApplication" width="100%">
<s:NavigatorContent id="ncConfiguration" label="Configuration" width="100%">
<s:BorderContainer width="100%">
</s:BorderContainer>
</s:NavigatorContent>
<s:NavigatorContent id="ncProject" label="Project" width="100%">
<s:BorderContainer width="100%">
<mx:DataGrid id="dgProject" dataProvider="{projectData}" doubleClickEnabled="true" itemDoubleClick="dgProject_itemDoubleClickHandler(event)">
<mx:columns>
<mx:DataGridColumn headerText="Project ID" dataField="ProjectID"/>
<mx:DataGridColumn headerText="Project Name" dataField="ProjectName"/>
<mx:DataGridColumn headerText="Planned Start Date" dataField="PlannedStartDate"/>
<mx:DataGridColumn headerText="Planned End Date" dataField="PlannedEndDate"/>
<mx:DataGridColumn headerText="Actual Start Date" dataField="ActualStartDate"/>
<mx:DataGridColumn headerText="Actual End Date" dataField="ActualEndDate"/>
</mx:columns>
</mx:DataGrid>
</s:BorderContainer>
</s:NavigatorContent>
<s:NavigatorContent id="ncTimesheet" label="Timesheet" width="100%">
<s:BorderContainer width="100%">
</s:BorderContainer>
</s:NavigatorContent >
<s:NavigatorContent id="ncDashboard" label="Dashboard" width="100%">
<s:BorderContainer width="100%">
</s:BorderContainer>
</s:NavigatorContent>
</mx:ViewStack>
I had a similar problem - no padding or gap specified anywhere, but there was a space between the TabBar and the ViewStack.
The fix was to set gap="0" in the layout of the parent component (in my case a Panel with VerticalLayout).
I fixed this by doing the same as Andy but just wrapping the components in another component
from
<s:TabBar dataProvider="{viewStack}"/>
<mx:ViewStack id="viewStack" width="100%" height="25%" creationPolicy="all">
<view:TabA id="tabA"/>
<view:TabB id="tabB"/>
</mx:ViewStack>
to
<s:VGroup gap="0" width="100%">
<s:TabBar dataProvider="{viewStack}"/>
<mx:ViewStack id="viewStack" width="100%" height="25%" creationPolicy="all">
<view:TabA id="tabA"/>
<view:TabB id="tabB"/>
</mx:ViewStack>
</s:VGroup>
In this case I wrapped my tab bar and view stack in a VGroup as I did not want to affect the gaps of any other component in my window.

Resources