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

# User Rev Content
1 pcg 1.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