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 )