Schön. Was mir aufgefallen ist:
Die Gadget Liste wäre am besten dynamisch, also das Resultat vom Scan. Dann sparst du dir das hardcoden und das Menu ist immer aktuell mit der NTUI Version.
Das geht ungefähr so:
Code:
<SubMenu label='Gadgets' id='NCGadgetListHolder'>
</SubMenu>
Und dan machst du ein Fragment "GadgetListFragment.xml":
Code:
<MenuItem id='NCGagetGetListItem'/>
[ab3]*shclass.ntuiScanHandle = ntui_BeginScanClasses{""}
Repeat
className.s = ntui_GetNextScanName{*shclass}
If (className)
*holder.tuiObject = ntui_GetObjectByID{*ntui,"NCGadgetListHolder"}
If *holder
*fragment.tuiObject = ntui_BuildFromXMLFile{*holder,"NCGadgetListFragment.xml"}
If *fragment
*item = ntui_GetObjectByID{*fragment,"NCGadgetListItem"}
If *item
ntui_SetAttr{*item,#TUIMIA_LABEL,className}
ntui_SetAttr{*item,#TUIMIA_ONCLICK,"Add"+className}
End If
End If
End If
End If
End If
Until className = ""
ntui_EndScan{*shclass}[/ab3]
Dann hast du noch das Problem mit "capitalizing", deshalb würde ich das alles lowercasen, auch das XML.
Noch ein Problem ist wie du die dann erzeugst, wenn du den namen nicht kennst.
Deshalb gibst du denn allen die gleiche "OnClick" Id, und holst den namen aus dem label.
Dann kannst du keine Unterscheidung machen zwischen gruppen, engine, button etc. aber das halte ich auch nicht für wichtig.
Dafür sind die dann alphabetisch sortiert.
Ein kleiner Bug was mir aufgefallen ist:
Das herausfinden der Attribute während dem Tippen funktioniert nur einmal, danach nicht mehr.
Du könnstest zur Verfeinerung noch Attribute, die es nicht gibt, mit Rot unterschlängeln.
Das Menu wäre auch besser in eine MenuBar zu fassen, und dann nicht "DropMenu" sondern "MenuTitle" zu nehmen.
Dann kann der User auch später in den NTUI Prefs entscheiden, ob er es im Fenster (wie z.B. under MS Windows) oder im Screen Title haben will (wie AmigaOS).