/[iselect]/ISelect.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /ISelect.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 14 by dpavlin, Thu Oct 25 17:24:33 2007 UTC revision 15 by dpavlin, Thu Oct 25 18:39:49 2007 UTC
# Line 64  my $status_lines = 3; Line 64  my $status_lines = 3;
64    
65  my $selectable_line;  my $selectable_line;
66    
67    my $nr_lines = 0;
68    
69  =head2 full_line  =head2 full_line
70    
71  Returns line padded up to screen width  Returns line padded up to screen width
# Line 110  sub redraw_line { Line 112  sub redraw_line {
112    
113  sub redraw_screen {  sub redraw_screen {
114          my $self = shift;          my $self = shift;
115          my @lines = $self->lines;          my @lines = @{ $self->lines };
116            $nr_lines = $#lines;
117          for my $l (0 .. $self->screen->rows - $status_lines) {          for my $l (0 .. $self->screen->rows - $status_lines) {
118                  my $line = $lines[ $l + $top_screen_line ];                  my $line = $lines[ $l + $top_screen_line ];
119                  $self->redraw_line( $l, $line );                  $self->redraw_line( $l, $line );
# Line 130  Redraw status line Line 133  Redraw status line
133  sub redraw_statusline {  sub redraw_statusline {
134          my $self = shift;          my $self = shift;
135    
136          my @lines = $self->lines;          my $pcnt = int(($pos || 0) * 100 / ( $nr_lines || 1 ) );
137            my $pos_txt = sprintf('%d/%s, %d%% ',$pos,$nr_lines,$pcnt);
         my $pcnt = int(($pos || 0) * 100 / ( $#lines || 1));  
         my $pos_txt = sprintf('%d, %d%% ',$pos,$pcnt);  
138    
139          my $scr = $self->screen || confess "need screen";          my $scr = $self->screen || confess "need screen";
140    
141            my $status_text = sprintf("pos: %-3d sel_pos: %-3d top_screen_line: %-3d", $pos, $sel_pos, $top_screen_line );
142    
143            $status_text .= ' ' . $self->status_text if $self->status_text;
144    
145          $scr->at($scr->rows - $status_lines + 1,0)->reverse()->puts(          $scr->at($scr->rows - $status_lines + 1,0)->reverse()->puts(
146                  sprintf(' %-'.($scr->cols - length($pos_txt) - 2).'s ',$self->status_text)                  sprintf(' %-'.($scr->cols - length($pos_txt) - 2).'s ',$status_text)
147          .$pos_txt)->normal() if $self->status_text;          .$pos_txt)->normal();
148    
149          $scr->at($scr->rows - $status_lines + 2,0)->puts(          $scr->at($scr->rows - $status_lines + 2,0)->puts(
150                  sprintf('%-'.$scr->cols.'s', $self->error_text)                  sprintf('%-'.$scr->cols.'s', $self->error_text)
# Line 163  sub selected { Line 168  sub selected {
168    
169          my $screen_line = $pos - $top_screen_line;          my $screen_line = $pos - $top_screen_line;
170    
171          $self->redraw_line( $screen_line, ($self->lines)[$pos] );          $self->redraw_line( $screen_line, $self->lines->[$pos] );
172    
173          my $last_screen_line = $self->screen->rows - $status_lines;          my $last_screen_line = $self->screen->rows - $status_lines;
174    
# Line 176  sub selected { Line 181  sub selected {
181                  }                  }
182                  $self->redraw_screen;                  $self->redraw_screen;
183          } elsif ( $d > 0 && $screen_line == $last_screen_line ) {          } elsif ( $d > 0 && $screen_line == $last_screen_line ) {
184                  if ( $pos < scalar($self->lines) ) {                  if ( $pos < $nr_lines ) {
185                          $top_screen_line++;                          $top_screen_line++;
186                          $pos++;                          $pos++;
187                  } else {                  } else {
# Line 187  sub selected { Line 192  sub selected {
192                  $pos += $d;                  $pos += $d;
193          }          }
194    
195          my $line = ($self->lines)[$pos];          my $line = $self->lines->[$pos];
196          if ( defined $selectable_line->{ $pos } ) {          if ( defined $selectable_line->{ $pos } ) {
197                  $self->screen->at($pos - $top_screen_line,0)->reverse->bold()->puts( $self->full_line( $line ) )->normal();                  $self->screen->at($pos - $top_screen_line,0)->reverse->bold()->puts( $self->full_line( $line ) )->normal();
198                  $sel_pos = $pos;                  $sel_pos = $pos;
# Line 263  sub loop { Line 268  sub loop {
268                          $self->selected( $top_screen_line + $lines_on_screen - $pos );                          $self->selected( $top_screen_line + $lines_on_screen - $pos );
269                  }                  }
270    
                 my $status_text = sprintf("pos: %-3d sel_pos: %-3d top_screen_line: %-3d", $pos, $sel_pos, $top_screen_line );  
271                  if ( length($key) > 1 ) {                  if ( length($key) > 1 ) {
272                          $status_text .= " key: $key";                          $self->status_text("key: $key");
273                  } else {                  } else {
274                          $status_text .= sprintf("key: %s [%03d][%02x]", $key =~ m/\w/ ? $key : '?' , ord($key), ord($key) );                          $self->status_text( sprintf("key: %s [%03d][%02x]", $key =~ m/\w/ ? $key : '?' , ord($key), ord($key) ) );
275                  }                  }
                 $self->status_text( $status_text );  
276    
277                  # CTRL+L                  # CTRL+L
278                  $self->redraw_screen if ord($key) eq 0x0c;                  $self->redraw_screen if ord($key) eq 0x0c;

Legend:
Removed from v.14  
changed lines
  Added in v.15

  ViewVC Help
Powered by ViewVC 1.1.26