Introduction

In Current builds of Gumbo, we avoid all naming collisions in our classes by prefixing any duplicate named classes introduced by Gumbo with the Fx prefix.  THe community has spoken out loudly against this, and we need to drop the Fx prefix.  Dropping the prefix introduces some technical problems (duplicate classes in the same package, duplicate classes in the MXML namespace), and some usability problems (confusion between the 'old' Button and the 'new' Button).  Both of these problems will need to be solved via a reorganization and renaming of our classes and packages.

This document discusses proposed changes in three sections:

  • Section 1:  new namespace organization
  • Section 2:  Top Level Package Organization for the new Gumbo classes
  • Section 3:  enumerate names and packages for all new Gumbo classes. Most changes will be due to removing the Fx Prefix, but some additional usability changes will be included as well.
  • Appendix: Detailed list of classes in each namespace.

New Namespace Organization

In addition to reorganizing packages, the newly overlapping component and effect names will require us to split the 2009 MXML namespace to prevent conflicts.

Gumbo will now ship with the following distinct namespaces:

MXML 2006

URI: http://www.adobe.com/2006/mxml
Default Prefix: mx

The legacy mxml language namespace used in previous versions of Flex. This namespace contains:

  • language tags
  • top level (built-in) types
  • halo
  • rpc
  • data services
  • charts

As a language namespace, this namespace affects the way flex parses and compiles MXML. Only one language namespace can be used in an MXML document at a time.

MXML 2009

URI: http://ns.adobe.com/mxml/2009
Default Prefix: fx

The new mxml language namespace introduced as part of Gumbo. This namespace contains:

  • language tags
  • top level (built-in) types
  • new Gumbo language tags

This is purely a language namespace, and does not contain component tags. As a language namespace, this namespace affects the way flex parses and compiles MXML. Only one language namespace can be used in an MXML document at a time.

Spark

URI: library://ns.adobe.com/flex/spark
Default Prefix: s

The new namespace for building spark based applications. This namespace contains:

  • rpc
  • data services
  • spark
  • TLF Text Framework

This namespace does not contain language tags, and must be used in conjunction with one of the mxml language namespaces.

Halo

URI: library://ns.adobe.com/flex/halo
Default Prefix: mx

The non-language-version-specific namespace for using halo components and classes in your application. This namespace contains:

  • rpc
  • data services
  • halo
  • halo air classes
  • charts

This namespace can be used to bring halo components and classes into your spark based applications, or to build halo applications using the new 2009 version of mxml. This namespace does not contain language tags, and must be used in conjunction with one of the mxml language namespaces

Top Level Package Organization


As it stands today

The current packages in the flex 4 project list out like so:

mx.components
mx.core.
mx.effects
mx.events
mx.filters
mx.geom
mx.primitives
mx.layout
mx.skins
mx.states
mx.styles
mx.utils

Some specific notes:

  • mx.states:  There is one class in this package, which does not rely on any classes from the flex 4 swc.  It should be moved into the framework project.
  • mx.styles:   This folder only exists to hold style metadata.  THe metadata files should be moved to the spark.styles folder, and include files should be updated.
  • mx.geom:   This folder is empty, and should be removed.
  • mx.components: This is where the Fx components that need to be renamed live.  To date, we've grouped all of our new components into a single 'components' package under the mx namespace so they can be easily discovered.  We have considered splitting this into a separate controls and containers package, as we did in Halo. But in both the previous components ,and the new spark components, the line between controls and containers, esp. for data driven controls, becomes blurry, leaving the distinction meaningless.
  • mx.effects:  Many of the new Fx effects introduced into this package will have duplicate names once the Fx prefix is removed, and will need to be moved into a separate package.  Moving them is complicated by the fact that developers will continue to use some of the effects in the mx package (Parallel, Sequence) but can't use all of them (most Halo effects won't work on GraphicElements, for example).
  • mx.graphics:  The classes in this package are used heavily in the Gumbo model.  Some of them, however, are legacy classes in mx.graphics that were introduced in Flex 3.  If we choose to move these classes into a separate package, we will have to contend with the fact that core classes must remain in mx.graphics.

 Goals

our package structure should accomplish the following goals:

  • avoid duplicate names in the same package between Halo and Gumbo classes.
  • clearly lead developers towards the Gumbo classes. This is a complicated one, as there is no simple specific descriptive word that can be used in the package names. 'Skinnable', for example, describes the Spark components, but not the new effects, or layouts, or filters. The goal should not be for a developer to be able to identify these classes as 'better' or 'preferred' simply by looking at the package name, but rather that a developer, who knows they want to use spark, can easily identify the set of classes they should be paying attention to.

Branding (the usability kind, not the corporate kind)

In order to help a developer clearly identify classes in the 'new' framework, we will need to use a generic 'brand' identifier rather than a semantically meaningful name (see above).  Two obvious choices come to mind: fx and spark.  We chose fx as the prefix when we were prefixing class names because it was a good short option for something that customer were going to have to type over and over again.  But fx is part of the flex builder brand, rather than part of the open source flex framework.  Spark, on the other hand, is our 'official' name for the new component architecture and skinning model, so seems a more appropriate choice as the 'brand' used in the various package naming solutions proposed below.

Options

option 1, Minimal Solution:  move spark components and effects into specific sub-packages 

Take the position that spark is an extension of the existing framework, and should feel as much like first class citizens of the framework as any other component or class.  For the most part, we leave the new classes and packages of spark as second level elements of mx.  For the two areas that we have introduced replacement classes for existing parts of the framework -- components, and effects -- we push their packages down into a 'spark' sub-package.

mx.spark.components(...)
mx.core
mx.spark.effects(...)
mx.events
mx.filters
mx.primitives
mx.layout(...)
mx.skins.spark
mx.utils

 pros:  minimal disruption.  avoids most complications around the relationship between core mx framework classes and new spark classes.

