srecord noeq JG22NetworkPort(G22Utils g22utils, JG22NetworkElement element, G22NetworkElement.Port port) > JPanel { int size = 10; Color outputColor() { ret Color.green; } Color inputColor() { ret Color.red; } void init { bindChangeListenerToComponent(this, port, l0 update); componentPopupMenuItems(this, "Show value", rThread showValue, "Disconnect", rThread disconnect); update(); } void update { _print("Updating port " + port); setOpaque(true); setBackground(port.isOutput() ? outputColor() : inputColor()); setSize(size, size); // TODO: merge with backend computation Rect r = toRect(main getBounds(element.visualize())); r = growRectTopAndLeft(r, size); setLocation(r.x+iround(port.position.x*r.w), r.y+iround(port.position.y*r.h)); setToolTip(this, str(port)); _print("Port " + port.name + " : " + getBounds()); } void showValue { G22NetworkElement e; if (port.isOutput()) e = port.element(); else e = port.cable.from.element(); var value = element.parent.networkInstance.getObjectForBlueprint(e); showFrame("Port value", G22JavaObjectVisualizer(g22utils, value)); } void disconnect { port.disconnect(); } }