original commit: e1792d105641c2c4c99b357d1eb77931bb33312c
This commit is contained in:
Matthew Flatt 2001-03-15 03:20:11 +00:00
parent 52b89ccaf4
commit 10de29235b
3 changed files with 164 additions and 152 deletions

View File

@ -1,9 +1,10 @@
(module hierlist-unit mzscheme (module hierlist-unit mzscheme
(require (lib "unitsig.ss") (require (lib "unitsig.ss")
(lib "class.ss") (lib "class.ss")
(lib "mred-sig.ss" "mred") (lib "class100.ss")
"hierlist-sig.ss") (lib "mred-sig.ss" "mred")
"hierlist-sig.ss")
(require (lib "list.ss")) (require (lib "list.ss"))
@ -27,7 +28,7 @@
(define arrow-snip-class (make-object snip-class%)) (define arrow-snip-class (make-object snip-class%))
(send arrow-snip-class set-classname "hier-arrow") (send arrow-snip-class set-classname "hier-arrow")
(define arrow-snip% (define arrow-snip%
(class snip% (click-callback) (class100 snip% (callback)
(inherit get-admin set-flags get-flags set-count set-snipclass get-style) (inherit get-admin set-flags get-flags set-count set-snipclass get-style)
(rename [super-get-extent get-extent]) (rename [super-get-extent get-extent])
(private (private
@ -61,6 +62,7 @@
(private (private
[get-width (lambda () (+ 2 size))] [get-width (lambda () (+ 2 size))]
[get-height (lambda () (+ 2 size))] [get-height (lambda () (+ 2 size))]
[click-callback callback]
[clicked? #f] [clicked? #f]
[update [update
(lambda () (lambda ()
@ -131,11 +133,11 @@
;; Hack to get whitespace matching width of arrow: derive a new ;; Hack to get whitespace matching width of arrow: derive a new
;; class that overrides the `draw' method to do nothing. ;; class that overrides the `draw' method to do nothing.
(define whitespace-snip% (define whitespace-snip%
(class arrow-snip% () (class100 arrow-snip% ()
(override [draw void]) (override [draw (lambda (dc x y left top right bottom dx dy draw-caret) (void))])
(sequence (super-init void)))) (sequence (super-init void))))
; Keymap to map clicks and double-clicks ;; Keymap to map clicks and double-clicks
(define item-keymap (make-object keymap%)) (define item-keymap (make-object keymap%))
(send item-keymap add-function "mouse-select" (send item-keymap add-function "mouse-select"
@ -155,8 +157,9 @@
get-editor is-selected? select user-data)) get-editor is-selected? select user-data))
(define hierarchical-list-item% (define hierarchical-list-item%
(class* object% (hierarchical-list-item<%>) (snip) (class100* object% (hierarchical-list-item<%>) (snp)
(private (private
[snip snp]
[data #f]) [data #f])
(public (public
[get-editor (lambda () (send snip get-item-buffer))] [get-editor (lambda () (send snip get-item-buffer))]
@ -178,7 +181,8 @@
new-item new-list delete-item get-items)) new-item new-list delete-item get-items))
(define hierarchical-list-compound-item% (define hierarchical-list-compound-item%
(class* hierarchical-list-item% (hierarchical-list-compound-item<%>) (snip) (class100* hierarchical-list-item% (hierarchical-list-compound-item<%>) (snp)
(private [snip snp])
(override (override
[get-editor (lambda () (send snip get-title-buffer))]) [get-editor (lambda () (send snip get-title-buffer))])
(public (public
@ -197,12 +201,12 @@
[new-item [new-item
(lambda x (lambda x
(begin0 (begin0
(apply (ivar (send snip get-content-buffer) new-item) x) (send (send snip get-content-buffer) new-item . x)
(send snip not-empty-anymore)))] (send snip not-empty-anymore)))]
[new-list [new-list
(lambda x (lambda x
(begin0 (begin0
(apply (ivar (send snip get-content-buffer) new-list) x) (send (send snip get-content-buffer) new-list . x)
(send snip not-empty-anymore)))] (send snip not-empty-anymore)))]
[delete-item (lambda (i) (begin0 [delete-item (lambda (i) (begin0
(send (send snip get-content-buffer) delete-item i) (send (send snip get-content-buffer) delete-item i)
@ -213,7 +217,7 @@
;; Buffer for a single list item ;; Buffer for a single list item
(define hierarchical-item-text% (define hierarchical-item-text%
(class text% (top top-select item snip depth) (class100 text% (tp tp-select itm snp dpth)
(inherit set-max-undo-history hide-caret (inherit set-max-undo-history hide-caret
last-position set-position set-keymap last-position set-position set-keymap
invalidate-bitmap-cache set-max-width invalidate-bitmap-cache set-max-width
@ -221,6 +225,11 @@
(rename [super-auto-wrap auto-wrap] (rename [super-auto-wrap auto-wrap]
[super-on-default-event on-default-event]) [super-on-default-event on-default-event])
(private (private
[top tp]
[top-select tp-select]
[item itm]
[snip snp]
[depth dpth]
[selected? #f]) [selected? #f])
(public (public
[is-selected? (lambda () selected?)] [is-selected? (lambda () selected?)]
@ -267,7 +276,7 @@
[double-select (lambda () (send top on-double-select item))] [double-select (lambda () (send top on-double-select item))]
[select-prev (lambda () (send top select-prev))]) [select-prev (lambda () (send top select-prev))])
(override (override
[on-default-char void]) [on-default-char (lambda (x) (void))])
(sequence (sequence
(super-init) (super-init)
(hide-caret #t) (hide-caret #t)
@ -276,11 +285,12 @@
;; Buffer for a compound list item (and the top-level list) ;; Buffer for a compound list item (and the top-level list)
(define (make-hierarchical-list-text% super%) (define (make-hierarchical-list-text% super%)
(class super% (top top-select depth parent-snip) (class100 super% (top top-select depth parent-snp)
(inherit set-max-undo-history hide-caret erase (inherit set-max-undo-history hide-caret erase
last-position insert delete line-start-position line-end-position last-position insert delete line-start-position line-end-position
begin-edit-sequence end-edit-sequence get-style-list) begin-edit-sequence end-edit-sequence get-style-list)
(private (private
[parent-snip parent-snp]
[children null] [children null]
[make-whitespace (lambda () (make-object whitespace-snip%))] [make-whitespace (lambda () (make-object whitespace-snip%))]
[insert-item [insert-item
@ -351,8 +361,8 @@
(send c reflow-item)) (send c reflow-item))
children))]) children))])
(override (override
[on-default-char void] [on-default-char (lambda (x) (void))]
[on-default-event void]) [on-default-event (lambda (x) (void))])
(sequence (sequence
(super-init) (super-init)
(hide-caret #t) (hide-caret #t)
@ -362,133 +372,135 @@
;; Snip for a single list item ;; Snip for a single list item
(define hierarchical-item-snip% (define hierarchical-item-snip%
(class editor-snip% (parent top top-select depth mixin) (class100 editor-snip% (prnt top top-select depth mixin)
(public (private [parent prnt])
[get-parent (lambda () parent)] (public
[get-item-text% (lambda () hierarchical-item-text%)] [get-parent (lambda () parent)]
[select (lambda (on?) (send item-buffer select on?))] [get-item-text% (lambda () hierarchical-item-text%)]
[deselect-all (lambda () (select #f))] [select (lambda (on?) (send item-buffer select on?))]
[show-select (lambda (on?) (send item-buffer show-select on?))] [deselect-all (lambda () (select #f))]
[get-item-buffer (lambda () item-buffer)] [show-select (lambda (on?) (send item-buffer show-select on?))]
[get-item (lambda () item)] [get-item-buffer (lambda () item-buffer)]
[reflow-item (lambda () [get-item (lambda () item)]
(when (send item-buffer auto-wrap) [reflow-item (lambda ()
(send item-buffer auto-wrap #t)))]) (when (send item-buffer auto-wrap)
(private (send item-buffer auto-wrap #t)))])
[item (make-object (mixin hierarchical-list-item%) this)] (private
[item-buffer (make-object (get-item-text%) top top-select item this depth)]) [item (make-object (mixin hierarchical-list-item%) this)]
(sequence [item-buffer (make-object (get-item-text%) top top-select item this depth)])
(super-init item-buffer #f 0 0 0 0 0 0 0 0)))) (sequence
(super-init item-buffer #f 0 0 0 0 0 0 0 0))))
;; Snip for a compound list item ;; Snip for a compound list item
(define hierarchical-list-snip% (define hierarchical-list-snip%
(class editor-snip% (parent top top-select depth mixin [title #f][content #f]) (class100 editor-snip% (prnt top top-select depth mixin [title #f][content #f])
(public (private [parent prnt])
[get-parent (lambda () parent)] (public
[get-main-text% (lambda () (class text% args [get-parent (lambda () parent)]
(override [get-main-text% (lambda () (class100 text% args
[on-default-char void] (override
[on-default-event void]) [on-default-char (lambda (x) (void))]
(sequence [on-default-event (lambda (x) (void))])
(apply super-init args))))] (sequence
[get-title-text% (lambda () hierarchical-item-text%)] (apply super-init args))))]
[get-content-text% (lambda () hierarchical-list-text%)] [get-title-text% (lambda () hierarchical-item-text%)]
[get-arrow-snip% (lambda () arrow-snip%)] [get-content-text% (lambda () hierarchical-list-text%)]
[select (lambda (on?) [get-arrow-snip% (lambda () arrow-snip%)]
(if on? [select (lambda (on?)
(send title-buffer select #t) (if on?
(send title-buffer select #f)))] (send title-buffer select #t)
[deselect-all (lambda () (send title-buffer select #f)))]
(select #f) [deselect-all (lambda ()
(send content-buffer deselect-all))] (select #f)
[show-select (lambda (on?) (send title-buffer show-select on?))] (send content-buffer deselect-all))]
[not-empty-anymore (lambda () [show-select (lambda (on?) (send title-buffer show-select on?))]
(when was-empty? [not-empty-anymore (lambda ()
(set! was-empty? #f) (when was-empty?
(set! was-non-empty? #t) (set! was-empty? #f)
(send main-buffer begin-edit-sequence) (set! was-non-empty? #t)
(send main-buffer insert #\newline 2) (send main-buffer begin-edit-sequence)
(send main-buffer insert whitespace 3) (send main-buffer insert #\newline 2)
(send main-buffer insert content-snip 4) (send main-buffer insert whitespace 3)
(send main-buffer end-edit-sequence)))] (send main-buffer insert content-snip 4)
[check-empty-now (lambda () (send main-buffer end-edit-sequence)))]
(when (and was-non-empty? [check-empty-now (lambda ()
(zero? (send content-buffer last-position))) (when (and was-non-empty?
(set! was-empty? #t) (zero? (send content-buffer last-position)))
(set! was-non-empty? #f) (set! was-empty? #t)
(send main-buffer delete 2 5)))] (set! was-non-empty? #f)
[open (lambda () (handle-open #t))] (send main-buffer delete 2 5)))]
[close (lambda () (handle-close #t))] [open (lambda () (handle-open #t))]
[is-open? (lambda () open?)] [close (lambda () (handle-close #t))]
[toggle-open/closed [is-open? (lambda () open?)]
(lambda () [toggle-open/closed
(if open? (lambda ()
(handle-close #t) (if open?
(handle-open #t)))] (handle-close #t)
[on-arrow (lambda (a) (handle-open #t)))]
(if (send a on) [on-arrow (lambda (a)
(handle-open #f) (if (send a on)
(handle-close #f)))] (handle-open #f)
[get-title-buffer (lambda () title-buffer)] (handle-close #f)))]
[get-content-buffer (lambda () content-buffer)] [get-title-buffer (lambda () title-buffer)]
[get-item (lambda () item)] [get-content-buffer (lambda () content-buffer)]
[reflow-item (lambda () [get-item (lambda () item)]
(when (send title-buffer auto-wrap) [reflow-item (lambda ()
(send title-buffer auto-wrap #t)) (when (send title-buffer auto-wrap)
(send (send content-snip get-editor) reflow-items))]) (send title-buffer auto-wrap #t))
(private (send (send content-snip get-editor) reflow-items))])
[open? #f] (private
[handle-open [open? #f]
(lambda (update-arrow?) [handle-open
(unless open? (lambda (update-arrow?)
(set! open? #t) (unless open?
(when update-arrow? (send arrow on #t)) (set! open? #t)
(send main-buffer begin-edit-sequence) (when update-arrow? (send arrow on #t))
(send top on-item-opened (get-item)) (send main-buffer begin-edit-sequence)
(if (zero? (send content-buffer last-position)) (send top on-item-opened (get-item))
(set! was-empty? #t) (if (zero? (send content-buffer last-position))
(begin (set! was-empty? #t)
(set! was-non-empty? #t) (begin
(send main-buffer insert #\newline 2) (set! was-non-empty? #t)
(send main-buffer insert whitespace 3) (send main-buffer insert #\newline 2)
(send main-buffer insert content-snip 4))) (send main-buffer insert whitespace 3)
(send main-buffer scroll-to-position 0 (send main-buffer insert content-snip 4)))
#f (send main-buffer scroll-to-position 0
(send main-buffer last-position) #f
'start) (send main-buffer last-position)
(send main-buffer end-edit-sequence)))] 'start)
[handle-close (send main-buffer end-edit-sequence)))]
(lambda (update-arrow?) [handle-close
(when open? (lambda (update-arrow?)
(set! open? #f) (when open?
(when update-arrow? (send arrow on #f)) (set! open? #f)
(set! was-empty? #f) (when update-arrow? (send arrow on #f))
(set! was-non-empty? #f) (set! was-empty? #f)
(send main-buffer begin-edit-sequence) (set! was-non-empty? #f)
(send content-buffer deselect-all) (send main-buffer begin-edit-sequence)
(send main-buffer delete 2 5) (send content-buffer deselect-all)
(send top on-item-closed (get-item)) (send main-buffer delete 2 5)
(send main-buffer end-edit-sequence)))]) (send top on-item-closed (get-item))
(private (send main-buffer end-edit-sequence)))])
[was-empty? #f] (private
[was-non-empty? #f] [was-empty? #f]
[item (make-object (mixin hierarchical-list-compound-item%) this)] [was-non-empty? #f]
[main-buffer (make-object (get-main-text%))] [item (make-object (mixin hierarchical-list-compound-item%) this)]
[title-buffer (make-object (get-title-text%) top top-select item this depth)] [main-buffer (make-object (get-main-text%))]
[content-buffer (make-object (get-content-text%) top top-select depth this)] [title-buffer (make-object (get-title-text%) top top-select item this depth)]
[title-snip (make-object editor-snip% title-buffer #f 0 0 0 0 0 0 0 0)] [content-buffer (make-object (get-content-text%) top top-select depth this)]
[content-snip (make-object editor-snip% content-buffer #f 4 0 0 0 0 0 0 0)] [title-snip (make-object editor-snip% title-buffer #f 0 0 0 0 0 0 0 0)]
[arrow (make-object (get-arrow-snip%) on-arrow)] [content-snip (make-object editor-snip% content-buffer #f 4 0 0 0 0 0 0 0)]
[whitespace (make-object whitespace-snip%)]) [arrow (make-object (get-arrow-snip%) (lambda (a) (on-arrow a)))]
(sequence [whitespace (make-object whitespace-snip%)])
(super-init main-buffer #f 0 0 0 0 0 0 0 0) (sequence
(send main-buffer set-max-undo-history 0) (super-init main-buffer #f 0 0 0 0 0 0 0 0)
(send main-buffer hide-caret #t) (send main-buffer set-max-undo-history 0)
(send main-buffer insert arrow) (send main-buffer hide-caret #t)
(when title (send title-buffer insert title)) (send main-buffer insert arrow)
(when content (send content-buffer insert content)) (when title (send title-buffer insert title))
(send main-buffer insert title-snip) (when content (send content-buffer insert content))
(send main-buffer change-style (make-object style-delta% 'change-alignment 'top) 0 2)))) (send main-buffer insert title-snip)
(send main-buffer change-style (make-object style-delta% 'change-alignment 'top) 0 2))))
(define list-keymap (make-object keymap%)) (define list-keymap (make-object keymap%))
@ -523,7 +535,7 @@
(send list-keymap map-function "return" "toggle-open/closed") (send list-keymap map-function "return" "toggle-open/closed")
(define hierarchical-list% (define hierarchical-list%
(class editor-canvas% (parent) (class100 editor-canvas% (parent)
(inherit min-width min-height) (inherit min-width min-height)
(rename [super-on-char on-char] (rename [super-on-char on-char]
[super-on-focus on-focus]) [super-on-focus on-focus])
@ -533,12 +545,12 @@
[() selectable?] [() selectable?]
[(on?) (set! selectable? on?)])] [(on?) (set! selectable? on?)])]
[get-selected (lambda () selected-item)] [get-selected (lambda () selected-item)]
[on-item-opened void] [on-item-opened (lambda (i) (void))]
[on-item-closed void] [on-item-closed (lambda (i) (void))]
[on-double-select void] [on-double-select (lambda (i) (void))]
[on-select void] [on-select (lambda (i) (void))]
[new-item (lambda x (apply (ivar top-buffer new-item) x))] [new-item (lambda x (send top-buffer new-item . x))]
[new-list (lambda x (apply (ivar top-buffer new-list) x))] [new-list (lambda x (send top-buffer new-list . x))]
[delete-item (lambda (i) (send top-buffer delete-item i))] [delete-item (lambda (i) (send top-buffer delete-item i))]
[sort (lambda (less-than?) (send top-buffer sort less-than?))] [sort (lambda (less-than?) (send top-buffer sort less-than?))]
[get-items (lambda () (send top-buffer get-items))] [get-items (lambda () (send top-buffer get-items))]

View File

@ -1,6 +1,6 @@
(module mred mzscheme (module mred mzscheme
(require (prefix wx: (lib "kernel.ss" "mred" "private"))) (require (prefix wx: (lib "kernel.ss" "mred" "private")))
(require (lib "class2.ss") (require (lib "class.ss")
(lib "class100.ss")) (lib "class100.ss"))
;;;;;;;;;;;;;;; Constants ;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; Constants ;;;;;;;;;;;;;;;;;;;;
@ -1884,7 +1884,7 @@
[set-focus (lambda () (void))] [set-focus (lambda () (void))]
[on-size (lambda () (void))] [on-size (lambda () (void))]
[enable (lambda () (void))] [enable (lambda () (void))]
[show (lambda () (void))] [show (lambda (on?) (void))]
[get-parent (lambda () parent)] [get-parent (lambda () parent)]
[get-client-size (lambda (wb hb) [get-client-size (lambda (wb hb)
(when wb (set-box! wb width)) (when wb (set-box! wb width))
@ -2467,7 +2467,7 @@
(lambda (s) (major-offset s)) (lambda (s) (major-offset s))
cadr ; child-info-y-min cadr ; child-info-y-min
cadddr ; child-info-y-stretch cadddr ; child-info-y-stretch
(lambda (s) (minor-offset s)) (lambda (s t) (minor-offset s t))
(lambda (width height) width) (lambda (width height) width)
(lambda (width height) height) (lambda (width height) height)
(lambda (major minor) major) (lambda (major minor) major)

View File

@ -2,7 +2,7 @@
;; kernel.ss is generated by xctocc ;; kernel.ss is generated by xctocc
(module kernel mzscheme (module kernel mzscheme
(require (all-except (lib "class2.ss") object%)) (require (all-except (lib "class.ss") object%))
;; Pull pieces out of #%mred-kernel dynamically, so that ;; Pull pieces out of #%mred-kernel dynamically, so that
;; the library compiles with setup-plt in mzscheme. ;; the library compiles with setup-plt in mzscheme.