cons:  relationship between spark components and the rest of the related classes -- graphics, layout, etc -- isn't clear.  no single package identifies all the 'new' classes.

option 2, grouped sub-package: move all the spark packages into a sub-package of mx, similar to how charts work.

 While spark is a first class part of the Flex framework, it is a constallation of classes meant to be used together.  layouts, graphics, components, and effects are all closely related to each other, and it should be clear to developers that these classes together comprise a library.  Clearly identify that by pushing all the new spark classes down into a second level 'spark' package.

mx.spark.components(...)
mx.spark.effects(...)
mx.spark.events
mx.spark.filters
mx.spark.primitives(...)
mx.spark.layout(...)
mx.spark.skins(...)
mx.spark.utils

 pros: single package (sort of) easily identifies the 'new' framework classes.  Keeps spark grouped under mx.

cons:  demotes 'spark' to a subpackage of the framework, giving mx.controls prominence over mx.spark.controls. Splits tightly coupled classes like graphics and effects classes across two packages. (mx.grpahics and mx.spark.graphics).

option 3, grouped-top level package:  move all the spark classes into a new top level package

Recognize that while spark is a first class part of the Flex framework, the eventual goal is for it to be a top level library that can live almost completely independent of the mx components.  move all of the spark classes into their own top level spark package.

spark.components(...)
spark.core
spark.effects(...)
spark.events
spark.filters
spark.primitives(...)
spark.layout(...)
spark.skins(...)
spark.utils

pros:  spark classes are clearly separated from classic halo components.  spark is given top level prominence on equal footing with mx.

cons:   some logical packages are split across mx. and spark. (i.e., mx.graphics and spark.graphics).

Graphics vs. Primitives

 Either option 2 or 3 gives us a graphics package split across mx.graphics and (mx.)spark.graphics.   Arguably, this will be confusing to developers.   While there are other places spark users will have to dip into the mx hierarchy (especially in this initial release), graphics feels like a coherent package fragmented in two. 

One possible solution would be to leave the stroke and fill classes (from both Flex 3 and Flex 4) in the mx.graphics package, and push all of the new graphic primitive classes into a new 'primitives' package (either mx.spark.primitives, or spark.primitives).

Proposal

Our current working proposal is a variation of Option 3, above. The general packages introduced by Spark will be:

spark.components
spark.core
spark.effects
spark.events
spark.filters
spark.layout
spark.primitives
spark.skins
spark.utils

The complete set of packages are:

spark.components
spark.components.supportClasses
spark.core
spark.effects
spark.effects.animation
spark.effects.easing
spark.effects.supportClasses
spark.effects.interpolation
spark.events
spark.filters
spark.layout
spark.layout.supportClasses
spark.primitives
spark.primitives.supportClasses
spark.skins.haloDefault
spark.skins.default
spark.utils

Class Renaming


Below is the complete table of classes in the Flex4 project, with their target package and class name after the renaming is complete.  Many classes went through unscathed. Where changes were made, they are for one of the following reasons:

  • changing the name to remove the FxPrefix
  • changing the package to avoid a collision with other classes after removing the FxPrefix.
  • reorganizing 'bucket' packages that have aggregated too  many different types of functionality in one place.
  • in one or two places, opportunistically fixing names no one likes
  • moving base classes out of view when appropriate.

Version 8

