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

# User Rev Content
1 pcg 1.1 package roomlist;
2    
3     use base KGS::Listener::Roomlist;
4 pcg 1.2 use base gtk::widget;
5 pcg 1.1
6     sub new {
7     my $self = shift;
8     $self = $self->SUPER::new(@_);
9    
10     $self->listen($self->{conn});
11    
12 pcg 1.2 $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 pcg 1.1
16 pcg 1.2 $self->{widget}->signal_connect(delete_event => sub { $self->{widget}->hide; 1 });
17 pcg 1.1
18 pcg 1.2 $self->{widget}->add(my $vbox = new Gtk2::VBox);
19 pcg 1.1
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 pcg 1.2 $self->show_all;
72 pcg 1.1 }
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