ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.3
Committed: Sat May 31 13:58:32 2003 UTC (21 years ago) by pcg
Content type: text/plain
Branch: MAIN
Changes since 1.2: +5 -10 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package roomlist;
2
3 use base KGS::Listener::Roomlist;
4 use base gtk::widget;
5
6 sub new {
7 my $self = shift;
8 $self = $self->SUPER::new(@_);
9
10 $self->listen($self->{conn});
11
12 $self->{widget} = new Gtk2::Window 'toplevel';
13 $self->{widget}->set_title('KGS Rooms');
14 gtk::state $self->{widget}, "roomlist::window", undef, window_size => [400, 200];
15
16 $self->{widget}->signal_connect(delete_event => sub { $self->{widget}->hide; 1 });
17
18 $self->{widget}->add(my $vbox = new Gtk2::VBox);
19
20 $vbox->pack_start((my $sw = new Gtk2::ScrolledWindow), 1, 1, 0);
21 $sw->set_policy("automatic", "always");
22
23 $self->{roomlist} = new Gtk2::ListStore Glib::Scalar, Glib::String, Glib::String, Glib::Int, Glib::Int, Glib::Int, Glib::Int;
24
25 $sw->add(my $treeview = new Gtk2::TreeView $self->{roomlist});
26
27 $treeview->set_search_column(1);
28
29 my $idx = 1;
30 for ("Group", "Room Name", "Users", "Games", "Flags", "Channel") {
31 $renderer = $_ eq "Room Name" ? $gtk::text_renderer : $gtk::int_renderer;
32
33 # Gtk2-bug, need to keep these objects around
34 my $column = $self->{rlcolumns}[$idx] = Gtk2::TreeViewColumn->new_with_attributes ($_, $renderer, text => $idx);
35
36 $column->set_sort_column_id($idx);
37 $column->set(resizable => 1);
38 $column->set(sizing => 'fixed');
39 $column->set(clickable => 1);
40 gtk::state $column, "roomlist::model::$_", undef, column_size => [0, 60, 450, 60, 60, 60, 60]->[$idx];
41 $treeview->append_column ($column);
42
43 $idx++;
44 }
45
46 $treeview->signal_connect(row_activated => sub {
47 my ($widget, $path, $column) = @_;
48 my $room = $self->{roomlist}->get ($self->{roomlist}->get_iter ($path), 0);
49 $self->join_room($room);
50 });
51
52 $self;
53 }
54
55 sub join_room {
56 my ($self, $room) = @_;
57
58 ($self->{room}{$room->{channel}} ||= room->new(%$room, conn => $self->{conn}))
59 ->join;
60 }
61
62 sub show {
63 my ($self, $msg) = @_;
64
65 $self->msg(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
66 $self->show_all;
67 }
68
69 sub event_update_rooms {
70 my ($self) = @_;
71
72 $self->{event_update} ||= add Glib::Timeout 200, sub {
73 my $l = $self->{roomlist};
74
75 $l->clear;
76
77 my $row = 0;
78 for (values %{$self->{rooms}}) {
79 $l->set ($l->append,
80 0, $_,
81 1, $_->{group},
82 2, $_->{name},
83 3, $_->{users},
84 4, $_->{games},
85 5, $_->{flags},
86 6, $_->{channel});
87 }
88
89 delete $self->{event_update};
90 0;
91 };
92 }
93
94 1;
95