airframework package class name Destination package destination name Notes
mx.core FxWindowApplication spark.components WindowedApplication  
mx.core.windowClasses FxTitleBar spark.components.windowClasses TitleBar  
mx.skins.spark FxCloseButtonSkin spark.skins.default CloseButtonSkin  
mx.skins.spark FxGripperSkin spark.skins.default GripperSkin  
mx.skins.spark FxMacCloseButtonSkin spark.skins.default MacCloseButtonSkin  
mx.skins.spark FxMacMaximizeButtonSkin spark.skins.default MacMaximizeButtonSkin  
mx.skins.spark FxMacMinimizeButtonSkin spark.skins.default MacMinimizeButtonSkin  
mx.skins.spark FxMaximizeButtonSkin spark.skins.default MaximizeButtonSkin  
mx.skins.spark FxMinimizeButtonSkin spark.skins.default MinimizeButtonSkin  
mx.skins.spark FxRestoreButtonSkin spark.skins.default RestoreButtonSkin  
mx.skins.spark FxTitleBarSkin spark.skins.default TitleBarSkin  
mx.skins.spark FxWindowedApplicationSkin spark.skins.default WindowedApplicationSkin  
flex4 package class name Destination package destination name Notes
mx.components FxApplication spark.components Application  
mx.core.windowClasses FxTitleBar spark.components.windowClasses TitleBar  
mx.components DataGroup spark.components DataGroup  
mx.components Group spark.components Group  
mx.components HGroup spark.components HGroup  
mx.components FxPanel spark.components Panel  
mx.components ResizeMode spark.components ResizeMode  
mx.components FxScroller spark.components Scroller  
mx.components VGroup spark.components VGroup  
mx.components TextView spark.components RichEditableText merge with TextGraphic pending perf investigations
mx.components ButtonBarButton spark.components ButtonBarButton  
mx.components DropDownList spark.components DropDownList  
mx.components FxButton spark.components Button  
mx.components FxButtonBar spark.components ButtonBar  
mx.components FxCheckBox spark.components CheckBox  
mx.components FxHScrollBar spark.components HScrollBar  
mx.components FxHSlider spark.components HSlider  
mx.components IItemRenderer spark.components IItemRenderer  
mx.components IItemRendererOwner spark.components IItemRendererOwner  
mx.components ItemRenderer spark.components.supportClasses ItemRenderer  
mx.components FxList spark.components List  
mx.components FxNumericStepper spark.components NumericStepper  
mx.components FxRadioButton spark.components RadioButton  
mx.components FxRadioButtonGroup spark.components RadioButtonGroup  
mx.components FxSpinner spark.components Spinner  
mx.components FxTextArea spark.components TextArea  
mx.components FxTextInput spark.components TextInput  
mx.components TextSelectionVisibility spark.components TextSelectionVisibility  
mx.components FxToggleButton spark.components ToggleButton  
mx.components FxVScrollBar spark.components VScrollBar  
mx.components FxVSlider spark.components VSlider  
mx.components FxVideoDisplay spark.components VideoDisplay  
mx.components FxContainer spark.components SkinnableContainer  
mx.components FxDataContainer spark.components SkinnableDataContainer  
mx.components PopUp spark.components PopUp  
mx.components.baseClasses ButtonBase spark.components.supportClasses ButtonBase  
mx.components.baseClasses DropDownBase spark.components.supportClasses DropDownBase  
mx.components.baseClasses GroupBase spark.components.supportClasses GroupBase  
mx.components.baseClasses FxContainerBase spark.components.supportClasses SkinnableContainerBase  
mx.components.baseClasses FxListBase spark.components.supportClasses ListBase  
mx.components.baseClasses FxRange spark.components.supportClasses Range  
mx.components.baseClasses FxScrollBar spark.components.supportClasses ScrollBar  
mx.components.baseClasses FxSlider spark.components.supportClasses Slider  
mx.components.baseClasses FxTextBase spark.components.supportClasses TextBase  
mx.components.baseClasses FxTrackBase spark.components.supportClasses TrackBase  
mx.components.baseClasses ToggleButtonBase spark.components.supportClasses ToggleButtonBase  
mx.core InvalidatingSprite spark.components.supportClasses InvalidatingSprite  
mx.components.baseClasses FxComponent spark.components.supportClasses SkinnableComponent  
mx.components FxScrollerLayout spark.components.supportClasses ScrollerLayout  
mx.components Skin spark.components.supportClasses Skin  
mx.core IViewport spark.core IViewport  
mx.core ScrollUnit spark.core ScrollUnit  
mx.core IDeferredContentOwner spark.core IDeferredContentOwner  
mx.core ISelectableRenderer spark.core ISelectableRenderer was going to rename to ISelectable but has list-renderer specific feature
mx.core SpriteVisualElement spark.core SpriteVisualElement  
mx.core Version spark.core Version  
mx.effects AddAction spark.effects AddAction  
mx.effects FxAnimate spark.effects Animate  
mx.effects FxAnimate3D spark.effects Animate3D  
mx.effects FxAnimateColor spark.effects AnimateColor  
mx.effects FxAnimateFilter spark.effects AnimateFilter  
mx.effects FxAnimateShaderTransition spark.effects AnimateShaderTransition  
mx.effects CallAction spark.effects CallAction  
mx.effects FxCrossFade spark.effects CrossFade  
mx.effects FxFade spark.effects Fade  
mx.effects FxMove spark.effects Move  
mx.effects RemoveAction spark.effects RemoveAction  
mx.effects FxResize spark.effects Resize  
mx.effects FxRotate spark.effects Rotate  
mx.effects FxRotate3D spark.effects Rotate3D  
mx.effects SetAction spark.effects SetAction  
mx.effects FxWipe spark.effects Wipe  
mx.effects WipeDirection spark.effects WipeDirection  
mx.effects Animation spark.effects.animation Animation  
mx.effects AnimationProperty spark.effects AnimationProperty  
mx.effects Timeline spark.effects.animation Timeline  
mx.effects.interpolation EaseInOut spark.effects.easing EaseInOut  
mx.effects.interpolation IEaser spark.effects.easing IEaser  
mx.effects.interpolation Linear spark.effects.easing Linear  
mx.effects.interpolation Power spark.effects.easing Power  
mx.effects.interpolation Sine spark.effects.easing Sine  
mx.effects.effectClasses AddActionInstance spark.effects.supportClasses AddActionInstance  
mx.effects.effectClasses FxAnimate3DInstance spark.effects.supportClasses Animate3Dinstance  
mx.effects.effectClasses FxAnimateColorInstance spark.effects.supportClasses AnimateColorInstance  
mx.effects.effectClasses FxAnimateFilterInstance spark.effects.supportClasses AnimateFilterInstance  
mx.effects.effectClasses FxAnimateInstance spark.effects.supportClasses AnimateInstance  
mx.effects.effectClasses FxAnimateShaderTransitionInstance spark.effects.supportClasses AnimateShaderTransitionInstance  
mx.effects.effectClasses CallActionInstance spark.effects.supportClasses CallActionInstance  
mx.effects.effectClasses FxFadeInstance spark.effects.supportClasses FadeInstance  
mx.effects.effectClasses FxMoveInstance spark.effects.supportClasses MoveInstance  
mx.effects.effectClasses RemoveActionInstance spark.effects.supportClasses RemoveActionInstance  
mx.effects.effectClasses FxResizeInstance spark.effects.supportClasses ResizeInstance  
mx.effects.effectClasses FxRotate3DInstance spark.effects.supportClasses Rotate3DInstance  
mx.effects.effectClasses FxRotateInstance spark.effects.supportClasses RotateInstance  
mx.effects.effectClasses SetActionInstance spark.effects.supportClasses SetActionInstance  
mx.effects.effectClasses FxWipeInstance spark.effects.supportClasses WipeInstance  
mx.effects.interpolation ArrayInterpolator spark.effects.interpolation ArrayInterpolator  
mx.effects.interpolation HSBInterpolator spark.effects.interpolation HSBInterpolator  
mx.effects.interpolation IInterpolator spark.effects.interpolation IInterpolator  
mx.effects.interpolation NumberArrayInterpolator spark.effects.interpolation NumberArrayInterpolator  
mx.effects.interpolation NumberInterpolator spark.effects.interpolation NumberInterpolator  
mx.effects.interpolation RGBInterpolator spark.effects.interpolation RGBInterpolator  
mx.events AnimationEvent spark.events AnimationEvent  
mx.events ElementExistenceEvent spark.events ElementExistenceEvent  
mx.events RendererExistenceEvent spark.events RendererExistenceEvent  
mx.events TextOperationEvent spark.events TextOperationEvent  
mx.filters BevelFilter spark.filters BevelFilter  
mx.filters BlurFilter spark.filters BlurFilter  
mx.filters ColorMatrixFilter spark.filters ColorMatrixFilter  
mx.filters ConvolutionFilter spark.filters ConvolutionFilter  
mx.filters DisplacementMapFilter spark.filters DisplacementMapFilter  
mx.filters DropShadowFilter spark.filters DropShadowFilter  
mx.filters GlowFilter spark.filters GlowFilter  
mx.filters GradientBevelFilter spark.filters GradientBevelFilter  
mx.filters GradientFilter spark.filters GradientFilter  
mx.filters GradientGlowFilter spark.filters GradientGlowFilter  
mx.filters ShaderFilter spark.filters ShaderFilter  
mx.graphics IGraphicElement spark.core IGraphicElement  
mx.graphics ISharedDisplayObject spark.core ISharedDisplayObject  
mx.graphics MaskType spark.core MaskType  
mx.graphics TextBox spark.primitives SimpleText  
mx.graphics TextGraphic spark.primitives RichText merge with TextView pending perf investigations
mx.graphics Ellipse spark.primitives Ellipse  
mx.graphics Graphic spark.primitives Graphic  
mx.graphics BitmapGraphic spark.primitives BitmapImage With TextGraphic this is the last remaining Graphic reference.
mx.graphics BitmapResizeMode spark.primitives BitmapImageResizeMode  
mx.graphics Line spark.primitives Line  
mx.graphics Path spark.primitives Path  
mx.graphics Rect spark.primitives Rect  
mx.graphics VideoElement spark.primitives VideoElement  
mx.graphics.baseClasses GraphicElement spark.primitives.supportClasses GraphicElement not in core since IGE is core not the impl
mx.graphics FilledElement spark.primitives.supportClasses FilledElement  
mx.graphics StrokedElement spark.primitives.supportClasses StrokedElement  
mx.graphics CloseSegment spark.primitives.pathSegments CloseSegment to be removed
mx.graphics CubicBezierSegment spark.primitives.pathSegments CubicBezierSegment to be removed
mx.graphics LineSegment spark.primitives.pathSegments LineSegment to be removed
mx.graphics MoveSegment spark.primitives.pathSegments MoveSegment to be removed
mx.graphics PathSegment spark.primitives.pathSegments PathSegment to be removed
mx.graphics QuadraticBezierSegment spark.primitives.pathSegments QuadraticBezierSegment to be removed
mx.graphics.baseClasses TextGraphicElement spark.primitives.supportClasses TextGraphicElement  
mx.layout BasicLayout spark.layout BasicLayout  
mx.layout HorizontalAlign spark.layout HorizontalAlign  
mx.layout HorizontalLayout spark.layout HorizontalLayout  
mx.layout TileLayout spark.layout TileLayout  
mx.layout TileJustifyColumns spark.layout TileJustifyColumns  
mx.layout TileJustifyRows spark.layout TileJustifyRows  
mx.layout TileOrientation spark.layout TileOrientation  
mx.layout VerticalAlign spark.layout VerticalAlign  
mx.layout VerticalLayout spark.layout VerticalLayout  
mx.layout Block spark.layout.supportClasses Block  
mx.layout LayoutBase spark.layout.supportClasses LayoutBase  
mx.layout LayoutElementFactory spark.layout.supportClasses LayoutElementFactory  
mx.layout LayoutElementHelper spark.layout.supportClasses LayoutElementHelper  
mx.layout LinearLayoutVector spark.layout.supportClasses LinearLayoutVector  
mx.skins.spark SparkSkin spark.skins SparkSkin  
mx.skins.spark DropDownListButtonSkin spark.skins.default DropDownListButtonSkin  
mx.skins.spark DropDownListSkin spark.skins.default DropDownListSkin  
mx.skins.spark FxApplicationSkin spark.skins.default ApplicationSkin  
mx.skins.spark FxButtonBarFirstButtonSkin spark.skins.default ButtonBarFirstButtonSkin  
mx.skins.spark FxButtonBarLastButtonSkin spark.skins.default ButtonBarLastButtonSkin  
mx.skins.spark FxButtonBarMiddleButtonSkin spark.skins.default ButtonBarMiddleButtonSkin  
mx.skins.spark FxButtonBarSkin spark.skins.default ButtonBarSkin  
mx.skins.spark FxButtonSkin spark.skins.default ButtonSkin  
mx.skins.spark FxCheckBoxSkin spark.skins.default CheckBoxSkin  
mx.skins.spark FxContainerSkin spark.skins.default SkinnableContainerSkin  
mx.skins.spark FxDataContainerSkin spark.skins.default SkinnableDataContainerSkin  
mx.skins.spark FxDefaultButtonSkin spark.skins.default DefaultButtonSkin  
mx.skins.spark FxDefaultComplexItemRenderer spark.skins.default DefaultComplexItemRenderer  
mx.skins.spark FxDefaultItemRenderer spark.skins.default DefaultItemRenderer  
mx.skins.spark FxFocusSkin spark.skins.default FocusSkin  
mx.skins.spark FxHScrollBarSkin spark.skins.default HScrollBarSkin  
mx.skins.spark FxHScrollBarThumbSkin spark.skins.default HScrollBarThumbSkin  
mx.skins.spark FxHScrollBarTrackSkin spark.skins.default HScrollBarTrackSkin  
mx.skins.spark FxHSliderSkin spark.skins.default HSliderSkin  
mx.skins.spark FxHSliderThumbSkin spark.skins.default HSliderThumbSkin  
mx.skins.spark FxHSliderTrackSkin spark.skins.default HSliderTrackSkin  
mx.skins.spark FxListSkin spark.skins.default ListSkin  
mx.skins.spark FxNumericStepperSkin spark.skins.default NumericStepperSkin  
mx.skins.spark FxNumericStepperTextInputSkin spark.skins.default NumericStepperTextInputSkin  
mx.skins.spark FxPanelSkin spark.skins.default PanelSkin  
mx.skins.spark FxRadioButtonSkin spark.skins.default RadioButtonSkin  
mx.skins.spark FxScrollBarDownButtonSkin spark.skins.default ScrollBarDownButtonSkin  
mx.skins.spark FxScrollBarLeftButtonSkin spark.skins.default ScrollBarLeftButtonSkin  
mx.skins.spark FxScrollBarRightButtonSkin spark.skins.default ScrollBarRightButtonSkin  
mx.skins.spark FxScrollBarUpButtonSkin spark.skins.default ScrollBarUpButtonSkin  
mx.skins.spark FxScrollerSkin spark.skins.default ScrollerSkin  
mx.skins.spark FxSpinnerDecrButtonSkin spark.skins.default SpinnerDecrButtonSkin  
mx.skins.spark FxSpinnerIncrButtonSkin spark.skins.default SpinnerIncrButtonSkin  
mx.skins.spark FxSpinnerSkin spark.skins.default SpinnerSkin  
mx.skins.spark FxTextAreaSkin spark.skins.default TextAreaSkin  
mx.skins.spark FxTextInputSkin spark.skins.default TextInputSkin  
mx.skins.spark FxToggleButtonSkin spark.skins.default ToggleButtonSkin  
mx.skins.spark FxVideoDisplaySkin spark.skins.default VideoDisplaySkin  
mx.skins.spark FxVScrollBarSkin spark.skins.default VScrollBarSkin  
mx.skins.spark FxVScrollBarThumbSkin spark.skins.default VScrollBarThumbSkin  
mx.skins.spark FxVScrollBarTrackSkin spark.skins.default VScrollBarTrackSkin  
mx.skins.spark FxVSliderSkin spark.skins.default VSliderSkin  
mx.skins.spark FxVSliderThumbSkin spark.skins.default VSliderThumbSkin  
mx.skins.spark FxVSliderTrackSkin spark.skins.default VSliderTrackSkin  
mx.skins.spark FxVideoDisplayMuteButtonSkin spark.skins.default VideoDisplayMuteButtonSkin  
mx.skins.spark FxVideoDisplayPlayPauseButtonSkin spark.skins.default VideoDisplayPlayPauseButtonSkin  
mx.states AddItems mx.states AddItems Move to framework
mx.styles.metadata AdvancedTextLayoutFormatStyles spark.styles.metadata AdvancedTextLayoutFormatStyles  
mx.styles.metadata BasicTextLayoutFormatStyles spark.styles.metadata BasicTextLayoutFormatStyles  
mx.styles.metadata NonInheritingTextLayoutFormatStyles spark.styles.metadata NonInheritingTextLayoutFormatStyles  
mx.styles.metadata SelectionFormatTextStyles spark.styles.metadata SelectionFormatTextStyles  
mx.styles.metadata SparkColorStyles spark.styles.metadata SparkColorStyles  
mx.utils LabelUtil spark.utils LabelUtil  
mx.utils MouseShieldUtil spark.utils MouseShieldUtil  
mx.utils TextUtil spark.utils TextUtil  
mx.utils HSBColor spark.utils HSBColor  
mx.components MXMLComponent KILL it's time to get rid of this. remove
mx.graphics Parser KILL it's time to get rid of this. remove
wireframe package class name Destination package destination name
wireframe. FxButtonSkin spark.skins.wireframe ButtonSkin
wireframe. FxCheckBoxSkin spark.skins.wireframe CheckBoxSkin
wireframe. FxDefaultComplexItemRenderer spark.skins.wireframe DefaultComplexItemRenderer
wireframe. FxDefaultItemRenderer spark.skins.wireframe DefaultItemRenderer
wireframe. FxHScrollBarSkin spark.skins.wireframe HScrollBarSkin
wireframe. FxHScrollBarThumbSkin spark.skins.wireframe HScrollBarThumbSkin
wireframe. FxHScrollBarTrackSkin spark.skins.wireframe HScrollBarTrackSkin
wireframe. FxHSliderSkin spark.skins.wireframe HSliderSkin
wireframe. FxHSliderThumbSkin spark.skins.wireframe HSliderThumbSkin
wireframe. FxHSliderTrackSkin spark.skins.wireframe HSliderTrackSkin
wireframe. FxListSkin spark.skins.wireframe ListSkin
wireframe. FxNumericStepperSkin spark.skins.wireframe NumericStepperSkin
wireframe. FxNumericStepperTextInputSkin spark.skins.wireframe NumericStepperTextInputSkin
wireframe. FxRadioButtonSkin spark.skins.wireframe RadioButtonSkin
wireframe. FxScrollBarDownButtonSkin spark.skins.wireframe ScrollBarDownButtonSkin
wireframe. FxScrollBarLeftButtonSkin spark.skins.wireframe ScrollBarLeftButtonSkin
wireframe. FxScrollBarRightButtonSkin spark.skins.wireframe ScrollBarRightButtonSkin
wireframe. FxScrollBarUpButtonSkin spark.skins.wireframe ScrollBarUpButtonSkin
wireframe. FxSpinnerDecrButtonSkin spark.skins.wireframe SpinnerDecrButtonSkin
wireframe. FxSpinnerIncrButtonSkin spark.skins.wireframe SpinnerIncrButtonSkin
wireframe. FxSpinnerSkin spark.skins.wireframe SpinnerSkin
wireframe. FxTextAreaSkin spark.skins.wireframe TextAreaSkin
wireframe. FxTextInputSkin spark.skins.wireframe TextInputSkin
wireframe. FxToggleButtonSkin spark.skins.wireframe ToggleButtonSkin
wireframe. FxVScrollBarSkin spark.skins.wireframe VScrollBarSkin
wireframe. FxVScrollBarThumbSkin spark.skins.wireframe VScrollBarThumbSkin
wireframe. FxVScrollBarTrackSkin spark.skins.wireframe VScrollBarTrackSkin
wireframe. FxVSliderSkin spark.skins.wireframe VSliderSkin
wireframe. FxVSliderTrackSkin spark.skins.wireframe VSliderTrackSkin
wireframe. FxVSliderThumbSkin spark.skins.wireframe VSliderThumbSkin

