#!/Perl/bin/perl use strict; use warnings; package ServusWelt; use Data::Dumper qw/ Dumper /; use Wx;                                     # Wx einbinden use base qw(Wx::App);                       # von Wx::App ableiten use Wx::Perl::VirtualTreeCtrl 'EVT_POPULATE_TREE_ITEM'; #'EVT_TREE_ITEM_EXPANDING'; sub OnInit {    my $app = shift;    my $frame = Wx::Frame->new( undef,         # kein Eltern-Fenster                             -1,            # Fenter id                             'Servus Welt', # Titel                             [-1, -1],      # Position x/y                             [150, 150]     # Größe x/y                           );    $app->SetTopWindow($frame);             # Fenster als oberstes bestimmen            # Wald erstellen        #my $tree = new Wx::Perl::VirtualTreeCtrl($tree_ctrl);    my $tree = new Wx::Perl::VirtualTreeCtrl($frame, 1, [1, 1], [150, 150]);    EVT_POPULATE_TREE_ITEM($app, $tree, \&AddChildren);    #my $name = 'ROOT';    #my $data = 'data';    #my $root = $tree->AddRoot($name, $data);    my $root = $tree->AddRoot('ROOT');    #$tree->Expand($root);            $frame->Show(1);                        # Fenster zeichnen } sub AddChildren {    my ($self, $event) = @_;    my $tree = $event->GetEventObject;    my $item = $event->GetItem;    my $item_data = $tree->GetPlData($item);    if ($tree->GetChildrenCount($item, 0)) {        # update existing children ...        my ($child, $cookie) = $tree->GetFirstChild($item);        while ($child && $child->IsOk) {            my $child_data = $tree->GetPlData($child);            # synchronise deletions            if (child_was_deleted($child_data)) {                $tree->Delete($child);            }            ($child, $cookie) = $tree->GetNextChild($child, $cookie);        }    } else {        # add children for the first time        my @child_data = expensive_process_to_get_children($item_data);        foreach (@child_data) {            my $child = $tree->AppendItem($item, $_->{name});            # make item expandable if it's a folder            $tree->SetItemHasChildren($child, 1) if 1;        }    } } # /AddChildren sub expensive_process_to_get_children {    my $self = shift;        return {'name' => 'child'}; } # /expensive_process_to_get_children sub child_was_deleted {    return 1; } # /child_was_deleted package main; ServusWelt->new->MainLoop();