ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/roomlist.pl
Revision: 1.10
Committed: Wed Jun 2 04:39:07 2004 UTC (20 years ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.9: +11 -10 lines
Log Message:
*** empty log message ***

File Contents

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