1 """Provides interfaces and classes in Muntjac.
2
3 Package Specification
4 =====================
5
6 Interface hierarchy
7 -------------------
8
9 The L{IComponent} interface is the top-level interface which must be
10 implemented by all user interface components in Muntjac. It defines the
11 common properties of the components and how the
12 framework will handle them. Most simple components, such as L{Button},
13 for example, do not need to implement the lower-level interfaces
14 described below. Notice that also the classes and interfaces required by
15 the component event framework are defined in L{IComponent}.
16
17 The next level in the component hierarchy are the classes
18 implementing the L{IComponentContainer} interface. It adds the capacity
19 to contain other components to L{IComponent} with a simple API.
20
21 The third and last level is the L{ILayout}, which adds the concept of
22 location to the components contained in a L{IComponentContainer}. It can
23 be used to create containers which contents can be positioned.
24
25 Component class hierarchy
26 -------------------------
27
28 At the top level is L{AbstractComponent} which implements the L{IComponent}
29 interface. As the name suggests it is abstract, but it does include a default
30 implementation for all methods defined in C{Component} so that a component is
31 free to override only those functionalities it needs.
32
33 As seen in the picture, C{AbstractComponent} serves as
34 the superclass for several "real" components, but it also has a some
35 abstract extensions. L{AbstractComponentContainer}
36 serves as the root class for all components (for example, panels and
37 windows) who can contain other components. L{AbstractField}, on the other
38 hand, implements several interfaces to provide a base class for components
39 that are used for data display and manipulation.
40 """
41