131 lines
4.7 KiB
Racket
131 lines
4.7 KiB
Racket
#lang racket/base
|
|
(require racket/class
|
|
"../../syntax.rkt")
|
|
|
|
(provide event%
|
|
mouse-event%
|
|
key-event%
|
|
control-event%
|
|
column-control-event%
|
|
scroll-event%
|
|
popup-event%)
|
|
|
|
(defclass event% object%
|
|
(init-properties [[exact-integer? time-stamp] 0])
|
|
(super-new))
|
|
|
|
(defclass mouse-event% event%
|
|
(init-properties [[(symbol-in enter leave left-down left-up
|
|
middle-down middle-up
|
|
right-down right-up motion)
|
|
event-type]]
|
|
[[bool? left-down] #f]
|
|
[[bool? middle-down] #f]
|
|
[[bool? right-down] #f]
|
|
[[exact-integer? x] 0]
|
|
[[exact-integer? y] 0]
|
|
[[bool? shift-down] #f]
|
|
[[bool? control-down] #f]
|
|
[[bool? meta-down] #f]
|
|
[[bool? alt-down] #f])
|
|
(init [time-stamp 0])
|
|
(init-properties [[bool? caps-down] #f]
|
|
[[bool? mod3-down] #f]
|
|
[[bool? mod4-down] #f]
|
|
[[bool? mod5-down] #f])
|
|
(super-new [time-stamp time-stamp])
|
|
|
|
(def/public (button-changed? [(symbol-in left middle right any) [button 'any]])
|
|
(and (memq event-type
|
|
(case button
|
|
[(any) '(left-down left-up middle-down middle-up right-down right-up)]
|
|
[(left) '(left-down left-up)]
|
|
[(middle) '(middle-down middle-up)]
|
|
[(right) '(right-down right-up)]))
|
|
#t))
|
|
|
|
(def/public (button-down? [(symbol-in left middle right any) [button 'any]])
|
|
(and (memq event-type
|
|
(case button
|
|
[(any) '(left-down middle-down right-down)]
|
|
[(left) '(left-down)]
|
|
[(middle) '(middle-down)]
|
|
[(right) '(right-down)]))
|
|
#t))
|
|
|
|
(def/public (button-up? [(symbol-in left middle right any) [button 'any]])
|
|
(and (memq event-type
|
|
(case button
|
|
[(any) '(left-up middle-up right-up)]
|
|
[(left) '(left-up)]
|
|
[(middle) '(middle-up)]
|
|
[(right) '(right-up)]))
|
|
#t))
|
|
|
|
(def/public (dragging?)
|
|
(and (eq? event-type 'motion)
|
|
(or left-down middle-down right-down)))
|
|
|
|
(def/public (entering?)
|
|
(eq? event-type 'enter))
|
|
|
|
(def/public (leaving?)
|
|
(eq? event-type 'leave))
|
|
|
|
(def/public (moving?)
|
|
(eq? event-type 'motion)))
|
|
|
|
(defclass key-event% event%
|
|
(init-properties [[(make-alts symbol? char?) key-code] #\nul]
|
|
[[bool? shift-down] #f]
|
|
[[bool? control-down] #f]
|
|
[[bool? meta-down] #f]
|
|
[[bool? alt-down] #f]
|
|
[[exact-integer? x] 0]
|
|
[[exact-integer? y] 0])
|
|
(init [time-stamp 0])
|
|
(init-properties [[bool? caps-down] #f]
|
|
[[bool? mod3-down] #f]
|
|
[[bool? mod4-down] #f]
|
|
[[bool? mod5-down] #f]
|
|
[[bool? control+meta-is-altgr] #f])
|
|
(properties [[(make-alts symbol? char?) key-release-code] 'press]
|
|
[[(make-or-false (make-alts symbol? char?)) other-shift-key-code] #f]
|
|
[[(make-or-false (make-alts symbol? char?)) other-altgr-key-code] #f]
|
|
[[(make-or-false (make-alts symbol? char?)) other-shift-altgr-key-code] #f]
|
|
[[(make-or-false (make-alts symbol? char?)) other-caps-key-code] #f])
|
|
(super-new [time-stamp time-stamp]))
|
|
|
|
(defclass control-event% event%
|
|
(init-properties [[(symbol-in button check-box choice
|
|
list-box list-box-dclick list-box-column text-field
|
|
text-field-enter slider radio-box
|
|
menu-popdown menu-popdown-none tab-panel)
|
|
event-type]])
|
|
(init [time-stamp 0])
|
|
(super-new [time-stamp time-stamp]))
|
|
|
|
(defclass column-control-event% control-event%
|
|
(init-properties [[exact-nonnegative-integer? column]])
|
|
(init event-type
|
|
[time-stamp 0])
|
|
(unless (eq? event-type 'list-box-column)
|
|
(raise-type-error (init-name 'column-control-event%)
|
|
"'list-box-column"
|
|
event-type))
|
|
(super-new [event-type event-type]
|
|
[time-stamp time-stamp]))
|
|
|
|
(defclass popup-event% control-event%
|
|
(properties [[any? menu-id] 0])
|
|
(super-new))
|
|
|
|
(defclass scroll-event% event%
|
|
(init-properties [[(symbol-in top bottom line-up line-down page-up page-down thumb) event-type]
|
|
'thumb]
|
|
[[(symbol-in horizontal vertical) direction] 'vertical]
|
|
[[(integer-in 0 10000) position] 0])
|
|
(init [time-stamp 0])
|
|
(super-new [time-stamp time-stamp]))
|
|
|