220 lines
4.9 KiB
ActionScript
Executable File
220 lines
4.9 KiB
ActionScript
Executable File
/*
|
|
Copyright (c) 2009 Yahoo! Inc. All rights reserved.
|
|
The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license
|
|
*/
|
|
package com.yahoo.astra.fl.charts
|
|
{
|
|
import com.yahoo.astra.fl.utils.UIComponentUtil;
|
|
|
|
import fl.core.InvalidationType;
|
|
import fl.core.UIComponent;
|
|
|
|
import flash.display.DisplayObject;
|
|
import flash.text.TextField;
|
|
import flash.text.TextFieldAutoSize;
|
|
import flash.text.TextFormat;
|
|
|
|
//--------------------------------------
|
|
// Styles
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* The padding that separates the border of the component from its contents,
|
|
* in pixels.
|
|
*
|
|
* @default 6
|
|
*/
|
|
[Style(name="contentPadding", type="Number")]
|
|
|
|
/**
|
|
* The DisplayObject subclass used to display the background.
|
|
*/
|
|
[Style(name="backgroundSkin", type="Class")]
|
|
|
|
/**
|
|
* The default renderer for mouse-over data tips.
|
|
*
|
|
* @author Josh Tynjala
|
|
*/
|
|
public class DataTipRenderer extends UIComponent implements IDataTipRenderer
|
|
{
|
|
|
|
//--------------------------------------
|
|
// Class Variables
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
private static var defaultStyles:Object =
|
|
{
|
|
contentPadding: 6,
|
|
backgroundSkin: "ChartDataTipBackground",
|
|
embedFonts: false
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Class Methods
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
* @copy fl.core.UIComponent#getStyleDefinition()
|
|
*/
|
|
public static function getStyleDefinition():Object
|
|
{
|
|
return mergeStyles(defaultStyles, UIComponent.getStyleDefinition());
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Constructor
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function DataTipRenderer()
|
|
{
|
|
super();
|
|
this.mouseEnabled = false;
|
|
this.mouseChildren = false;
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Properties
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
protected var label:TextField;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
protected var background:DisplayObject;
|
|
|
|
/**
|
|
* @private
|
|
* Storage for the text property.
|
|
*/
|
|
private var _text:String = "";
|
|
|
|
/**
|
|
* @copy com.yahoo.astra.fl.charts.IDataTipRenderer#text
|
|
*/
|
|
public function get text():String
|
|
{
|
|
return this._text;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set text(value:String):void
|
|
{
|
|
if(value == null) value = "";
|
|
if(this._text != value)
|
|
{
|
|
this._text = value;
|
|
this.invalidate(InvalidationType.DATA);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Storage for the data property.
|
|
*/
|
|
private var _data:Object;
|
|
|
|
/**
|
|
* @copy com.yahoo.astra.fl.charts.IDataTipRenderer#data
|
|
*/
|
|
public function get data():Object
|
|
{
|
|
return this._data;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
public function set data(value:Object):void
|
|
{
|
|
if(this._data != value)
|
|
{
|
|
this._data = value;
|
|
this.invalidate(InvalidationType.DATA);
|
|
}
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Protected Methods
|
|
//--------------------------------------
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
override protected function configUI():void
|
|
{
|
|
super.configUI();
|
|
this.label = new TextField();
|
|
this.label.autoSize = TextFieldAutoSize.LEFT;
|
|
this.label.selectable = false;
|
|
this.addChild(this.label);
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
override protected function draw():void
|
|
{
|
|
var stylesInvalid:Boolean = this.isInvalid(InvalidationType.STYLES);
|
|
var dataInvalid:Boolean = this.isInvalid(InvalidationType.DATA);
|
|
|
|
var contentPadding:Number = this.getStyleValue("contentPadding") as Number;
|
|
|
|
if(stylesInvalid)
|
|
{
|
|
if(this.background)
|
|
{
|
|
this.removeChild(this.background);
|
|
this.background = null;
|
|
}
|
|
var skinClass:Object = this.getStyleValue("backgroundSkin");
|
|
this.background = UIComponentUtil.getDisplayObjectInstance(this, skinClass);
|
|
this.addChildAt(this.background, 0);
|
|
|
|
var format:TextFormat = this.getStyleValue("textFormat") as TextFormat;
|
|
var embedFonts:Boolean = this.getStyleValue("embedFonts") as Boolean;
|
|
this.label.defaultTextFormat = format;
|
|
this.label.embedFonts = embedFonts;
|
|
|
|
this.label.x = contentPadding;
|
|
this.label.y = contentPadding;
|
|
}
|
|
|
|
if(dataInvalid)
|
|
{
|
|
this.label.text = this.text;
|
|
}
|
|
|
|
//the datatip sizes itself!
|
|
this._width = this.label.width + 2 * contentPadding;
|
|
this._height = this.label.height + 2 * contentPadding;
|
|
|
|
if(this.background)
|
|
{
|
|
this.background.width = this._width;
|
|
this.background.height = this._height;
|
|
|
|
if(this.background is UIComponent)
|
|
{
|
|
UIComponent(this.background).drawNow();
|
|
}
|
|
}
|
|
|
|
super.draw();
|
|
}
|
|
|
|
}
|
|
} |