ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.1
Committed: Sat May 31 09:46:51 2003 UTC (21 years ago) by pcg
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

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