Appendix A: detailed namespace contents

This section lists exactly what classes are included in each group used in the namespace descriptions above.

Built in Types

Class Package
Array  
Boolean  
Class  
Date  
Function  
int  
Number  
Object  
String  
RegExp  
uint  
XML  
MLList  

RPC

Class Package
AMFChannel mx.messaging.channels
CallResponder mx.rpc
ChannelSet mx.messaging
Consumer mx.messaging
HTTPChannel mx.messaging.channels
HTTPService mx.rpc.http.mxml
Producer mx.messaging
RemoteObject mx.rpc.remoting.mxml
Operation mx.rpc.remoting.mxml
RTMPChannel mx.messaging.channels
SecureAMFChannel mx.messaging.channels
SecureStreamingAMFChannel mx.messaging.channels
SecureHTTPChannel mx.messaging.channels
SecureStreamingHTTPChannel mx.messaging.channels
SecureRTMPChannel mx.messaging.channels
StreamingAMFChannel mx.messaging.channels
StreamingHTTPChannel mx.messaging.channels
WebService mx.rpc.soap.mxml
Operation mx.rpc.soap.mxml

Data Services

Class Package
DataService mx.data.mxml

Spark

Class Package
AddAction spark.effects
Animation spark.effects
AnimationProperty spark.effects.animation
BasicLayout spark.layout
BevelFilter spark.filters
BitmapImage spark.primitives
BlurFilter spark.filters
CallAction spark.effects
ColorMatrixFilter spark.filters
ConvolutionFilter spark.filters
DataGroup spark.components
DefaultComplexItemRenderer spark.skins.default
DisplacementMapFilter spark.filters
DropDownList spark.components
DropShadowFilter spark.filters
Ellipse spark.primitives
Animate spark.effects
Animate3D spark.effects
AnimateColor spark.effects
AnimateFilter spark.effects
AnimateShaderTransition spark.effects
Application spark.components
Button spark.components
CheckBox spark.components
SkinnableComponent spark.components.supportClasses
SkinnableContainer spark.components.supportClasses
CrossFade spark.effects
SkinnableDataContainer spark.components.supportClasses
DefaultComplexItemRenderer spark.skins.default
DefaultItemRenderer spark.skins.default
Fade spark.effects
HScrollBar spark.components
HSlider spark.components
List spark.components
ListBase spark.components.supportClasses
Move spark.effects
NumericStepper spark.components
RadioButton spark.components
RadioButtonGroup spark.components
Range spark.components.supportClasses
Resize spark.effects
Rotate spark.effects
Rotate3D spark.effects
ScrollBar spark.components.supportClasses
Scroller spark.components
Slider spark.components.supportClasses
Spinner spark.components
TextArea spark.components
TextInput spark.components
ToggleButton spark.components
TrackBase spark.components.supportClasses
VScrollBar spark.components
VSlider spark.components
Wipe spark.effects
GlowFilter spark.filters
GradientBevelFilter spark.filters
GradientGlowFilter spark.filters
Graphic spark.primitives
Group spark.components
HGroup spark.components
HorizontalLayout spark.layout
HSBInterpolator spark.effects.interpolation
ItemRenderer spark.components.supportClasses
Line spark.primitives
Linear spark.effects.easing
Path spark.primitives
PopUp spark.components
Power spark.effects.easing
QuadraticBezierSegment spark.primitives
Rect spark.primitives
RemoveAction spark.effects
RGBInterpolator spark.effects.interpolation
SetAction spark.effects
ShaderFilter spark.filters
Sine spark.effects.easing
Skin spark.components.supportClasses
SparkSkin spark.skins
SimpleText spark.primitives
RichText spark.primitives
RichEditableText spark.primitives
TileLayout spark.layout
VerticalLayout spark.layout
VGroup spark.components
Wait spark.effects

