ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.2
Committed: Sat May 31 09:48:48 2003 UTC (21 years ago) by pcg
Content type: text/plain
Branch: MAIN
Changes since 1.1: +7 -6 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 #$treeview->append_column (
34 # column for fixed toggles
35 #my $renderer = Gtk2::CellRendererToggle->new;
36 #$renderer->signal_connect (toggled => \&fixed_toggled, $model);
37
38 # Gtk2-bug, need to keep these objects around
39 my $column = $self->{rlcolumns}[$idx] = Gtk2::TreeViewColumn->new_with_attributes ($_, $renderer, text => $idx);
40
41 $column->set_sort_column_id($idx);
42 $column->set(resizable => 1);
43 $column->set(sizing => 'fixed');
44 $column->set(clickable => 1);
45 gtk::state $column, "roomlist::model::$_", undef, "fixed_width=width" => [0, 60, 450, 60, 60, 60, 60]->[$idx];
46 $treeview->append_column ($column);
47
48 $idx++;
49 }
50
51 $treeview->signal_connect(row_activated => sub {
52 my ($widget, $path, $column) = @_;
53 my $room = $self->{roomlist}->get ($self->{roomlist}->get_iter ($path), 0);
54 $self->join_room($room->{channel});
55 });
56
57 $self;
58 }
59
60 sub join_room {
61 my ($self, $channel) = @_;
62
63 $self->{room}{$channel} ||= room->new(channel => $channel, conn => $self->{conn}, users => {});
64 $self->{room}{$channel}->join;
65 }
66
67 sub show {
68 my ($self, $msg) = @_;
69
70 $self->msg(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
71 $self->show_all;
72 }
73
74 sub event_update_rooms {
75 my ($self) = @_;
76
77 $self->{event_update} ||= add Glib::Timeout 200, sub {
78 my $l = $self->{roomlist};
79
80 $l->clear;
81
82 my $row = 0;
83 for (values %{$self->{rooms}}) {
84 $l->set ($l->append,
85 0, $_,
86 1, $_->{group},
87 2, $_->{name},
88 3, $_->{users},
89 4, $_->{games},
90 5, $_->{flags},
91 6, $_->{channel});
92 }
93
94 delete $self->{event_update};
95 0;
96 };
97 }
98
99 1;
100