From 7b40de884990974fa626c1abd7cb4d20ba777a5c Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 2 Jul 2002 03:36:09 +0000 Subject: [PATCH] .. original commit: 4079dc8a87a4b3754da97f60457162c0c04ad005 --- collects/framework/framework.ss | 6 ++++++ collects/framework/private/frame.ss | 4 ++++ collects/framework/private/handler.ss | 17 ++++++++++++----- collects/framework/private/main.ss | 13 ++++++++++++- collects/framework/private/preferences.ss | 16 ++++++++++++++++ collects/framework/private/sig.ss | 3 ++- 6 files changed, 52 insertions(+), 7 deletions(-) diff --git a/collects/framework/framework.ss b/collects/framework/framework.ss index e7d92193..b58f4439 100644 --- a/collects/framework/framework.ss +++ b/collects/framework/framework.ss @@ -732,6 +732,12 @@ (filename start end) "Sets the selection of the recently opened file to" "\\var{start} and \\var{end}.") + + (handler:size-recently-opened-files + (number? . -> . void?) + (num) + "Sizes the 'framework:recently-opened-files/pos preference" + "list length to \\var{num}.") (icon:get-paren-highlight-bitmap (-> (is-a?/c bitmap%)) diff --git a/collects/framework/private/frame.ss b/collects/framework/private/frame.ss index 9c6d427c..6984074f 100644 --- a/collects/framework/private/frame.ss +++ b/collects/framework/private/frame.ss @@ -897,6 +897,7 @@ [canceled? (cancel-due-to-unsaved-changes editor)]) (unless canceled? (send editor begin-edit-sequence) + (send editor lock #f) (send editor set-filename #f) (send editor erase) (send editor set-modified #f) @@ -965,7 +966,10 @@ filename (send editor get-start-position) (send editor get-end-position)))))) + (send editor begin-edit-sequence) + (send editor lock #f) (send editor load-file filename) + (send editor end-edit-sequence) (void)))) (inherit get-label) diff --git a/collects/framework/private/handler.ss b/collects/framework/private/handler.ss index 5d056037..2a4eb453 100644 --- a/collects/framework/private/handler.ss +++ b/collects/framework/private/handler.ss @@ -144,8 +144,6 @@ ;; type recent-list-item = (list/p string? number? number?) - (define recent-max-count 50) - ;; add-to-recent : string -> void (define (add-to-recent filename) (let* ([old-list (preferences:get 'framework:recently-opened-files/pos)] @@ -157,7 +155,7 @@ (if old-ent (cadr old-ent) 0) (if old-ent (caddr old-ent) 0))] [added-in (cons new-ent (remove new-ent old-list compare-recent-list-items))] - [new-recent (size-down added-in)]) + [new-recent (size-down added-in (preferences:get 'framework:recent-max-count))]) (preferences:set 'framework:recently-opened-files/pos new-recent))) ;; compare-recent-list-items : recent-list-item recent-list-item -> boolean @@ -167,8 +165,8 @@ ;; size-down : (listof X) -> (listof X)[< recent-max-count] ;; takes a list of stuff and returns the ;; front of the list, up to `recent-max-count' items - (define (size-down new-recent) - (let loop ([n recent-max-count] + (define (size-down new-recent n) + (let loop ([n n] [new-recent new-recent]) (cond [(zero? n) null] @@ -178,6 +176,15 @@ (loop (- n 1) (cdr new-recent)))]))) + ;; size-recently-opened-files : number -> void + ;; sets the recently-opened-files/pos preference + ;; to a size limited by `n' + (define (size-recently-opened-files n) + (preferences:set + 'framework:recently-opened-files/pos + (size-down (preferences:get 'framework:recently-opened-files/pos) + n))) + ;; set-recent-position : string number number -> void ;; updates the recent menu preferences ;; with the positions `start' and `end' diff --git a/collects/framework/private/main.ss b/collects/framework/private/main.ss index 68d21fef..9405f9c7 100644 --- a/collects/framework/private/main.ss +++ b/collects/framework/private/main.ss @@ -14,9 +14,20 @@ (import mred^ [preferences : framework:preferences^] [exit : framework:exit^] - [group : framework:group^]) + [group : framework:group^] + [handler : framework:handler^]) ;; preferences + (preferences:set-default 'framework:recent-max-count + 50 + (lambda (x) (and (number? x) + (x . > . 0) + (integer? x)))) + (preferences:add-callback + 'framework:recent-max-count + (lambda (p v) + (handler:size-recently-opened-files v))) + (preferences:set-default 'framework:last-url-string "" string?) (preferences:set-default 'framework:recently-opened-sort-by 'age (lambda (x) (or (eq? x 'age) (eq? x 'name)))) diff --git a/collects/framework/private/preferences.ss b/collects/framework/private/preferences.ss index cec69b6f..757965c8 100644 --- a/collects/framework/private/preferences.ss +++ b/collects/framework/private/preferences.ss @@ -374,6 +374,21 @@ (lambda (p v) (send c set-value (pref->bool v)))))) + (define (make-recent-items-slider parent) + (let ([slider (instantiate slider% () + (parent parent) + (label (string-constant number-of-open-recent-items)) + (min-value 1) + (max-value 100) + (init-value (get 'framework:recent-max-count)) + (callback (lambda (slider y) + (set 'framework:recent-max-count + (send slider get-value)))))]) + (add-callback + 'framework:recent-max-count + (lambda (p v) + (send slider set-value v))))) + (define (add-scheme-checkbox-panel) (letrec ([add-scheme-checkbox-panel (lambda () @@ -403,6 +418,7 @@ (add-checkbox-panel (string-constant editor-prefs-panel-label) (lambda (editor-panel) + (make-recent-items-slider editor-panel) (make-check editor-panel 'framework:autosaving-on? (string-constant auto-save-files) diff --git a/collects/framework/private/sig.ss b/collects/framework/private/sig.ss index 05a33023..9a1613e9 100644 --- a/collects/framework/private/sig.ss +++ b/collects/framework/private/sig.ss @@ -384,7 +384,8 @@ install-recent-items add-to-recent set-recent-position - set-recent-items-frame-superclass)) + set-recent-items-frame-superclass + size-recently-opened-files)) (define-signature framework:handler^ ((open framework:handler-class^) (open framework:handler-fun^)))