TLF Text Framework

Class Package
BreakElement flashx.textLayout.elements
CharacterFormat flashx.textLayout.formats
ContainerFormat flashx.textLayout.formats
DivElement flashx.textLayout.elements
InlineGraphicElement flashx.textLayout.elements
LinkElement flashx.textLayout.elements
ParagraphElement flashx.textLayout.elements
ParagraphFormat flashx.textLayout.formats
SpanElement flashx.textLayout.elements
TabElement flashx.textLayout.elements
TCYElement flashx.textLayout.elements
TextFlow flashx.textLayout.elements

Halo AIR Classes

Class Package
FileSystemComboBox mx.controls
FileSystemDataGrid mx.controls
FileSystemHistoryButton mx.controls
FileSystemList mx.controls
FileSystemTree mx.controls
HTML mx.controls
Window mx.core
WindowedApplication mx.core

Charts

Class Package
AreaChart mx.charts
AreaRenderer mx.charts.renderers
AreaSeries mx.charts.series
AreaSet mx.charts.series
AxisRenderer mx.charts
BarChart mx.charts
BarSeries mx.charts.series
BarSet mx.charts.series
BoxItemRenderer mx.charts.renderers
BubbleChart mx.charts
BubbleSeries mx.charts.series
CandlestickChart mx.charts
CandlestickItemRenderer mx.charts.renderers
CandlestickSeries mx.charts.series
CartesianChart mx.charts.chartClasses
CategoryAxis mx.charts
ChartBase mx.charts.chartClasses
CircleItemRenderer mx.charts.renderers
ColumnChart mx.charts
ColumnSeries mx.charts.series
ColumnSet mx.charts.series
CrossItemRenderer mx.charts.renderers
DateTimeAxis mx.charts
DiamondItemRenderer mx.charts.renderers
GridLines mx.charts
HLOCChart mx.charts
HLOCItemRenderer mx.charts.renderers
HLOCSeries mx.charts.series
Legend mx.charts
LegendItem mx.charts
LinearAxis mx.charts
LineChart mx.charts
LineRenderer mx.charts.renderers
LineSeries mx.charts.series
LogAxis mx.charts
PieChart mx.charts
PieSeries mx.charts.series
PlotChart mx.charts
PlotSeries mx.charts.series
PolarChart mx.charts.chartClasses
SeriesEffect mx.charts.effects
SeriesInterpolate mx.charts.effects
SeriesSlide mx.charts.effects
SeriesZoom mx.charts.effects
ShadowBoxItemRenderer mx.charts.renderers
ShadowLineRenderer mx.charts.renderers
TriangleItemRenderer mx.charts.renderers
WedgeItemRenderer mx.charts.renderers

