v0.4.2 25th May 2012
  - Added the dip.publish module based on the old dip.shell publishing
    mechanism.
  - IController.auto_update_model will now automatically update the model when
    the editor is valid (rather than when all editors are valid).
  - IController.validate_view() is now intended specifically to implement
    cross-editor validator.
  - IController.update_view() has been added specifically to update the state
    of editors and views in response to changing values.
  - IController.is_valid() has been added to make it easier to write
    implementations of IController.update_view().
  - Controller will now use the tail of a dotted identifier when looking for
    specially named action, editor or view.
  - Added IValidator and the CollectionValidator, FilesystemLocationValidator,
    OptionValidator, StorageLocationValidator and StringValidator
    implementations.
  - Added IGrid and the Grid implementation.
  - Added IGroupBox.title.
  - IViewStack.views is now a list rather than a tuple.
  - ICodec.decode(), IStorage.read() and IIoManager.read() all allow None to be
    returned to specify that a read has been abandoned with user involvement.

v0.4.1 5th May 2012
  - Added the dip.io.BaseStorage class as an optional base class for storage
    implementations.
  - Added the read() and write() convenience methods to dip.io.IIoManager.
  - The signatures of the readable_locations_from_string(), readable_storage(),
    writeable_locations_from_string() and writeable_storage()  methods of
    IIoManager have changed.
  - The signatures of the readable_storage_location() and
    writeable_storage_location() methods of IIoManagerUi have changed.
  - Added support for relative paths when specifying types as strings.
  - Added the dip.model.TypeFactory.observed decorator.
  - The signature of the open() method of IShell has changed.
  - dip.ui.OptionSelectorFactory.options can now be a string which is the name
    of the attribute in the model containing the actual options.
  - A mapping proxy now maps an unrecognised type to Any rather than raising an
    exception.
  - A label's label policy is now embedded so that it is never displayed in a
    form.
  - Added the dip.ui.IView.ready attribute which is pulled when a view is being
    made visible for the first time.
  - Removed dip.ui.Application.call_after().

v0.4 7th April 2012
  - The dip.shell module has been rewritten.
  - The dip.ui module has been substantially rewritten and split into dip.ui,
    dip.pui and dip.toolkits.
  - The observer methods of dip.model.Trigger, dip.model.TypeFactory and
    dip.ui.Action (used as a decorator) have been removed as they do not work
    in all common cases.  The dip.model.observe decorator should be used
    instead.
  - Added the dip.model.Singleton class.
  - Added the dip.model.get_attribute_types function.
  - Added the dip.model.notify_observers function.
  - All the dip.model.ValueTypeFactory __init__ methods now support the
    allow_none, getter and setter arguments.
  - A limited form of adapter chaining is now supported.
  - The 'adapt' and 'cache' arguments have been added to adapter factories.

v0.3 7th June 2011
  - The dip.automation module and the dip-automate script have been added.
  - It is now possible to bind existing GUI's (i.e. those created manually or
    with Qt Designer) to a model.  It is no longer necessary to use the
    declarative functionality of the dip.ui module.
  - @implements now checks that an implementation contains all methods defined
    by an interface.
  - The dip.model.isadapted() function will check if an object has been adapted
    to an interface without creating an adapter as a side effect.
  - The dip.ui.DirectorySelector has been removed and its functionality merged
    with the dip.ui.FileSelector class.
  - A view factory will now always create a QWidget sub-class.  It is no longer
    necessary to pass the 'widget' argument to ensure a QWidget (rather than a
    QLayout) is created.
  - Default delegate editors have been added for the Int, Float, Bool and Enum
    types.
  - The IMessageArea interface has been added and the requirement that a
    message area is a QLabel has been removed.
  - ComboBox is now the default editor factory for the Enum type instead of
    RadioButtons.
  - The dip.ui.Wrapper class has been removed.
  - The dip.ui.CollectionToolButtons class has been renamed to
    CollectionButtons.
  - The dip.ui.AddToolButton class has been renamed to AddButton.
  - The dip.ui.RemoveToolButton class has been renamed to RemoveButton.
  - The dip.ui.UpToolButton class has been renamed to UpButton.
  - The dip.ui.DownToolButton class has been renamed to DownButton.
  - Editors are now views in their own right and there is no longer any need to
    place them in an explicit view.
  - The dip.model.Tuple class was added.

v0.2 8th September 2010
  - Python v2.6 and v2.7 are now supported.
  - Attribute observers are now only invoked if an attribute has actually
    changed.
  - Attribute observers are now passed an AttributeChange instance that fully
    describes the change to the attribute.
  - The _default_xxx() methods for identifying a method for providing an
    attribute's default value have been replaced by a type's 'default'
    decorator.
  - The _get_xxx() methods for identifying a method to be used as an
    attribute's getter have been replaced by a type's 'getter' decorator.
  - The _set_xxx() methods for identifying a method to be used as an
    attribute's setter have been replaced by a type's 'setter' decorator.
  - The _observe_xxx() methods for identifying a method to be used as an
    implicit observer of an attribute have been replaced by a type's 'observer'
    decorator.
  - Support for automatically invoking type factories has been removed.  For
    example, 'attribute = Str()' must be used instead of 'attribute = Str'.
  - Support for automatically invoking view item factories has been removed.
    For example, 'MessageArea()' must be used instead of 'MessageArea'.
  - 'Adaptor' has been renamed 'Adapter' throughout dip.
  - The dip.model.BaseType class has been renamed to TypeFactory.
  - The dip.model.ValueType class has been renamed to ValueTypeFactory.
  - The dip.model.ContainerType class has been renamed to ContainerTypeFactory.
  - The dip.model.MutableType class has been renamed to MutableTypeFactory.
  - The dip.model.ValueTypeFactory.default() method has been replaced by the
    __call__() method.
  - dip.model.ModelType has been removed as it is now equivalent to
    Instance(TypeFactory).
  - dip.model.TypeSpecificationError has been removed.
  - MetaInterface and MetaModel are now part of the dip.model API.
  - dip.plugins.Plugin now implements IPlugin so that sub-classes don't have
    to.
  - The default pickle protocol used is v2.

v0.1 17th July 2010
  - The first release.
