##############################################################################
#
# Copyright (c) 2004 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Viewlet interfaces

$Id: interfaces.py 67630 2006-04-27 00:54:03Z jim $
"""
__docformat__ = 'restructuredtext'

import zope.interface
import zope.schema
from zope.contentprovider.interfaces import IContentProvider
from zope.interface.common.mapping import IReadMapping
from zope.i18nmessageid import MessageFactory
_ = MessageFactory('zope')

class IViewlet(IContentProvider):
    """A content provider that is managed by another content provider, known
    as viewlet manager.

    Note that you *cannot* call viewlets directly as a provider, i.e. through
    the TALES ``provider`` expression, since it always has to know its manager.
    """

    manager = zope.interface.Attribute(
        """The Viewlet Manager

        The viewlet manager for which the viewlet is registered. The viewlet
        manager will contain any additional data that was provided by the
        view, for example the TAL namespace attributes.
        """)


class IViewletManager(IContentProvider,
                      zope.interface.common.mapping.IReadMapping):
    """A component that provides access to the content providers.

    The viewlet manager's resposibilities are:

      (1) Aggregation of all viewlets registered for the manager.

      (2) Apply a set of filters to determine the availability of the
          viewlets.

      (3) Sort the viewlets based on some implemented policy.

      (4) Provide an environment in which the viewlets are rendered.

      (5) Render itself containing the HTML content of the viewlets.
    """
