1(module slide racket/base
2  (require racket/unit
3           racket/contract
4           racket/class
5           racket/gui/base
6           texpict/mrpict
7           texpict/utils
8           "sig.rkt"
9           "core.rkt"
10           "private/utils.rkt"
11           "private/aspect.rkt"
12           "param.rkt")
13
14  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15  ;;       Link Config and Viewer with Core        ;;
16  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17
18  ;; The actual config and viewer units are determined by a parameter
19  ;;  in "param.rkt". This somewhat strange technqiue allows the units
20  ;;  to be changed as this module is loaded in a new namespace; see
21  ;;  "slides-to-picts.rkt". Such namespace games are not necessary if
22  ;;  talks are written as units and linked to the core.rkt unit.
23
24  (define-values/invoke-unit ((current-slideshow-linker) core@)
25    (import)
26    (export core^
27            (prefix config: config^)
28            (prefix viewer: viewer^)))
29
30  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31  ;;                Contracts                      ;;
32  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
33
34  ;; Let the contract check always pass for now. We do more specific checking.
35  (define (slide-sequence? l) #t)
36
37  (define slide-contract
38    (() () #:rest slide-sequence? . ->* . any))
39  (define slide/title-contract
40    ((string?) () #:rest slide-sequence? . ->* . any))
41  (define slide/inset-contract
42    ((sinset?) () #:rest slide-sequence? . ->* . any))
43  (define slide/title/inset-contract
44    ((string? sinset?) () #:rest slide-sequence? . ->* . any))
45
46  (define (side-inset? n) (and (number? n)
47			       (exact? n)
48			       (integer? n)
49			       (n . >= . 0)))
50
51  (define elem/c (flat-rec-contract elem/c (or/c string? pict? (listof elem/c))))
52  (define item-contract (() (#:bullet pict?
53                             #:aspect aspect?
54                             #:width real?
55                             #:gap-size real?
56                             #:align (or/c 'left 'center 'right)
57                             #:fill? any/c
58                             #:decode? any/c)
59                         #:rest elem/c
60                         . ->* . pict?))
61
62  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63  ;;                 Exports                       ;;
64  ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65
66  ;; Mostly we re-export core^, but we also add contracts.
67
68  ;; Create macros for `get-margin', etc.
69  (define-accessor margin get-margin)
70  (define-accessor title-h get-title-h)
71  (define-accessor client-w get-client-w)
72  (define-accessor client-h get-client-h)
73  (define-accessor full-page get-full-page)
74  (define-accessor titleless-page get-titleless-page)
75
76  (provide/contract [slide slide-contract]
77		    [slide/title slide/title-contract]
78		    [slide/title/tall slide/title-contract]
79		    [slide/center slide-contract]
80		    [slide/title/center slide/title-contract]
81		    [slide/inset slide/inset-contract]
82		    [slide/title/inset slide/title/inset-contract]
83		    [slide/title/tall/inset slide/title/inset-contract]
84		    [slide/center/inset slide/inset-contract]
85		    [slide/title/center/inset slide/title/inset-contract]
86		    [slide/name slide/title-contract]
87		    [slide/name/tall slide/title-contract]
88		    [slide/name/center slide/title-contract]
89		    [slide/name/inset slide/title/inset-contract]
90		    [slide/name/tall/inset slide/title/inset-contract]
91		    [slide/name/center/inset slide/title/inset-contract]
92		    [comment (() () #:rest (listof (or/c string? pict?)) . ->* . any)]
93                    [para/kw (() (#:aspect aspect?
94                                  #:width real?
95                                  #:align (or/c 'left 'center 'right)
96                                  #:fill? any/c
97                                  #:decode? any/c)
98                              #:rest elem/c
99                             . ->* . pict?)]
100                    [item/kw item-contract]
101                    [subitem/kw item-contract]
102                    [t (string? . -> . pict?)]
103                    [bt (string? . -> . pict?)]
104                    [it (string? . -> . pict?)]
105                    [bit (string? . -> . pict?)]
106                    [tt (string? . -> . pict?)]
107                    [titlet (string? . -> . pict?)]
108                    [rt (string? . -> . pict?)]
109                    [tt* (() () #:rest (listof string?) . ->* . pict?)])
110  (provide slide/kw
111           most-recent-slide retract-most-recent-slide re-slide slide->pict start-at-recent-slide
112	   scroll-transition pause-transition
113	   make-outline
114	   item item* page-item page-item*
115	   item/bullet item*/bullet page-item/bullet page-item*/bullet
116	   subitem subitem* page-subitem page-subitem*
117	   itemize itemize* page-itemize page-itemize*
118	   para para* page-para page-para*
119	   para/c para/r para*/c para*/r page-para/c page-para/r page-para*/c page-para*/r
120	   font-size gap-size current-gap-size current-font-size current-line-sep line-sep title-size
121           commentary-on-slide-font-size
122	   main-font current-main-font with-font current-title-color
123	   red green blue purple orange size-in-pixels
124	   bullet o-bullet
125	   margin get-margin set-margin!
126	   client-w client-h get-client-w get-client-h
127	   full-page titleless-page get-full-page get-titleless-page get-current-para-width
128	   printing? condense?
129	   skip-slides
130	   set-use-background-frame!
131	   enable-click-advance!
132	   title-h get-title-h set-title-h! current-slide-assembler
133	   current-page-number-font current-page-number-color current-page-number-adjust
134           current-titlet current-para-widths
135	   set-page-numbers-visible! done-making-slides
136           set-spotlight-style!
137           set-allow-new-slides-after-close!
138           pict->pre-render-pict
139           slide/timeout
140           slide/title/timeout
141           slide/center/timeout
142           slide/title/center/timeout
143           (rename-out [sinset? slide-inset?]))
144  (provide/contract [clickback
145		     ((pict? (-> any))
146		      (any/c)
147		      . ->* .
148		      pict?)]
149		    [interactive
150		     (pict?
151                      ((is-a?/c frame%) . -> . (-> any))
152                      . -> .
153		      pict?)]
154		    [make-slide-inset
155		     (side-inset? side-inset? side-inset? side-inset?
156				  . -> .
157				  sinset?)]
158		    [apply-slide-inset
159		     (sinset? pict? . -> . pict?)])
160  ;; Things not at all in the core unit:
161  (provide (all-from-out texpict/mrpict)
162	   (all-from-out texpict/utils)))
163