Curses::UI::Searchable3pm
Add 'less'-like search abilities to a widget
Usage
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 = $yposreturn ....}
Class hierarchy
Curses::UI::Searchable - base class
Overview
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
$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_contentroutine should make sure that the line of content at -ypos will be made visible if thedrawmethod is called.
- •
-
method: draw ( )
If the search routines find a match,
$this->{-search_highlight} will be set to the -ypos for the line on which the match was found. If no match was found$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_forwardandsearch_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' , '?');
Releases
12 releases since Debian 3.1 (Sarge); the text changed 6 times.