This function can be used to extend at runtime the set of
    default adapters. If given widget class which is being added is
    already in the default set, it will be substituted by the new one
    until the next removal (see remove_adapter).

    @param flavour can be used to differentiate otherwise identical
    entries (None for no flavour).

def add_adapter(widget_class, signal_name, getter, setter, value_type,
                flavour=None):
    """This function can be used to extend at runtime the set of
    default adapters. If given widget class which is being added is
    already in the default set, it will be substituted by the new one
    until the next removal (see remove_adapter).

    @param flavour can be used to differentiate otherwise identical
    entries (None for no flavour)."""

    new_tu = (widget_class, signal_name, getter, setter,
              value_type, flavour)
    for it,tu in enumerate(__def_adapter):
        if issubclass(tu[WIDGET], widget_class):
            # found an insertion point, iteration is over after inserting
            __def_adapter.insert(it, new_tu)
            return

    # simply append it
    __def_adapter.append(new_tu)