Hallo!
Wie kann ich bei einem VirtualTreeCtrl herausfinden, welches aufklappbare Element gerade aufgeklappt wurde, bzw. welchen Wert es hat?
Aus der Doku:
Quotesub AddChildren {
my ($self, $event) = @_;
my $tree = $event->GetEventObject;
my $item = $event->GetItem;
my $item_data = $tree->GetPlData($item);
In $item_data müsste doch eigentlich das drin stehen, was ich brauche. Aber da ist nicht drin. Dumper wirft mir einen undef-Wert vor die Füße.
Hier mein ganzer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/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();
Kann mir wer weiterhelfen?
Grüße, pktm