DrRacket: add support for icon files, etc. for created executables
This commit is contained in:
parent
ae6fc3f47f
commit
28fbd2dde2
|
@ -694,6 +694,7 @@
|
||||||
(let* ([type (car executable-specs)]
|
(let* ([type (car executable-specs)]
|
||||||
[base (cadr executable-specs)]
|
[base (cadr executable-specs)]
|
||||||
[executable-filename (caddr executable-specs)]
|
[executable-filename (caddr executable-specs)]
|
||||||
|
[aux (cadddr executable-specs)]
|
||||||
[create-executable
|
[create-executable
|
||||||
(case type
|
(case type
|
||||||
[(launcher) create-module-based-launcher]
|
[(launcher) create-module-based-launcher]
|
||||||
|
@ -729,7 +730,8 @@
|
||||||
;; (union #t 'mzscheme 'mred)
|
;; (union #t 'mzscheme 'mred)
|
||||||
;; -> (union #f (list (union 'no-show 'launcher 'stand-alone 'distribution)
|
;; -> (union #f (list (union 'no-show 'launcher 'stand-alone 'distribution)
|
||||||
;; (union 'no-show 'mzscheme 'mred)
|
;; (union 'no-show 'mzscheme 'mred)
|
||||||
;; string[filename]))
|
;; string[filename]
|
||||||
|
;; (listof (cons/c symbol? any/c))))
|
||||||
(define (create-executable-gui parent program-filename show-type show-base)
|
(define (create-executable-gui parent program-filename show-type show-base)
|
||||||
(define dlg (make-object dialog% (string-constant create-executable-title) parent))
|
(define dlg (make-object dialog% (string-constant create-executable-title) parent))
|
||||||
(define filename-panel (make-object horizontal-panel% dlg))
|
(define filename-panel (make-object horizontal-panel% dlg))
|
||||||
|
@ -779,6 +781,53 @@
|
||||||
[(1) 'gracket]))
|
[(1) 'gracket]))
|
||||||
(reset-filename-suffix))))))
|
(reset-filename-suffix))))))
|
||||||
|
|
||||||
|
(define aux-panel (new group-box-panel%
|
||||||
|
[label ""]
|
||||||
|
[parent type/base-panel]))
|
||||||
|
(define aux-paths (new (class list-box%
|
||||||
|
(inherit append)
|
||||||
|
(super-new)
|
||||||
|
(define/override (on-drop-file p)
|
||||||
|
(add-aux p)))
|
||||||
|
[parent aux-panel]
|
||||||
|
[label (string-constant files-for-icons-etc)]
|
||||||
|
[choices '()]
|
||||||
|
[style '(vertical-label multiple)]
|
||||||
|
[min-height 80]
|
||||||
|
[callback (lambda (p e) (enable-minus))]))
|
||||||
|
(send aux-paths accept-drop-files #t)
|
||||||
|
(define aux-button-panel (new horizontal-pane%
|
||||||
|
[parent aux-panel]
|
||||||
|
[alignment '(center center)]
|
||||||
|
[stretchable-height #f]))
|
||||||
|
(new button%
|
||||||
|
[parent aux-button-panel]
|
||||||
|
[label "+"]
|
||||||
|
[callback (lambda (b e)
|
||||||
|
(define p (get-file-list #f dlg))
|
||||||
|
(when p
|
||||||
|
(for-each add-aux p)))])
|
||||||
|
(define (add-aux p)
|
||||||
|
(define v (extract-aux-from-path p))
|
||||||
|
(send aux-paths append
|
||||||
|
(format "~a: ~a"
|
||||||
|
(if (null? v)
|
||||||
|
"???"
|
||||||
|
(caar v))
|
||||||
|
p)
|
||||||
|
p))
|
||||||
|
(define minus-button
|
||||||
|
(new button%
|
||||||
|
[parent aux-button-panel]
|
||||||
|
[label "-"]
|
||||||
|
[callback (lambda (b e)
|
||||||
|
(for ([i (in-list (sort (send aux-paths get-selections) >))])
|
||||||
|
(send aux-paths delete i))
|
||||||
|
(enable-minus))]))
|
||||||
|
(define (enable-minus)
|
||||||
|
(send minus-button enable (pair? (send aux-paths get-selections))))
|
||||||
|
(enable-minus)
|
||||||
|
|
||||||
(define (reset-filename-suffix)
|
(define (reset-filename-suffix)
|
||||||
(let ([s (send filename-text-field get-value)])
|
(let ([s (send filename-text-field get-value)])
|
||||||
(unless (string=? s "")
|
(unless (string=? s "")
|
||||||
|
@ -905,7 +954,10 @@
|
||||||
[(0) 'mzscheme]
|
[(0) 'mzscheme]
|
||||||
[(1) 'mred])
|
[(1) 'mred])
|
||||||
'no-show)
|
'no-show)
|
||||||
(send filename-text-field get-value))]))
|
(send filename-text-field get-value)
|
||||||
|
(apply append
|
||||||
|
(for/list ([i (in-range (send aux-paths get-number))])
|
||||||
|
(extract-aux-from-path (send aux-paths get-data i)))))]))
|
||||||
|
|
||||||
(define (normalize-mode mode)
|
(define (normalize-mode mode)
|
||||||
(case mode
|
(case mode
|
||||||
|
|
|
@ -527,7 +527,8 @@
|
||||||
(when executable-specs
|
(when executable-specs
|
||||||
(let ([executable-type (list-ref executable-specs 0)]
|
(let ([executable-type (list-ref executable-specs 0)]
|
||||||
[gui? (eq? 'mred (list-ref executable-specs 1))]
|
[gui? (eq? 'mred (list-ref executable-specs 1))]
|
||||||
[executable-filename (list-ref executable-specs 2)])
|
[executable-filename (list-ref executable-specs 2)]
|
||||||
|
[aux (list-ref executable-specs 3)])
|
||||||
(with-handlers ([(λ (x) #f) ;exn:fail?
|
(with-handlers ([(λ (x) #f) ;exn:fail?
|
||||||
(λ (x)
|
(λ (x)
|
||||||
(message-box
|
(message-box
|
||||||
|
@ -543,6 +544,7 @@
|
||||||
(create-embedding-executable
|
(create-embedding-executable
|
||||||
exe-name
|
exe-name
|
||||||
#:gracket? gui?
|
#:gracket? gui?
|
||||||
|
#:aux aux
|
||||||
#:verbose? #f
|
#:verbose? #f
|
||||||
#:modules (list (list #f program-filename))
|
#:modules (list (list #f program-filename))
|
||||||
#:configure-via-first-module? #t
|
#:configure-via-first-module? #t
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#lang scribble/doc
|
#lang scribble/doc
|
||||||
@(require "common.rkt"
|
@(require "common.rkt"
|
||||||
scribble/decode scribble/eval scribble/struct scribble/racket
|
scribble/decode scribble/eval scribble/struct scribble/racket
|
||||||
(for-label racket/gui/base framework)
|
(for-label racket/gui/base framework compiler/embed)
|
||||||
setup/getinfo racket/pretty string-constants)
|
setup/getinfo racket/pretty string-constants)
|
||||||
|
|
||||||
@(define (ioinputfont . s)
|
@(define (ioinputfont . s)
|
||||||
|
@ -902,6 +902,29 @@ disable debugging, open the language dialog, click the @onscreen{Show
|
||||||
Details} button, and select @onscreen{No debugging or profiling}, if
|
Details} button, and select @onscreen{No debugging or profiling}, if
|
||||||
it is available.
|
it is available.
|
||||||
|
|
||||||
|
When you create an executable in some languages, you can supply
|
||||||
|
additional files to determine the executable's icon and similar
|
||||||
|
properties, depending on the platform. The file's purpose is
|
||||||
|
determined by its suffix:
|
||||||
|
|
||||||
|
@itemlist[
|
||||||
|
|
||||||
|
@item{On Windows, supply an @filepath{.ico} file for an icon. Only
|
||||||
|
16x16, 32x32, or 48x48 images from the @filepath{.ico} file are
|
||||||
|
used.}
|
||||||
|
|
||||||
|
@item{On Mac OS X, supply an @filepath{.icns} file for an icon. You
|
||||||
|
can set the application's creator with an @filepath{.creator}
|
||||||
|
file (whose first four bytes are used), and you can set
|
||||||
|
documents for the application through a @filepath{.utiexports}
|
||||||
|
file (see @racket['uti-exports] in
|
||||||
|
@racket[create-embedding-executable] for more information).}
|
||||||
|
|
||||||
|
@item{On Unix, supply a @filepath{.png} or @filepath{.ico} file for
|
||||||
|
an icon.}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
@section[#:tag "follow-log"]{Following Log Messages}
|
@section[#:tag "follow-log"]{Following Log Messages}
|
||||||
|
|
||||||
The @onscreen{Show Log} menu item in the @onscreen{View} menu opens
|
The @onscreen{Show Log} menu item in the @onscreen{View} menu opens
|
||||||
|
|
|
@ -1076,6 +1076,7 @@ please adhere to these guidelines:
|
||||||
(executable-base "Base")
|
(executable-base "Base")
|
||||||
(filename "Filename: ")
|
(filename "Filename: ")
|
||||||
(create "Create")
|
(create "Create")
|
||||||
|
(files-for-icons-etc "Files for icons, etc.")
|
||||||
(please-specify-a-filename "Please specify a filename to create.")
|
(please-specify-a-filename "Please specify a filename to create.")
|
||||||
(~a-must-end-with-~a
|
(~a-must-end-with-~a
|
||||||
"The ~a filename\n\n ~a\n\nis illegal. The filename must end with \".~a\".")
|
"The ~a filename\n\n ~a\n\nis illegal. The filename must end with \".~a\".")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user