Hm... da sind zwei Probleme in Reihe, deshalb kommst du mit ausprobieren nicht weit.
1. Die GUI XML muss so aussehen. Du möchtest ja die Layer Einträge IN dem ScrollView haben, nicht NEBEN. Ich habe eine VGroup draus gemacht, weil ich annehme du möchtest die Einträge vertikal listen. Die inner Gruppe ist notwenmdig weil der ScrollView nur ein Kind haben kann.
Code:
<Window id='LayerManager' title='Layermanager' onClose='CLOSE' minwidth='400'active='True'>
<VGroup>
<HGroup fixsize='True'>
<Toolbutton id='LayerAdd' onClick='LayerAdd' image='TBImages:add' help='added a new Layer'/>
<Toolbutton id='LayerRemove' onClick='Layer_Remove' image='TBImages:remove' help='remove the actual Layer'/>
<Space/>
</HGroup>
<HSeperator/>
<Scrollview>
<VGroup id='NewLayerGroup' fixheight='True'>
</VGroup>
</ScrollView>
</VGroup>
</Window>
2. Ein weit größeres Problem hast du aber im Code:
[ab3]*group.tuiGroup = (.tuiGroup)ntui_GetObjectByID{AppContext\tncEngine,"NewLayerGroup"}
If *group
;!!! Die Group wird als Kind der Engine bebaut, nicht als Kind der "NewLayerGroup" !!!
*newgroup.tuiGroup = (.tuiGroup)ntui_BuildFromXMLFile{AppContext\tncEngine,AppContext\projectA\guiImport+"group_layergroup.xml"}
If *newgroup
..........[/ab3]
Das muss so heissen:
[ab3]*layerList.tuiObject = ntui_GetObjectByID{AppContext\tncEngine,"NewLayerGroup"}
If *layerList
*newLayer.tuiObject = ntui_BuildFromXMLFile{*layerList,AppContext\projectA\guiImport+"group_layergroup.xml"}
If *newLayer
ntui_Rethink{ntui_GetWindow{*layerList}}
..........[/ab3]
Ich habe auch die Namen etwas umbenannt. *group sagt ja nur was über den Typ, aber nichts über die Semantik. Der Typ ist aber egal, solange du keine Group-spezifischen Dinge tust lasse es einfach .tuiObject. Dann sparst du dir das Casten. Ausserdem musst du beim Casten immer aufpassen. Es hat ja seinen Grund warum du casten musst. Das soll dich daran erinnern, dass das was du tust so nicht 100% i.O. ist. Du müsstest, um sicher zu casten, noch den Typ erfragen #TUIA_CLASSID. Also caste nur wenn es sein muss.
Das ntui_Rethink{} ist momentan noch notwendig. Es bewirkt, dass das Layout für die layerList neu berechnet wird. Das passiert beim bauen des XML noch nicht automatisch. Muss ich noch verbessern. Problem ist dass man das nicht jedesmal machen will, und nicht jedesmal bis hoch zum Fesnter gehen muss. Z.b. Bei AIDE muss ich nur den TabView "rethinken", weil sich das Layout vom Rest nicht ändert.
Was mir noch aufgefallen ist (vor allem wenn du den Code in 2 Jahren noch verstehen willst oder mit anderen Leuten dran arbeitest):
Bei der Vergabe der IDs solltest du konsequenter sein. Sonst lassen sich die IDs schwer erraten und du musst dir alles merken oder nachschlagen.
"NewLayerGroup" wäre besser "LayerList". Warum? "New" ist ja nur für EINE Funktion wichtig (warum nennst du es nicht "RemoveLayerGroup"!?), ist aber nicht die eigentliche Aufgabe der Gruppe. Die eigentliche Aufgabe ist die Liste von Layern zu halten. "Group" ist überflüssig, da die ID ja die Funktion bescheiben soll, und nicht den Typ. Z.B. <vgroup id="verticalgroup"/>, was gewinnst du dabei? Richtig wäre sowas wie <vgroup id="filelist"/>.
Dumme Frage: Warum speichest du "guiImport" unter "projectA" ? Hast du verschiedene GUIs für verschiedene Projekte? Ich glaube kaum. "guiImport" gehört doch direkt in den AppContect, nicht? Evtl. wäre auch "GuiImportPath" oder "GuiPath" oder sowas besser verständlich?