blob: fb03dbfb567b49971e6c42b47fd0e9895f2a5581 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package mx.styles
{
import flash.events.IEventDispatcher;
import flash.system.ApplicationDomain;
import flash.system.SecurityDomain;
/**
* The IStyleManager class manages the following:
* <ul>
* <li>Which CSS style properties the class inherits</li>
* <li>Which style properties are colors, and therefore get special handling</li>
* <li>A list of strings that are aliases for color values</li>
* </ul>
*
* This interface was used by Flex 2.0.1.
* Flex 3 now uses IStyleManager2 instead.
*
* @see mx.styles.CSSStyleDeclaration
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 2.0.1
*
*/
public interface IStyleManager
{
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// inheritingStyles
//----------------------------------
/**
* @private
* Set of inheriting non-color styles.
* This is not the complete set from CSS.
* Some of the omitted we don't support at all,
* others may be added later as needed.
* The method registerInheritingStyle() adds to this set
* and isInheritingStyle() queries this set.
*/
function get inheritingStyles():Object;
/**
* @private
*/
function set inheritingStyles(value:Object):void;
//----------------------------------
// stylesRoot
//----------------------------------
/**
* @private
* The root of all proto chains used for looking up styles.
* This object is initialized once by initProtoChainRoots() and
* then updated by calls to setStyle() on the global CSSStyleDeclaration.
* It is accessed by code that needs to construct proto chains,
* such as the initProtoChain() method of UIComponent.
*/
function get stylesRoot():Object;
/**
* @private
*/
function set stylesRoot(value:Object):void;
//----------------------------------
// typeSelectorCache
//----------------------------------
/**
* @private
*/
function get typeSelectorCache():Object;
/**
* @private
*/
function set typeSelectorCache(value:Object):void;
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
/**
* Gets the CSSStyleDeclaration object that stores the rules
* for the specified CSS selector.
*
* <p>If the <code>selector</code> parameter starts with a period (.),
* the returned CSSStyleDeclaration is a class selector and applies only to those instances
* whose <code>styleName</code> property specifies that selector
* (not including the period).
* For example, the class selector <code>".bigMargins"</code>
* applies to any UIComponent whose <code>styleName</code>
* is <code>"bigMargins"</code>.</p>
*
* <p>If the <code>selector</code> parameter does not start with a period,
* the returned CSSStyleDeclaration is a type selector and applies to all instances
* of that type.
* For example, the type selector <code>"Button"</code>
* applies to all instances of Button and its subclasses.</p>
*
* <p>The <code>global</code> selector is similar to a type selector
* and does not start with a period.</p>
*
* @param selector The name of the CSS selector.
*
* @return The style declaration whose name matches the <code>selector</code> property.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function getStyleDeclaration(selector:String):CSSStyleDeclaration;
/**
* Sets the CSSStyleDeclaration object that stores the rules
* for the specified CSS selector.
*
* <p>If the <code>selector</code> parameter starts with a period (.),
* the specified selector is a "class selector" and applies only to those instances
* whose <code>styleName</code> property specifies that selector
* (not including the period).
* For example, the class selector <code>".bigMargins"</code>
* applies to any UIComponent whose <code>styleName</code>
* is <code>"bigMargins"</code>.</p>
*
* <p>If the <code>selector</code> parameter does not start with a period,
* the specified selector is a "type selector" and applies to all instances
* of that type.
* For example, the type selector <code>"Button"</code>
* applies to all instances of Button and its subclasses.</p>
*
* <p>The <code>global</code> selector is similar to a type selector
* and does not start with a period.</p>
*
* @param selector The name of the CSS selector.
* @param styleDeclaration The new style declaration.
* @param update Set to <code>true</code> to force an immediate update of the styles; internally, Flex
* calls the <code>styleChanged()</code> method of UIComponent.
* Set to <code>false</code> to avoid an immediate update of the styles in the application.
*
* <p>The styles will be updated the next time one of the following methods is called with
* the <code>update</code> property set to <code>true</code>:
* <ul>
* <li><code>clearStyleDeclaration()</code></li>
* <li><code>loadStyleDeclarations()</code></li>
* <li><code>setStyleDeclaration()</code></li>
* <li><code>unloadStyleDeclarations()</code></li>
* </ul>
* </p>
*
* <p>Typically, if you call the one of these methods multiple times,
* you set this property to <code>true</code> only on the last call,
* so that Flex does not call the <code>styleChanged()</code> method multiple times.</p>
*
* <p>If you call the <code>getStyle()</code> method, Flex returns the style value
* that was last applied to the UIComponent through a call to the <code>styleChanged()</code> method.
* The component's appearance might not reflect the value returned by the <code>getStyle()</code> method. This occurs
* because one of these style declaration methods might not yet have been called with the
* <code>update</code> property set to <code>true</code>.</p>
*
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function setStyleDeclaration(selector:String,
styleDeclaration:CSSStyleDeclaration,
update:Boolean):void;
/**
* Clears the CSSStyleDeclaration object that stores the rules
* for the specified CSS selector.
*
* <p>If the specified selector is a class selector (for example, ".bigMargins" or ".myStyle"),
* you must be sure to start the
* <code>selector</code> property with a period (.).</p>
*
* <p>If the specified selector is a type selector (for example, "Button"), do not start the
* <code>selector</code> property with a period.</p>
*
* <p>The <code>global</code> selector is similar to a type selector
* and does not start with a period.</p>
*
* @param selector The name of the CSS selector to clear.
* @param update Set to <code>true</code> to force an immediate update of the styles.
* Set to <code>false</code> to avoid an immediate update of the styles in the application.
* For more information about this method, see the description in the <code>setStyleDeclaration()</code>
* method.
*
* @see #setStyleDeclaration()
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function clearStyleDeclaration(selector:String, update:Boolean):void;
/**
* Adds to the list of styles that can inherit values
* from their parents.
*
* <p><b>Note:</b> Ensure that you avoid using duplicate style names, as name
* collisions can result in decreased performance if a style that is
* already used becomes inheriting.</p>
*
* @param styleName The name of the style that is added to the list of styles that can inherit values.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function registerInheritingStyle(styleName:String):void;
/**
* Tests to see if a style is inheriting.
*
* @param styleName The name of the style that you test to see if it is inheriting.
*
* @return Returns <code>true</code> if the specified style is inheriting.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isInheritingStyle(styleName:String):Boolean;
/**
* Test to see if a TextFormat style is inheriting.
*
* @param styleName The name of the style that you test to see if it is inheriting.
*
* @return Returns <code>true</code> if the specified TextFormat style
* is inheriting.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isInheritingTextFormatStyle(styleName:String):Boolean;
/**
* Adds to the list of styles which may affect the measured size
* of the component.
* When one of these styles is set with <code>setStyle()</code>,
* the <code>invalidateSize()</code> method is automatically called on the component
* to make its measured size get recalculated later.
*
* @param styleName The name of the style that you add to the list.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function registerSizeInvalidatingStyle(styleName:String):void;
/**
* Tests to see if a style changes the size of a component.
*
* <p>When one of these styles is set with the <code>setStyle()</code> method,
* the <code>invalidateSize()</code> method is automatically called on the component
* to make its measured size get recalculated later.</p>
*
* @param styleName The name of the style to test.
*
* @return Returns <code>true</code> if the specified style is one
* which may affect the measured size of the component.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isSizeInvalidatingStyle(styleName:String):Boolean;
/**
* Adds to the list of styles which may affect the measured size
* of the component's parent container.
* <p>When one of these styles is set with <code>setStyle()</code>,
* the <code>invalidateSize()</code> method is automatically called on the component's
* parent container to make its measured size get recalculated
* later.</p>
*
* @param styleName The name of the style to register.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function registerParentSizeInvalidatingStyle(styleName:String):void;
/**
* Tests to see if the style changes the size of the component's parent container.
*
* <p>When one of these styles is set with <code>setStyle()</code>,
* the <code>invalidateSize()</code> method is automatically called on the component's
* parent container to make its measured size get recalculated
* later.</p>
*
* @param styleName The name of the style to test.
*
* @return Returns <code>true</code> if the specified style is one
* which may affect the measured size of the component's
* parent container.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isParentSizeInvalidatingStyle(styleName:String):Boolean;
/**
* Adds to the list of styles which may affect the appearance
* or layout of the component's parent container.
* When one of these styles is set with <code>setStyle()</code>,
* the <code>invalidateDisplayList()</code> method is auomatically called on the component's
* parent container to make it redraw and/or relayout its children.
*
* @param styleName The name of the style to register.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function registerParentDisplayListInvalidatingStyle(styleName:String):void;
/**
* Tests to see if this style affects the component's parent container in
* such a way as to require that the parent container redraws itself when this style changes.
*
* <p>When one of these styles is set with <code>setStyle()</code>,
* the <code>invalidateDisplayList()</code> method is auomatically called on the component's
* parent container to make it redraw and/or relayout its children.</p>
*
* @param styleName The name of the style to test.
*
* @return Returns <code>true</code> if the specified style is one
* which may affect the appearance or layout of the component's
* parent container.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isParentDisplayListInvalidatingStyle(styleName:String):Boolean;
/**
* Adds a color name to the list of aliases for colors.
*
* @param colorName The name of the color to add to the list; for example, "blue".
* If you later access this color name, the value is not case-sensitive.
*
* @param colorValue Color value, for example, 0x0000FF.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function registerColorName(colorName:String, colorValue:uint):void;
/**
* Tests to see if the given String is an alias for a color value. For example,
* by default, the String "blue" is an alias for 0x0000FF.
*
* @param colorName The color name to test. This parameter is not case-sensitive.
*
* @return Returns <code>true</code> if <code>colorName</code> is an alias
* for a color.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isColorName(colorName:String):Boolean;
/**
* Returns the numeric RGB color value that corresponds to the
* specified color string.
* The color string can be either a case-insensitive color name
* such as <code>"red"</code>, <code>"Blue"</code>, or
* <code>"haloGreen"</code>, a hexadecimal value such as 0xFF0000, or a #-hexadecimal String
* such as <code>"#FF0000"</code>.
*
* <p>This method returns a uint, such as 4521830, that represents a color. You can convert
* this uint to a hexadecimal value by passing the numeric base (in this case, 16), to
* the uint class's <code>toString()</code> method, as the following example shows:</p>
* <pre>
* import mx.styles.StyleManager;
* private function getNewColorName():void {
* StyleManager.registerColorName("soylentGreen",0x44FF66);
* trace(StyleManager.getColorName("soylentGreen").toString(16));
* }
* </pre>
*
* @param colorName The color name.
*
* @return Returns a uint that represents the color value or <code>NOT_A_COLOR</code>
* if the value of the <code>colorName</code> property is not an alias for a color.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function getColorName(colorName:Object):uint;
/**
* Converts each element of the colors Array from a color name
* to a numeric RGB color value.
* Each color String can be either a case-insensitive color name
* such as <code>"red"</code>, <code>"Blue"</code>, or
* <code>"haloGreen"</code>, a hexadecimal value such as 0xFF0000, or a #-hexadecimal String
* such as <code>"#FF0000"</code>..
*
* @param colors An Array of color names.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function getColorNames(colors:Array /* of Number or String */):void;
/**
* Determines if a specified parameter is a valid style property. For example:
*
* <pre>
* trace(StyleManager.isValidStyleValue(myButton.getStyle("color")).toString());
* </pre>
*
* <p>This can be useful because some styles can be set to values
* such as 0, <code>NaN</code>,
* the empty String (<code>""</code>), or <code>null</code>, which can
* cause an <code>if (value)</code> test to fail.</p>
*
* @param value The style property to test.
*
* @return If you pass the value returned by a <code>getStyle()</code> method call
* to this method, it returns <code>true</code> if the style
* was set and <code>false</code> if it was not set.
*
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function isValidStyleValue(value:*):Boolean;
/**
* Loads a style SWF.
*
* @param url Location of the style SWF.
*
* @param update Set to <code>true</code> to force
* an immediate update of the styles.
* Set to <code>false</code> to avoid an immediate update
* of the styles in the application.
* This parameter is optional and defaults to <code>true</code>
* For more information about this parameter, see the description
* in the <code>setStyleDeclaration()</code> method.
*
* @param trustContent Obsolete, no longer used.
* This parameter is optional and defaults to <code>false</code>.
*
* @param applicationDomain The ApplicationDomain passed to the
* <code>load()</code> method of the IModuleInfo that loads the style SWF.
* This parameter is optional and defaults to <code>null</code>.
*
* @param securityDomain The SecurityDomain passed to the
* <code>load()</code> method of the IModuleInfo that loads the style SWF.
* This parameter is optional and defaults to <code>null</code>.
*
* @return An IEventDispatcher implementation that supports
* StyleEvent.PROGRESS, StyleEvent.COMPLETE, and
* StyleEvent.ERROR.
*
* @see #setStyleDeclaration()
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 4
*/
function loadStyleDeclarations(
url:String, update:Boolean = true,
trustContent:Boolean = false,
applicationDomain:ApplicationDomain = null,
securityDomain:SecurityDomain = null):IEventDispatcher;
/**
* Unloads a style SWF.
*
* @param url Location of the style SWF.
* @param update Set to <code>true</code> to force an immediate update of the styles.
* Set to <code>false</code> to avoid an immediate update of the styles in the application.
* For more information about this method, see the description in the <code>setStyleDeclaration()</code>
* method.
*
* @see #setStyleDeclaration()
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function unloadStyleDeclarations(
url:String, update:Boolean = true):void;
/**
* @private
* This method is called by code autogenerated by the MXML compiler,
* after StyleManager.styles is popuplated with CSSStyleDeclarations.
*/
function initProtoChainRoots():void;
/**
* @private
* After an entire selector is added, replaced, or removed,
* this method updates all the DisplayList trees.
*/
function styleDeclarationsChanged():void;
}
}