Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jun 16, 2024 22:20

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Visible tree to array
BeitragVerfasst: Di Feb 02, 2010 16:40 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Servus,

Folgende situation (Schwer zu erklären)

Ich habe einen Item Baum (Objekt Tree) mit Childs und Parent pro Objekt (Item).

Beispiel:
Code:
  1.  
  2. -[0]item1
  3.   -[1]subitem1
  4.     -[2]subsubitem1
  5.     -[3]subsubitem2
  6. -[4]item2
  7.   -[5]subitem1
  8.   -[6]subitem2
  9. -[7]item3
  10.   -[8]subitem1
  11.  


Man stelle sich nun vor, dieser Tree wäre nun geschlossen.
Also alle Elemente wären zugeklappt.

Beispiel:

Code:
  1.  
  2. +item1
  3. +item2
  4. +item3
  5.  


Nun such ich mir einen Eintrag in der Liste raus z.b. den den ich als [3] markiert habe.
Das müsste dann so aussehen:

Code:
  1.  
  2. -[0]item1
  3.   -[1]subitem1
  4.     -[2]subsubitem1
  5.     -[3]subsubitem2 <- DIESES IST MARKIERT.
  6. +[4]item2
  7. +[7]item3
  8.  


0, 1, 2 und 3 sind aufgeklappt.
4 und 7 aber nicht, weil diese nicht auf dieser Ebene liegen.

Soweit die theory.

Hier meine Ausgangs Situation:

Ich habe eine Liste von allen Elementen hintereinander (Sortiert von Oben bis Unten) in einer Liste (1-Dimensionales array).
Ich durchlaufe Element für Element mit einer for schleife.

Meine Ist-Situation:

Das aktuelle element in der Schleife soll ein weiteres 1-Dimensionales Array (Liste) generieren von allen Elementen die Sichtbar wären. Wie als würde man das Element anlicken während alle zugeklappt sind, und sich nur dann die Elemente aufklappen die auch wirklich davon betroffen wären.

Hätte da wer eine Idee ?

Danke,
Final


Zuletzt geändert von Finalspace am Di Feb 02, 2010 17:21, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tree to array
BeitragVerfasst: Di Feb 02, 2010 17:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Angenommen, jede Treenode hat eine Eigenschaft Expanded sowie ein Array (oder eine ähnliche Listenstruktur) für alle Kindelemente, sieht der Algorithmus dafür so aus (Pseudocode):
Code:
  1. FetchVisibleNodes(Node, TargetArray)
  2.   TargetArray.Append(Node) // Node an das Array anhängen
  3.   if Node.Expanded then
  4.     for each Child in Node.Children do
  5.       FetchVisibleNodes(Child, TargetArray)

Diese Funktion würdest du dann für jede Node der obersten Ebene einmal aufrufen, immer mit dem gleichen Array.

Wenn es dir jetzt auch noch darum geht, herauszufinden, welche Nodes expandiert sein müssen, damit das Element sichtbar ist, brauchst du einen zweiten Durchgang, der vor dem ersten stattfindet und jede Node muss auch noch ihren Parent kennen. Erstmal setzt du bei allen Nodes Expanded auf false, dann machst du wiefolgt weiter:
Code:
  1. MakeNodeVisible(Node)
  2.   Node.Expanded = True;
  3.   if Node.Parent then // Wenn der Knoten noch einen Elternknoten hat
  4.     MakeNodeVisible(Node.Parent)

Wobei du diese Funktion mit der Node, die sichtbar sein soll, aufrufst [unter der Annahme, dass es kein Problem ist, wenn eine Node ohne Children den Expanded-Status bekommt, sonst wäre da noch eine Prüfung notwendig, bzw du rufst MakeNodeVisible für das Elternelement des Knotens auf, der sichtbar sein soll].

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.084s | 17 Queries | GZIP : On ]