USING: help gadgets gadgets-search models ; ARTICLE: "models" "Models" "The Factor UI provides basic support for dataflow programming via " { $emphasis "models" } " and " { $emphasis "controls" } ". A model is an observable value. Changing a model's value notifies other objects which depend on the model automatically, and models may depend on each other's values. A " { $link control } " is a " { $link gadget } " displaying a model." { $subsection model } "Creating models:" { $subsection } "Adding and removing connections:" { $subsection add-connection } { $subsection remove-connection } "Generic word called on model connections when the model value changes:" { $subsection model-changed } "When using models which are not associated with controls (or when unit testing controls), you must activate and deactivate models manually:" { $subsection activate-model } { $subsection deactivate-model } "Special types of models:" { $subsection "models-filter" } { $subsection "models-compose" } { $subsection "models-history" } { $subsection "models-delay" } { $subsection "models-impl" } ; ARTICLE: "models-filter" "Filter models" "Filter model values are computed by applying a quotation to the value of another model." { $subsection filter } { $subsection } ; ARTICLE: "models-compose" "Composed models" "Composed model values are computed by collecting the values from a sequence of underlying models into a new sequence." { $subsection compose } { $subsection } ; ARTICLE: "models-history" "History models" "History models record previous values." { $subsection history } { $subsection } "Recording history:" { $subsection add-history } "Navigating the history:" { $subsection go-back } { $subsection go-forward } ; ARTICLE: "models-delay" "Delay models" "Delay models are used to implement delayed updating of gadgets in response to user input. For example, " { $link live-search } " instances use delay models perform the search only after the user stops typing." { $subsection delay } { $subsection } ; ARTICLE: "models-impl" "Implementing models" "New types of models can be defined, along the lines of " { $link filter } " and such." $terpri "Tuples can delegate to models:" { $subsection delegate>model } "Models can execute hooks when activated:" { $subsection model-activated } "Models can override requests to change their value, for example to perform validation:" { $subsection set-model } ;