391 lines
12 KiB
Plaintext
391 lines
12 KiB
Plaintext
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
|
|
|
_embedded_gui.ss_
|
|
|
|
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
|
|
|
The embedded gui collection provides a class hierarchy for
|
|
creating graphical boxes within mred's editors with geometry
|
|
management that mirrors that of vertical-panel% and
|
|
horizontal-panel%
|
|
|
|
============================================================
|
|
|
|
The _aligned-pasteboard%_ class is derived from pasteboard%
|
|
It implements alignment-parent<%> and acts as the top of an
|
|
alignment<%> tree.
|
|
|
|
============================================================
|
|
|
|
_alignment<%> is derived from dllist<%> and requires the
|
|
following additional methods.
|
|
|
|
> (send an-alignment get-parent) -> (is-a?/c alignment-parent<%>)
|
|
|
|
The parent of the alignment in the tree.
|
|
|
|
> (send an-alignment set-min-sizes) -> void
|
|
|
|
Tells the alignment that its sizes should be calculated
|
|
|
|
> (send an-alignment align x-offset y-offset width height) -> void
|
|
x-offset : nonnegative?
|
|
y-offset : nonnegative?
|
|
width : nonnegative?
|
|
height : nonnegative?
|
|
|
|
Tells the alignment to align its children on the pasteboard
|
|
in the given rectangle defined by a width, height and a top
|
|
left corner point given as offsets into the pasteboards top
|
|
left corner.
|
|
|
|
> (send an-alignment get-min-width) -> nonnegative?
|
|
|
|
The minimum width this alignment must be
|
|
|
|
> (send an-alignment get-min-height) -> nonnegative?
|
|
|
|
The minimum height this alignment must be
|
|
|
|
> (send an-alignment stretchable-width value) -> void
|
|
value : boolean?
|
|
|
|
Sets the property of stretchability in the x dimension
|
|
|
|
> (send an-alignment stretchable-width) -> boolean?
|
|
|
|
True if the alignment can be stretched in the x dimension
|
|
|
|
> (send an-alignment stretchable-height value) -> void
|
|
value : boolean?
|
|
|
|
Sets the property of stretchability in the y dimension
|
|
|
|
> (send an-alignment stretchable-height) -> boolean?
|
|
|
|
True if the alignment can be stretched in the y dimension
|
|
|
|
> (send an-alignment show/hide show?) -> void
|
|
show? : boolean?
|
|
|
|
Tells the alignment to show or hide its children
|
|
|
|
> (send an-alignment show show?) -> void
|
|
show? : boolean?
|
|
|
|
Tells the alignment that its show state is the given value
|
|
and it should show or hide its children accordingly.
|
|
|
|
============================================================
|
|
|
|
_alignment-parent<%>_s implement the following methods.
|
|
|
|
> (send an-alignment-parent get-pasteboard) -> (is-a?/c pasteboard%)
|
|
|
|
The pasteboard that this alignment is being displayed to
|
|
|
|
> (send an-alignment-parent add-child child) -> void
|
|
child : (is-a?/c alignment<%>)
|
|
after : (union (is-a?/c alignment<%>) false?) = false
|
|
|
|
Add the given alignment as a child after the existing child
|
|
|
|
> (send an-alignment-parent delete-child child) -> void
|
|
child : (is-a?/c alignment<%>)
|
|
|
|
Deletes a child from the alignments
|
|
|
|
> (send an-alignment-parent is-shown?) -> boolean?
|
|
|
|
True if the alignment is being shown (accounting for its parent being shown)
|
|
|
|
============================================================
|
|
|
|
The _stretchable-snip<%>_ interface must be implemented
|
|
by any snip class who's objects will be stretchable when
|
|
inserted into an aligned-pasteboard<%> within a
|
|
snip-wrapper%.
|
|
|
|
> (send a-stretchable-snip get-aligned-min-width) -> nonnegative?
|
|
|
|
The minimum width that the snip can be resized to
|
|
|
|
> (send a-stretchable-snip get-aligned-min-height) -> nonnegative?
|
|
|
|
The minimum height that the snip can be resized to
|
|
|
|
> (send a-stretchable-snip stretchable-width) -> boolean?
|
|
|
|
Whether or not the snip can be stretched in the X dimension
|
|
|
|
> (send a-stretchable-snip stretchable-height) -> boolean?
|
|
|
|
Whether or not the snip can be stretched in the Y dimension
|
|
|
|
============================================================
|
|
|
|
_dllist<%>_ is an interface which makes a class a
|
|
doubly-linked list and requires the following methods
|
|
|
|
> (send a-dlllist next) -> (is-a?/c dllist<%>)
|
|
|
|
The next item in the list
|
|
|
|
> (send a-dllist next new-next) -> void
|
|
new-next : (is-a?/c dllist<%>)
|
|
|
|
Set the next field to be the given dllist
|
|
|
|
> (send a-dllist prev) -> (is-a?/c dllist<%>)
|
|
|
|
The previous item in the list
|
|
|
|
> (send a-dllist prev new-prev) -> void
|
|
new-prev : (is-a?/c dllist<%>)
|
|
|
|
Set the previous field to be the given dllist
|
|
|
|
> (send a-dllist for-each f) -> void
|
|
f : ((is-a?/c dllist<%>) . -> . void)
|
|
|
|
Applies f to every element of the dllist
|
|
|
|
> (send a-dllist map-to-list f) -> (listof any?)
|
|
f : ((is-a?/c dllist<%>) . -> . any?)
|
|
|
|
A Scheme list of the results of applying f to every element
|
|
of the dllist.
|
|
|
|
============================================================
|
|
|
|
_vertical-alignment%_ and _horizontal-alignment%_ are
|
|
geometry management classes of the embedded-gui toolkit. They
|
|
implement alignment<%> and alignment-parent<%> and are
|
|
instantiated as follows
|
|
|
|
> (new vertical-alignment% (parent _) [(show? _)] [(after _)])
|
|
parent : (is-a?/c alignment-parent<%>)
|
|
show? : boolean? = true
|
|
after : (union (is-a?/c alignment<%>) false?) = false
|
|
|
|
Inserts a new vertical alignment into the parent optionally
|
|
after a given alignment also in the parent. The alignment
|
|
can be initially shown or hidden.
|
|
|
|
============================================================
|
|
|
|
_snip-wrapper%_ is an alignment<%> that introduces a snip
|
|
into the alignment tree. snip%s are not instantiated with
|
|
a parent nor do they implement alignment<%>. snip-wrapper%
|
|
is an adapter for snip%s.
|
|
|
|
> (new snip-wrapper% (parent _) (snip _))
|
|
parent : (is-a?/c alignment-parent<%>)
|
|
snip : (is-a?/c snip%)
|
|
|
|
============================================================
|
|
|
|
_text-button-snip%_, button-snip%, and toggle-button-snip%
|
|
are three derivative snip% classes that act like buttons
|
|
when inserted into an editor.
|
|
|
|
Note: In order to allow the buttons to be pushed the editor
|
|
in which they appear must forward clicks to them properly.
|
|
(see click-forwarding-editor-mixin)
|
|
|
|
> (new text-button-snip% (label _) (callback _))
|
|
label : string?
|
|
callback : ((is-a?/c text-button-snip%) (is-a?/c event%) . -> . void)
|
|
|
|
> (new button-snip% (images _) (callback _))
|
|
images : (pair string? string?)
|
|
callback : ((is-a?/c button-snip%) (is-a?/c event%) . -> . void)
|
|
|
|
The images argument is a pair filenames to be load as the
|
|
button image. The car of the pair is the normal button and the
|
|
cdr of the pair is the depressed button image.
|
|
|
|
> (new toggle-button-snip% (images-off _) (images-on _) (turn-off _) (turn-on _) [(state _)])
|
|
images-off : (pair string string)
|
|
images-on : (pair string string)
|
|
turn-on : ((is-a?/c toggle-button-snip%) (is-a?/c event%) . -> . void)
|
|
turn-off : ((is-a?/c toggle-button-snip%) (is-a?/c event%) . -> . void)
|
|
state : (symbols 'on 'off) = 'on
|
|
|
|
Like button-snip but given two pairs of images, images-on
|
|
and images-off, and two callback, turn-on and turn-off. The
|
|
initial can be passed as an argument but is by default on.
|
|
|
|
============================================================
|
|
|
|
_embedded-button%_, _embedded-text-button%_, and
|
|
_embedded-toggle-button%_ are button classes derived from
|
|
snip-wrapper% that wrap their corresponding snip% derivative
|
|
buttons from above. The embedded buttons implement
|
|
alignment<%> and take an addition parent init argument.
|
|
|
|
============================================================
|
|
|
|
The _embedded-message%_ is a label with no IO.
|
|
|
|
> (new embedded-message% (parent _) (label _))
|
|
parent : (is-a?/c alignment-parent<%>)
|
|
label : string?
|
|
|
|
============================================================
|
|
|
|
_fixed-width-label-snip_ makes it easy to align GUI elements
|
|
that are labeled with arbitrary strings.
|
|
fixed-width-label-snip is an abstract snip% class that takes
|
|
a list of strings, labels, and returns a snip% class. The
|
|
returned class may be instantiated with a string, label,
|
|
argument matching any of the strings in the list. The
|
|
resultant object is a snip% displaying label with a width as
|
|
wide as is required to display the longest string in labels.
|
|
|
|
============================================================
|
|
|
|
_vline%_ and _hline%_ are two graphical elements of the
|
|
alignment<%> hierarchy that display a vertical or horizontal
|
|
line across the region they are inserted into. They implement
|
|
alignment<%>.
|
|
|
|
> (new vline% (parent _))
|
|
parent : (is-a?/c alignment-parent<%>)
|
|
|
|
============================================================
|
|
|
|
_stretchable-editor-snip-mixin_ gives an editor snip the
|
|
_stretchable-snip<%>_ interface allowing it to be stretched
|
|
to fit its alignment-parent<%>'s alloted width. Stretchable
|
|
snips are useful as the snip of a snip-wrapper%.
|
|
|
|
_stretchable-editor-snip%_ is (stretcable-editor-snip-mixin editor-snip%)
|
|
|
|
> (new stretchable-editor-snip% [(stretchable-width _)] [(stretchable-height _)])
|
|
stretchable-width : boolean? = true
|
|
stretchable-height : boolean? = true
|
|
|
|
============================================================
|
|
|
|
_tabbable-text<%>_ is an interface for tabbing between
|
|
text%s. It requires the following methods.
|
|
|
|
> (send a-tabbable-text set-caret-owner) -> void
|
|
|
|
Takes the caret into the tabbable-text<%>
|
|
|
|
> (send a-tabbable-text set-ahead) -> void
|
|
|
|
The thunk to execute when tabbing ahead
|
|
|
|
> (send a-tabbable-text set-back) -> void
|
|
|
|
The thunk to execute when tabbing back
|
|
|
|
============================================================
|
|
|
|
_tabbable-text-mixin_ gives a text% the tabbable-text<%>
|
|
interface and gives it key bindings to tab ahead and back.
|
|
|
|
============================================================
|
|
|
|
The _set-tabbing_ function sets the tabbing order of
|
|
tabbable-text<%>s by setting each text's set-ahead and
|
|
set-back thunks to point to its neighbor in the argument
|
|
list.
|
|
|
|
> (set-tabbing a-text ...)
|
|
a-text : (is-a?/c tabbable-text<%>)
|
|
|
|
============================================================
|
|
|
|
The _grey-editor-snip-mixin_ and _grey-editor-mixin_ give an
|
|
editor-snip% and editor% a colored background indicating they
|
|
are disabled. The editor is not disabled by the mixin however,
|
|
and must be locked separately.
|
|
|
|
============================================================
|
|
|
|
The _single-line-text-mixin_ restricts a text to one line by
|
|
overriding its key bindings to do nothing on enter.
|
|
|
|
============================================================
|
|
|
|
The _cue-text-mixin_ gives a text% an instantiation argument
|
|
of a string that is displayed in the text% initially in grey.
|
|
This text disappears when the text gets focus. This is
|
|
useful for labeling texts without needing to take up space.
|
|
|
|
_cue-text%_ is (cue-text-mixin text%)
|
|
|
|
> (new cue-text% [(cue-text _)])
|
|
cue-text : string? = ""
|
|
color : string = "gray"
|
|
behavior : (listof (symbols 'on-focus 'on-char)) = '(on-focus)
|
|
|
|
> (send a-cue-text clear-cue-text)
|
|
|
|
Clears the cue text, if it's still present.
|
|
|
|
============================================================
|
|
|
|
The following functions are useful for working with snips
|
|
|
|
> (snip-width snip) -> number?
|
|
snip : (is-a?/c snip%)
|
|
|
|
The width of a snip in the parent pasteboard
|
|
|
|
> (snip-height snip)
|
|
snip : (is-a?/c snip%)
|
|
|
|
The height of a snip in the parent pasteboard
|
|
|
|
> (snip-min-width snip)
|
|
snip : (is-a?/c snip%)
|
|
|
|
The minimum width of the snip
|
|
|
|
> (snip-min-height snip)
|
|
snip : (is-a?/c snip%)
|
|
|
|
The minimum height of the snip
|
|
|
|
> (snip-parent snip)
|
|
snip : (is-a?/c snip%)
|
|
|
|
The pasteboard that contains the snip
|
|
|
|
> (fold-snip f init-acc snip) -> any?
|
|
f : ((is-a?/c snip%) any? . -> . any?)
|
|
init-acc : any?
|
|
snip : (is-a?/c snip%)
|
|
|
|
The application of f on all snips from snip to the end in a
|
|
foldl foldr manner
|
|
|
|
> (for-each-snip f first-snip init-lists ...) -> void
|
|
f : ((is-a?/c snip%) . -> . void)
|
|
first-snip : (is-a?/c snip%)
|
|
init-lists : (listof any?)
|
|
|
|
Applies the function to all the snips
|
|
|
|
> (map-snip f first-snip init-lists ...) -> (listof any?)
|
|
f : ((is-a?/c snip%) . -> . any?)
|
|
first-snip : (is-a?/c snip%)
|
|
init-lists : (listof any?)
|
|
|
|
A list of f applied to each snip
|
|
|
|
> (stretchable-width? snip) -> boolean?
|
|
snip : (is-a?/c snip%)
|
|
|
|
True if the snip can be resized in the x dimension
|
|
|
|
> (stretchable-height? snip) -> boolean?
|
|
snip : (is-a?/c snip%)
|
|
|
|
True if the snip can be resized in the y dimension
|