Thread Analyse der Struktur elektrischer Anlagen (7 answers)
Opened by Ronnie at 2007-10-09 14:53

Ronnie
 2007-10-10 13:37
#100617 #100617
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
So, erstmal das gröbste, nach meinem Kampf mit TK::Tree. Ist jetzt nur ein Versuchsballon um rauszufinden wie Tk::Tree funktioniert, wie man den Tree am besten dumped und wiederherstellt:
Code (perl): (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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

use Tk;
use Tk::Tree;
use Tk::Frame;
use Tk::Label;
use Tk::Entry;
use TK::Button;
use YAML qw/Dump DumpFile LoadFile/;

my $mw = MainWindow->new();

my $tree = $mw->ScrlTree( 
    -command => sub { warn Dumper \@_ }, 
    -indicatorcmd => sub { }, 
    -selectbackground => 'lightgrey', 
    -width => 25, 
    -height => 12, 
    -scrollbars => 'se' 
)->pack( 
    -expand => '1', 
    -fill => 'both'
);

# add EnerTree->add_hook for TK callback
# use lookup-table to resolve EnerTree-entries by distinguished name

my $item         = $tree->add( 'HAK', -text => 'HAK63' );
my $current_root = ($tree->info('children'))[0];;

my $frame1  = $mw->Frame()->pack();
my $label1  = $frame1->Label( -text => '' )->pack();
my $entry1  = $frame1->Entry()->pack(-side => 'left');
my $btn1    = $frame1->Button( 
    -command => sub { 
        warn $entry1->get(); 
        $tree->addchild( $current_root, -text => $entry1->get()); 
    },
    -text    => 'add entry',
)->pack(-side => 'left');

my $btn2    = $frame1->Button( 
    -command => sub { store_tree($tree) },
    -text    => 'save',
)->pack(-side => 'left');

my $btn3    = $frame1->Button( 
    -command => sub { load_tree() },
    -text    => 'load',
)->pack(-side => 'left');

$tree->configure( -browsecmd => sub { 
    my $item = shift;
    $label1->configure( -text => $item );
    $current_root = $item;
} );

sub store_tree {
    my $tree = shift;
    my $file = shift || 'tree.conf'; 
    my $path = ($tree->info('children'))[0];
    my %all; $all{$path} = $tree->entrycget($path, '-text');

    while (my $p = $tree->info('next', $path)) {
        $all{$p} = $tree->entrycget($p, '-text');
        $path = $p;    
    }
    DumpFile($file, \%all)
}

sub load_tree {
    my $file = shift || 'tree.conf';
    my $conf = LoadFile($file);
    $tree->delete('all');
    $tree->add($_, -text => $conf->{$_}) for sort keys %$conf; 
}

MainLoop;  

Verbesserungsvorschläge werden gerne angenommen.

@pktm: Ich denke ich verwende einen Hash um über den Pfad des TreeItems, per Referenz, auf meinen Datenbaum zuzugreifen.

Gruß,
Ronnie

View full thread Analyse der Struktur elektrischer Anlagen