ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/user.pl
Revision: 1.14
Committed: Tue Jun 8 22:31:33 2004 UTC (19 years, 11 months ago) by elmex
Content type: text/plain
Branch: MAIN
Changes since 1.13: +26 -31 lines
Log Message:
Added inlays for userinfo, and removed the notebook page for the info.

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->game_record if $page == 1;
35 $self->usergraph if $page == 2;
36 });
37
38 $self->add ($notebook);
39
40 $self->{chat} = new chat;
41 $self->{chat}->signal_connect(command => sub {
42 my ($chat, $cmd, $arg) = @_;
43 $self->{app}->do_command ($chat, $cmd, $arg, user => $self);
44 });
45
46 $self->{info_inlay} = $self->{chat}->new_switchable_inlay("Info:", sub { $self->draw_info(@_) }, 1);
47
48 $notebook->append_page ($self->{chat}, (new_with_mnemonic Gtk2::Label "_Chat"));
49
50 $self->{page_record} = new Gtk2::ScrolledWindow;
51 $self->{page_record}->set_policy ("automatic", "always");
52 $self->{page_record}->add ($self->{record_list} = Gtk2::SimpleList->new(
53 Time => "text",
54 Black => "text",
55 White => "text",
56 Size => "int",
57 H => "int",
58 Komi => "text",
59 Score => "text",
60 ));
61 my $i = 0;
62 $_->set_sort_column_id ($i++) for $self->{record_list}->get_columns;
63
64 $notebook->append_page ($self->{page_record}, (new_with_mnemonic Gtk2::Label "_Record"));
65
66 $self->{page_graph} = new Gtk2::Curve;
67 $notebook->append_page ($self->{page_graph}, (new_with_mnemonic Gtk2::Label "_Graph"));
68
69 $self->userinfo;
70
71 $self;
72 }
73
74 sub draw_info {
75 my ($self, $inlay) = @_;
76 return unless defined $self->{userinfo};
77 $inlay->append_text("\nRealname: $self->{userinfo}{realname}");
78 $inlay->append_text("\nEmail: $self->{userinfo}{email}");
79 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($_->{userinfo}{regdate});
80 $inlay->append_text (sprintf ("\nRegistered: %02d.%02d.%02d %02d:%02d", $mday, $mon + 1, $year + 1900, $hour, $min));
81 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($self->{userinfo}{lastlogin});
82 $inlay->append_text (sprintf ("\nLast Login: %02d.%02d.%02d %02d:%02d", $mday, $mon + 1, $year + 1900, $hour, $min));
83 $inlay->append_text ("\nComment:\n$self->{userinfo}{info}");
84 $inlay->append_text ("\nPicture:\n");
85 if ($self->{userinfo}{user}->has_pic) {
86 $self->{app}->userpic ($self->{name}, sub {
87 if ($_[0]) {
88 $inlay->append_widget(gtk::image_from_data $_[0]);
89 }
90 });
91 }
92 }
93
94 sub join {
95 my ($self) = @_;
96
97 $self->show_all;
98 }
99
100 sub event_name {
101 my ($self) = @_;
102
103 $self->set_title ("KGS User $self->{name}");
104 }
105
106 sub event_userinfo {
107 my ($self) = @_;
108 $self->{info_inlay}->refresh;
109 }
110
111 sub event_game_record {
112 my ($self) = @_;
113
114 use POSIX ();
115
116 for (@{$self->{game_record}}) {
117 push @{$self->{record_list}->{data}},
118 [
119 (POSIX::strftime "%Y-%m-%d %H:%M", localtime $_->{timestamp}),
120 $_->{black}{name},
121 $_->{white}{name},
122 $_->size, # sprintf ("%dx%d", $_->size, $_->size), # when sorting is fixed
123 (sprintf "%.1d", $_->handicap),
124 $_->komi,
125 $_->score_string,
126 ];
127 }
128 }
129
130 sub event_usergraph {
131 my ($self) = @_;
132
133 my $graph = $self->{usergraph};
134
135 my $curve = $self->{page_graph};
136
137 if (@$graph) {
138 $curve->set_range (0, (scalar @graph) - 1, (List::Util::min @$graph) - 1, (List::Util::max @$graph) + 1);
139 $curve->set_vector (@$graph);
140 }
141 }
142
143 sub event_msg {
144 my ($self, $name, $message) = @_;
145
146 $self->{chat}->append_text ("\n<user>$name</user>: " . util::toxml $message);
147 }
148
149 sub destroy {
150 my ($self) = @_;
151
152 $self->send (notify_del => name => $self->{name})
153 unless (lc $self->{name}) eq (lc $self->{app}{name});
154
155 $self->SUPER::destroy;
156 }
157
158 1;
159