Halo

Class Package
Accordion mx.containers
AddChild mx.states
AddChildAction mx.effects
AddItemAction mx.effects
AddItems mx.states
AnimateProperty mx.effects
Application mx.core
ApplicationControlBar mx.containers
ArrayCollection mx.collections
BevelFilter flash.filters
BitmapFill mx.graphics
Blur mx.effects
BlurFilter flash.filters
Box mx.containers
Button mx.controls
ButtonBar mx.controls
Canvas mx.containers
CheckBox mx.controls
ColorMatrixFilter flash.filters
ColorPicker mx.controls
ComboBox mx.controls
ConstraintColumn mx.containers.utilityClasses
ConstraintRow mx.containers.utilityClasses
Container mx.core
ControlBar mx.containers
ConvolutionFilter flash.filters
CreditCardValidator mx.validators
CurrencyFormatter mx.formatters
CurrencyValidator mx.validators
DataGrid mx.controls
DataGridColumn mx.controls.dataGridClasses
DataGridItemRenderer mx.controls.dataGridClasses
DateChooser mx.controls
DateField mx.controls
DateFormatter mx.formatters
DateValidator mx.validators
DefaultListEffect mx.effects
DefaultTileListEffect mx.effects
DisplacementMapFilter flash.filters
Dissolve mx.effects
DividedBox mx.containers
DropShadowFilter flash.filters
EffectTargetFilter mx.effects
EmailValidator mx.validators
Fade mx.effects
Form mx.containers
FormHeading mx.containers
FormItem mx.containers
Glow mx.effects
GlowFilter flash.filters
GradientBevelFilter flash.filters
GradientEntry mx.graphics
GradientGlowFilter flash.filters
Grid mx.containers
GridItem mx.containers
GridRow mx.containers
HBox mx.containers
HDividedBox mx.containers
HorizontalList mx.controls
HRule mx.controls
HScrollBar mx.controls
HSlider mx.controls
Image mx.controls
Iris mx.effects
Label mx.controls
LinearGradient mx.graphics
LinearGradientStroke mx.graphics
LinkBar mx.controls
LinkButton mx.controls
List mx.controls
ListCollectionView mx.collections
MaskEffect mx.effects
Matrix flash.geom
MenuBar mx.controls
MiniDebugTarget mx.logging.targets
Module mx.modules
ModuleLoader mx.modules
Move mx.effects
NumberFormatter mx.formatters
NumberValidator mx.validators
NumericStepper mx.controls
Panel mx.containers
Parallel mx.effects
Pause mx.effects
PhoneFormatter mx.formatters
PhoneNumberValidator mx.validators
Point flash.geom
PopUpButton mx.controls
PopUpMenuButton mx.controls
PrintDataGrid mx.printing
ProgressBar mx.controls
RadialGradient mx.graphics
RadialGradientStroke mx.graphics
RadioButton mx.controls
RadioButtonGroup mx.controls
RegExpValidator mx.validators
RemoveChild mx.states
RemoveChildAction mx.effects
RemoveItemAction mx.effects
Repeater mx.core
Resize mx.effects
RichTextEditor mx.controls
Rotate mx.effects
Sequence mx.effects
SetEventHandler mx.states
SetProperty mx.states
SetPropertyAction mx.effects
SetStyle mx.states
SetStyleAction mx.effects
SocialSecurityValidator mx.validators
SolidColor mx.graphics
SolidColorStroke mx.graphics
Sort mx.collections
SortField mx.collections
SoundEffect mx.effects
Spacer mx.controls
Sprite flash.display
State mx.states
StringValidator mx.validators
Stroke mx.graphics
SWFLoader mx.controls
TabBar mx.controls
TabNavigator mx.containers
Text mx.controls
TextArea mx.controls
TextInput mx.controls
Tile mx.containers
TileList mx.controls
TitleWindow mx.containers
ToggleButtonBar mx.controls
ToolBar mx.controls.richTextEditorClasses
TraceTarget mx.logging.targets
Transform mx.geom
Transition mx.states
Tree mx.controls
UIComponent mx.core
VBox mx.containers
VDividedBox mx.containers
VideoDisplay mx.controls
ViewStack mx.containers
VRule mx.controls
VScrollBar mx.controls
VSlider mx.controls
Validator mx.validators
WipeDown mx.effects
WipeLeft mx.effects
WipeRight mx.effects
WipeUp mx.effects
XMLListCollection mx.collections
ZipCodeFormatter mx.formatters
ZipCodeValidator mx.validators
Zoom mx.effects
You must be logged in to comment.

