ich probiere mein "native" DXE_TreeView aus und kam zum Alaska Sample
c:\ALASKA\XPPW32\Source\samples\apps\ImgView\ImgView.prg
was ich nun nicht richtig verstehe ist der Ansatz von
Code: Alles auswählen
METHOD DirSelector:fillTree( oItem )
Code: Alles auswählen
METHOD DirSelector:create( oParent, oOwner, aPos, aSize, aPresParam, lVisible
::dirTree:itemSelected := {|oItem| ::fillTree( oItem ) }
::driveList:xbpListBox:itemSelected := {|| ::fillTree() }
// am Anfang 1 x
::fillTree( ::dirTree:rootItem )
wenn ich nun auf ein Node clicke -> oItemSelect.
Code: Alles auswählen
aItems := ::dirTree:rootItem:getChildItems()
::dirTree:LockUpdate( .T. )
AEval( aItems, {|obj| ::dirTree:rootItem:delItem(obj) } )
Frage : warum wird hier "gelöscht" ? ( Antwort später ? )
ich habe nun lange die Logfile analysiert und bin mir durchaus klar "was" da passiert ... nur die "Logik" ( OOP ?) sehe ich nicht ?
IMHO hat das ganze noch einen Fehler :
wenn man vom o:xbpListBox:itemSelected kommt, also das Laufwerk wechselt, dann "müsste" man ja auf "D:" statt "C:" sein
Code: Alles auswählen
//
// NEED for DXE when change Drive ???
//
IF cLastDrive <> cDrive
IF oItem == NIL
//
// komme von :xbpListBox:itemSelected
//
::dirTree:rootItem:ClearAll()
ENDIF
cLastDrive := cDrive
ENDIF
Code: Alles auswählen
/*
* Die Treeview beginnt mit dem Laufwerksbuchstaben
*/
oParent := ::dirTree:rootItem:addItem( cDrive, ICON_DRIVE, ICON_DRIVE,ICON_DRIVE, ,cDrive)
im oben gezeigten AEval() werden doch nur Childs (recursive) "gelöscht" ...
die schliessen den "obersten" Parent = Root doch nicht mit ein , oder ?
Frage : ist das "erste" o:addItem "der Root" oder gibt es noch was "davor" ?
das "löschen" der Items ist also bei ImageView.EXE notwendig damit man den Tree wieder "neu" aufbauen kann ... hm ...