KGS

 view release on metacpan or  search on metacpan

kgsueme/gamelist.pl  view on Meta::CPAN

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Notes", $gtk::text_renderer, text => 7);
   $column->set(resizable => 1);
   $column->set(sizing => 'autosize');
   gtk::state $column, "gamelist::model::Notes", undef, column_size => 200;
   $self->{view1}->append_column ($column);

   ###########

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Opponent", $gtk::text_renderer, text => 6);
   $column->set(resizable => 1);
   $column->set(sizing => 'fixed');
   gtk::state $column, "gamelist::model::Opponent", undef, column_size => 120;
   $self->{view2}->append_column ($column);

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Rk", $gtk::text_renderer, text => 7);
   $column->set_sort_column_id(8);
   $column->set(sizing => 'grow-only');
   $self->{view2}->append_column ($column);

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Mv", $gtk::int_renderer, text => 9);
   $column->set_sort_column_id(9);
   $column->set(sizing => 'grow-only');
   $self->{view2}->append_column ($column);

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Ob", $gtk::int_renderer, text => 10);
   $column->set_sort_column_id(10);
   $column->set(sizing => 'grow-only');
   $self->{view2}->append_column ($column);

   push @{$self->{rlcolumns}}, my $column =
      Gtk2::TreeViewColumn->new_with_attributes ("Info", $gtk::text_renderer, text => 11);
   $column->set(resizable => 1);
   $column->set(sizing => 'autosize');
   gtk::state $column, "gamelist::model::Info", undef, column_size => 120;
   $self->{view2}->append_column ($column);

   ###########

   $self->{view1}->signal_connect(row_activated => sub {
      my ($widget, $path, $column) = @_;
      my $game = $self->{model1}->get ($self->{model1}->get_iter ($path), 0);
      $self->{app}->open_game (%$game); # challenging private game sis allowed
      1;
   });

   $self->{view2}->signal_connect(row_activated => sub {
      my ($widget, $path, $column) = @_;
      my $game = $self->{model2}->get ($self->{model2}->get_iter ($path), 0);
      $self->{app}->open_game (%$game) unless $game->is_private;
      1;
   });

   $self;
}

sub update {
   my ($self, $room, $add, $update, $remove) = @_;

   $self->{games}{$room->{name}} = $room->{games};

   my $m1 = $self->{model1};
   my $m2 = $self->{model2};

   for (@$remove) {
      (delete $_->{model})->remove (delete $_->{iter}) if $_->{model};
   }

   for (@$add, @$update) {
      my $owner = $_->owner;
      if ($_->is_inprogress) {
         (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m2;#d#
         $_->{model} = $m2;
         $m2->set ($_->{iter} ||= $m2->append,
                      0, $_,
                      1, $room->{name},
                      2, $_->type_char,
                      3, $owner->{name},
                      4, $owner->rank_string,
                      5, $owner->rank_number,
                      6, $_->opponent_string,
                      7, $_->{black}->rank_string,
                      8, $_->{black}->rank_number,
                      9, $_->moves,
                     10, $_->{observers},
                     11, $_->rules,
                  );
      } else {
         (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m1;#d#
         $_->{model} = $m1;
         $m1->set ($_->{iter} ||= $m1->append,
                      0, $_,
                      1, $room->{name},
                      2, $_->type_char,
                      3, $owner->{name},
                      4, $owner->rank_string,
                      5, $owner->rank_number,
                      6, $_->rules,
                      7, $_->{notes},
                  );
      }
   }
}

1;



( run in 0.899 second using v1.01-cache-2.11-cpan-a49fcb8fa48 )