From d38ea3c6312e8075383c3e53004d53db8198446f Mon Sep 17 00:00:00 2001 From: Andrej Shadura Date: Sat, 28 Jul 2018 16:54:34 +0100 Subject: Import original source of Tickit-Widget-Scroller 0.23 --- README | 294 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 README (limited to 'README') diff --git a/README b/README new file mode 100644 index 0000000..fe5bb82 --- /dev/null +++ b/README @@ -0,0 +1,294 @@ +NAME + + Tickit::Widget::Scroller - a widget displaying a scrollable collection + of items + +SYNOPSIS + + use Tickit; + use Tickit::Widget::Scroller; + use Tickit::Widget::Scroller::Item::Text; + + my $tickit = Tickit->new; + + my $scroller = Tickit::Widget::Scroller->new; + + $scroller->push( + Tickit::Widget::Scroller::Item::Text->new( "Hello world" ), + Tickit::Widget::Scroller::Item::Text->new( "Here are some lines" ), + map { Tickit::Widget::Scroller::Item::Text->new( "" ) } 1 .. 50, + ); + + $tickit->set_root_widget( $scroller ); + + $tickit->run + +DESCRIPTION + + This class provides a widget which displays a scrollable list of items. + The view of the items is scrollable, able to display only a part of the + list. + + A Scroller widget stores a list of instances implementing the + Tickit::Widget::Scroller::Item interface. + +STYLE + + The default style pen is used as the widget pen. + + The following style pen prefixes are used: + + indicator => PEN + + The pen used for the scroll position indicators at the top or bottom + of the display + +KEYBINDINGS + + The following keys are bound + + * Down + + Scroll one line down + + * Up + + Scroll one line up + + * PageDown + + Scroll half a window down + + * PageUp + + Scroll half a window up + + * Ctrl-Home + + Scroll to the top + + * Ctrl-End + + Scroll to the bottom + +CONSTRUCTOR + + new + + $scroller = Tickit::Widget::Scroller->new( %args ) + + Constructs a new Tickit::Widget::Scroller object. The new object will + start with an empty list of items. + + Takes the following named arguments: + + gravity => STRING + + Optional. If given the value bottom, resize events and the push + method will attempt to preserve the item at the bottom of the screen. + Otherwise, will preserve the top. + + gen_top_indicator => CODE + + gen_bottom_indicator => CODE + + Optional. Generator functions for the top and bottom indicators. See + also set_gen_top_indicator and set_gen_bottom_indicator. + +METHODS + + on_scrolled + + set_on_scrolled + + $on_scrolled = $scroller->on_scrolled + + $scroller->set_on_scrolled( $on_scrolled ) + + Return or set the CODE reference to be called when the scroll position + is adjusted. + + $on_scrolled->( $scroller, $delta ) + + This is invoked by the scroll method, including the scroll_to, + scroll_to_top and scroll_to_bottom. In normal cases it will be given + the delta offset that scroll itself was invoked with, though this may + be clipped if this would scroll past the beginning or end of the + display. + + push + + $scroller->push( @items ) + + Append the given items to the end of the list. + + If the Scroller is already at the tail (that is, the last line of the + last item is on display) and the gravity mode is bottom, the newly + added items will be displayed, possibly by scrolling downward if + required. While the scroller isn't adjusted by using any of the scroll + methods, it will remain following the tail of the items, scrolling + itself downwards as more are added. + + unshift + + $scroller->unshift( @items ) + + Prepend the given items to the beginning of the list. + + If the Scroller is already at the head (that is, the first line of the + first item is on display) and the gravity mode is top, the newly added + items will be displayed, possibly by scrolling upward if required. + While the scroller isn't adjusted by using any of the scroll methods, + it will remain following the head of the items, scrolling itself + upwards as more are added. + + shift + + @items = $scroller->shift( $count ) + + Remove the given number of items from the start of the list and returns + them. + + If any of the items are on display, the Scroller will be scrolled + upwards an amount sufficient to close the gap, ensuring the first + remaining item is now at the top of the display. + + The returned items may be re-used by adding them back into the scroller + again either by push or unshift, or may be discarded. + + pop + + @items = $scroller->pop( $count ) + + Remove the given number of items from the end of the list and returns + them. + + If any of the items are on display, the Scroller will be scrolled + downwards an amount sufficient to close the gap, ensuring the last + remaining item is now at the bottom of the display. + + The returned items may be re-used by adding them back into the scroller + again either by push or unshift, or may be discarded. + + scroll + + $scroller->scroll( $delta ) + + Move the display up or down by the given $delta amount; with positive + moving down. This will be a physical count of displayed lines; if some + items occupy multiple lines, then fewer items may be scrolled than + lines. + + scroll_to + + $scroller->scroll_to( $line, $itemidx, $itemline ) + + Moves the display up or down so that display line $line contains line + $itemline of item $itemidx. Any of these counts may be negative to + count backwards from the display lines, items, or lines within the + item. + + scroll_to_top + + $scroller->scroll_to_top( $itemidx, $itemline ) + + Shortcut for scroll_to to set the top line of display; where $line is + 0. If $itemline is undefined, it will be passed as 0. If $itemidx is + also undefined, it will be passed as 0. Calling this method with no + arguments, therefore scrolls to the very top of the display. + + scroll_to_bottom + + $scroller->scroll_to_bottom( $itemidx, $itemline ) + + Shortcut for scroll_to to set the bottom line of display; where $line + is -1. If $itemline is undefined, it will be passed as -1. If $itemidx + is also undefined, it will be passed as -1. Calling this method with no + arguments, therefore scrolls to the very bottom of the display. + + line2item + + $itemidx = $scroller->line2item( $line ) + + ( $itemidx, $itemline ) = $scroller->line2item( $line ) + + Returns the item index currently on display at the given line of the + window. In list context, also returns the line number within item. If + no window has been set, or there is no item on display at that line, + undef or an empty list are returned. $line may be negative to count + backward from the last line on display; the last line taking -1. + + item2line + + $line = $scroller->item2line( $itemidx, $itemline ) + + ( $line, $offscreen ) = $scroller->item2line( $itemidx, $itemline, $count_offscreen ) + + Returns the display line in the window of the given line of the item at + the given index. $itemidx may be given negative, to count backwards + from the last item. $itemline may be negative to count backward from + the last line of the item. + + In list context, also returns a value describing the offscreen nature + of the item. For items fully on display, this value is undef. If the + given line of the given item is not on display because it is scrolled + off either the top or bottom of the window, this value will be either + "above" or "below" respectively. If $count_offscreen is true, then the + returned $line value will always be defined, even if the item line is + offscreen. This will be negative for items "above", and a value equal + or greater than the number of lines in the scroller's window for items + "below". + + lines_above + + $count = $scroller->lines_above + + Returns the number of lines of content above the scrolled display. + + lines_below + + $count = $scroller->lines_below + + Returns the number of lines of content below the scrolled display. + + set_gen_top_indicator + + set_gen_bottom_indicator + + $scroller->set_gen_top_indicator( $method ) + + $scroller->set_gen_bottom_indicator( $method ) + + Accessors for the generators for the top and bottom indicator text. If + set, each should be a CODE reference or method name on the scroller + which will be invoked after any operation that changes the contents of + the window, such as scrolling or adding or removing items. It should + return a text string which, if defined and non-empty, will be displayed + in an indicator window. This will be a small one-line window displayed + at the top right or bottom right corner of the Scroller's window. + + $text = $scroller->$method() + + The ability to pass method names allows subclasses to easily implement + custom logic as methods without having to capture a closure. + + update_indicators + + $scroller->update_indicators + + Calls any defined generators for indicator text, and updates the + indicator windows with the returned text. This may be useful if the + functions would return different text now. + +TODO + + * Abstract away the "item storage model" out of the actual widget. + Implement more storage models, such as database-driven ones.. more + dynamic. + + * Keybindings + +AUTHOR + + Paul Evans + -- cgit v1.2.3