ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/user.pl
Revision: 1.17
Committed: Tue Jun 8 23:14:41 2004 UTC (19 years, 11 months ago) by elmex
Content type: text/plain
Branch: MAIN
Changes since 1.16: +2 -2 lines
Log Message:
Userinfo dates were broken

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     $self->signal_connect (delete_event => sub { $self->destroy; 1 });
28 pcg 1.1
29 pcg 1.2 my $notebook = new Gtk2::Notebook;
30    
31     $notebook->signal_connect (switch_page => sub {
32     my ($notebook, undef, $page) = @_;
33    
34 elmex 1.14 $self->game_record if $page == 1;
35     $self->usergraph if $page == 2;
36 pcg 1.2 });
37    
38 pcg 1.8 $self->add ($notebook);
39 pcg 1.2
40 pcg 1.4 $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 elmex 1.14 $self->{info_inlay} = $self->{chat}->new_switchable_inlay("Info:", sub { $self->draw_info(@_) }, 1);
47    
48 pcg 1.4 $notebook->append_page ($self->{chat}, (new_with_mnemonic Gtk2::Label "_Chat"));
49    
50 elmex 1.9 $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 root 1.12 Time => "text",
54     Black => "text",
55     White => "text",
56     Size => "int",
57     H => "int",
58     Komi => "text",
59     Score => "text",
60 elmex 1.9 ));
61 elmex 1.10 my $i = 0;
62 root 1.13 $_->set_sort_column_id ($i++) for $self->{record_list}->get_columns;
63 elmex 1.10
64 pcg 1.4 $notebook->append_page ($self->{page_record}, (new_with_mnemonic Gtk2::Label "_Record"));
65 pcg 1.2
66     $self->{page_graph} = new Gtk2::Curve;
67 pcg 1.4 $notebook->append_page ($self->{page_graph}, (new_with_mnemonic Gtk2::Label "_Graph"));
68 pcg 1.2
69 elmex 1.14 $self->userinfo;
70 elmex 1.9
71 pcg 1.1 $self;
72 pcg 1.2 }
73    
74 elmex 1.14 sub draw_info {
75     my ($self, $inlay) = @_;
76     return unless defined $self->{userinfo};
77 elmex 1.16 $inlay->append_text(
78     "<infoblock>"
79     ."\n<leader>Realname:</leader> " . (util::toxml $self->{userinfo}{realname})
80     ."\n<leader>Email:</leader> " . (util::toxml $self->{userinfo}{email})
81     ."\n<leader>Flags:</leader> " . (util::toxml $self->{userinfo}{user}->flags_string)
82     ."\n<leader>Rank:</leader> " . (util::toxml $self->{userinfo}{user}->rank_string)
83 elmex 1.17 ."\n<leader>Registered:</leader> " . (util::toxml util::date_string($self->{userinfo}{regdate}))
84     ."\n<leader>Last Login:</leader> " . (util::toxml util::date_string($self->{userinfo}{lastlogin}))
85 elmex 1.16 ."\n<leader>Comment:</leader>\n" . (util::toxml $self->{userinfo}{info})
86     ."\n<leader>Picture:</leader></infoblock>\n");
87 elmex 1.14 if ($self->{userinfo}{user}->has_pic) {
88     $self->{app}->userpic ($self->{name}, sub {
89     if ($_[0]) {
90     $inlay->append_widget(gtk::image_from_data $_[0]);
91     }
92     });
93     }
94     }
95    
96 pcg 1.2 sub join {
97     my ($self) = @_;
98    
99 pcg 1.8 $self->show_all;
100 pcg 1.2 }
101    
102 pcg 1.5 sub event_name {
103     my ($self) = @_;
104    
105 root 1.13 $self->set_title ("KGS User $self->{name}");
106 pcg 1.5 }
107    
108 pcg 1.2 sub event_userinfo {
109     my ($self) = @_;
110 elmex 1.14 $self->{info_inlay}->refresh;
111 pcg 1.2 }
112    
113     sub event_game_record {
114     my ($self) = @_;
115 elmex 1.9
116 elmex 1.10 for (@{$self->{game_record}}) {
117 elmex 1.9 push @{$self->{record_list}->{data}},
118     [
119 elmex 1.16 util::date_string $_->{timestamp},
120     $_->{black}->as_string,
121     $_->{white}->as_string,
122     $_->size,
123 root 1.11 (sprintf "%.1d", $_->handicap),
124 elmex 1.9 $_->komi,
125 elmex 1.10 $_->score_string,
126 elmex 1.9 ];
127     }
128 pcg 1.2 }
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 pcg 1.4 my ($self, $name, $message) = @_;
145    
146 root 1.13 $self->{chat}->append_text ("\n<user>$name</user>: " . util::toxml $message);
147 pcg 1.1 }
148    
149     sub destroy {
150     my ($self) = @_;
151    
152 pcg 1.5 $self->send (notify_del => name => $self->{name})
153     unless (lc $self->{name}) eq (lc $self->{app}{name});
154 pcg 1.1
155     $self->SUPER::destroy;
156     }
157    
158     1;
159