//////////////////////////////////////////////////////////////////////////////// // // 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.controls.advancedDataGridClasses { import flash.events.MouseEvent; import mx.controls.AdvancedDataGrid; import mx.controls.listClasses.AdvancedListBase; import mx.controls.listClasses.BaseListData; import mx.controls.listClasses.IDropInListItemRenderer; import mx.controls.listClasses.IListItemRenderer; import mx.core.mx_internal; import mx.managers.IFocusManagerComponent; import spark.components.Group; import spark.components.supportClasses.ItemRenderer; use namespace mx_internal; /** * The MXAdvancedDataGridItemRenderer class defines the Spark item renderer class * for use with the MX AdvancedDataGrid control. * This class lets you use the Spark item renderer architecture with the * MX AdvancedDataGrid control. * * @mxml * *

The <s:MXAdvancedDataGridItemRenderer> tag inherits all of the tag * attributes of its superclass and adds the following tag attributes:

* *
 *  <s:MXAdvancedDataGridItemRenderer
 *    Properties
 *  />
 *  
* * @see mx.controls.AdvancedDataGrid * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public class MXAdvancedDataGridItemRenderer extends ItemRenderer implements IListItemRenderer, IDropInListItemRenderer { //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public function MXAdvancedDataGridItemRenderer() { super(); focusEnabled = false; } //---------------------------------- // listData //---------------------------------- /** * @private * Storage for the listData property. */ private var _listData:BaseListData; [Bindable("dataChange")] /** * The implementation of the listData property * as defined by the IDropInListItemRenderer interface. * Use this property to access information about the * data item displayed by the item renderer. * * @see mx.controls.listClasses.IDropInListItemRenderer * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public function get listData():BaseListData { return _listData; } /** * @private */ public function set listData(value:BaseListData):void { _listData = value; invalidateProperties(); } //---------------------------------- // editor //---------------------------------- /** * The ID of the component that receives focus as the item editor. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public var editor:IFocusManagerComponent; //---------------------------------- // text //---------------------------------- /** * The text property of * the component specified by editorID. * This is a convenience property to * let the item editor of the MX control, * specified by the itemEditor property, * pull the value from most item editors * without having to propagate a property * to the item renderer. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public function get text():String { if (editor && ("text" in editor)) return editor["text"]; return null; } //---------------------------------- // disclosureGroup //---------------------------------- /** * storage for disclosureGroup */ private var _disclosureGroup:Group; /** * The ID of the component that receives focus as the item editor. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public function get disclosureGroup():Group { return _disclosureGroup; } /** * @private */ public function set disclosureGroup(value:Group):void { if (value != _disclosureGroup) { if (_disclosureGroup) { _disclosureGroup.removeEventListener(MouseEvent.MOUSE_DOWN, disclosureGroup_mouseDownHandler); _disclosureGroup.removeEventListener(MouseEvent.CLICK, disclosureGroup_clickHandler); } _disclosureGroup = value; if (_disclosureGroup) { _disclosureGroup.addEventListener(MouseEvent.MOUSE_DOWN, disclosureGroup_mouseDownHandler); _disclosureGroup.addEventListener(MouseEvent.CLICK, disclosureGroup_clickHandler); } } } //---------------------------------- // advancedDataGridListData //---------------------------------- [Bindable("dataChange")] /** * The implementation of the listData property * as defined by the IDropInListItemRenderer interface. * * @see mx.controls.listClasses.IDropInListItemRenderer * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ public function get advancedDataGridListData():AdvancedDataGridListData { return listData as AdvancedDataGridListData; } //-------------------------------------------------------------------------- // // Methods // //-------------------------------------------------------------------------- /** * @private * Handle special behavior when clicking on the disclosure icon */ protected function disclosureGroup_mouseDownHandler(event:MouseEvent):void { event.stopPropagation(); var adg:AdvancedDataGrid = listData.owner as AdvancedDataGrid; if (adg.isOpening || !adg.enabled) return; advancedDataGridListData.open = !advancedDataGridListData.open; adg.dispatchAdvancedDataGridEvent("itemOpening", data, //item this, //renderer event, //trigger advancedDataGridListData.open, //opening true, //animate true); //dispatch } /** * @private * Handle special behavior when clicking on the disclosure icon */ protected function disclosureGroup_clickHandler(event:MouseEvent):void { // stop this event from bubbling up because the click is // for item selection and clicking on the disclosureIcon doesn't // select the items (only expands/closes them). event.stopPropagation(); } //-------------------------------------------------------------------------- // // Overridden Methods // //-------------------------------------------------------------------------- /** * @private */ override public function invalidateDisplayList():void { if (listData) { // see if we need to change state. This is the only invalidation method guaranteed to be // called. We set up the renderers properties here so no matter what validation method gets // called first, the properties are set up accordingly. var listBase:AdvancedListBase = listData.owner as AdvancedListBase; if (listBase) { showsCaret = listBase.isItemShowingCaret(data); selected = listBase.isItemSelected(data); super.hovered = listBase.isItemHighlighted(data); } } super.invalidateDisplayList(); } /** * @private */ override protected function set hovered(value:Boolean):void { if (listData) { // see if we need to change state. // in Halo list, you can rollout of the renderer and onto the padding area // and you should still be hovered, so we double check and override here. // then we get all the other state-related variables updated so the state // calculation will do the right thing. var listBase:AdvancedListBase = listData.owner as AdvancedListBase; if (listBase) { selected = listBase.isItemSelected(data); value = listBase.isItemHighlighted(data); } } super.hovered = value; } /** * @private */ override protected function commitProperties():void { if (listData) { // make sure itemIndex is correct before the base class does any computation // based on it var listBase:Object = listData.owner; itemIndex = listData.rowIndex + listBase.verticalScrollPosition; } super.commitProperties(); } } }