gui/gui-lib/embedded-gui/doc.txt
2014-12-02 02:33:07 -05:00

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