first commit
This commit is contained in:
220
com/yahoo/astra/fl/charts/DataTipRenderer.as
Executable file
220
com/yahoo/astra/fl/charts/DataTipRenderer.as
Executable file
@ -0,0 +1,220 @@
|
||||
/*
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user