65 lines
2.1 KiB
Scheme
65 lines
2.1 KiB
Scheme
|
|
(module implementation mzscheme
|
|
(require (lib "unitsig.ss")
|
|
"interfaces.ss"
|
|
"widget.ss"
|
|
"syntax-snip.ss"
|
|
"snipclass.ss"
|
|
"keymap.ss"
|
|
"prefs.ss")
|
|
(provide global-prefs@
|
|
global-snip@
|
|
implementation@)
|
|
(provide-signature-elements snip^)
|
|
(provide-signature-elements snipclass^)
|
|
|
|
;; prefs@ and snip@ should only be invoked once
|
|
;; We create a new unit/sig out of their invocation
|
|
|
|
(define snip-implementation@
|
|
(compound-unit/sig
|
|
(import)
|
|
(link [PREFS : prefs^ (prefs@)]
|
|
[KEYMAP : keymap^ (keymap@)]
|
|
[MENU : context-menu^ (context-menu@ SNIP)]
|
|
[SNIP-CLASS : snipclass^ (snipclass@ SNIP)]
|
|
[SNIP-MENU : context-menu^ (snip-context-menu-extension@ MENU)]
|
|
[SNIP : snip^ (snip@ PREFS KEYMAP SNIP-MENU SNIP-CLASS)])
|
|
(export (open PREFS) (open SNIP) (open SNIP-CLASS))))
|
|
(define-values/invoke-unit/sig ((open snip^) (open prefs^) (open snipclass^))
|
|
snip-implementation@)
|
|
|
|
(define global-prefs@
|
|
(unit/sig prefs^
|
|
(import)
|
|
(rename (-width pref:width)
|
|
(-height pref:height)
|
|
(-props-percentage pref:props-percentage))
|
|
(define -width pref:width)
|
|
(define -height pref:height)
|
|
(define -props-percentage pref:props-percentage)))
|
|
|
|
(define global-snip@
|
|
(unit/sig snip^
|
|
(import)
|
|
(rename (-syntax-snip syntax-snip)
|
|
(-syntax-snip% syntax-snip%))
|
|
(define -syntax-snip syntax-snip)
|
|
(define -syntax-snip% syntax-snip%)))
|
|
|
|
;; Everyone else re-uses the global-snip@ unit
|
|
|
|
;; implementation@ : prefs^ -> implementation^
|
|
(define implementation@
|
|
(compound-unit/sig
|
|
(import)
|
|
(link [KEYMAP : keymap^ (keymap@)]
|
|
[MENU : context-menu^ (context-menu@ SNIP)]
|
|
[SNIP : snip^ (global-snip@)]
|
|
[WIDGET-MENU : context-menu^ (widget-context-menu-extension@ MENU)]
|
|
[WIDGET : widget^ (widget@ KEYMAP WIDGET-MENU)])
|
|
(export (unit SNIP snip)
|
|
(unit WIDGET widget))))
|
|
|
|
)
|