Thread Wx::Perl::VirtualTreeCtrl GetItem: Welches Element wurde gedrückt? (3 answers)
Opened by pktm at 2006-09-13 19:53

pktm
 2006-09-13 19:53
#45834 #45834
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie kann ich bei einem VirtualTreeCtrl herausfinden, welches aufklappbare Element gerade aufgeklappt wurde, bzw. welchen Wert es hat?

Aus der Doku:
Quote
sub 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
Code: (dl )
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
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Wx::Perl::VirtualTreeCtrl GetItem: Welches Element wurde gedrückt?