! 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 gadgets-theme generic kernel lists math namespaces sequences styles ; TUPLE: book page ; C: book ( pages -- book ) [ >r make-stack r> set-gadget-delegate ] keep 0 over set-book-page ; M: book layout* ( book -- ) dup delegate layout* dup gadget-children [ hide-gadget ] each dup book-page swap gadget-children nth [ show-gadget ] when* ; : show-page ( n book -- ) [ gadget-children length rem ] keep [ set-book-page ] keep relayout-1 ; : first-page ( book -- ) 0 swap show-page ; : prev-page ( book -- ) [ book-page 1- ] keep show-page ; : next-page ( book -- ) [ book-page 1+ ] keep show-page ; : last-page ( book -- ) -1 swap show-page ; TUPLE: book-browser book ; : find-book ( gadget -- ) [ book-browser? ] find-parent book-browser-book ; : ( polygon quot -- button ) \ find-book swons >r gray swap r> ; : ( book -- gadget ) [ arrow-|left [ first-page ] , arrow-left [ prev-page ] , arrow-right [ next-page ] , arrow-right| [ last-page ] , ] { } make make-shelf ; C: book-browser ( book -- gadget ) dup delegate>frame over @top frame-add [ 2dup set-book-browser-book @center frame-add ] keep ;