func (l *library) RemoveSignalType(st bh.SignalTypeIf) { for _, ntName := range freesp.GetRegisteredNodeTypes() { nt, ok := freesp.GetNodeTypeByName(ntName) if !ok { log.Panicf("library.RemoveSignalType internal error: node type %s\n", ntName) } for _, p := range nt.InPorts() { if p.SignalType().TypeName() == st.TypeName() { log.Printf(`library.RemoveSignalType warning: bh.SignalTypeIf %v is still in use\n`, st) return } } for _, p := range nt.OutPorts() { if p.SignalType().TypeName() == st.TypeName() { log.Printf(`library.RemoveSignalType warning: bh.SignalTypeIf %v is still in use\n`, st) return } } } SignalTypeDestroy(st) l.signalTypes.Remove(st) }
func (dialog *EditDialog) setCurrentValues(context string) { obj, err := dialog.fts.GetObjectById(context) if err != nil { log.Fatalf("editdialog.go: getActiveElementType error: failed to get context: %s\n", err) } var i int var t string switch obj.(type) { case bh.NodeIf: // TODO: check auto-generated types if len(obj.(bh.NodeIf).InPorts()) > 0 { if len(obj.(bh.NodeIf).OutPorts()) > 0 { dialog.nodeNameEntry.SetText(obj.(bh.NodeIf).Name()) for i, t = range freesp.GetRegisteredNodeTypes() { if obj.(bh.NodeIf).ItsType().TypeName() == t { break } } dialog.nodeTypeSelector.SetActive(i) dialog.nodeTypeSelector.SetSensitive(false) } else { // assume one input port dialog.outputNodeNameEntry.SetText(obj.(bh.NodeIf).Name()) for i, t = range freesp.GetRegisteredSignalTypes() { if obj.(bh.NodeIf).InPorts()[0].SignalType().TypeName() == t { break } } dialog.outputTypeSelector.SetActive(i) dialog.outputTypeSelector.SetSensitive(false) } } else { // assume one output port dialog.inputNodeNameEntry.SetText(obj.(bh.NodeIf).Name()) for i, t = range freesp.GetRegisteredSignalTypes() { if obj.(bh.NodeIf).OutPorts()[0].SignalType().TypeName() == t { break } } dialog.inputTypeSelector.SetActive(i) dialog.inputTypeSelector.SetSensitive(false) } case bh.NodeTypeIf: dialog.typeNameEntry.SetText(obj.(bh.NodeTypeIf).TypeName()) case bh.PortTypeIf: dialog.portNameEntry.SetText(obj.(bh.PortTypeIf).Name()) if obj.(bh.PortTypeIf).Direction() == gr.OutPort { dialog.directionSelector.SetActive(1) } for i, t = range freesp.GetRegisteredSignalTypes() { if obj.(bh.PortTypeIf).SignalType().TypeName() == t { break } } dialog.signalTypeSelector.SetActive(i) dialog.directionSelector.SetSensitive(false) case bh.SignalTypeIf: st := obj.(bh.SignalTypeIf) dialog.signalTypeNameEntry.SetText(st.TypeName()) dialog.cTypeEntry.SetText(st.CType()) dialog.channelIdEntry.SetText(st.ChannelId()) dialog.scopeSelector.SetActive(int(st.Scope())) dialog.modeSelector.SetActive(int(st.Mode())) case bh.ImplementationIf: dialog.implNameEntry.SetText(obj.(bh.ImplementationIf).ElementName()) case pf.ArchIf: dialog.archNameEntry.SetText(obj.(pf.ArchIf).Name()) case pf.ProcessIf: dialog.processNameEntry.SetText(obj.(pf.ProcessIf).Name()) case pf.IOTypeIf: dialog.ioTypeNameEntry.SetText(obj.(pf.IOTypeIf).Name()) for i, t = range ioModeStrings { if string(obj.(pf.IOTypeIf).IOMode()) == t { break } } dialog.ioModeSelector.SetActive(i) case pf.ChannelIf: if obj.(pf.ChannelIf).Direction() == gr.OutPort { dialog.channelDirectionSelector.SetActive(1) } dialog.channelDirectionSelector.SetSensitive(false) for i, t = range freesp.GetRegisteredIOTypes() { if obj.(pf.ChannelIf).IOType().Name() == t { break } } dialog.ioTypeSelector.SetActive(i) pr := getOtherProcesses(dialog.fts, obj) var p pf.ProcessIf for i, p = range pr { if obj.(pf.ChannelIf).Link().Process() == p { break } } dialog.processSelector.SetActive(i) dialog.processSelector.SetSensitive(false) case mp.MappedElementIf: pr, _ := obj.(mp.MappedElementIf).Process() i := 0 for _, a := range obj.(mp.MappedElementIf).Mapping().Platform().Arch() { for _, p := range a.Processes() { if pr == p { dialog.processMapSelector.SetActive(i) return } i++ } } dialog.processMapSelector.SetActive(i) default: log.Fatalf("editdialog.go: getActiveElementType error: invalid active object type %T\n", obj) } return }
}, }, iArchName: {"Name:", func(dialog *EditMenuDialog) string { return getText(dialog.archNameEntry) }, func(dialog *EditMenuDialog) (obj *gtk.Widget, err error) { return newEntry(&dialog.archNameEntry) }, }, iNodeTypeSelect: {"Select node type:", func(dialog *EditMenuDialog) string { return dialog.nodeTypeSelector.GetActiveText() }, func(dialog *EditMenuDialog) (obj *gtk.Widget, err error) { return newComboBox(&dialog.nodeTypeSelector, freesp.GetRegisteredNodeTypes()) }, }, iSignalTypeSelect: {"Select signal type:", func(dialog *EditMenuDialog) string { return dialog.signalTypeSelector.GetActiveText() }, func(dialog *EditMenuDialog) (obj *gtk.Widget, err error) { return newComboBox(&dialog.signalTypeSelector, freesp.GetRegisteredSignalTypes()) }, }, iInputTypeSelect: {"Select signal type:", func(dialog *EditMenuDialog) string { return dialog.inputTypeSelector.GetActiveText() }, func(dialog *EditMenuDialog) (obj *gtk.Widget, err error) {