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

View File

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

View File

@ -2,7 +2,7 @@
;; kernel.ss is generated by xctocc
(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
;; the library compiles with setup-plt in mzscheme.