TreeGadget mit vielen 0-Level nodes

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

TreeGadget mit vielen 0-Level nodes

Beitrag von Vera »

Hallo,
erneut versuche ich heraus zu bekommen, wie man es schaffen könnte, in Linux ein TreeGadget zu erstellen, bei dem ich die Knotenpunkte paralell im 0-Level habe.

Das Beste, was ich erreichen kann, sind paralelle Knoten auf der ersten Ebene.
Im englishen Forum hab' ich einen kleinen 'kritischen' Testcode gefunden, mit dem man es schafft, nachträglich jeweils vor die aktuelle root-node (Level 0-0) eine neue root-node einzufügen.

Es müßte also grundsätzlich möglich sein auf unterstem Level Paralellen zu haben, doch mit keinem meiner Versuche will es gelingen:

Code: Alles auswählen

 If OpenWindow(0, 400, 60, 200, 500, "TreeGadget", #PB_Window_SystemMenu)
   TreeGadget(0, 10, 10, 180, 480,#PB_Tree_CheckBoxes)
 ;; zum Testen, bitte das jeweilige Beispiel separat auskommentieren 
   
   ;; klassisches Hilfe-Beispiel, das keine root-nodes erstellt, abgesehen des 1. Normal
   ;; sondern alles unter Node 0 unterordnet
   
;    For b = 0 To 3
;       AddGadgetItem (0, -1, "Normal Item "+Str(b), 0, 0)
;       AddGadgetItem (0, -1, "Node "+Str(b), 0, 0)
;       AddGadgetItem(0, -1, "Sub-Item 1", 0, 1)
;       AddGadgetItem(0, -1, "Sub-Item 2", 0, 1)
;       AddGadgetItem(0, -1, "Sub-Item 3", 0, 1)
;       AddGadgetItem (0, -1, "File "+Str(b), 0, 1)
;      Next b
   

   ;; --- hier sind alle Nodes auch Nodes auf 1. Ebene
   ;; - aber Normal wird weiterhin zur Ebene 2 gezwungen
   
;    For b = 0 To 3
;       AddGadgetItem (0, -1, "Normal Item "+Str(b), 0, 0)
;       AddGadgetItem (0, -1, "Node "+Str(b), 0, 1)
;       AddGadgetItem(0, -1, "Sub-Item 1", 0, 2)
;       AddGadgetItem(0, -1, "Sub-Item 2", 0, 2)
;       AddGadgetItem(0, -1, "Sub-Item 3", 0, 2)
;       AddGadgetItem (0, -1, "File "+Str(b), 0, 2)
;      Next b
     

    ;; hier werden nun die Nodes u. Normal alle in sub-3 versteckt

;    For b = 0 To 3
;       AddGadgetItem (0, -1, "Normal Item "+Str(b), 0, 0)
;       AddGadgetItem (0, -1, "Node "+Str(b), 0, 0)
;       
;       AddGadgetItem(0, -1, "Sub-Item 1", 0, 1)
;       AddGadgetItem(0, -1, "Sub-Item 2", 0, 1)
;       AddGadgetItem(0, -1, "Sub-Item 3", 0, 1)
;       
;       AddGadgetItem (0, -1, "File "+Str(b), 0, 2)
;      Next b


     ;; vergeblicher Versuch die Komponenten mit absoluter Position in die Nodes zu kriegen
     ;; macht ein eher caotisches Ergebnis

;   n=0
;   For b = 0 To 3
;       AddGadgetItem (0, n+1, "Normal Item "+Str(b), 0, 0)
;       AddGadgetItem (0, n+1, "Node "+Str(b), 0, 0)
;       
;       AddGadgetItem(0, n+1, "Sub-Item 1", 0, 1)
;       AddGadgetItem(0, n+1, "Sub-Item 2", 0, 1)
;       AddGadgetItem(0, n+1, "Sub-Item 3", 0, 1)
;       
;       AddGadgetItem (0, n+1, "File "+Str(b), 0, 2)
;    Next b


  SetGadgetItemState(0, 0, #PB_Tree_Expanded)
  SetGadgetItemState(0, 1, #PB_Tree_Expanded)
  SetGadgetItemState(0, 2, #PB_Tree_Expanded)
     
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf
Wer's weiss, wie's geht ~ bitte verraten :)
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: TreeGadget mit vielen 0-Level nodes

Beitrag von matbal »

Der Fehler im letzten Beispiel-Code:
n + 1 als Parameter übergibt n + 1 der Prozedur. Das heißt, im ersten Schleifendurchgang wird jedes Mal 1 übergeben...

So entsteht kein Chaos:

Code: Alles auswählen

  For b = 0 To 3
     AddGadgetItem (0, n, "Normal Item "+Str(b), 0, 0)
     n + 1
     AddGadgetItem (0, n, "Node "+Str(b), 0, 0)
     n + 1
     AddGadgetItem(0, n, "Sub-Item 1", 0, 1)
     n + 1
     AddGadgetItem(0, n, "Sub-Item 2", 0, 1)
     n + 1
     AddGadgetItem(0, n, "Sub-Item 3", 0, 1)
     n + 1
     AddGadgetItem (0, n+1, "File "+Str(b), 0, 2)
     n + 1   
   Next b
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: TreeGadget mit vielen 0-Level nodes

Beitrag von Vera »

Danke matbal,
der Unterschied ist deutlich :-)

Das macht Beispiel 4 im Ergebnis identisch mit 3, bei dem alle SubItems3 zu Knoten auf erstem Level werden.
Also auch eine absolute Positionszuweisung hilft nicht das ADD_n_0 einen neuen Knoten auf unterster Ebene erstellt.

Was mich auch stutzig macht, dass ich in beiden Foren auch nicht auf den kleinsten Hinweis zu diesem Problem gestoßen bin.
Vielleicht ist es ja ein 'Allgemeinwissen', dass das auf Linux a priori ausgeschlossen ist?
Aber das ist komisch, denn solche TreeCodes sind nicht Crossplattform-fähig und hätte doch bei vielen in all der Zeit mal auffallen müßen. ... denn das macht ja auch alle Abfragen/Sprünge etc. kaputt.
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: TreeGadget mit vielen 0-Level nodes

Beitrag von Vera »

Hallo,
ich habe endlich einen Weg gefunden paralelle 0-Level Nodes in Linux hinzubekommen: :D

- sämtliche 0-Level Nodes müßen zuerst angelegt werden
- danach lassen sich die Sub-Level Einträge hinzufügen

Code: Alles auswählen

If OpenWindow(0, 0, 0, 255, 255, "TreeGadget - 0-level nodes", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TreeGadget(0, 10, 10, 230, 240, #PB_Tree_NoLines)

  AddGadgetItem(0, -1, "Node A", 0, 0)      ; alle 0-Level nodes zuerst anlegen
  AddGadgetItem(0, -1, "Node B", 0, 0)
  AddGadgetItem(0, -1, "Node C", 0, 0)
  AddGadgetItem(0, -1, "Uiui", 0, 0)
  AddGadgetItem(0, -1, "Watt", 0, 0)

  AddGadgetItem(0, 1, "A-Item a", 0, 1)     ; danach können Sub-Levels hinzugefügt werden
  AddGadgetItem(0, 2, "A-Item b", 0, 1)
  AddGadgetItem(0, 4, "B-Item a", 0, 1)
  AddGadgetItem(0, 5, "B-Item b", 0, 1)
  AddGadgetItem(0, 7, "C-Item a", 0, 1)
  AddGadgetItem(0, 8, "C-Item b", 0, 1)
  AddGadgetItem(0, 10, "holla", 0, 1)
  AddGadgetItem(0, 12, "nu a", 0, 1)
  AddGadgetItem(0, 13, "nu b", 0, 1)

    AddGadgetItem(0, -1, "final root -1", 0, 2)    ; jede Variation nachträglich 0-Levels 
    AddGadgetItem(0, 14, "final root 14", 0, 0)    ; anzuhängen oder einzufügen schlägt fehl

 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            If EventType() = #PB_EventType_LeftClick
              Debug Str(GetGadgetState(0)) + " - " + GetGadgetItemText(0, GetGadgetState(0)) + " : " +Str(GetGadgetItemAttribute(0, GetGadgetState(0), #PB_Tree_SubLevel))
            EndIf
        EndSelect
    EndSelect
  ForEver
EndIf
- ein nachträgliches Anhängen oder Einfügen von 0-Level schlägt fehl
(solch eine Node wird abhängig der Vorrausgehenden zum Sub-Level 1 oder 2)



Bild

Eine weitere 'Unstimmigkeit' erscheint auch, wenn man vor einem korrekten Sub-2 einen 0-Level anlegen wollte, dass sich der angezeigte Tree von der korrespondierenden DebugAusgabe (Position-Text-Level) unterscheidet.

Bin ich froh, dass es überhaupt funktioniert :-)
... wie man das dann für einen Tree, der sich jederzeit ändern können soll organisiert, ist nun die nächste Hürde :mrgreen:

greets ~ Vera
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Antworten