Provides a framework for preferences.

## Package Specification

A preference manager (class `PreferenceManager`) maintains a tree of preference nodes. Preferences are presented to the end user in a preference dialog consisting of preference pages. A preference page consists of multiple preference fields, which can be displayed and modified though field editors. The framework contains an abstract base class for preference dialogs (`PreferenceDialog`), and an abstract preference page class (`FieldEditorPreferencePage`) for hosting these field editors.

The individual preference values are maintained in a preference store (`IPreferenceStore`). Each preference has a current value and a default value use to (re-)initialize it. The framework provides a concrete preference store implementation (`PreferenceStore`) based on an internal `java.util.Properties` object, with support for persisting the non-default preference values to files or streams.

A field editor presents the value of a single preference to the end user. The value is loaded from the preference store; if modified by the end user, the value is validated and eventually stored back to the preference store.

This package contains ready-to-use field editors for various types of preferences:

- `BooleanFieldEditor` - booleans
- `IntegerFieldEditor` - integers
- `StringFieldEditor` - text strings
- `RadioGroupFieldEditor` - enumerations
- `ColorFieldEditor` - RGB colors
- `FontFieldEditor` - fonts
- `DirectoryFieldEditor` - directories
- `FileFieldEditor` - files
- `PathEditor` - paths

All field editors are subclasses of the abstract base class `FieldEditor`; the framework allows new kinds of field editors to be defined by subclassing this class or one of its subclasses.

Note: None of the classes in this package maintain global state.