I'm missing the TLF in the Halo namespace and the AIR classes in the Spark namespace.

Some AIR specific support will be added to the spark components, and from there to the Spark namespace. Any legacy classes that exist in halo will stay in the halo namespace.

This all seems sensible. I certainly see Spark as as much of a top-level framework/component as mx is.
I don't see a problem with extending mx.graphics with new (Flex 4) features.

I like the idea of spark being a top-level package (Option 3 as listed above).
Where would the new client data management classes go – mx.data ?
Also, time to update the other documents to incorporate these changes, I guess!

This is not a show-stopper, but ideally I'd like to be able to compile an apps written with Flex 3, into Flex 4 without modification. As MXML 2006 does not contain charting anymore this is AFAICS not possible?

This should work. Everything that existed in MXML 2006 in Flex 3 will exist in Flex 4.

That was an oversight Christophe, thanks for catching it. It's been corrected in the proposal. As Matt said, anything else that has been accidentally removed from 2006 is an oversight that will be corrected.

Hi Ely & Matt,

I'm really curious why the word "flex." is never mentioned as an option for the main top level package of the.. ahem.. >> Flex << framework? Maybe it's some reserved word or something?

If I'm using code that belongs to the >> Flex << Framework, what else could be intuitive other than start typing " import flex.yada..."? Obviously, stuff that is specifically related to spark (and/or could get deprecated) should be all grouped under (flex.)spark, no question about that.

