RebGUI is a lightweight alternative to VID that was designed and built from the ground-up on top of REBOL/View. It provides a rich, consistent set of OS-like widgets for building applications.
# What's wrong with VID?
Nothing. VID provides an easy to use, high-level interface dialect to most of View's capabilities. You can quickly create a GUI in as little as one line of code:
view layout [text "Hello World!"]
without having to worry about how it works under the covers. VID does a lot on your behalf without you even realizing it. And there's the rub; when you do know exactly what you want and how best to achieve it you often have to figure out what VID is and isn't doing and then work around it.
VID provides a great free-form generalized approach to building GUIs, what it isn't so good at is building minimalist, high-performance application interfaces.
- **Works out of the box** - Just add `do %rebgui.r` to your script and you are ready to go. You can even use it from the REBOL/SDK without having to load `%view.r`!
- **Lean and mean** - RebGUI is fast and uses little memory due to its minimalist design.
- **Self-contained widgets** - RebGUI provides a clean separation between its main display function and the widgets it can use. This allows you to easily extend, trim or modify the default widgets according to the needs of your project.
- **Handles common window management tasks** - Automatic window and gadget resizing, scroll-wheel support and widget origin, spacing and margin settings are all handled by the display function.
- **Reliable** - Given the small code-base and minimalist design, it is easy to "Grok" - there are not huge interdependencies or inheritance rules to understand. If you need to figure out how a widget works, then you look at its code and that's it!
# Design Principles
These principles gain efficiency at the cost of flexibility. If you need a flexible, generic solution then use VID.
- **Minimalist** - Only the most common use cases are catered for.
- **Efficient** - The display function creates optimal face / feel definitions.
- **Fault Intolerant** - Minimal or no error trapping / debug code is used.
- **Off by default** - Where something could reasonably be present or not (e.g. a default color or feel) it will not be present. In VID the philosophy is, *if you don't want it, disable it*; in RebGUI the philosophy is, *if you want it, add it*.
- **Hard-coded defaults** - Defaults are coded into the system with little or no ability to change them at run-time (and without the overhead of a dynamic stylize system).
- **Global name-space pollution** - As few words as possible are added to the global name-space.
- **Minimal set** - Only the most common widgets are provided. Domain specific variations (such as H1, H2, etc) are omitted.
- **Complete** - Widgets, as a rule, contain all the code necessary to define their appearance and behavior. This is in contrast to VID styles where many of their facets (e.g. feels) are generalized and shared.
- **Minimal faces** - Intelligent use of multiple facets of a face at the same time (e.g. text, image and effect) minimize the need for sub-faces.
> Updated 25-Jan-2011
- [User Guide](RebGUI/user-guide.html) - Describes how to build and use RebGUI displays.
- [Widget Reference](RebGUI/widgets.html) - Describes the use and operation of the various widgets.
- [Requestor Reference](RebGUI/requestors.html) - Describes the use and operation of the various requestors.
- [Function Reference](RebGUI/functions.html) - Describes the use and operation of the various functions.
- [Cookbook](RebGUI/cookbook.html) - RebGUI tricks, tips & code examples.
- [Widget Designer's Guide](RebGUI/design-guide.html) - Describes how to create RebGUI widgets.
# REBOL Documentation
- [Graphic System Reference](http://www.rebol.com/docs/view-system.html)
- [DRAW Dialect Reference](http://www.rebol.com/docs/draw-ref.html)
- [Image Datatype](http://www.rebol.com/docs/image.html)