ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/gamelist.pl
Revision: 1.18
Committed: Tue Jul 22 21:24:50 2003 UTC (20 years, 10 months ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: stable
Changes since 1.17: +2 -4 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 package gamelist;
2    
3 pcg 1.9 use KGS::Constants;
4    
5 pcg 1.1 use base gtk::widget;
6    
7     sub new {
8     my $class = shift;
9     my $self = $class->SUPER::new(@_);
10    
11     $self->{widget} = new Gtk2::VPaned;
12     $self->{widget}->set(position_set => 1);
13     gtk::state $self->{widget}, "gamelist::vpane", undef, position => 60;
14    
15     $self->{model1} = new Gtk2::ListStore Glib::Scalar,
16     Glib::String, Glib::String, Glib::String, Glib::String, Glib::Int, Glib::String, Glib::String;
17 pcg 1.7 gtk::state $self->{model1}, "gamelist::model1", undef, modelsortorder => [4, 'descending'];
18 pcg 1.1
19     $self->{widget}->add(my $sw = new Gtk2::ScrolledWindow);
20     $sw->set_policy("never", "always");
21     $sw->add($self->{view1} = new Gtk2::TreeView $self->{model1});
22 pcg 1.16 $self->{view1}->set (rules_hint => 1, search_column => 2);
23 pcg 1.1
24     $self->{model2} = new Gtk2::ListStore Glib::Scalar,
25 pcg 1.2 Glib::String, Glib::String, Glib::String, Glib::String, Glib::Int,
26     Glib::String, Glib::String, Glib::Int, Glib::Int, Glib::Int, Glib::String;
27 pcg 1.7 gtk::state $self->{model2}, "gamelist::model1", undef, modelsortorder => [4, 'descending'];
28 pcg 1.1
29     $self->{widget}->add(my $sw = new Gtk2::ScrolledWindow);
30     $sw->set_policy("never", "always");
31     $sw->add($self->{view2} = new Gtk2::TreeView $self->{model2});
32     $self->{view2}->set_search_column(1);
33 pcg 1.16 $self->{view2}->set (rules_hint => 1, search_column => 2);
34 pcg 1.1
35     for my $view ($self->{view1}, $self->{view2}) {
36     push @{$self->{rlcolumns}}, my $column =
37     Gtk2::TreeViewColumn->new_with_attributes ("Room", $gtk::text_renderer, text => 1);
38     $column->set_sort_column_id(1);
39     $column->set(resizable => 1);
40     $column->set(sizing => 'fixed');
41     gtk::state $column, "gamelist::model::Room", undef, column_size => 80;
42     $view->append_column ($column);
43    
44     push @{$self->{rlcolumns}}, my $column =
45 pcg 1.3 Gtk2::TreeViewColumn->new_with_attributes ("T", $gtk::text_renderer, text => 2);
46 pcg 1.1 $column->set_sort_column_id(2);
47 pcg 1.3 $column->set(sizing => 'grow-only');
48 pcg 1.1 $view->append_column ($column);
49    
50     push @{$self->{rlcolumns}}, my $column =
51     Gtk2::TreeViewColumn->new_with_attributes ("Owner", $gtk::text_renderer, text => 3);
52     $column->set_sort_column_id(3);
53     $column->set(resizable => 1);
54     $column->set(sizing => 'fixed');
55     gtk::state $column, "gamelist::model::Owner", undef, column_size => 100;
56     $view->append_column ($column);
57    
58     push @{$self->{rlcolumns}}, my $column =
59 pcg 1.2 Gtk2::TreeViewColumn->new_with_attributes ("Rk", $gtk::text_renderer, text => 4);
60 pcg 1.1 $column->set_sort_column_id(5);
61 pcg 1.3 $column->set(sizing => 'grow-only');
62 pcg 1.1 $view->append_column ($column);
63 pcg 1.2 }
64 pcg 1.1
65 pcg 1.2 push @{$self->{rlcolumns}}, my $column =
66     Gtk2::TreeViewColumn->new_with_attributes ("Info", $gtk::text_renderer, text => 6);
67     $column->set(resizable => 1);
68 pcg 1.3 $column->set(sizing => 'autosize');
69 pcg 1.2 gtk::state $column, "gamelist::model::Info", undef, column_size => 80;
70     $self->{view1}->append_column ($column);
71 pcg 1.1
72     push @{$self->{rlcolumns}}, my $column =
73     Gtk2::TreeViewColumn->new_with_attributes ("Notes", $gtk::text_renderer, text => 7);
74     $column->set(resizable => 1);
75 pcg 1.3 $column->set(sizing => 'autosize');
76 pcg 1.1 gtk::state $column, "gamelist::model::Notes", undef, column_size => 200;
77     $self->{view1}->append_column ($column);
78    
79     ###########
80    
81     push @{$self->{rlcolumns}}, my $column =
82 pcg 1.2 Gtk2::TreeViewColumn->new_with_attributes ("Opponent", $gtk::text_renderer, text => 6);
83 pcg 1.4 $column->set(resizable => 1);
84 pcg 1.2 $column->set(sizing => 'fixed');
85     gtk::state $column, "gamelist::model::Opponent", undef, column_size => 120;
86     $self->{view2}->append_column ($column);
87    
88     push @{$self->{rlcolumns}}, my $column =
89     Gtk2::TreeViewColumn->new_with_attributes ("Rk", $gtk::text_renderer, text => 7);
90     $column->set_sort_column_id(8);
91 pcg 1.3 $column->set(sizing => 'grow-only');
92 pcg 1.2 $self->{view2}->append_column ($column);
93    
94     push @{$self->{rlcolumns}}, my $column =
95     Gtk2::TreeViewColumn->new_with_attributes ("Mv", $gtk::int_renderer, text => 9);
96 pcg 1.5 $column->set_sort_column_id(9);
97 pcg 1.3 $column->set(sizing => 'grow-only');
98 pcg 1.1 $self->{view2}->append_column ($column);
99    
100     push @{$self->{rlcolumns}}, my $column =
101 pcg 1.2 Gtk2::TreeViewColumn->new_with_attributes ("Ob", $gtk::int_renderer, text => 10);
102 pcg 1.5 $column->set_sort_column_id(10);
103 pcg 1.3 $column->set(sizing => 'grow-only');
104 pcg 1.1 $self->{view2}->append_column ($column);
105    
106 pcg 1.2 push @{$self->{rlcolumns}}, my $column =
107     Gtk2::TreeViewColumn->new_with_attributes ("Info", $gtk::text_renderer, text => 11);
108     $column->set(resizable => 1);
109 pcg 1.3 $column->set(sizing => 'autosize');
110 pcg 1.2 gtk::state $column, "gamelist::model::Info", undef, column_size => 120;
111     $self->{view2}->append_column ($column);
112    
113 pcg 1.1 ###########
114    
115     $self->{view1}->signal_connect(row_activated => sub {
116     my ($widget, $path, $column) = @_;
117     my $game = $self->{model1}->get ($self->{model1}->get_iter ($path), 0);
118 pcg 1.18 $self->{app}->open_game (%$game);
119 pcg 1.6 1;
120 pcg 1.1 });
121    
122     $self->{view2}->signal_connect(row_activated => sub {
123     my ($widget, $path, $column) = @_;
124     my $game = $self->{model2}->get ($self->{model2}->get_iter ($path), 0);
125 pcg 1.18 $self->{app}->open_game (%$game);
126 pcg 1.6 1;
127 pcg 1.1 });
128    
129     $self;
130     }
131    
132     sub update {
133 pcg 1.6 my ($self, $room, $add, $update, $remove) = @_;
134 pcg 1.1
135     $self->{games}{$room->{name}} = $room->{games};
136    
137 pcg 1.6 my $m1 = $self->{model1};
138     my $m2 = $self->{model2};
139    
140 pcg 1.12 for (@$remove) {
141 pcg 1.8 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model};
142 pcg 1.6 }
143    
144     for (@$add, @$update) {
145     my $owner = $_->owner;
146 pcg 1.8 if ($_->is_valid) {
147 pcg 1.15 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m2;#d#
148 pcg 1.8 $_->{model} = $m2;
149     $m2->set ($_->{iter} ||= $m2->append,
150     0, $_,
151     1, $room->{name},
152 pcg 1.17 2, $_->type_char,
153 pcg 1.8 3, $owner->{name},
154     4, $owner->rank_string,
155     5, $owner->rank,
156     6, $_->opponent_string,
157     7, $_->{user1}->rank_string,
158     8, $_->{user1}->rank,
159     9, $_->moves,
160     10, $_->{observers},
161     11, $_->rules,
162     );
163     } else {
164 pcg 1.15 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m1;#d#
165 pcg 1.6 $_->{model} = $m1;
166     $m1->set ($_->{iter} ||= $m1->append,
167 pcg 1.8 0, $_,
168     1, $room->{name},
169 pcg 1.17 2, $_->type_char,
170 pcg 1.8 3, $owner->{name},
171     4, $owner->rank_string,
172     5, $owner->rank,
173     6, $_->rules,
174     7, $_->{notes},
175 pcg 1.6 );
176 pcg 1.1 }
177 pcg 1.6 }
178 pcg 1.1 }
179    
180     1;
181