//////////////////////////////////////////////////////////////////////////////// // // 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.containers.utilityClasses { import flash.events.Event; import flash.events.IEventDispatcher; import mx.core.IInvalidating; import mx.core.mx_internal; import mx.core.IMXMLObject; import flash.events.EventDispatcher; use namespace mx_internal; //-------------------------------------- // Excluded APIs //-------------------------------------- [Exclude(name="container", kind="property")] /** * The ConstraintColumn class partitions an absolutely * positioned container in the vertical plane. * * ConstraintColumn instances have 3 sizing options: fixed, percentage, and * content. These options dictate the position of the * constraint column, the amount of space the constraint column * takes in the container, and how the constraint column deals with * changes in the size of the container. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class ConstraintColumn extends EventDispatcher implements IMXMLObject { include "../../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function ConstraintColumn() { super(); } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- mx_internal var contentSize:Boolean = false; //-------------------------------------------------------------------------- // // Properties // //-------------------------------------------------------------------------- //---------------------------------- // container //---------------------------------- /** * @private */ private var _container:IInvalidating; /** * The container which this ConstraintColumn instance is * partitioning. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get container():IInvalidating { return _container; } /** * @private */ public function set container(value:IInvalidating):void { _container = value; } //---------------------------------- // id //---------------------------------- /** * @private */ private var _id:String; /** * ID of the ConstraintColumn instance. This value becomes the instance name of the * ConstraintColumn instance and should not contain white space or special characters. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get id():String { return _id; } /** * @private */ public function set id(value:String):void { _id = value; } //---------------------------------- // maxWidth //---------------------------------- /** * @private * Storage for the maxWidth property. */ private var _explicitMaxWidth:Number; [Bindable("maxWidthChanged")] [Inspectable(category="Size", defaultValue="10000")] /** * Number that specifies the maximum width of the ConstraintColumn * instance, in pixels, in the ConstraintColumn instance's coordinates. * * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get maxWidth():Number { // Since ConstraintColumn doesn't have a measuredMaxWidth, we explictly return // the default value of 10000 when no maxWidth is set. return (!isNaN(_explicitMaxWidth)) ? _explicitMaxWidth : 10000; } /** * @private */ public function set maxWidth(value:Number):void { if (_explicitMaxWidth != value) { _explicitMaxWidth = value; if (container) { container.invalidateSize(); container.invalidateDisplayList(); } dispatchEvent(new Event("maxWidthChanged")); } } //---------------------------------- // minWidth //---------------------------------- /** * @private * Storage for the minWidth property. */ private var _explicitMinWidth:Number; [Bindable("minWidthChanged")] [Inspectable(category="Size", defaultValue="0")] /** * Number that specifies the minimum width of the ConstraintColumn instance, * in pixels, in the ConstraintColumn instance's coordinates. * * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get minWidth():Number { // Since ConstraintColumn doesn't have a measuredMinWidth, we explictly return // the default value of 0 when no minWidth is set. return (!isNaN(_explicitMinWidth)) ? _explicitMinWidth : 0; } /** * @private */ public function set minWidth(value:Number):void { if (_explicitMinWidth != value) { _explicitMinWidth = value; if (container) { container.invalidateSize(); container.invalidateDisplayList(); } dispatchEvent(new Event("minWidthChanged")); } } //---------------------------------- // width //---------------------------------- /** * @private * Storage for the width property. */ mx_internal var _width:Number; [Bindable("widthChanged")] [Inspectable(category="General")] [PercentProxy("percentWidth")] /** * Number that specifies the width of the ConstraintColumn instance, in pixels, * in the parent container's coordinates. * * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get width():Number { return _width; } /** * @private */ public function set width(value:Number):void { if (explicitWidth != value) { explicitWidth = value; if (_width != value) { _width = value; if (!isNaN(_width)) contentSize = false; if (container) { container.invalidateSize(); container.invalidateDisplayList(); } dispatchEvent(new Event("widthChanged")); } } } //---------------------------------- // explicitWidth //---------------------------------- /** * @private * Storage for the explicitWidth property. */ private var _explicitWidth:Number; [Inspectable(environment="none")] [Bindable("explicitWidthChanged")] /** * Number that specifies the explicit width of the ConstraintColumn instance, * in pixels, in the ConstraintColumn instance's coordinates. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get explicitWidth():Number { return _explicitWidth; } /** * @private */ public function set explicitWidth(value:Number):void { if (_explicitWidth == value) return; // width can be pixel or percent not both if (!isNaN(value)) _percentWidth = NaN; _explicitWidth = value; if (container) { container.invalidateSize(); container.invalidateDisplayList(); } dispatchEvent(new Event("explicitWidthChanged")); } //---------------------------------- // percentWidth //---------------------------------- /** * @private * Storage for the percentWidth property. */ private var _percentWidth:Number; [Bindable("percentWidthChanged")] [Inspectable(environment="none")] /** * Number that specifies the width of a component as a percentage of its * parent container's size. Allowed values are 0-100. The default value is NaN. * Setting the width property resets this property to NaN. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function get percentWidth():Number { return _percentWidth; } /** * @private */ public function set percentWidth(value:Number):void { if (_percentWidth == value) return; if (!isNaN(value)) _explicitWidth = NaN; _percentWidth = value; if (!isNaN(_percentWidth)) contentSize = false; if (container) { container.invalidateSize(); container.invalidateDisplayList(); } dispatchEvent(new Event("percentWidthChanged")); } //---------------------------------- // x //---------------------------------- private var _x:Number; [Bindable("xChanged")] /** * @private */ public function get x():Number { return _x; } /** * @private */ public function set x(value:Number):void { if (value != _x) { _x = value; dispatchEvent(new Event("xChanged")); } } //-------------------------------------------------------------------------- // // Methods: IMXMLObject // //-------------------------------------------------------------------------- /** * Called automatically by the MXML compiler when the ConstraintColumn * instance is created using an MXML tag. * If you create the ConstraintColumn instance through ActionScript, you * must call this method passing in the MXML document and * null for the id. * * @param document The MXML document containing this ConstraintColumn. * * @param id Ignored. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function initialized(document:Object, id:String):void { this.id = id; if (!this.width && !this.percentWidth) contentSize = true; } /** * Sizes the constraint column. * * @param width Width of constaint column computed during parent container * processing. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function setActualWidth(w:Number):void { if (_width != w) { _width = w; dispatchEvent(new Event("widthChanged")); } } } }