Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ntui : Group
#1
Hallo,

Was beim Tabview so wunderbar klappt mit dem späteren einfügen von "fragments" per xml.file versagt hier komplett bei einer Group.
Da wird gar nichts angezeigt, eingefügt...
Kann es sein das das nicht vorgesehen ist ?

Da ich an anderen Ecken bei Tincture im Moment nicht weiterkomme, bastel ich an dem Layermanager rum:

[ATTACHMENT NOT FOUND]

Bei einem Klick auf Add sollte eigentlich in der VGroup eine weitere Group wie schon zu sehen ist dargestellt werden...
Zitieren
#2
Sollte eigentlich egal sein, Objekt ist Objekt. Aber ich hab das nie ausprobiert. Ich vermute mal dass der Platz nicht erweitert wird und die Objekte alle die Größe 0x0 bekommen. Dafür wäre ein Re-Layout des Fensters nötig. Ich versuche dass das alles ohne weiteres Zutun passiert, aber habe ich wie gesagt noch nicht ausprobiert.

Du solltest aber evtl. deine Vorgehensweise überdenken. Ich sehe gerade nicht, warum du beim Layer View irgendwas dynamisch machen musst. Nur wenn du einen Layer hinzufügst, muss ein neues "Layer Fragment" angehängt werden. Das ganze packst du dann in einen ScrollView, und alles sollte passen.
Zitieren
#3
Thilo, so habe ich das doch vor.... Cry

Gut, den Scrollview habe ich noch nicht eingebaut/ausprobiert aber den brauche ich sowieso.
Zitieren
#4
Jetzt habe ich anstatt einer Group einen Scrollview genommen, aber da passiert auch nix....

Na ja, abwarten bis du wieder commiten kannst, sonst macht das ja keinen Sinn was ich hier treibe...
Zitieren
#5
Der ScrollView kann nur ein Kind haben, wenn ich mich recht erinnere. D.h. du packst alles in eine VGrou rein, und dann in einen Scrollview. Das sollte funtkionieren, habe ich auch schon gemacht, z.b. in den Amiblitz Prefs von AIDE.
Zitieren
#6
[ab3]<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/>
<HGroup id='NewLayerGroup'>
<Scrollview>
</ScrollView>
</HGroup>
</VGroup>
</Window>[/ab3]

Hatte ich auch schon probiert...
oder eben so:

[ab3]<HGroup>
<Scrollview id='NewLayerGroup'>>
</ScrollView>
</HGroup>[/ab3]

Macht keinen Unterschied das Fenster sieht dann immer so aus:
[ATTACHMENT NOT FOUND]

und beim resize dann
[ATTACHMENT NOT FOUND]

Natürlich klick ich dazwischen immer wieder auf Add Wink

Das einlesen des xmlfiles
[ab3]*group.tuiGroup = (.tuiGroup)ntui_GetObjectByID{AppContext\tncEngine,"NewLayerGroup"}
If *group
*newgroup.tuiGroup = (.tuiGroup)ntui_BuildFromXMLFile{AppContext\tncEngine,AppContext\projectA\guiImport+"group_layergroup.xml"}
If *newgroup
..........[/ab3]

Ich änderte natürlich .tuiGroup zu tuiScrollView und vice versa...
Zitieren
#7
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?
Zitieren
#8
ok, danke für deine Hilfe, habs eingebaut und es werden nun auch neue Gruppen erzeugt beim klick auf add...

Allerdings gibts da noch einen kleinen Haken, das Customview wird bei jedem klick auf add ein paar pixel kleiner erzeugt Confusedhock:

hier ein screeny:
[ATTACHMENT NOT FOUND]

bei der benennung hast du recht, das könnte präziser sein, da werde ich nochmal drüber gehen.

was den Pfad angeht, das hatte ich von deinem damaligen "verbesserten" Tincturecode übernommen, da hies die Var allerdings noch importPath, das habe ich aus Faulheit einfach umbenannt und nun für das Guigedöhnse genommen... Aber du hast Recht, hat natürlich nix mit dem Projekt ansich zu tun...
Zitieren
#9
Hm, schwer zu sagen was da los ist, ohne den Code zu sehen. Evtl. schliesst du eine Gruppe nicht im XML für einen Eintrag.

BTW, ist das Zufall dass der ScrollView genau den Inhalt wiedergibt, oder funktioniert das nicht korrekt? Normalerweise sollten Scroller erscheinen, sobald der Inhalt zu groß wird.
Zitieren
#10
Also Groups werden ordnungsgemäß geschlossen, daran kann es nicht liegen:

[ab3]<HGroup fixsize='True'>
<CustomView id='LayerView' border='flat' minheight='100' minwidth='100' fixsize='True'/>
<VGroup wrap='3' fixsize='True'>
<Label text='Mode :' align='right'/>
<Label text='Density :' align='right'/>
<Label text='Active :' align='right'/>
<Cycle id='LayerMode' options='Add|Alpha|Mul|Opaque|Sub|Trans' onChange='LayerMode' selected='0' align='left' help='set here the blitmode'/>
<HSlider id='LayerDensity' value='0' minvalue='0' maxValue='255' onChange='LayerDensity' step='1'/>
<Checkbutton id='LayerActive' checked='False' align='left' onClick='LayerActive'/>
</VGroup>
</HGroup>[/ab3]

Den Windowcode habe ich von dir übernommen

Das Scrollview habe ich aufgezogen damit du den Pixelversatz siehst. Normalerweise erscheinen die Scroller beim klick auf add
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste