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]