//////////////////////////////////////////////////////////////////////////////// // // 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.utils { import flash.display.DisplayObject; import flash.utils.getQualifiedClassName; import mx.core.IRepeaterClient; /** * The NameUtil utility class defines static methods for * creating names for Flex objects. * You do not create instances of NameUtil; * instead you call static methods of the class, such as * the NameUtil.createName() method. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class NameUtil { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Class variables // //-------------------------------------------------------------------------- /** * @private */ private static var counter:int = 0; //-------------------------------------------------------------------------- // // Class methods // //-------------------------------------------------------------------------- /** * Creates a unique name for any Object instance, such as "Button12", by * combining the unqualified class name with an incrementing counter. * * @param object Object requiring a name. * * @return String containing the unique name. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public static function createUniqueName(object:Object):String { if (!object) return null; var name:String = getQualifiedClassName(object); // If there is a package name, strip it off. var index:int = name.indexOf("::"); if (index != -1) name = name.substr(index + 2); // If the class name ends with a digit (which some autogenerated // classes do), then append an underscore before appending // the counter. var charCode:int = name.charCodeAt(name.length - 1); if (charCode >= 48 && charCode <= 57) name += "_"; return name + counter++; } /** * Returns a string, such as * "MyApplication0.addressForm.lastName.TextField17", * for a DisplayObject object that indicates its position in the * hierarchy of DisplayObject objects in an application. * * @param displayObject A DisplayObject object whose hierarchy in the application * is desired. * * @return String containing the position of displayObject * in the hierarchy of DisplayObject objects in an application. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public static function displayObjectToString( displayObject:DisplayObject):String { var result:String; // Start at the specified object and walk up the parent chain // to build up the string to return. try { for (var o:DisplayObject = displayObject; o != null; o = o.parent) { // If this object is in the display tree, // stop after we've prepended the topmost Application instance. if (o.parent && o.stage && o.parent == o.stage) break; // Prefer id over name if specified. var s:String = "id" in o && o["id"] ? o["id"] : o.name; if (o is IRepeaterClient) { var indices:Array = IRepeaterClient(o).instanceIndices; if (indices) s += "[" + indices.join("][") + "]"; } result = result == null ? s : s + "." + result; } } catch (e:SecurityError) { // Ignore error and continue with what we have. // We may not have access to our parent if we are loaded into a sandbox. } return result; } /** * Returns the name of the specified object's class, * such as "Button" * *

This string does not include the package name. * If you need the package name as well, call the * getQualifiedClassName() method in the flash.utils package. * It will return a string such as "mx.controls::Button".

* * @param object The object. * * @return The name of the specified object's class. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public static function getUnqualifiedClassName(object:Object):String { var name:String; if (object is String) name = object as String; else name = getQualifiedClassName(object); // If there is a package name, strip it off. var index:int = name.indexOf("::"); if (index != -1) name = name.substr(index + 2); return name; } } }