Monday, November 29, 2010

Custom headerRenderer for AdvancedDataGrid

Problem:
  1) text truncation is disabled when variableRowHeight="true"
  2) wrong width detection for multi-line headers

Solution:
  Implement custom headerRenderer

package your.package.name
{
 import flash.text.TextLineMetrics;
 
 import mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer;
 
 public class TruncationHeaderRenderer extends AdvancedDataGridHeaderRenderer
 {
  public function TruncationHeaderRenderer()
  {
   super();
  }
  
  override public function measureText(text:String):TextLineMetrics
  {
   var arr:Array = text.split("\r");
   
   var maxWidthMetrix:TextLineMetrics = determineTextFormatFromStyles().measureText(arr[0]);
   
   for (var i:int = 1; i < arr.length; i++)
   {
    var metrix:TextLineMetrics = determineTextFormatFromStyles().measureText(arr[i]);
    
    if (metrix.width > maxWidthMetrix.width)
    {
     maxWidthMetrix = metrix;
    }
   }
   
   return maxWidthMetrix;
  }

  override protected function updateDisplayList(unscaledWidth:Number,
               unscaledHeight:Number):void
  {
   super.updateDisplayList(unscaledWidth, unscaledHeight);
   
   label.truncateToFit();
  }
  
 }
}

Result:


if someone knew another solution, share it please

No comments:

Post a Comment