ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/user.pl
Revision: 1.10
Committed: Tue Jun 8 20:15:27 2004 UTC (19 years, 11 months ago) by elmex
Content type: text/plain
Branch: MAIN
Changes since 1.9: +8 -5 lines
Log Message:
Fixed column sorting

File Contents

# Content
1 package user;
2
3 use List::Util;
4
5 use base KGS::Listener::User;
6
7 use Glib::Object::Subclass
8 Gtk2::Window;
9
10 use Gtk2::SimpleList;
11
12 sub new {
13 my ($self, %arg) = @_;
14 $self = $self->Glib::Object::new;
15 $self->{$_} = delete $arg{$_} for keys %arg;
16
17 $self->listen ($self->{conn});
18
19 $self->send (notify_add => name => $self->{name})
20 unless (lc $self->{name}) eq (lc $self->{app}{name});
21
22 gtk::state $self, "user::window", undef, window_size => [400, 300];
23
24 $self->event_name;
25
26 $self->signal_connect (destroy => sub { %{$_[0]} = () });
27 $self->signal_connect (delete_event => sub { $self->destroy; 1 });
28
29 my $notebook = new Gtk2::Notebook;
30
31 $notebook->signal_connect (switch_page => sub {
32 my ($notebook, undef, $page) = @_;
33
34 $self->userinfo if $page == 1;
35 $self->game_record if $page == 2;
36 $self->usergraph if $page == 3;
37 });
38
39 $self->add ($notebook);
40
41 $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 $notebook->append_page ($self->{chat}, (new_with_mnemonic Gtk2::Label "_Chat"));
48
49 $self->{page_userinfo} = new Gtk2::Table 3, 5, 0;
50 $notebook->append_page ($self->{page_userinfo}, (new_with_mnemonic Gtk2::Label "_Info"));
51
52 $self->{page_record} = new Gtk2::ScrolledWindow;
53 $self->{page_record}->set_policy ("automatic", "always");
54 $self->{page_record}->add ($self->{record_list} = Gtk2::SimpleList->new(
55 "Time" => "text",
56 "Black" => "text",
57 "White" => "text",
58 "Size" => "int",
59 "Handicap" => "int",
60 "Komi" => "text",
61 "Score" => "text"
62 ));
63 my $i = 0;
64 for ($self->{record_list}->get_columns) { $_->set_sort_column_id($i++) }
65
66 $notebook->append_page ($self->{page_record}, (new_with_mnemonic Gtk2::Label "_Record"));
67
68 $self->{page_graph} = new Gtk2::Curve;
69 $notebook->append_page ($self->{page_graph}, (new_with_mnemonic Gtk2::Label "_Graph"));
70
71
72 $self;
73 }
74
75 sub join {
76 my ($self) = @_;
77
78 $self->show_all;
79 }
80
81 sub event_name {
82 my ($self) = @_;
83
84 $self->set_title("KGS User $self->{name}");
85 }
86
87 sub event_userinfo {
88 my ($self) = @_;
89
90 my $ui = $self->{page_userinfo};
91
92 $ui->attach_defaults ((new Gtk2::Label "Name"), 0, 1, 0, 1);
93 $ui->attach_defaults ((new Gtk2::Label "Email"), 0, 1, 1, 2);
94 $ui->attach_defaults ((new Gtk2::Label "Registered"), 0, 1, 2, 3);
95 $ui->attach_defaults ((new Gtk2::Label "Last Login"), 0, 1, 3, 4);
96
97 $ui->attach_defaults ((new Gtk2::Label $self->{userinfo}{realname}), 1, 2, 0, 1);
98 $ui->attach_defaults ((new Gtk2::Label $self->{userinfo}{email}), 1, 2, 1, 2);
99 $ui->attach_defaults ((new Gtk2::Label $self->{userinfo}{regdate}), 1, 2, 2, 3);
100 $ui->attach_defaults ((new Gtk2::Label $self->{userinfo}{lastlogin}), 1, 2, 3, 4);
101
102 if ($self->{userinfo}{user}->has_pic) {
103 $self->{app}->userpic ($self->{name}, sub {
104 if ($_[0]) {
105 $ui->attach_defaults ((gtk::image_from_data $_[0]), 2, 3, 0, 4);
106 $ui->show_all;
107 }
108 });
109 }
110
111 $ui->attach_defaults ((new Gtk2::Label $self->{userinfo}{info}), 0, 2, 4, 5);
112
113 $ui->show_all;
114 }
115
116 sub event_game_record {
117 my ($self) = @_;
118
119 for (@{$self->{game_record}}) {
120 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($_->{timestamp});
121 push @{$self->{record_list}->{data}},
122 [
123 sprintf ("%04d.%02d.%02d %02dh %02dm", $year + 1900, $mon + 1, $mday, $min, $hour),
124 $_->{black}->{name},
125 $_->{white}->{name},
126 $_->size, # sprintf ("%dx%d", $_->size, $_->size), # when sorting is fixed
127 sprintf ("%.1d", $_->handicap),
128 $_->komi,
129 $_->score_string,
130 ];
131 }
132 }
133
134 sub event_usergraph {
135 my ($self) = @_;
136
137 my $graph = $self->{usergraph};
138
139 my $curve = $self->{page_graph};
140
141 if (@$graph) {
142 $curve->set_range (0, (scalar @graph) - 1, (List::Util::min @$graph) - 1, (List::Util::max @$graph) + 1);
143 $curve->set_vector (@$graph);
144 }
145 }
146
147 sub event_msg {
148 my ($self, $name, $message) = @_;
149
150 $message =~ s/&/&/g;
151 $message =~ s/</&lt;/g;
152
153 $self->{chat}->append_text ("\n<user>$name</user>: $message");
154 }
155
156 sub destroy {
157 my ($self) = @_;
158
159 $self->send (notify_del => name => $self->{name})
160 unless (lc $self->{name}) eq (lc $self->{app}{name});
161
162 $self->SUPER::destroy;
163 }
164
165 1;
166