ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/Util.pm
Revision: 1.7
Committed: Fri Apr 7 18:16:51 2006 UTC (18 years, 1 month ago) by elmex
Branch: MAIN
Changes since 1.6: +19 -1 lines
Log Message:
some changes i dont remember

File Contents

# User Rev Content
1 elmex 1.1 package Client::Util;
2 elmex 1.7 use strict;
3     use base 'Exporter';
4     our @EXPORT = qw(find_rcfile);
5    
6 elmex 1.2 use Gtk2;
7 elmex 1.1
8 elmex 1.7 sub find_rcfile($) {
9     my $path;
10    
11     for (@INC) {
12     $path = "$_/Crossfire/Client/$_[0]";
13     return $path if -r $path;
14     }
15    
16     die "FATAL: can't find required file $_[0]\n";
17     }
18    
19 elmex 1.1 sub read_cfg {
20     my ($file) = @_;
21    
22     open CFG, $file
23     or return;
24    
25 root 1.3 local $/;
26     $::CFG = eval <CFG>;
27 elmex 1.1
28     close CFG;
29     }
30    
31     sub write_cfg {
32     my ($file) = @_;
33    
34     open CFG, ">$file"
35     or return;
36    
37     {
38     local $Data::Dumper::Purity = 1;
39     $::CFG->{VERSION} = $::VERSION;
40     print CFG Data::Dumper->Dump ([$::CFG], [qw/CFG/]);
41     }
42    
43     close CFG;
44     }
45    
46 elmex 1.2
47     sub gtk_add_cfg_field {
48     my ($tbl, $cfg, $klbl, $key, $value) = @_;
49     my $i = $cfg->{_i}++;
50     $tbl->attach_defaults (my $lbl = Gtk2::Label->new ($klbl), 0, 1, $i, $i + 1);
51     $tbl->attach_defaults (my $ent = Gtk2::Entry->new, 1, 2, $i, $i + 1);
52 elmex 1.7 if ($key eq 'password') {
53     $ent->set_invisible_char ("*");
54     $ent->set (visibility => 0)
55     }
56 elmex 1.2 $ent->set_text ($value);
57     $ent->signal_connect (changed => sub {
58     my ($ent) = @_;
59     $cfg->{$key} = $ent->get_text;
60     });
61     }
62    
63     sub run_config_dialog {
64 elmex 1.4 my (%events) = @_;
65 elmex 1.2
66     my $w = Gtk2::Window->new;
67    
68     my @cfg = (
69 elmex 1.4 [qw/Width width/],
70     [qw/Height height/],
71     [qw/Host host/],
72     [qw/Port port/],
73 elmex 1.5 [qw/Username user/],
74 elmex 1.4 [qw/Password password/],
75 elmex 1.2 );
76    
77     my $cfg = {};
78    
79     $w->add (my $vb = Gtk2::VBox->new);
80     $vb->pack_start (my $t = Gtk2::Table->new (2, scalar @cfg), 0, 0, 0);
81     for (@cfg) {
82     gtk_add_cfg_field ($t, $cfg, $_->[0], $_->[1], $::CFG->{$_->[1]});
83     }
84    
85     $vb->pack_start (my $hb = Gtk2::HBox->new, 0, 0, 0);
86     $hb->pack_start (my $cb = Gtk2::Button->new ("save"), 1, 1, 5);
87     $cb->signal_connect (clicked => sub {
88     for (keys %$cfg) {
89     $::CFG->{$_} = $cfg->{$_}
90     if $_ ne '_i';
91     }
92 elmex 1.4 });
93     $hb->pack_start (my $cb = Gtk2::Button->new ("login"), 1, 1, 5);
94     $cb->signal_connect (clicked => sub {
95     for (keys %$cfg) {
96     $::CFG->{$_} = $cfg->{$_}
97     if $_ ne '_i';
98     }
99     my $cb = $events{login} || sub {};
100     $cb->($::CFG->{user}, $::CFG->{password});
101     });
102     $hb->pack_start (my $cb = Gtk2::Button->new ("logout"), 1, 1, 5);
103     $cb->signal_connect (clicked => sub {
104     my $cb = $events{login} || sub {};
105     $cb->();
106 elmex 1.2 });
107 elmex 1.5 $hb->pack_start (my $cb = Gtk2::Button->new ("quit"), 1, 1, 5);
108     $cb->signal_connect (clicked => sub { $w->destroy });
109 elmex 1.2
110     $w->show_all;
111    
112     $w->signal_connect (destroy => sub { Gtk2->main_quit });
113     }
114    
115 elmex 1.1 1;