ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/user.pl
Revision: 1.19
Committed: Wed Jun 9 06:34:34 2004 UTC (19 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.18: +2 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 package user;
2    
3 pcg 1.2 use List::Util;
4 pcg 1.1
5     use base KGS::Listener::User;
6 pcg 1.8
7     use Glib::Object::Subclass
8     Gtk2::Window;
9 pcg 1.1
10 elmex 1.9 use Gtk2::SimpleList;
11    
12 pcg 1.1 sub new {
13 pcg 1.8 my ($self, %arg) = @_;
14     $self = $self->Glib::Object::new;
15     $self->{$_} = delete $arg{$_} for keys %arg;
16 pcg 1.1
17 pcg 1.8 $self->listen ($self->{conn});
18 pcg 1.1
19 pcg 1.5 $self->send (notify_add => name => $self->{name})
20     unless (lc $self->{name}) eq (lc $self->{app}{name});
21 pcg 1.1
22 elmex 1.16 gtk::state $self, "user::window", undef, window_size => [500, 500];
23 pcg 1.8
24 pcg 1.5 $self->event_name;
25 pcg 1.1
26 pcg 1.8 $self->signal_connect (destroy => sub { %{$_[0]} = () });
27 root 1.19 #$self->signal_connect (delete_event => sub { $self->destroy; 1 });
28     $self->signal_connect (delete_event => sub { 1 });
29 pcg 1.1
30 pcg 1.2 my $notebook = new Gtk2::Notebook;
31    
32     $notebook->signal_connect (switch_page => sub {
33     my ($notebook, undef, $page) = @_;
34    
35 elmex 1.14 $self->game_record if $page == 1;
36     $self->usergraph if $page == 2;
37 pcg 1.2 });
38    
39 pcg 1.8 $self->add ($notebook);
40 pcg 1.2
41 pcg 1.4 $self->{chat} = new chat;
42     $self->{chat}->signal_connect(command => sub {
43     my ($chat, $cmd, $arg) = @_;
44     $self->{app}->do_command ($chat, $cmd, $arg, user => $self);
45     });
46    
47 elmex 1.14 $self->{info_inlay} = $self->{chat}->new_switchable_inlay("Info:", sub { $self->draw_info(@_) }, 1);
48    
49 pcg 1.4 $notebook->append_page ($self->{chat}, (new_with_mnemonic Gtk2::Label "_Chat"));
50    
51 elmex 1.9 $self->{page_record} = new Gtk2::ScrolledWindow;
52     $self->{page_record}->set_policy ("automatic", "always");
53     $self->{page_record}->add ($self->{record_list} = Gtk2::SimpleList->new(
54 root 1.12 Time => "text",
55 root 1.18 White => "text",
56 root 1.12 Black => "text",
57     Size => "int",
58     H => "int",
59     Komi => "text",
60     Score => "text",
61 elmex 1.9 ));
62 elmex 1.10 my $i = 0;
63 root 1.13 $_->set_sort_column_id ($i++) for $self->{record_list}->get_columns;
64 elmex 1.10
65 pcg 1.4 $notebook->append_page ($self->{page_record}, (new_with_mnemonic Gtk2::Label "_Record"));
66 pcg 1.2
67     $self->{page_graph} = new Gtk2::Curve;
68 pcg 1.4 $notebook->append_page ($self->{page_graph}, (new_with_mnemonic Gtk2::Label "_Graph"));
69 pcg 1.2
70 elmex 1.14 $self->userinfo;
71 elmex 1.9
72 pcg 1.1 $self;
73 pcg 1.2 }
74    
75 elmex 1.14 sub draw_info {
76     my ($self, $inlay) = @_;
77     return unless defined $self->{userinfo};
78 root 1.18 $inlay->append_text (
79     "<infoblock>"
80     . "\n<leader>Realname:</leader> " . (util::toxml $self->{userinfo}{realname})
81     . "\n<leader>Email:</leader> " . (util::toxml $self->{userinfo}{email})
82     . "\n<leader>Flags:</leader> " . (util::toxml $self->{userinfo}{user}->flags_string)
83     . "\n<leader>Rank:</leader> " . (util::toxml $self->{userinfo}{user}->rank_string)
84     . "\n<leader>Registered:</leader> " . (util::toxml util::date_string($self->{userinfo}{regdate}))
85     . "\n<leader>Last Login:</leader> " . (util::toxml util::date_string($self->{userinfo}{lastlogin}))
86     . "\n<leader>Comment:</leader>\n" . (util::toxml $self->{userinfo}{info})
87     . "\n<leader>Picture:</leader>"
88     . "</infoblock>\n"
89     );
90 elmex 1.14 if ($self->{userinfo}{user}->has_pic) {
91     $self->{app}->userpic ($self->{name}, sub {
92 root 1.18 $inlay->append_widget(gtk::image_from_data $_[0])
93     if $_[0];
94 elmex 1.14 });
95     }
96     }
97    
98 pcg 1.2 sub join {
99     my ($self) = @_;
100    
101 pcg 1.8 $self->show_all;
102 pcg 1.2 }
103    
104 pcg 1.5 sub event_name {
105     my ($self) = @_;
106    
107 root 1.13 $self->set_title ("KGS User $self->{name}");
108 pcg 1.5 }
109    
110 pcg 1.2 sub event_userinfo {
111     my ($self) = @_;
112 elmex 1.14 $self->{info_inlay}->refresh;
113 pcg 1.2 }
114    
115     sub event_game_record {
116     my ($self) = @_;
117 elmex 1.9
118 elmex 1.10 for (@{$self->{game_record}}) {
119 elmex 1.9 push @{$self->{record_list}->{data}},
120     [
121 elmex 1.16 util::date_string $_->{timestamp},
122 root 1.18 $_->{white}->as_string,
123 elmex 1.16 $_->{black}->as_string,
124     $_->size,
125 root 1.11 (sprintf "%.1d", $_->handicap),
126 elmex 1.9 $_->komi,
127 elmex 1.10 $_->score_string,
128 elmex 1.9 ];
129     }
130 pcg 1.2 }
131    
132     sub event_usergraph {
133     my ($self) = @_;
134    
135     my $graph = $self->{usergraph};
136    
137     my $curve = $self->{page_graph};
138    
139     if (@$graph) {
140     $curve->set_range (0, (scalar @graph) - 1, (List::Util::min @$graph) - 1, (List::Util::max @$graph) + 1);
141     $curve->set_vector (@$graph);
142     }
143     }
144    
145     sub event_msg {
146 pcg 1.4 my ($self, $name, $message) = @_;
147    
148 root 1.13 $self->{chat}->append_text ("\n<user>$name</user>: " . util::toxml $message);
149 pcg 1.1 }
150    
151     sub destroy {
152     my ($self) = @_;
153    
154 pcg 1.5 $self->send (notify_del => name => $self->{name})
155     unless (lc $self->{name}) eq (lc $self->{app}{name});
156 pcg 1.1
157     $self->SUPER::destroy;
158     }
159    
160     1;
161