NAME¶
Component - base class for objects that model domain-specific elements
SYNOPSIS¶
#include <Unidraw/Components/component.h>
DESCRIPTION¶
Component is an abstract base class for objects that are created, edited, and
  composed to form domain-specific drawings. Components represent the objects of
  interest in an editing domain, encapsulating their appearance and semantics.
  Components are partitioned into a subject and zero or more views: the subject
  encapsulates the context-independent state and operations of a component, and
  each view supports a context-dependent presentation of the subject. A subject
  notifies its views whenever its state is modified to allow them to change
  their state or appearance to reflect the modification. The Component class
  defines the protocol for component subjects, while ComponentView is the
  abstract base class defining the protocol for component views. See
  ComponentView(3U) for more information on the component view class.
PUBLIC OPERATIONS¶
  - virtual void Interpret(Command*)
 
  
  - virtual void Uninterpret(Command*)
 
  - Interpret performs a component-specific operation based on the type of
      command passed. Uninterpret reverses the effects of a preceding Interpret.
      The component is responsible for storing enough state (either in itself or
      in the command) to carry out the Uninterpret operation.
 
  - virtual void Attach(ComponentView*)
 
  
  - virtual void Detach(ComponentView*)
 
  - Attach adds a component view to the component's list of views. Note that
      by default these operations do not check to ensure that the view is
      compatible with the subject. Detach removes the argument from the
      component's list of views.
 
  - virtual void Notify()
 
  - Notify the component's views that its state has changed. This operation
      calls Update on each view in the component's list of attached views.
 
  - virtual void Update()
 
  - Other classes may use this operation to notify the component subject of a
      possible change in state that the component depends upon. This operation
      does nothing by default.
 
  - virtual Component* GetParent()
 
  
  - virtual TransferFunct* GetTransferFunct()
 
  - Return the component's parent and transfer function, if any. These
      operations return nil by default.
 
  - virtual Component* GetRoot()
 
  - Return the root component in this hierarchy. GetRoot calls GetParent
      recursively and returns the last non-nil parent, if any.
 
  - virtual StateVar* GetState(const char*)
 
  - The component may maintain a string-to-state variable mapping to provide
      external access to any state variables it defines. The GetState operation
      returns a state variable given an identifying string. Defining such a
      mapping lets other objects (typically commands) query the component for
      state variables that it may define without extending the component
      protocol, potentially allowing interchange of components from different
      applications. This operation returns nil by default.
 
  - virtual void First(Iterator&)
 
  
  - virtual void Last(Iterator&)
 
  
  - virtual void Next(Iterator&)
 
  
  - virtual void Prev(Iterator&)
 
  
  - virtual boolean Done(Iterator)
 
  - Operations for iterating over the component subject's children, if any.
      First and Last initialize an iterator to point to the beginning and end of
      the list of children, respectively. Next increments the iterator to point
      to the following child, while Prev decrements the iterator to point to the
      preceding child. Done returns whether or not the iterator points beyond
      the first or last child in the list.
 
  - virtual Component* Copy()
 
  - Return a copy of the component. Subclasses should redefine this operation
      to return an instance of their type.
 
  - virtual void Read(istream&)
 
  
  - virtual void Write(ostream&)
 
  - Read and write the component's contents to a stream to support catalog
      operations. Read and write typically call first the corresponding
      operations defined by their parent class, and then they read or write
      their class-specific state. Note that you must ensure that the objects are
      read in the same order they are written.
 
  - virtual ClassId GetClassId()
 
  
  - virtual boolean IsA(ClassId)
 
  - GetClassId returns the unique class identifier for the Component subclass,
      while IsA returns whether the instance is of a class or subclass
      corresponding to the given identifier. IsA typically checks the given
      identifier against the instance's own (as defined by its GetClassId
      operation) and, failing that, calls its parent classes' IsA operation. All
      subclasses must redefine GetClassId and IsA to ensure that their
      identifiers are unique and that instances are written and read
    properly.
 
  - virtual ClassId GetSubstId(const char*& delim)
 
  - A Component subclasses can redefine GetSubstId to specify a component that
      can substitute for it. This lets applications that do not define a
      particular component subclass still read in a substitute that is
      compatible with the subclass. The substitute class should be one of the
      predefined components in the Unidraw library. This guarantees that all
      applications can instantiate the substitute.
    
    GetSubstId returns the class identifier for the substitute. When an another
      Unidraw application's catalog reads this object, it can create an instance
      of the substitute (which it is guaranteed to define) instead of the
      original (which it may not define).
    
    The original should read and write a superset of the substitute's data. The
      catalog will read to the end of the substitute's data and then advance the
      stream to the point following the sequence of characters specified by
      delim, saving the extra characters between the two points in the
      stream. When the substitute object is saved subsequently, the original
      class identifier will be written along with the substitute's data plus the
      extra characters saved previously. Thus information needn't be lost as a
      result of being read and written by an unsophisticated application.
 
  - ComponentView* Create(ClassId)
 
  - Create a view instance that is appropriate for the component subject given
      a view category. The relationship between subjects, views, and view
      categories is encoded in their class identifiers. See classes(3U) for more
      information on class identifiers and view categories.
 
PROTECTED OPERATIONS¶
  - void Component()
 
  - The Component class is abstract; therefore the constructor is
    protected.
 
  - ComponentView* View(UList*)
 
  - Each component maintains a list of its views, implemented with a UList.
      This operation returns the component view associated with a given entry in
      the UList.
 
  - virtual void SetParent(Component* child, Component* parent)
 
  - Notify a child component that it has a new or different parent. This
      operation does nothing by default. Composite components should call this
      function in their structure-modifying operations, and components that keep
      information about their parents should redefine it to update this
      information.
 
SEE ALSO¶
Catalog(3U), Command(3U), ComponentView(3U), Creator(3U), Iterator(3U),
  StatVar(3U), TransferFunct(3U), UList(3U), classes(3U), istream(3C++),
  ostream(3C++)