adjust DrRacket logging support following comments from Neil Van Dyke

- use the same font/size as the definitions/interactions window
- add a checkbox to control scrolling behavior and,
- when scrolling, scroll to the begining of the line, not the end
This commit is contained in:
Robby Findler 2012-12-26 09:03:43 -06:00
parent fa85d30773
commit 0a6d8822b0
4 changed files with 29 additions and 6 deletions

View File

@ -64,6 +64,8 @@
(application:current-app-name (string-constant drscheme))
(preferences:set-default 'drracket:logger-scroll-to-bottom? #t boolean?)
(preferences:set-default 'drracket:submodules-to-choose-from
'((main) (test))
(cons/c (list/c 'main)

View File

@ -1264,7 +1264,7 @@ TODO
(thread
(λ ()
(struct gui-event (start? msec name) #:prefab)
(struct gui-event (start end name) #:prefab)
;; forward system events the user's logger, and record any
;; events that happen on the user's logger to show in the GUI
(let ([sys-evt (make-log-receiver drracket:init:system-logger 'debug)]

View File

@ -1465,8 +1465,9 @@ module browser threading seems wrong.
;; it becomes a tab-panel, it is always a tab-panel (altho the tab panel might not always be shown)
(define logger-gui-tab-panel #f)
(define logger-gui-canvas #f)
(define logger-checkbox #f)
;; logger-gui-text: (or/c #f (is-a?/c tab-panel%))
;; logger-gui-text: (or/c #f (is-a?/c text%))
;; this is #f when the GUI has not been built or when the logging panel is hidden
;; in that case, the logging messages aren't begin saved in an editor anywhere
(define logger-gui-text #f)
@ -1523,6 +1524,12 @@ module browser threading seems wrong.
(new-logger-text)
(set! logger-gui-canvas
(new editor-canvas% [parent logger-panel] [editor logger-gui-text]))
(set! logger-checkbox
(new check-box%
[label (string-constant logger-scroll-on-output)]
[callback (λ (a b) (preferences:set 'drracket:logger-scroll-to-bottom? (send logger-checkbox get-value)))]
[parent logger-panel]
[value (preferences:get 'drracket:logger-scroll-to-bottom?)]))
(send logger-menu-item set-label (string-constant hide-log))
(update-logger-window #f)
(send logger-parent-panel change-children (lambda (l) (append l (list logger-panel)))))])
@ -1536,7 +1543,9 @@ module browser threading seems wrong.
(member logger-panel (send logger-parent-panel get-children))))
(define/private (new-logger-text)
(set! logger-gui-text (new (text:hide-caret/selection-mixin text:line-spacing%)))
(set! logger-gui-text (new (text:hide-caret/selection-mixin
(editor:standard-style-list-mixin
text:line-spacing%))))
(send logger-gui-text lock #t))
(define/public (update-logger-window command)
@ -1560,6 +1569,9 @@ module browser threading seems wrong.
(let ([msg (cdr command)])
(when (or (not level)
(eq? (vector-ref msg 0) level))
(define scroll? (if (object? logger-checkbox)
(send logger-checkbox get-value)
#t))
(send logger-gui-text begin-edit-sequence)
(send logger-gui-text lock #f)
(case (car command)
@ -1567,15 +1579,23 @@ module browser threading seems wrong.
[(clear-last-and-add-line)
(send logger-gui-text delete
0
(send logger-gui-text paragraph-start-position 1))])
(send logger-gui-text paragraph-start-position 1)
#f)])
(send logger-gui-text insert
"\n"
(send logger-gui-text last-position)
(send logger-gui-text last-position))
(send logger-gui-text last-position)
#f)
(send logger-gui-text insert
(vector-ref msg 1)
(send logger-gui-text last-position)
(send logger-gui-text last-position))
(send logger-gui-text last-position)
#f)
(when scroll?
(send logger-gui-text scroll-to-position
(send logger-gui-text
paragraph-start-position
(send logger-gui-text last-paragraph))))
(send logger-gui-text end-edit-sequence)
(send logger-gui-text lock #t)))]
[else

View File

@ -312,6 +312,7 @@ please adhere to these guidelines:
(show-log "Show &Log")
(hide-log "Hide &Log")
(logging-all "All") ;; in the logging window in drscheme, shows all logs simultaneously
(logger-scroll-on-output "Scroll to show new output") ; a checkbox in the logger pane
;; modes
(mode-submenu-label "Modes")