App-sdview-Output-Tickit

 view release on metacpan or  search on metacpan

lib/App/sdview/Output/Tickit.pm  view on Meta::CPAN

   }

   method on_mouse ( $ev )
   {
      if( $ev->type eq "wheel" ) {
         $scrolloff += 5 if $ev->button eq "down";
         $scrolloff -= 5 if $ev->button eq "up";
         $self->_normalize_scrolloff;
         $self->redraw;
      }
      elsif( $ev->type eq "press" && $ev->button == 1 ) {
         if( my $item = $displayed_items[$ev->line + $scrolloff] ) {
            $on_select_item->( itemidx => $item->itemidx );
         }
      }

      return 1;
   }
}

class App::sdview::Output::Tickit::_SearchBox
   :isa(Tickit::Widget)
{
   use constant WIDGET_PEN_FROM_STYLE => 1;

   use constant CAN_FOCUS => 1;

   use Tickit::Style;
   style_definition base =>
      bg => "grey",
      fg => 16, # colour 16 is black but doesn't become grey on bold
      b  => 1,

      bad_fg => 1;

   method lines { 1 }
   method cols  { 1 }

   field $float :writer;

   field $leader = "Search: ";
   field $text = "";

   field $is_ignorecase;
   field $is_wholeword;

   field $ok = 1;

   field $matchcount = 0;
   method set_matchcount ( $_count ) { $matchcount = $_count; $self->redraw; }

   field $searchre;

   field $on_incremental :param;
   field $on_enter       :param;

   method show ()
   {
      $text = "";
      $float->show;
      $self->window->cursor_at( 0, length($leader) );
      $self->take_focus;
   }

   method dismiss ()
   {
      $float->hide;
   }

   method render_to_rb ( $rb, $rect )
   {
      $rb->eraserect( $rect );

      $rb->goto( 0, 0 );
      $rb->text( $leader );

      $rb->text( $text, $ok ? undef : $self->get_style_pen( "bad" ) );
      $self->window->cursor_at( 0, length($leader) + length($text) );

      my $counttext = sprintf " (%d)", $matchcount;
      if( $is_ignorecase ) {
         $rb->goto( 0, $self->window->right - 2 - length $counttext );
         $rb->text( "/i" );
      }
      if( $is_wholeword ) {
         $rb->goto( 0, $self->window->right - 4 - length $counttext );
         $rb->text( "W" );
      }
      $rb->goto( 0, $self->window->right - length $counttext );
      $rb->text( $counttext );
   }

   method on_key ( $ev )
   {
      if( $ev->type eq "text" ) {
         $text .= $ev->str;
         $self->_update_pattern;
         $self->redraw;
         return 1;
      }

      my $key = $ev->str;
      if( $key eq "Backspace" ) {
         substr( $text, -1, 1 ) = "";
         $self->_update_pattern;
         $self->redraw;
      }
      elsif( $key eq "Escape" ) {
         undef $text;
         $self->_update_pattern;
         $self->dismiss;
      }
      elsif( $key eq "Enter" ) {
         $on_enter->( $self, $searchre ) if $on_enter;
         $self->dismiss;
      }
      elsif( $key eq "M-i" ) {
         $is_ignorecase = !$is_ignorecase;
         $self->_update_pattern;
         $self->redraw;
      }
      elsif( $key eq "M-w" ) {
         $is_wholeword = !$is_wholeword;
         $self->_update_pattern;
         $self->redraw;
      }
      else {
         return 0;
      }

      return 1;
   }

   method _update_pattern ()
   {
      my $patternok = 0;
      if( defined $text and length $text ) {
         my $flags = "";



( run in 1.969 second using v1.01-cache-2.11-cpan-140bd7fdf52 )