digraph { {rank=same; title S0A S0B} title [label="Nameplate\nLister" style="dotted"] S0A [label="S0A:\nnot wanting\nunconnected"] S0B [label="S0B:\nnot wanting\nconnected" color="orange"] S0A -> S0B [label="connected"] S0B -> S0A [label="lost"] S0A -> S1A [label="refresh"] S0B -> P_tx [label="refresh" color="orange" fontcolor="orange"] S0A -> P_tx [style="invis"] {rank=same; S1A P_tx S1B P_notify} S1A [label="S1A:\nwant list\nunconnected"] S1B [label="S1B:\nwant list\nconnected" color="orange"] S1A -> P_tx [label="connected"] P_tx [shape="box" label="C.tx_list()" color="orange"] P_tx -> S1B [color="orange"] S1B -> S1A [label="lost"] S1A -> foo [label="refresh"] foo [label="" style="dashed"] foo -> S1A S1B -> foo2 [label="refresh"] foo2 [label="" style="dashed"] foo2 -> P_tx S0B -> P_notify [label="rx"] S1B -> P_notify [label="rx" color="orange" fontcolor="orange"] P_notify [shape="box" label="W.got_nameplates()"] P_notify -> S0B {rank=same; foo foo2 legend} legend [shape="box" style="dotted" label="refresh: NL.refresh_nameplates()\nrx: NL.got_nameplates()"] }