man Curses::UI::Searchable () - Add 'less'-like search abilities to a widget
NAME
Curses::UI::Searchable - Add 'less'-like search abilities to a widget
CLASS HIERARCHY
Curses::UI::Searchable - base class
SYNOPSIS
package MyWidget;
use Curses::UI::Searchable; use vars qw(@ISA); @ISA = qw(Curses::UI::Searchable);
....
sub new () { # Create class instance $this. ....
$this->set_routine('search-forward', \&search_forward); $this->set_binding('search-forward', '/'); $this->set_routine('search-backward', \&search_backward); $this->set_binding('search-backward', '?'); }
sub layout_content() { my $this = shift;
# Layout your widget's content. ....
return $this; }
sub number_of_lines() { my $this = shift;
# Return the number of lines in # the widget's content. return .... }
sub getline_at_ypos($;) { my $this = shift; my $ypos = shift;
# Return the content on the line # where ypos = $ypos return .... }
DESCRIPTION
Using Curses::UI::Searchable, you can add 'less'-like search capabilities to your widget.
To make your widget searchable using this class, your widget should meet the following requirements:
- * make it a descendant of Curses::UI::Searchable
- All methods for searching are in Curses::UI::Searchable. By making your class a descendant of this class, these methods are automatically inherited.
- * -ypos data member
-
The current vertical position in the widget should be
identified by CW$this->{-ypos}. This y-position is the
index of the line of content. Here's an example for
a Listbox widget.
-ypos | v +------+ 0 |One | 1 |Two | 2 |Three | +------+
- * method: number_of_lines ( )
- Your widget class should have a method number_of_lines, which returns the total number of lines in the widget's content. So in the example above, this method would return the value 3.
- * method: getline_at_ypos ( YPOS )
- Your widget class should have a method getline_at_ypos, which returns the line of content at -ypos YPOS. So in the example above, this method would return the value Two for YPOS = 1.
- * method: layout_content ( )
- The search routines will set the -ypos of your widget if a match is found for the given search string. Your layout_content routine should make sure that the line of content at -ypos will be made visible if the draw method is called.
- * method: draw ( )
- If the search routines find a match, CW$this->{-search_highlight} will be set to the -ypos for the line on which the match was found. If no match was found CW$this->{-search_highlight} will be undefined. If you want a matching line to be highlighted, in your widget, you can use this data member to do so (an example of a widget that uses this option is the Curses::UI::TextViewer widget).
- * bindings for searchroutines
-
There are two search routines. These are search_forward and
search_backward. These have to be called in order to
display the search prompt. The best way to do this is by
creating bindings for them. Here's an example which will
make '/' a forward search and '?' a backward search:
$this->set_routine('search-forward' , \&search_forward); $this->set_binding('search-forward' , '/'); $this->set_routine('search-backward' , \&search_backward); $this->set_binding('search-backward' , '?');
SEE ALSO
Curses::UI,
AUTHOR
Copyright (c) 2001-2002 Maurice Makaay. All rights reserved.
Maintained by Marcus Thiesen (marcus@cpan.thiesenweb.de)
This package is free software and is provided as is without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself.