////////////////////////////////////////////////////////////////////////////////
//
// 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"));
}
}
}
}