| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package elements.axis {
- import flash.text.TextField;
- import flash.display.Sprite;
- import flash.text.TextFormat;
- import string.Utils;
- import flash.geom.Point;
-
- public class RadarSpokeLabels extends Sprite{
- private var style:Object;
- public var labels:Array;
-
-
- public function RadarSpokeLabels( json:Object ) {
-
- // default values
- this.style = {
- colour: '#784016'
- };
-
- if( json != null )
- object_helper.merge_2( json, this.style );
-
- // tr.ace_json(this.style);
-
- this.style.colour = Utils.get_colour( this.style.colour );
-
- // cache the text for tooltips
- this.labels = new Array();
- var values:Array;
- var ok:Boolean = false;
-
- if( ( this.style.labels is Array ) && ( this.style.labels.length > 0 ) )
- {
-
- for each( var s:Object in this.style.labels )
- this.add( s, this.style );
- }
-
- }
- public function add( label:Object, style:Object ) : void
- {
- var label_style:Object = {
- colour: style.colour,
- text: '',
- size: 11
- };
- if( label is String )
- label_style.text = label as String;
- else {
- object_helper.merge_2( label, label_style );
- }
- // our parent colour is a number, but
- // we may have our own colour:
- if( label_style.colour is String )
- label_style.colour = Utils.get_colour( label_style.colour );
- this.labels.push( label_style.text );
- var l:TextField = this.make_label( label_style );
- this.addChild( l );
- }
-
- public function make_label( label_style:Object ):TextField {
-
- // we create the text in its own movie clip
-
- var tf:TextField = new TextField();
- tf.x = 0;
- tf.y = 0;
-
- var tmp:Array = label_style.text.split( '<br>' );
- var text:String = tmp.join('\n');
-
- tf.text = text;
-
- var fmt:TextFormat = new TextFormat();
- fmt.color = label_style.colour;
- fmt.font = "Verdana";
- fmt.size = label_style.size;
- fmt.align = "right";
-
- tf.setTextFormat(fmt);
- tf.autoSize = "left";
- tf.visible = true;
-
- return tf;
- }
-
- // move y axis labels to the correct x pos
- public function resize( sc:ScreenCoordsRadar ):void {
- var tf:TextField;
- //
- // loop over the lables and make sure they are on the screen,
- // reduce the radius until they fit
- //
- var i:Number = 0;
- var outside:Boolean;
- do
- {
- outside = false;
- this.resize_2( sc );
-
- for ( i = 0; i < this.numChildren; i++ )
- {
- tf = this.getChildAt(i) as TextField;
- if( (tf.x < sc.left) ||
- (tf.y < sc.top) ||
- (tf.y + tf.height > sc.bottom ) ||
- (tf.x + tf.width > sc.right)
- )
- outside = true;
-
- }
- sc.reduce_radius();
- }
- while ( outside && sc.get_radius() > 10 );
- //
- //
- //
- }
-
- private function resize_2( sc:ScreenCoordsRadar ):void {
-
- var i:Number;
- var tf:TextField;
- var mid_x:Number = sc.get_center_x();
-
- // now move it to the correct Y, vertical center align
- for ( i = 0; i < this.numChildren; i++ ) {
-
- tf = this.getChildAt(i) as TextField;
- var p:flash.geom.Point = sc.get_get_x_from_pos_and_y_from_val( i, sc.get_max() );
- if ( p.x > mid_x )
- tf.x = p.x; // <-- right align the text
- else
- tf.x = p.x - tf.width; // <-- left align the text
-
- if ( i == 0 ) {
- //
- // this is the top label and will overwrite
- // the radius label -- so we right align it
- // because the radius labels are left aligned
- //
- tf.y = p.y - tf.height;
- tf.x = p.x;
- }
- else
- tf.y = p.y;
- }
- }
-
- public function die(): void {
-
- this.style = null;
- this.labels = null;
-
- this.graphics.clear();
- while ( this.numChildren > 0 )
- this.removeChildAt(0);
- }
- }
- }
|