factor/library/ui/books.factor

56 lines
1.5 KiB
Factor
Raw Normal View History

2005-07-18 18:14:13 -04:00
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets-books
USING: gadgets gadgets-buttons gadgets-labels gadgets-layouts
generic kernel lists math matrices sequences ;
2005-07-18 18:14:13 -04:00
TUPLE: book page ;
C: book ( pages -- book )
<gadget> over set-delegate
0 over set-book-page
2005-08-26 21:42:43 -04:00
[ add-gadgets ] keep ;
2005-07-18 18:14:13 -04:00
M: book pref-dim ( book -- dim )
2005-08-26 21:42:43 -04:00
gadget-children [ pref-dim ] map { 0 0 0 } [ vmax ] reduce ;
2005-07-18 18:14:13 -04:00
M: book layout* ( book -- )
dup rect-dim over gadget-children [
2005-07-18 18:14:13 -04:00
f over set-gadget-visible?
{ 0 0 0 } over set-rect-loc
2005-07-18 18:14:13 -04:00
set-gadget-dim
] each-with
dup book-page swap gadget-children nth
2005-08-26 01:29:12 -04:00
[ t swap set-gadget-visible? ] when* ;
2005-07-18 18:14:13 -04:00
: show-page ( n book -- )
[ gadget-children length rem ] keep
[ set-book-page ] keep relayout ;
2005-08-26 21:42:43 -04:00
: first-page ( book -- ) 0 swap show-page ;
2005-07-18 18:14:13 -04:00
2005-08-26 21:42:43 -04:00
: prev-page ( book -- ) [ book-page 1 - ] keep show-page ;
2005-07-18 18:14:13 -04:00
2005-08-26 21:42:43 -04:00
: next-page ( book -- ) [ book-page 1 + ] keep show-page ;
2005-07-18 18:14:13 -04:00
2005-08-26 21:42:43 -04:00
: last-page ( book -- ) -1 swap show-page ;
2005-07-18 18:14:13 -04:00
2005-08-26 21:42:43 -04:00
TUPLE: book-browser book ;
2005-07-18 18:14:13 -04:00
2005-08-26 21:42:43 -04:00
: find-book ( gadget -- )
[ book-browser? ] find-parent book-browser-book ;
: <book-buttons> ( book -- gadget )
[
{ "|<" [ find-book first-page ] }
{ "<" [ find-book prev-page ] }
{ ">" [ find-book next-page ] }
{ ">|" [ find-book last-page ] }
] [ 2unseq >r <label> r> <button> ] map
<shelf> [ add-gadgets ] keep ;
2005-08-26 21:42:43 -04:00
C: book-browser ( book -- gadget )
<frame> over set-delegate
<book-buttons> over add-top
[ 2dup set-book-browser-book add-center ] keep ;