I'm having some brain ache with trying to find an easy solution to this
one, and I'm wondering If I'm missing the obvious (again )?
I'm trying to replace the hardcoded "var scrollBarWidth:int = 16;" line
in the code below with one that actually reflects the true width of the
scrollbar (say if it's been styled or skinned).
I can see the scrollbar in the comboBoxes dropdown instance in the
debugger ("scroll_verticalScrollbar"), however it is private. Is there
an easier/better way to find it's width than extending the dropdown
renderer to provide access to it?
Perhaps via styles/skin properties? Or another approach entirely ?
 
Apologies if this is a really stupid question, and thanks in advance for
any pointers.
 
Jim.
 
 
package com.ifeedme.component
{
      import flash.events.Event;
      
      import mx.controls.ComboBox;
      import mx.events.FlexEvent;
      
      /**
       * 
       * @author jim Hayes
       * ExtendedComboBox : extends comboBox to provide a dropdownWidth
that adjusts to the widest label
       * whenever the dataprovider is changed.
       */   
      public class ExtendedComboBox extends ComboBox
      {
            public function ExtendedComboBox()
            {
                  super();
            }
            
            public function adjustDropDownWidth(event:Event=null):void
            {                 
                  if (this.dropdown == null)
                  {
                        callLater(adjustDropDownWidth)
                  }
                  else
                  {                       
                        var ddWidth:int =
this.dropdown.measureWidthOfItems(-1,this.dataProvider.length);
                        if (this.dropdown.maxVerticalScrollPosition > 0)
                        {
                              // we have vertical scrollbar
                              var scrollBarWidth:int = 16;              
                              ddWidth += 16;
                        }                       
                        this.dropdownWidth =
Math.max(ddWidth,this.width);                      
                  }
            }
            
            override protected function
collectionChangeHandler(event:Event):void
            {
                  super.collectionChangeHandler(event);
 
this.addEventListener(FlexEvent.VALUE_COMMIT,adjustDropDownWidth)       
            }
            
      }
}

______________________________________________________________________
This communication is from Primal Pictures Ltd., a company registered in 
England and Wales with registration No. 02622298 and registered office: 4th 
Floor, Tennyson House, 159-165 Great Portland Street, London, W1W 5PA, UK. VAT 
registration No. 648874577.

This e-mail is confidential and may be privileged. It may be read, copied and 
used only by the intended recipient. If you have received it in error, please 
contact the sender immediately by return e-mail or by telephoning +44(0)20 7637 
1010. Please then delete the e-mail and do not disclose its contents to any 
person.
This email has been scanned for Primal Pictures by the MessageLabs Email 
Security System.
______________________________________________________________________

Reply via email to