ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/Util.pm
Revision: 1.2
Committed: Fri Apr 7 16:29:19 2006 UTC (18 years, 1 month ago) by elmex
Branch: MAIN
Changes since 1.1: +50 -0 lines
Log Message:
added config

File Contents

# User Rev Content
1 elmex 1.1 package Client::Util;
2 elmex 1.2 use Gtk2;
3 elmex 1.1
4     sub read_cfg {
5     my ($file) = @_;
6    
7     open CFG, $file
8     or return;
9    
10     $::CFG = eval join '', <CFG>;
11    
12     close CFG;
13     }
14    
15     sub write_cfg {
16     my ($file) = @_;
17    
18     open CFG, ">$file"
19     or return;
20    
21     {
22     local $Data::Dumper::Purity = 1;
23     $::CFG->{VERSION} = $::VERSION;
24     print CFG Data::Dumper->Dump ([$::CFG], [qw/CFG/]);
25     }
26    
27     close CFG;
28     }
29    
30 elmex 1.2
31     sub gtk_add_cfg_field {
32     my ($tbl, $cfg, $klbl, $key, $value) = @_;
33     my $i = $cfg->{_i}++;
34     $tbl->attach_defaults (my $lbl = Gtk2::Label->new ($klbl), 0, 1, $i, $i + 1);
35     $tbl->attach_defaults (my $ent = Gtk2::Entry->new, 1, 2, $i, $i + 1);
36     $ent->set_text ($value);
37     $ent->signal_connect (changed => sub {
38     my ($ent) = @_;
39     $cfg->{$key} = $ent->get_text;
40     });
41     }
42    
43     sub run_config_dialog {
44     Gtk2->init;
45    
46     my $w = Gtk2::Window->new;
47    
48     my @cfg = (
49     [qw/Width width/],
50     [qw/Height height/],
51     );
52    
53     my $cfg = {};
54    
55     $w->add (my $vb = Gtk2::VBox->new);
56     $vb->pack_start (my $t = Gtk2::Table->new (2, scalar @cfg), 0, 0, 0);
57     for (@cfg) {
58     gtk_add_cfg_field ($t, $cfg, $_->[0], $_->[1], $::CFG->{$_->[1]});
59     }
60    
61     $vb->pack_start (my $hb = Gtk2::HBox->new, 0, 0, 0);
62     $hb->pack_start (my $cb = Gtk2::Button->new ("close"), 1, 1, 5);
63     $cb->signal_connect (clicked => sub { $w->destroy });
64     $hb->pack_start (my $cb = Gtk2::Button->new ("save"), 1, 1, 5);
65     $cb->signal_connect (clicked => sub {
66     for (keys %$cfg) {
67     $::CFG->{$_} = $cfg->{$_}
68     if $_ ne '_i';
69     }
70     $w->destroy
71     });
72    
73     $w->show_all;
74    
75     $w->signal_connect (destroy => sub { Gtk2->main_quit });
76     Gtk2->main;
77     }
78    
79 elmex 1.1 1;