
* Another big chunk of v4-require-isms * Allow `#lang framework/keybinding-lang' for keybinding files * Move hierlist sources into "mrlib/hierlist", leave stub behind svn: r10689
167 lines
5.4 KiB
Plaintext
167 lines
5.4 KiB
Plaintext
> FrEd (Functional Reactive Editor library)
|
|
|
|
MACROS
|
|
-------
|
|
To get the basic macros:
|
|
(require frtime/demos/gui/mixin-macros)
|
|
|
|
> (events->callbacks field-name update-call)
|
|
Generates a mixin for allowing an event stream to drive
|
|
callbacks. When an event stream is given as the init value
|
|
for field-name, that event stream is stored, and whenever an
|
|
event occurs on that stream, update-call is invoked on the
|
|
value of the event. The one argument to the resulting mixin
|
|
is the class being extended
|
|
|
|
> (callbacks->args-evts stream-name callback)
|
|
Generates a mixin that sends an event on stream-name when
|
|
callback is called. The class has an init field called
|
|
[stream-name]-event-processor, whose value is a function.
|
|
The public method (get-[stream-name]) of the resulting class
|
|
gets the result of applying [stream-name]-event-processor
|
|
to the stream of args-evts. The events on the stream are
|
|
lists of the arguments to the callback. The default value
|
|
for [stream-name]-event-processor is given as the first
|
|
argument to the mixin, and the class being extended is the
|
|
second argument to the mixin.
|
|
|
|
FtA provides event-is-val, split-mouse-events/type, and
|
|
split-key-events/type for use as initialization arguments.
|
|
event-is-val can be used for [stream-name]-event-processor
|
|
when the event should just be the value of the first
|
|
argument of the callback. split-*-events/type sets up an
|
|
appropriate split (see FrTime docs for split information,
|
|
MrEd docs for key-event codes and mouse-event types) over
|
|
the type of event occurence.
|
|
|
|
|
|
events->callbacks and callbacks->args-evts are the backbone
|
|
of the transition between an object-oriented library and an
|
|
event-stream based library.
|
|
|
|
|
|
|
|
|
|
AUXILIARY MACROS
|
|
------------------
|
|
|
|
Some common utility macros provided from:
|
|
(lib "aux-mixin-macros.ss" "frtime" "demo" "gui")
|
|
|
|
> (behavior->callbacks field-name update-call)
|
|
Generates a mixin for allowing a behavior to control a
|
|
widget. The mixin has two arguments. The mixin's first
|
|
argument is the default value for field-name, and the
|
|
seconds argument is the class being mixed. Whenever a
|
|
behavior is supplied as the value for field-name, the
|
|
value-now of that behavior is used as the super-new argument
|
|
for filed-name, and whenever there is a change in that
|
|
behavior, update-call is invoked with the current value of
|
|
the behavior.
|
|
|
|
> (mixin-merge-e new-stream-name stream-getter1 stream-getter2)
|
|
Generates a mixin that provides access to the merge-e of two
|
|
event streams. The first argument is the name of the merged
|
|
stream. The merged stream can be accessed by the public
|
|
method (get-[new-stream-name]). The method stream-getter1
|
|
and stream-getter2 are assumed to be inherited public
|
|
methods that return event streams.
|
|
|
|
> (embed-processor processed-member-name getter ...)
|
|
|
|
embed-processor is a macro for creating a mixin that embeds
|
|
a signal processing step into the object. For example,
|
|
mixin-merge-e is written in terms of embed-processor as:
|
|
|
|
(embed-processor new-stream-name
|
|
(lambda (ev1 ev2)
|
|
(merge-e ev1 ev2))
|
|
stream-getter1
|
|
stream-getter2).
|
|
|
|
The mixin created has one argument, which is the class being
|
|
mixed. embed-processor is in aux-mixin-macros.ss
|
|
|
|
For examples of how to use behavior->callbacks,
|
|
mixin-merge-e, events->callbacks, and callbacks->args-evts,
|
|
consult the tutorial file "instr.ss" in
|
|
collects/frtime/demos/gui/demo.
|
|
|
|
|
|
|
|
MIXINS
|
|
------
|
|
Some common mixins have already been defined and applied.
|
|
To get these:
|
|
(require "fred.ss" "frtime" "demos" "gui")
|
|
|
|
> (add-mouse-access super-class)
|
|
Derived from callbacks->args-evts.
|
|
stream-name: mouse-events
|
|
|
|
> (add-focus-access super-class)
|
|
Derived from callbacks->args-evts
|
|
stream-name: focus-events
|
|
|
|
> (add-keypress-split super-class)
|
|
Derived from callbacks->args-evts.
|
|
stream-name: key-events
|
|
|
|
> (add-callback-access value-extractor default-value super-class)
|
|
value-extractor is a method of two arguments (a widget and a
|
|
control event) that gets a value for the widget.
|
|
default-value is the default value for the widget. Adds
|
|
(get-value-e) and (get-value-b) to super-class, where
|
|
get-value-e returns an event stream representing the value
|
|
of the widget, and get-value-b returns a behavior
|
|
representing the value of the widget.
|
|
|
|
> (add-callback-access/loop value-extractor default-value super-class)
|
|
does the work of add-callback-access, but also adds an
|
|
initialization argument value-set, which is an event stream
|
|
that sets the value of the widget at each event.
|
|
|
|
> (add-focus-on-event super-class)
|
|
Derived from events->callbacks.
|
|
field-name: focus-when
|
|
|
|
|
|
|
|
UTILITY
|
|
-------
|
|
|
|
> (standard-lift widget value-method value-default)
|
|
|
|
standard-lift applys a common set of mixins to the widget.
|
|
It applies add-mouse-access, add-focus-access, and it applys
|
|
the result of behavior->callback for label, enabled,
|
|
min-width, and min-height. It also applies
|
|
add-callback-access with value-method as the
|
|
value-extractor, and value-default as the default-value.
|
|
Widgets that have been standard-lift'ed:
|
|
|
|
ft-button%
|
|
ft-radio-box%
|
|
ft-choice%
|
|
ft-list-box%
|
|
|
|
|
|
> (standard-lift/loop widget value-method value-default)
|
|
standard-lift/loop is the same as standard-lift, except
|
|
thatit applies add-callback-access/loop instead of
|
|
add-callback-access.
|
|
Widgets that have been standard-lift/loop'ed:
|
|
ft-check-box%
|
|
ft-slider%
|
|
ft-text-field%
|
|
|
|
|
|
simple.ss
|
|
---------
|
|
|
|
Many useful utilities have been put in
|
|
(require "simple.ss" "frtime" "demos" "gui")
|
|
feel free to look around and use the ones you think are
|
|
useful.
|
|
|