Das ist ein - sagen wir mal Bug - im SubMenu. Das SubMenu erlaubt es nicht, direkt Child Objects dranzuhängen, da es automatisch ein Fenster als Child hat. Eigentlich müsstest du es also an das Fenster hängen, welches das Child vom SubMenu ist. Da kommst du aber nicht ran. Das ist hässlich, da muss ich mir was überlegen.
Es funktioniert, wenn du eine Gruppe unter das SubMenu hängst, und dort die "Holder" Id angibst:
Code:
<MenuTitle Label='Objects' image='button'>
<SubMenu Label='Gadgets'>
<VGroup id='NCGadgetListHolder'>
Fragment.xml: ====================================================== snip!
<MenuItem id='NCGadgetListItem' image='button' onClick='AddTag' />
==================================================================== snap!
</VGroup>
</SubMenu>
<MenuItem Label='Comment' onClick='AddComment'/>
<MenuItem Label='Engine' onClick='AddTag'/>
<MenuItem Label='Requester' onClick='AddTag'/>
<MenuItem Label='Window' onClick='AddTag'/>
</MenuTitle>
... und der AB3 code:
[ab3]Case "AddTag"
*obj.tuiObject = ntui_GetNotifyObject{*Notify}
If *obj
ntui_GetAttr{*obj, #TUIMIA_LABEL, &*tagNameP.b}
If *tagNameP Then name.s = Peek$(*tagNameP) : Else name = ""
If tagName><""
creator_SetCursorText{"<"+tagName+" />"}
creator_ScanAttributeToListView{tagName}
End If
End If[/ab3]
Dann brauchst du für Tags nur *einen* Notify String, da der Tag-Name aus dem Label geholt wird.
Ob die nun kapitalisiert sind oder nicht hängt davon ab, wie du das Label setzt oder nachbearbeitest. Ich würde lowercase bevorzugen.
Der Scanner sieht dann so aus:
[ab3]Statement creator_ScanGadgetClasses{layoutPath.s}
; Prerequisites
holderId.s = "NCGadgetListHolder"
itemId.s = "NCGadgetListItem"
layoutFile.s = dos_AddPart{layoutPath,"NCMenuItemFragment.xml"}
; Get the menuitem holder
*holder.tuiObject = ntui_GetObjectByID{*engine,holderId}
If *holder = Null
error{holderId+" not found!"}
Statement Return
End If
; Scan the class names
*shclass.ntuiScanHandle = ntui_BeginScanClasses{""}
Repeat
className.s = ntui_GetNextScanName{*shclass}
If (className)
; Build menuitem fragment
*fragment.tuiObject = ntui_BuildFromXMLFile{*holder,layoutFile}
If *fragment
; find the actual menuitem object
*item.tuiObject = ntui_GetObjectByID{*fragment,itemId}
If *item
; set the label to the class name
ntui_SetAttr{*item,#TUIMIA_LABEL,&className}
Else
error{itemId+" was not created in " + layoutFile + "!"}
EndIf
Else
error{"Unable to build fragment from " + layoutFile + "!"}
EndIf
EndIf
Until className = ""
ntui_EndScan{*shclass}
End Statement[/ab3]