For those of you diving into the Community Server 2007 SDK and learning about the inner workings of Chameleon to create custom controls, I thought it would be helpful to outline the base control classes available to Chameleon control developers.

The list below outlines the base controls existing within the CommunityServer.Controls.dll assembly.  All of these controls are abstract (except WrappedRepeater).  While there may be too many base classes to memorize Wink, hopefully this list will provide the starting point needed for Chameleon control developers.

  • WrappedContentBase (Base Control for Single Value Controls)

    WrappedContentBase is the base class for all Single Value Chameleon Controls and implements the base support for ContainerId, Tag, CssClass, LeaderTemplate, TrailerTemplate, and other single value control properties. The content of the control must be defined by the control.

    • PreTemplatedWrappedContentBase

      PreTemplatedWrappedContentBase extends WrappedContentBase to add support for the ContentTemplate template which overrides the control-defined default content.

      • ObjectDataBase

        ObjectDataBase extends PreTemplatedWrappedContentBase to add support for reporting and formatting property and extended attribute values of the DataSource as the control's default content.
        Example: PostData

      • DelayedContentBase

        DelayedContentBase extends PreTemplatedWrappedContentBase to add support for delayed loading of content.
        Example: DelayedContent

    • PreTemplatedPagerBase

      PreTemplatedPagerBase extends WrappedContentBase to implement the IPager interface and support the rendering of pager links as the content of the control.
      Example: Pager

    • PopupMenuBase

      PopupMenuBase extends WrappedContentBase to add support for rendering and sharing pop-up menus.

      • ClientPopulatedPopupMenuBase

        ClientPopulatedPopupMenuBase extends PopupMenuBase to add support for client-side parameter-modified and shared pop-up menus.
        Example: ContactPopupMenu

      • ServerPopulatedPopupMenuBase

        ServerPopulatedPopupMenuBase extends PopupMenuBase to add support for server-side AJAX-updated parameter-modified and shared pop-up menus.
        Example: FavoritePopupMenu

    • PostRatingBase

      PostRatingBase extends WrappedContentBase to add support for rendering post ratings as the content of the control.
      Example: WeblogPostRating

    • ToggleButtonBase

      ToggleButtonBase extends WrappedContentBase to add support for rendering AJAX-enabled toggle on/off links as the content of the control.  The content of the on, off, and processing links must be defined by the control.

      • PreTemplatedToggleButtonBase

        PreTemplatedToggleButtonBase extends ToggleButtonBase to add support for OnTemplate, OffTemplate, and ProcessingTemplate templates to define the rendered toggle button content and override the default control-defined content.
        Example: ThreadSubscriptionToggleButton

    • CollapsableAreaBase

      CollaspableAreaBase extends WrappedContentBase to add support for rendering collapsable content.
      Example: ForumGroupCollasableArea

    • PostTagEditableListBase

      PostTagEditableListBase extends WrappedContentBase to add support for rendering client-side AJAX-updated editable tag lists as the content of the control.
      Example: WeblogPostTagEditableList

    • HoverPopupBase

      HoverPopupBase extends WrappedContentBase to add support for showing a pop-up message when the user hovers over the code-defined content of the control.

      • PreTemplatedHoverPopupBase

        PreTemplatedHoverPopupBase extends HoverPopupBase to add support for PopupActivatorTemplate and PopupContentTemplate templates to define the rendered content and pop-up content and override the default implementations.
        Example: HelpToolTip

    • InlineEditableContentBase

      InlineEditableContentBase extends WrappedContentBase to add support for client-side editing of the code-defined content of the control.
      Example: ForumEditableData

  • WrappedRepeater (Base Control for List Controls)

    WrappedRepeater extends Repeater and adds support for ContainerId, Tag, CssClass, LeaderTemplate, FooterTemplate, AdTemplate, RowSeperatorTemplate, and other list control properties.  WrappedRepeater is the base class for all Chameleon List Controls.

    • PreTemplatedWrappedRepeaterBase

      PreTemplatedWrappedRepeaterBase extends WrappedRepeater to add support for code-defined default content for each of the templates exposed by WrappedRepeater.

      • PreTemplatedListBase

        PreTemplatedListBase extends PreTemplatedWrappedRepeaterBase to add support for rendering items in an unordered list by default.
        Example: PostList

  • WrappedFormBase (Base Control for Form Controls)

    WrappedFormBase is the base class for all Chameleon Form Controls, implementing ContainerId, Tag, CssClass, LeaderTemplate, TrailerTemplate, FormTemplate, validation support, and other form control properties/methods.
    Example: LoginForm

    • PreTemplatedWrappedFormBase

      PreTemplatedWrappedFormBase extends WrappedFormBase to support code-defined default implementations of FormTemplate.
      Example: SearchForm

    • UploadPostAttachmentFormBase

      UploadPostAttachmentFormBase extends WrappedFormBase to implement the base form used to upload post attachments.
      Example: UploadPostAttachmentForm (CommunityServer.Discussions)

    • WrappedSubFormBase (Base Control for Sub-Form Controls)

      WrappedSubFormBase extends WrappedFormBase to implement methods to support sub-forms.  WrappedSubFormBase is the base class for all Chameleon Sub-Forms.
      Example: PostTagsSubForm

  • ConditionBase (Base Control for Condition Controls)

    ConditionBase is the base class for all Chameleon Conditions Controls defining the interface used to interact with conditions.
    Example: UserInRoleCondition

    • ComparisonConditionBase

      ComparisonConditionBase extends ConditionBase to add support for comparing two objects.

      • PropertyValueComparisonBase

        PropertyValueComparisonBase extends ComparisonConditionBase to add support for comparing a property of the DataSource to a static value.
        Example: PostPropertyValueComparison

      • PropertyComparisonBase

        PropertyComparisionBase extends ComparisionConditionBase to add support for comparing two properties of the DataSource.
        Example: PostPropertyComparison

  • ActionBase (Base Control for Action Controls)

    ActionBase is the base class for all Chameleon Action Controls defining the interface used to interact with actions.
    Example: GoToSiteUrlAction

  • CSThemePageBase (Base Control for Page Controls)

    CSThemePageBase is the base class for all Chameleon Page Controls and implements the basic properties and methods to support rendering Chameleon controls.
    Example: CSThemePage

As you can see, there are quite a few base control classes.  These classes, however, allow new Chameleon controls to be implemented very easily (many controls are only a dozen to few dozen lines of code). 

For more specific information about these base classes, I suggest downloading the CS2007 Chameleon Control Documentation.