The legacy 'mx.' and 'fl.' top level package names are fast to type, but nothing hinting. Drives the newbies crazy. So even though option 3 above is clearly the best, adding yet another magic word to the bunch won't help the matter.

On the other side, if it's feasible to create a top level 'flex' package now the old ones would still hang around for a while, but by the time Flex5 rolls out(2020?) and Halo support is dropped(R.I.P), it would finally be possible for Flex to leave the years of top level 'magic words' behind.

Just my 2 cents.

Posted by Jay Araujo at Mar 11, 2009 17:01Updated by Jay Araujo

We definitely thought about using flex as the main package name. The main reason right now is that we haven't proven we have our packaging story perfect, so we don't want to introduce this change and be wrong again, and then we'll have blown our opportunity to use that package.

How can the mx prefix map both to http://www.adobe.com/2006/mxml (MXML 2006) and to library://ns.adobe.com/flex/halo (Halo)?

The prefix is always local to the nodes that have the namespace declared. So since the mxml 2006 namespace and the halo namespace will never appear in the same XML file, we can easily have them share the mx prefix. I think sharing the mx prefix makes it easier to copy code from an older file into a newer one.

To write a Spark app, I have to use two namespaces: MXML 2009 for the language tags and Spark for the component tags. This is a step backward in usability compared to a Halo app, where the MXML 2006 namespace includes the Halo components. Why can't the MXML 2009 namespace contain the Spark components, and have an empty default prefix, so that we can just write Spark apps like this?

<Application xmlns="http://ns.adobe.com/mxml/2009">
<Script>
</Script>
<SimpleText/>
</Application>

Wouldn't that help usability for newbies?

For one thing, the feedback when we began discussing the prefix and we kept bringing up the usability of multiple namespaces was that we were absolutely wrong that we needed to be concerned about this. Most Flex applications have other packages. Your super-simple case may be slightly more complicated, but any app of medium complexity was already using multiple. So dropping 5 namespaces down to 4 is no savings at all. We would only potentially be making it harder for new developers to understand the nuance of what means what.

As for the default prefix, I didn't see overwhelming support for it in the forums, and it can actually make life harder when you're declaring XML internally, as the parser needs to put everything in a namespace and if things appear in the language namespace, all access via actionscript will fail unless the developer has opened that namespace.

> mx.styles: This folder only exists to hold style metadata.
> The metadata should be moved out of the source hierarchy

What does "out of the source hierarchy" mean? Would it live in something like frameworks/metadata and be shared by frameworks/projects/framework, frameworks/projects/airframework/, frameworks/projects/flex4, etc.?

In the name of keeping the work involved here scoped to what needs to be done for developer visible usability, I've removed the work item to move the metadata out of the source tree.

If we have to have a separate Spark namespace (rather than putting the Spark components into the MXML 2009 namespace), it seems like the default prefix should be sp: rather than s:.

I prefer option 1 or 2 rather than making a new toplevel namespace. To me, spark.* sounds as unrelated to mx.* as orange.* is to apple.*.

The current plan is to merge mx.graphics.TextGraphic and mx.components.TextView into spark.components.RichText.

Yes, but since that's still under investigation, I thought it would be best to leave it alone for the move.

If we're moving the style metadata files out of the package hierarchy, we should do the same thing with Version.as and let it be shared across projects.

A nice idea, but I'm not sure worth the effort for now?

You have two inconsistent rows in the table for where mx.effects.AnimationProperty is moving.

Do we really need spark.effects.animation? Could this be merged with spark.effects.supportClasses?

It's a well defined collection of functionality that customers might want to use independent of the effect classes. As such, I think it belongs in its own package.