Treegadget sortieren
Verfasst: 14.09.2006 16:13
Hallo,
ich habe zum Thema "Treegadget sortieren" so gut wie nichts gefunden.
Also habe ich selber was geschrieben:
Das funktioniert auch ganz nett. Aber ich habe da noch ein kleines Problem: Wie kann man erfahren, ob ein Eintrag in einem Treegadget ein Icon zugeordnet wurde und wie kann man die BildID auslesen?
Hat jemand eine Idee?
Grüße aus dem sonnigen Schweden
Torsten
ich habe zum Thema "Treegadget sortieren" so gut wie nichts gefunden.
Also habe ich selber was geschrieben:
Code: Alles auswählen
; Treegadget sortieren
;{ Variablen
Structure eintrag
name.s
ebene.l
haken.l
index.l
EndStructure
Global NewList lista.eintrag()
Global NewList listb.eintrag()
Global NewList listc.eintrag()
Global ergebnis.l
Global anzahl.l
cur1 = LoadCursor_(0, #IDC_WAIT) ; Sanduhr
cur0 = LoadCursor_(0, #IDC_ARROW) ; Normaler Pfeil
;}
;{ sortieren
Procedure sortieren()
If CountGadgetItems(1) > 0
ClearList(lista())
ClearList(listb())
ClearList(listc())
;nun Treegadget in List A und List B einlesen
For i = 0 To CountGadgetItems(1)-1
AddElement(lista())
AddElement(listb())
lista()\name = GetGadgetItemText(1,i,0)
listb()\name = GetGadgetItemText(1,i,0)
If anzahl < GetGadgetItemAttribute(1,i,#PB_Tree_SubLevel)
anzahl = anzahl + 1
EndIf
lista()\ebene = GetGadgetItemAttribute(1,i,#PB_Tree_SubLevel)
listb()\ebene = GetGadgetItemAttribute(1,i,#PB_Tree_SubLevel)
ergebnis = GetGadgetItemState(1,i)
If ergebnis & #PB_Tree_Checked
lista()\haken = 1
listb()\haken = 1
EndIf
lista()\index = i
listb()\index = i
Next
; jetzt die List B nach Namen sortieren lassen
SortStructuredList(listb(),2,OffsetOf(eintrag\name),#PB_Sort_String)
; jetzt alle Einträge der Ebene 0 in List C
ResetList(listb())
While NextElement(listb())
If listb()\ebene = 0
AddElement(listc())
listc()\name = listb()\name
listc()\ebene = listb()\ebene
listc()\haken = listb()\haken
listc()\index = listb()\index
; Element, welches in List C eingefügt wurde aus List B entfernen
DeleteElement(listb())
EndIf
Wend
; nun die Liste B "umgekehrt" sortieren
SortStructuredList(listb(),3,OffsetOf(eintrag\name),#PB_Sort_String)
For i = 1 To anzahl
ResetList(listb())
While NextElement(listb())
If listb()\ebene = i
; Element der aktuellen Ebene gefunden
; jetzt den übergeordneten Eintrag suchen
; dazu lista auf letztes Element stellen
LastElement(lista())
While ListIndex(lista()) > -1
If lista()\index = listb()\index
; der Eintrag wurde in List A gefunden
While ListIndex(lista()) > -1
If lista()\ebene = i - 1
; der übergeordnete Eintrag wurde gefunden
; der Eintrag ListB muß nun unter den richtigen Übergeordneten Ordner
ResetList(listc())
While NextElement(listc())
If listc()\index = lista()\index
AddElement(listc())
listc()\name = listb()\name
listc()\ebene = listb()\ebene
listc()\haken = listb()\haken
listc()\index = listb()\index
; jetzt wieder gleich Element aus List B löschen
DeleteElement(listb())
Break
EndIf
Wend
Break 2
EndIf
PreviousElement(lista())
Wend
EndIf
PreviousElement(lista())
Wend
EndIf
Wend
Next i
; TreeGadget löschen
;ClearGadgetItemList(1)
ClearGadgetItemList(3)
ResetList(listc())
anzahl = 0
While NextElement(listc())
AddGadgetItem(3,-1,listc()\name , 0, listc()\ebene)
If listc()\haken = 1
SetGadgetItemState(3,anzahl,#PB_Tree_Checked)
EndIf
anzahl = anzahl + 1 ; zählt hier, bei welchem Eintrag man ist
Wend
EndIf
EndProcedure
;}
If OpenWindow(0, 216, 0, 600, 530, "Treegadget sortieren", #PB_Window_SystemMenu | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(0))
TreeGadget(1, 30, 30, 230, 380,#PB_Tree_CheckBoxes)
ButtonGadget(2, 165, 460, 170, 40, "Sortieren")
TreeGadget(3,280,30,230,380,#PB_Tree_CheckBoxes)
EndIf
;{ Treegadet füllen
If MessageRequester("Treegadget füllen","Die Liste mit 10000 Werten füllen?",#PB_MessageRequester_YesNo | #MB_ICONQUESTION) = #PB_MessageRequester_Yes
; Liste mit 10000 Werten füllen
AddGadgetItem(1,-1,"Zu Ende",0,0)
For i = 1 To 9999
; Wort erzeugen
a.s = ""
b.s = ""
c.s = ""
d.s = ""
wort.s = ""
While a = ""
x = Random(90)
If x > 64
a = Chr(x)
EndIf
Wend
While b = ""
x = Random(90)
If x > 64
b = Chr(x)
EndIf
Wend
While c = ""
x = Random(90)
If x > 64
c = Chr(x)
EndIf
Wend
While d = ""
x = Random(90)
If x > 64
d = Chr(x)
EndIf
Wend
wort = a + b + c + d
x = Random(10)
If x = 0 ; neues Element in ebene 0
AddGadgetItem(1,-1,wort,0,0)
ElseIf 0 < x And x < 6 ; Element in der selben Ebene
ergebnis = CountGadgetItems(1)
eb = GetGadgetItemAttribute(1,ergebnis -1,#PB_Tree_SubLevel)
AddGadgetItem(1,-1,wort,0,eb)
ElseIf 5 < x And x < 11 ; Element eine Ebene tiefer
ergebnis = CountGadgetItems(1)
eb = GetGadgetItemAttribute(1,ergebnis -1,#PB_Tree_SubLevel)
AddGadgetItem(1,-1,wort,0,eb + 1)
EndIf
Next i
Else
AddGadgetItem(1,-1,"Z",0,0)
AddGadgetItem(1,-1,"Y",0,1)
AddGadgetItem(1,-1,"X",0,2)
AddGadgetItem(1,-1,"W",0,2)
AddGadgetItem(1,-1,"V",0,1)
AddGadgetItem(1,-1,"U",0,2)
AddGadgetItem(1,-1,"T",0,2)
AddGadgetItem(1,-1,"S",0,0)
AddGadgetItem(1,-1,"R",0,1)
AddGadgetItem(1,-1,"Q",0,2)
AddGadgetItem(1,-1,"P",0,2)
AddGadgetItem(1,-1,"O",0,1)
AddGadgetItem(1,-1,"N",0,2)
AddGadgetItem(1,-1,"M",0,2)
AddGadgetItem(1,-1,"L",0,0)
AddGadgetItem(1,-1,"K",0,0)
AddGadgetItem(1,-1,"J",0,1)
AddGadgetItem(1,-1,"I",0,1)
AddGadgetItem(1,-1,"H",0,0)
AddGadgetItem(1,-1,"G",0,1)
AddGadgetItem(1,-1,"F",0,1)
AddGadgetItem(1,-1,"E",0,2)
AddGadgetItem(1,-1,"D",0,3)
AddGadgetItem(1,-1,"C",0,3)
AddGadgetItem(1,-1,"B",0,4)
AddGadgetItem(1,-1,"A",0,4)
EndIf
;}
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = 1
ElseIf GadgetID = 2
SetCursor_(cur1)
sortieren()
SetCursor_(cur0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
End
;
Hat jemand eine Idee?
Grüße aus dem sonnigen Schweden
Torsten