func SignalGraphViewNew(g bh.SignalGraphIf, context ContextIf) (viewer *signalGraphView, err error) { viewer = &signalGraphView{nil, DrawArea{}, nil, nil, g.ItsType(), g.Filename(), context, image.Point{}, false} err = viewer.init() if err != nil { return } viewer.Sync() return }
func TestGraph(t *testing.T) { case1 := []struct { library, graph string nodes, connections int }{ {`<library xmlns="http://www.freesp.de/xml/freeSP" version="1.0"> <signal-type name="s1" scope="" mode="" c-type="" message-id=""></signal-type> <node-type name="Test"> <intype port="" type="s1"></intype> <outtype port="" type="s1"></outtype> </node-type> </library> `, `<?xml version="1.0" encoding="UTF-8"?> <signal-graph xmlns="http://www.freesp.de/xml/freeSP" version="1.0"> <nodes> <input name="sensor"> <outtype type="s1"/> </input> <output name="actuator"> <intype type="s1"/> </output> <processing-node name="test" type="Test"></processing-node> </nodes> <connections> <connect from="sensor" to="test"/> <connect from="test" to="actuator"/> </connections> </signal-graph> `, 3, 2}, } for i, c := range case1 { freesp.Init() var l bh.LibraryIf = LibraryNew("test.alml", nil) buf := copyBuf(c.library) _, err := l.Read(buf) if err != nil { t.Errorf("Testcase %d: Failed to read from buffer: %v", i, err) return } var sg bh.SignalGraphIf = SignalGraphNew("test.sml", nil) buf = copyBuf(c.graph) _, err = sg.Read(buf) if err != nil { t.Errorf("Testcase %d: Failed to read from buffer: %v", i, err) return } var st bh.SignalGraphTypeIf = sg.ItsType() if len(st.Nodes()) != c.nodes { t.Errorf("Testcase %d: NodeIf count mismatch", i) return } } }
func CreateXmlGraphHint(g bh.SignalGraphIf) (xmlg *backend.XmlGraphHint) { xmlg = backend.XmlGraphHintNew(g.Filename()) for _, n := range g.ItsType().InputNodes() { xmlg.InputNode = append(xmlg.InputNode, *CreateXmlIONodePosHint(n, "")) } for _, n := range g.ItsType().OutputNodes() { xmlg.OutputNode = append(xmlg.OutputNode, *CreateXmlIONodePosHint(n, "")) } for _, n := range g.ItsType().ProcessingNodes() { hintlist := CreateXmlNodePosHint(n, "") for _, h := range hintlist { xmlg.ProcessingNode = append(xmlg.ProcessingNode, h) } } return }
func SignalGraphApplyHints(s bh.SignalGraphIf, xmlhints *backend.XmlGraphHint) (err error) { if s.Filename() != xmlhints.Ref { err = fmt.Errorf("SignalGraphApplyHints error: filename mismatch\n") return } g := s.ItsType() for _, xmln := range xmlhints.InputNode { n, ok := g.NodeByName(xmln.Name) if ok { n.SetExpanded(false) freesp.PathModePositionerApplyHints(n, xmln.XmlModeHint) } } for _, xmln := range xmlhints.OutputNode { n, ok := g.NodeByName(xmln.Name) if ok { n.SetExpanded(false) freesp.PathModePositionerApplyHints(n, xmln.XmlModeHint) } } NodesApplyHints("", g, xmlhints.ProcessingNode) return }
func CreateXmlSignalGraph(g bh.SignalGraphIf) *backend.XmlSignalGraph { return CreateXmlSignalGraphType(g.ItsType()) }
func (v signalGraphView) IdentifyGraph(g bh.SignalGraphIf) bool { return g.ItsType() == v.sgType }
func SignalGraphUsesSignalType(s bh.SignalGraphIf, st bh.SignalTypeIf) bool { return SignalGraphTypeUsesSignalType(s.ItsType(), st) }
func SignalGraphUsesNodeType(s bh.SignalGraphIf, nt bh.NodeTypeIf) bool { return SignalGraphTypeUsesNodeType(s.ItsType(), nt) }