test-suite is no longer maintained, profjBoxes are RIP too
svn: r5240
This commit is contained in:
parent
f2a8dbbb53
commit
5f1c8da8f5
|
@ -1,5 +0,0 @@
|
|||
(module info (lib "infotab.ss" "setup")
|
||||
(define name "ProfJ Boxes")
|
||||
(define tools '(("tool.ss")))
|
||||
(define tool-names (list "ProfJ Boxes"))
|
||||
#;(define tool-icons '()))
|
|
@ -1,11 +0,0 @@
|
|||
(module box-helpers mzscheme
|
||||
|
||||
(require (lib "list.ss")
|
||||
(lib "etc.ss"))
|
||||
|
||||
(provide last)
|
||||
|
||||
(define (last alist)
|
||||
(with-handlers ([void (lambda (error) false)])
|
||||
(first (last-pair alist))))
|
||||
)
|
|
@ -1,252 +0,0 @@
|
|||
(module example-box mzscheme
|
||||
|
||||
(require
|
||||
(lib "mred.ss" "mred")
|
||||
(lib "class.ss")
|
||||
(lib "etc.ss")
|
||||
(lib "list.ss")
|
||||
(lib "embedded-gui.ss" "embedded-gui")
|
||||
(lib "match.ss")
|
||||
(lib "unit.ss")
|
||||
(lib "tool.ss" "drscheme")
|
||||
(lib "framework.ss" "framework")
|
||||
(lib "parser.ss" "profj")
|
||||
(lib "readerr.ss" "syntax")
|
||||
(lib "make-snipclass.ss" "test-suite" "private")
|
||||
(lib "string-constant.ss" "string-constants")
|
||||
"table.ss"
|
||||
"box-helpers.ss")
|
||||
|
||||
(provide example-box@ example-box^)
|
||||
|
||||
;; This is wrong but it's a good enough prototype
|
||||
(define re:java-id (regexp "[A-Za-z_]+"))
|
||||
(define min-field-width 50)
|
||||
|
||||
(define-signature example-box^ (example-box%))
|
||||
(define-unit example-box@
|
||||
(import drscheme:tool^)
|
||||
(export example-box^)
|
||||
|
||||
;; A readable-snip<%> of an examples box to allow GUI contruction of data examples.
|
||||
(define example-box%
|
||||
(class* (decorated-editor-snip-mixin editor-snip%) (readable-snip<%>)
|
||||
(inherit set-snipclass)
|
||||
|
||||
(init [examples-to-copy #f])
|
||||
|
||||
#;(any? (union integer? false?) (union integer? false?) (union integer? false?)
|
||||
. -> .
|
||||
any?)
|
||||
;; Called to get the syntax object representing this box
|
||||
(define/public read-special
|
||||
(opt-lambda (source (line false) (column false) (position false))
|
||||
#;(((is-a?/c text%))
|
||||
(natural-number? (union natural-number? false?))
|
||||
. opt-> .
|
||||
id?)
|
||||
;; Make an id out of the given text
|
||||
;; STATUS: I'm parsing the ID with a regexp that's probablly not
|
||||
;; the correct Java variable regexp. Furthermore, I need to parse
|
||||
;; it differently if it's a class name vs. field name.
|
||||
;;EDITED BY KATHY:: Commented this out because the result reading the example box
|
||||
;;is much different than Mike expected it would be
|
||||
#;(define (text->java-id atext)
|
||||
(let ([str (send atext get-text)])
|
||||
(match (regexp-match-positions re:java-id str 0 false)
|
||||
[((m-start . m-end))
|
||||
(datum->syntax-object
|
||||
false
|
||||
(string->symbol (substring str m-start m-end))
|
||||
(list atext
|
||||
1
|
||||
m-start
|
||||
(add1 m-start)
|
||||
(- m-end m-start)))]
|
||||
;; STATUS: Here I need to provide for a better form of
|
||||
;; highlighting using the GUI because there won't always
|
||||
;; be text in the box to highlight.
|
||||
[else (raise-read-error
|
||||
(string-constant profjBoxes-bad-java-id-error)
|
||||
atext 1 1 1 (send atext last-position))])))
|
||||
;;EDITED BY KATHY:: Same reason as stated above
|
||||
#;#`(begin #,@(send examples map-children
|
||||
(lambda (example)
|
||||
(with-syntax ([name (text->java-id
|
||||
(send example get-name))]
|
||||
[value (parse-expression
|
||||
(open-input-text-editor
|
||||
(send example get-value))
|
||||
(send example get-value)
|
||||
level)])
|
||||
#'(define name value)))))
|
||||
(syntax-property #`(parse-example-box (list #,@(send examples map-children
|
||||
(lambda (example)
|
||||
(with-syntax ([type (send example get-type)]
|
||||
[id (send example get-name)]
|
||||
[value (send example get-value)])
|
||||
#'(list type id value))))))
|
||||
'example-box #t)
|
||||
))
|
||||
|
||||
#;(-> void?)
|
||||
;; Gives this box the cursor focus
|
||||
(define/public (take-caret)
|
||||
(let ([first-box (send (send examples get-first-child) get-type)])
|
||||
(send pb set-caret-owner
|
||||
(send (send first-box get-admin) get-snip)
|
||||
'display)))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Saving and copying
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Writes the examples box to file
|
||||
(define/override (write f)
|
||||
(send examples write f))
|
||||
|
||||
#;((is-a?/c editor-stream-in%) . -> . void?)
|
||||
;; Reads the examples state in from an editor-stream
|
||||
(define/public (read-from-file f)
|
||||
(send examples read-from-file f))
|
||||
|
||||
#;(-> (is-a?/c test-case-box%))
|
||||
;; Makes a copy of this example box.
|
||||
(define/override (copy)
|
||||
(new example-box% (examples-to-copy examples)))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Layout
|
||||
|
||||
(define/override (get-color) "purple")
|
||||
|
||||
(field [pb (new aligned-pasteboard%)])
|
||||
(send pb lock-alignment true)
|
||||
(field [main (new vertical-alignment% (parent pb))]
|
||||
[header (new horizontal-alignment% (parent main))])
|
||||
|
||||
;; Since I don't have an icon I'll just center this for now and leave out the image
|
||||
(new horizontal-alignment% (parent header)) ; left spacer
|
||||
#;(new snip-wrapper% (parent header) (snip (make-object image-snip%)))
|
||||
(new embedded-message%
|
||||
(parent header)
|
||||
(label (string-constant profjBoxes-examples-label)))
|
||||
(new horizontal-alignment% (parent header)) ; right spacer
|
||||
|
||||
(field
|
||||
[examples (new (table example%)
|
||||
(parent main)
|
||||
(copy-constructor examples-to-copy))]
|
||||
[button-bar (new horizontal-alignment% (parent main))]
|
||||
[add-button (new embedded-text-button%
|
||||
(parent button-bar)
|
||||
(label (string-constant profjBoxes-add-new-example-button))
|
||||
(callback (lambda (b e) (send examples add-new))))])
|
||||
(super-new (editor pb))
|
||||
(unless examples-to-copy
|
||||
(send examples add-new))
|
||||
(send pb lock-alignment false)
|
||||
(set-snipclass sc)))
|
||||
|
||||
(define sc (make-snipclass example-box% "example-box%"))
|
||||
|
||||
;; An example layed out in a horizontal manner. Allows access to the pieces of an example.
|
||||
(define example%
|
||||
(class* horizontal-alignment% (table-item<%>)
|
||||
(inherit get-parent get-pasteboard next prev)
|
||||
(init (copy-constructor #f))
|
||||
|
||||
(field
|
||||
[program-editor%
|
||||
(cue-text-mixin
|
||||
(tabbable-text-mixin
|
||||
((drscheme:unit:get-program-editor-mixin)
|
||||
(editor:keymap-mixin text:basic%))))]
|
||||
[type (new (single-line-text-mixin program-editor%)
|
||||
(cue-text (if copy-constructor "" (string-constant profjBoxes-type)))
|
||||
(behavior '(on-char)))]
|
||||
[name (new (single-line-text-mixin program-editor%)
|
||||
(cue-text (if copy-constructor "" (string-constant profjBoxes-name)))
|
||||
(behavior '(on-char)))]
|
||||
[value (new program-editor%
|
||||
(cue-text (if copy-constructor "" (string-constant profjBoxes-value)))
|
||||
(behavior '(on-char)))])
|
||||
|
||||
#;(-> (is-a?/c text%))
|
||||
;; The first text in the item that can be typed into
|
||||
(define/public (get-first-text) (get-type))
|
||||
|
||||
(define/public (get-type) type)
|
||||
(define/public (get-name) name)
|
||||
(define/public (get-value) value)
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Write the example to file
|
||||
(define/public (write f)
|
||||
(for-each (lambda (t)
|
||||
(send* t
|
||||
(begin-edit-sequence)
|
||||
(clear-cue-text)
|
||||
(write-to-file f)
|
||||
(end-edit-sequence)))
|
||||
(list type name value)))
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Read the state of the example in from file
|
||||
(define/public (read-from-file f)
|
||||
(for-each (lambda (t)
|
||||
(send* t
|
||||
(begin-edit-sequence)
|
||||
(clear-cue-text)
|
||||
(read-from-file f)
|
||||
(end-edit-sequence)))
|
||||
(list type name value)))
|
||||
|
||||
(super-new)
|
||||
|
||||
(when copy-constructor
|
||||
(send (send copy-constructor get-type) copy-self-to type)
|
||||
(send (send copy-constructor get-name) copy-self-to name)
|
||||
(send (send copy-constructor get-value) copy-self-to value))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Tabbing
|
||||
|
||||
(when (is-a? (prev) example%)
|
||||
(set-tabbing (send (prev) get-value) type))
|
||||
(set-tabbing type name value)
|
||||
(if (is-a? (next) example%)
|
||||
(set-tabbing value (send (next) get-type))
|
||||
(send value set-ahead (lambda ()
|
||||
(send (get-parent) add-new))))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Layout
|
||||
|
||||
(send (get-pasteboard) lock-alignment true)
|
||||
(new snip-wrapper%
|
||||
(parent this)
|
||||
(snip (new editor-snip%
|
||||
(editor type)
|
||||
(min-width min-field-width))))
|
||||
(new snip-wrapper%
|
||||
(parent this)
|
||||
(snip (new editor-snip%
|
||||
(editor name)
|
||||
(min-width min-field-width))))
|
||||
(new embedded-message% (parent this) (label " = "))
|
||||
(new snip-wrapper%
|
||||
(parent this)
|
||||
(snip (new editor-snip%
|
||||
(editor value)
|
||||
(min-width min-field-width))))
|
||||
(new embedded-message% (parent this) (label " ; "))
|
||||
(new horizontal-alignment% (parent this)) ; spacer
|
||||
(new embedded-text-button%
|
||||
(parent this)
|
||||
(label "Delete")
|
||||
(callback (lambda (b e) (send (get-parent) delete-child this))))
|
||||
(send (get-pasteboard) lock-alignment false)
|
||||
))
|
||||
))
|
||||
|
|
@ -1,254 +0,0 @@
|
|||
(module interactions-box mzscheme
|
||||
|
||||
(require
|
||||
(lib "mred.ss" "mred")
|
||||
(lib "class.ss")
|
||||
(lib "etc.ss")
|
||||
(lib "list.ss")
|
||||
(lib "embedded-gui.ss" "embedded-gui")
|
||||
(lib "match.ss")
|
||||
(lib "unit.ss")
|
||||
(lib "tool.ss" "drscheme")
|
||||
(lib "framework.ss" "framework")
|
||||
(lib "readerr.ss" "syntax")
|
||||
(lib "parser.ss" "profj")
|
||||
(lib "string-constant.ss" "string-constants")
|
||||
(lib "text-syntax-object.ss" "test-suite" "private")
|
||||
(lib "print-to-text.ss" "test-suite" "private")
|
||||
(lib "make-snipclass.ss" "test-suite" "private")
|
||||
"table.ss")
|
||||
|
||||
(provide interactions-box@
|
||||
interactions-box^)
|
||||
|
||||
(define-signature interactions-box^ (interactions-box%))
|
||||
|
||||
(define-unit interactions-box@
|
||||
(import drscheme:tool^ text->syntax-object^)
|
||||
(export interactions-box^)
|
||||
(define interactions-box%
|
||||
(class* editor-snip% (readable-snip<%>)
|
||||
(inherit set-snipclass)
|
||||
(init [interactions-to-copy #f])
|
||||
|
||||
#;(any? (union integer? false?) (union integer? false?) (union integer? false?) . -> . any?)
|
||||
;; Called to get the syntax object representing this box
|
||||
(define/public read-special
|
||||
(opt-lambda (source (line false) (column false) (position false))
|
||||
#;((is-a?/c text%) . -> . syntax-object?)
|
||||
(define (text->syntax-object text)
|
||||
(match (text->syntax-objects text)
|
||||
[() (raise-read-error
|
||||
(string-constant profjBoxes-empty-error)
|
||||
source line #f position 1)]
|
||||
[(stx) stx]
|
||||
[(stx next rest-stx ...)
|
||||
(raise-read-error (string-constant profjBoxes-too-many-expressions-error)
|
||||
text
|
||||
(syntax-line next)
|
||||
(syntax-column next)
|
||||
(syntax-position next)
|
||||
(syntax-span next))]))
|
||||
;(lambda (level class-loc box-pos input-spec)
|
||||
(let ([level 'beginner] [class-loc #f] [box-pos #f] [input-spec #f])
|
||||
#`(begin
|
||||
#,@(send interactions map-children
|
||||
(lambda (interaction)
|
||||
(if (is-a? interaction interaction%)
|
||||
(with-syntax ([display-output
|
||||
(lambda (value)
|
||||
(send interaction display-output value))])
|
||||
#`(display-output
|
||||
#,(text->syntax-object (send interaction get-input))
|
||||
;#,(parse-interactions
|
||||
; (open-input-text-editor (send interaction get-input))
|
||||
; (send interaction get-input)
|
||||
; level)
|
||||
))
|
||||
#'(void))))))))
|
||||
|
||||
#;(-> void)
|
||||
;; tells the test-box to take the caret
|
||||
(define/public (take-caret)
|
||||
(let ([first-box (send (send interactions get-first-child) get-input)])
|
||||
(send pb set-caret-owner
|
||||
(send (send first-box get-admin) get-snip)
|
||||
'display)))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Reading/Writing
|
||||
|
||||
#;(-> (is-a?/c interactions-box%))
|
||||
;; Make an interaction box that is a copy of this interaction box
|
||||
(define/override (copy)
|
||||
(new interactions-box% (interactions-to-copy interactions)))
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Writes this interactions box to file
|
||||
(define/override (write f)
|
||||
(send interactions write f))
|
||||
|
||||
#;((is-a?/c editor-stream-in%) . -> . void?)
|
||||
;; Reads interactions from file
|
||||
(define/public (read-from-file f)
|
||||
(send interactions read-from-file f))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Layout
|
||||
|
||||
(field
|
||||
[pb (new aligned-pasteboard%)]
|
||||
[main (new vertical-alignment% (parent pb))]
|
||||
[header (new horizontal-alignment% (parent main))])
|
||||
|
||||
(new horizontal-alignment% (parent header)) ; left spacer
|
||||
(new snip-wrapper%
|
||||
(snip (make-object string-snip%
|
||||
(string-constant profjBoxes-interactions-label)))
|
||||
(parent header))
|
||||
(new horizontal-alignment% (parent header)) ; right spacer
|
||||
|
||||
(field [interactions (new (table interaction%)
|
||||
(parent main)
|
||||
(copy-constructor interactions-to-copy))])
|
||||
|
||||
(super-new (editor pb))
|
||||
(unless interactions-to-copy
|
||||
(send interactions add-new))
|
||||
(set-snipclass sc)))
|
||||
|
||||
(define sc (make-snipclass interactions-box% "interactions-box%"))
|
||||
|
||||
;; One interaction laid out horizontally
|
||||
(define interaction%
|
||||
(class* horizontal-alignment% (table-item<%>)
|
||||
(inherit get-parent next)
|
||||
(init [copy-constructor #f])
|
||||
|
||||
#;(-> (is-a?/c text%))
|
||||
;; The first text in the item that can be typed into
|
||||
(define/public (get-first-text) (get-input))
|
||||
|
||||
#;(-> (is-a?/c text%))
|
||||
;; The input of this interaction
|
||||
(define/public (get-input) input-text)
|
||||
|
||||
#;(-> void?)
|
||||
;; Resets the interaction to an inital state
|
||||
(define/public (reset)
|
||||
(send* output-text
|
||||
(lock false)
|
||||
(erase)
|
||||
(lock true))
|
||||
(send output show false))
|
||||
|
||||
#;(string? . -> . void?)
|
||||
;; Sets the output to the given value
|
||||
(define/public (display-output val)
|
||||
(let ([blue-text (new style-delta%)])
|
||||
(send blue-text set-delta-foreground "blue")
|
||||
(send* output-text
|
||||
(lock false)
|
||||
(change-style blue-text 'start 'end #f))
|
||||
;(print-to-text output-text (list val))
|
||||
(send* output-text
|
||||
(lock true))
|
||||
(send output show true)))
|
||||
|
||||
#;(-> void?)
|
||||
;; Insert a new interaction after this interaction
|
||||
(define/public (make-new)
|
||||
(send (get-parent) add-new this)
|
||||
(send (send (next) get-input) set-caret-owner false 'global))
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Writes the interaction to file
|
||||
(define/public (write f)
|
||||
(send input-text write-to-file f))
|
||||
|
||||
#;((is-a?/c editor-stream-in%) . -> . void?)
|
||||
;; Reads the interaction from file
|
||||
(define/public (read-from-file f)
|
||||
(send input-text read-from-file f))
|
||||
|
||||
(super-new)
|
||||
|
||||
(define program-editor%
|
||||
((drscheme:unit:get-program-editor-mixin)
|
||||
(interaction-text this)))
|
||||
|
||||
(field [input-text (new program-editor%)]
|
||||
[output-text (new text%)])
|
||||
|
||||
(when copy-constructor
|
||||
(send (send copy-constructor get-input) copy-self-to input-text))
|
||||
|
||||
(field [io (new vertical-alignment% (parent this))]
|
||||
[input (new horizontal-alignment% (parent io))])
|
||||
(new embedded-message% (label " > ") (parent input))
|
||||
(new snip-wrapper%
|
||||
(snip (new stretchable-editor-snip%
|
||||
(editor input-text)
|
||||
(stretchable-height false)
|
||||
(with-border? false)
|
||||
(min-width 100)))
|
||||
(parent input))
|
||||
(new embedded-text-button%
|
||||
(parent input)
|
||||
(label "Ctrl + Enter")
|
||||
(callback (lambda (b e) (make-new))))
|
||||
|
||||
(field [output (new vertical-alignment% (parent io) (show? false))])
|
||||
(new snip-wrapper%
|
||||
(snip (new stretchable-editor-snip%
|
||||
(editor output-text)
|
||||
(stretchable-height false)
|
||||
(with-border? false)))
|
||||
(parent output))
|
||||
))
|
||||
|
||||
#;((is-a? interaction%) . -> . (is-a?/c text%))
|
||||
;; A text that is a program editor and also has keybindings that move around the
|
||||
;; interactions from the given interaction
|
||||
(define (interaction-text interaction)
|
||||
(class scheme:text%
|
||||
|
||||
#;((is-a?/c interaction%) . -> . void?)
|
||||
;; Send the mouse cursor to the given interaction's input field
|
||||
;; NOTE: This function not considered harmful.
|
||||
(define (goto inter)
|
||||
(when (is-a? inter interaction%)
|
||||
(let ([text (send inter get-input)])
|
||||
(send text set-caret-owner false 'global))))
|
||||
|
||||
(field [movement-keymap (make-object keymap%)])
|
||||
|
||||
(send* movement-keymap
|
||||
(add-function "goto-next-interaction"
|
||||
(lambda (ignored event)
|
||||
(goto (send interaction next))))
|
||||
(map-function ":c:right" "goto-next-interaction")
|
||||
(add-function "goto-prev-interaction"
|
||||
(lambda (ignored event)
|
||||
(goto (send interaction prev))))
|
||||
(map-function ":c:left" "goto-prev-interaction")
|
||||
(add-function "make-new"
|
||||
(lambda (ignored event)
|
||||
(send interaction make-new)))
|
||||
(map-function ":c:return" "make-new")
|
||||
(add-function "delete"
|
||||
(lambda (ignored event)
|
||||
(let ([next (send interaction next)])
|
||||
(send (send interaction get-parent) delete-child interaction)
|
||||
(goto next))))
|
||||
(map-function ":c:delete" "delete"))
|
||||
|
||||
#;(-> (listof keymap%))
|
||||
;; the list of keymaps associated with this text
|
||||
(define/override (get-keymaps)
|
||||
(cons movement-keymap (super get-keymaps)))
|
||||
|
||||
(super-new)
|
||||
))
|
||||
))
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
(module table mzscheme
|
||||
|
||||
(require
|
||||
(lib "class.ss")
|
||||
(lib "embedded-gui.ss" "embedded-gui")
|
||||
(lib "etc.ss")
|
||||
(lib "contract.ss"))
|
||||
|
||||
;; An interface for things that can be items of a table
|
||||
(define table-item<%>
|
||||
(interface ()
|
||||
#;(-> (is-a?/c text%))
|
||||
;; The first text in the item that can be typed into
|
||||
get-first-text
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Writes the interaction to file
|
||||
write
|
||||
|
||||
#;((is-a?/c editor-stream-in%) . -> . void?)
|
||||
;; Reads the interaction from file
|
||||
read-from-file))
|
||||
|
||||
(provide/contract
|
||||
(table ((implementation?/c table-item<%>) . -> . (implementation?/c alignment<%>)))
|
||||
(table-item<%> interface?))
|
||||
|
||||
;; A table for holding element that must be accessed end writen to file
|
||||
(define (table table-item-class%)
|
||||
(class vertical-alignment%
|
||||
(inherit get-pasteboard)
|
||||
(inherit-field head tail)
|
||||
(init [copy-constructor #f])
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Accessors
|
||||
|
||||
#;(-> (is-a?/c example%))
|
||||
;; The first example in the example field
|
||||
(define/public (get-first-child)
|
||||
(send head next))
|
||||
|
||||
#;(((is-a?/c example%) . -> . any?) . -> . (listof any?))
|
||||
;; A list of the results of applying f to each example in the examples field.
|
||||
(define/public (map-children f)
|
||||
(send head map-to-list f))
|
||||
|
||||
#;(((is-a?/c example%) . -> . void?) . -> . void?)
|
||||
;; For eaches over the children
|
||||
(define/public (for-each-child f)
|
||||
(send head for-each f))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Reading/Writing
|
||||
|
||||
#;((is-a?/c editor-stream-out%) . -> . void?)
|
||||
;; Write the examples to file
|
||||
(define/public (write f)
|
||||
(let ([num-items (length (map-children void))])
|
||||
(send f put num-items)
|
||||
(for-each-child (lambda (c) (send c write f)))))
|
||||
|
||||
#;((is-a?/c editor-stream-in%) . -> . void?)
|
||||
;; Reads the examples field's state in from the stream
|
||||
(define/public (read-from-file f)
|
||||
(send (get-pasteboard) lock-alignment true)
|
||||
;; Delete all examples
|
||||
(send head for-each (lambda (c) (send c show false)))
|
||||
(send head next tail)
|
||||
(send tail prev head)
|
||||
;; Read in all the examples to the file.
|
||||
(let* ([num-examples (box 0)])
|
||||
(send f get num-examples)
|
||||
(let loop ([n (unbox num-examples)])
|
||||
(unless (zero? n)
|
||||
(let ([example (new table-item-class% (parent this))])
|
||||
(send example read-from-file f)
|
||||
(loop (sub1 n))))))
|
||||
(send (get-pasteboard) lock-alignment false))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Adding
|
||||
|
||||
#;(-> (is-a?/c alignment<%>))
|
||||
;; Adds a new example to the examples field.
|
||||
(define/public add-new
|
||||
(opt-lambda ((after #f))
|
||||
(let ([item (new table-item-class% (parent this) (after after))])
|
||||
(send (send item get-first-text) set-caret-owner false 'global)
|
||||
item)))
|
||||
|
||||
#;((is-a?/c example%) . -> . (is-a?/c example%))
|
||||
;; Adds a new example that is a copy of the given example
|
||||
(define (add-new-copy example-to-copy)
|
||||
(new table-item-class%
|
||||
(parent this)
|
||||
(copy-constructor example-to-copy)))
|
||||
|
||||
;;;;;;;;;;
|
||||
;; Constructor
|
||||
|
||||
(super-new)
|
||||
(when copy-constructor
|
||||
(send (get-pasteboard) lock-alignment true)
|
||||
(send copy-constructor for-each-child add-new-copy)
|
||||
(send (get-pasteboard) lock-alignment false))
|
||||
))
|
||||
)
|
|
@ -1,70 +0,0 @@
|
|||
(module tool mzscheme
|
||||
|
||||
(provide tool@)
|
||||
|
||||
(require
|
||||
(lib "class.ss") (lib "contract.ss")
|
||||
(lib "mred.ss" "mred")
|
||||
(lib "unit.ss")
|
||||
(lib "string-constant.ss" "string-constants")
|
||||
(lib "tool.ss" "drscheme")
|
||||
"private/example-box.ss"
|
||||
"private/interactions-box.ss"
|
||||
(lib "text-syntax-object.ss" "test-suite" "private"))
|
||||
|
||||
(define-unit extentions@
|
||||
(import drscheme:tool^ example-box^ interactions-box^)
|
||||
(export drscheme:tool-exports^)
|
||||
(define (phase1) (void))
|
||||
(define (phase2) (void))
|
||||
|
||||
(define (frame-mixin %)
|
||||
(class %
|
||||
(inherit get-edit-target-object get-special-menu register-capability-menu-item)
|
||||
|
||||
;; this function is copied from the drscheme/private/unit.ss file
|
||||
(define (has-editor-on-demand menu-item)
|
||||
(let ([edit (get-edit-target-object)])
|
||||
(send menu-item enable (and edit (is-a? edit editor<%>)))))
|
||||
|
||||
(super-new)
|
||||
|
||||
(new menu-item%
|
||||
(label (string-constant profjBoxes-insert-java-examples))
|
||||
(parent (get-special-menu))
|
||||
(callback
|
||||
(lambda (menu event)
|
||||
(let ([box (new example-box%)]
|
||||
[text (get-edit-target-object)])
|
||||
(when text
|
||||
(send text begin-edit-sequence)
|
||||
(send text insert box)
|
||||
(send box take-caret)
|
||||
(send text end-edit-sequence)))))
|
||||
(demand-callback has-editor-on-demand))
|
||||
(register-capability-menu-item 'profj:special:java-examples-box (get-special-menu))
|
||||
|
||||
#;(new menu-item%
|
||||
(label (string-constant profjBoxes-insert-java-interactions))
|
||||
(parent (get-special-menu))
|
||||
(callback
|
||||
(lambda (menu event)
|
||||
(let ([box (new interactions-box%)]
|
||||
[text (get-edit-target-object)])
|
||||
(when text
|
||||
(send text begin-edit-sequence)
|
||||
(send text insert box)
|
||||
(send box take-caret)
|
||||
(send text end-edit-sequence)))))
|
||||
(demand-callback has-editor-on-demand))
|
||||
))
|
||||
|
||||
(drscheme:get/extend:extend-unit-frame frame-mixin)
|
||||
(drscheme:language:register-capability 'profj:special:java-examples-box (flat-contract boolean?) #f))
|
||||
|
||||
(define tool@
|
||||
(compound-unit/infer
|
||||
(import drscheme:tool^)
|
||||
(export drscheme:tool-exports^)
|
||||
(link extentions@ example-box@ interactions-box@ text->syntax-object@)))
|
||||
)
|
Loading…
Reference in New Issue
Block a user