There is a weird thing happening here. Maybe someone could explain
it. I changed back to having a disabledFunction variable instead of
having the function in this class. I am trying to set the
disabledFunction like this:
var dropDown:DisabledItemList = DisabledItemList
(collectionCombo.dropdown);
dropDown.disabledFunction = disabledCollectionItem;
It sets it but then in the DisabledItemList the disabledFunction
turns to null. Is this because it is a factory? I know I am setting
this function on a sub component of ComboBox and that it isn't the
best way, but it should work.
--- In [email protected], "wwwpl" <[EMAIL PROTECTED]> wrote:
>
> I got it working. I have to set the selectedIndex in the combo box
> as well as in the list for it to work. This isn't ideal, but it
> works for the most part. I have had to change a bit of the code to
> handle situations.
>
> --- In [email protected], Alex Harui <aharui@> wrote:
> >
> > Hmm. The combobox is handling keystrokes and forwarding to the
> List. It might be messing things up.
> >
> > From: [email protected]
> [mailto:[EMAIL PROTECTED] On Behalf Of wwwpl
> > Sent: Thursday, August 28, 2008 10:31 AM
> > To: [email protected]
> > Subject: [flexcoders] Re: ComboBox Disable Drop Down Items
> >
> >
> > I set caret to false. Now the outline doesn't show, but it should
> > jump to the next enabled item. The selection disappears, but I
know
> > the selection is on the disabled item. In the finishKeySelection
> > function, it sets the selectedIndex to the next enabled item, but
it
> > seems the combobox is not accepting that. Of course it works if
you
> > just have a list box.
> >
> > --- In [email protected]<mailto:flexcoders%
> 40yahoogroups.com>, Alex Harui <aharui@> wrote:
> > >
> > > Try forcing caret to false when calling super
> > >
> > > From: [email protected]<mailto:flexcoders%
> 40yahoogroups.com>
> > [mailto:[email protected]<mailto:flexcoders%
> 40yahoogroups.com>] On Behalf Of wwwpl
> > > Sent: Thursday, August 28, 2008 9:49 AM
> > > To: [email protected]<mailto:flexcoders%
> 40yahoogroups.com>
> > > Subject: [flexcoders] ComboBox Disable Drop Down Items
> > >
> > >
> > > I am trying to disable ComboBox drop down items. I found an
> example
> > > on Alex's site for disabling items in a List so I took that and
> set
> > > it as the DropDownFactory in the combo box. But it doesn't work
> > > completely. I can still key down and get an outline of the
> disabled
> > > item. I am curious why this example works in a list but not in a
> > > combo box. Here is my code:
> > >
> > > Application File
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
> > > xmlns:local="*" layout="absolute">
> > > <mx:Script>
> > > <![CDATA[
> > >
> > > [Bindable]
> > > public var dp:Array = [
> > > { label: "Category (17)" },
> > > { label: " Alpha (0)" },
> > > { label: " Beta" },
> > > { label: "Category (0)" },
> > > { label: " Delta" },
> > > { label: " Gamma" },
> > > { label: " Epsilon" }
> > > ];
> > >
> > > private function noCollections(data:Object):Boolean
> > > {
> > > if (data.label.indexOf("(0)") != -1)
> > > return true;
> > > return false;
> > > }
> > >
> > > ]]>
> > > </mx:Script>
> > > <mx:ComboBox dropdownFactory="DisabledItemsList"
> > dataProvider="{dp}"/>
> > > <local:DisabledItemsList dataProvider="{dp}"/>
> > > </mx:Application>
> > >
> > > DisabledItemsList.as
> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >
> > > package
> > > {
> > > import flash.events.MouseEvent;
> > > import flash.ui.Keyboard;
> > >
> > > import mx.controls.List;
> > > import mx.controls.listClasses.IListItemRenderer;
> > >
> > > /**
> > > * A List that uses a disableFunction to determine if an item
can
> be
> > > selected or not
> > > */
> > > public class DisabledItemsList extends List
> > > {
> > > public function DisabledItemsList()
> > > {
> > > super();
> > > }
> > >
> > > private function disabledFunction(data:Object):Boolean
> > > {
> > > if (data.label.indexOf("(0)") != -1)
> > > return true;
> > > return false;
> > > }
> > >
> > > /**
> > > * The function to apply that determines if the item
> > > is "disabled" or not.
> > > * Takes one argument, which is the data item
> > > * Returns true if item cannot be selected.
> > > */
> > > // public var disabledFunction:Function;
> > >
> > > override protected function drawItem(item:IListItemRenderer,
> > > selected:Boolean=false, highlighted:Boolean=false,
> > > caret:Boolean=false, transition:Boolean=false):void
> > > {
> > > if(disabledFunction(item.data))
> > > {
> > > item.enabled = false;
> > > selected = false;
> > > highlighted = false;
> > > }
> > > super.drawItem(item, selected, highlighted, caret, transition);
> > > }
> > >
> > > override protected function mouseEventToItemRenderer
> > > (event:MouseEvent):IListItemRenderer
> > > {
> > > var listItem:IListItemRenderer =
> > > super.mouseEventToItemRenderer(event);
> > > if (listItem)
> > > {
> > > if (listItem.data)
> > > {
> > > if (disabledFunction(listItem.data))
> > > {
> > > return null;
> > > }
> > > }
> > > }
> > > return listItem;
> > > }
> > >
> > > private var selectionUpward:Boolean;
> > >
> > > override protected function moveSelectionVertically(code:uint,
> > > shiftKey:Boolean,
> > > ctrlKey:Boolean):void
> > > {
> > > if (code == Keyboard.DOWN)
> > > selectionUpward = false;
> > > else
> > > selectionUpward = true;
> > > super.moveSelectionVertically(code, shiftKey,
> > > ctrlKey);
> > > }
> > >
> > > override protected function finishKeySelection():void
> > > {
> > > super.finishKeySelection();
> > >
> > > var i:int;
> > > var uid:String;
> > > var rowCount:int = listItems.length;
> > > var partialRow:int = (rowInfo[rowCount-1].y + rowInfo
> > > [rowCount-1].height >
> > > listContent.height) ? 1 : 0;
> > >
> > > var listItem:IListItemRenderer;
> > > listItem = listItems[caretIndex - verticalScrollPosition][0];
> > > if (listItem)
> > > {
> > > if (listItem.data);
> > > {
> > > if (disabledFunction(listItem.data))
> > > {
> > > // find another visible item
> > > that is enabled
> > > // assumes there is one that
> > > is fully visible
> > > rowCount = rowCount -
> > > partialRow;
> > > var idx:int = caretIndex -
> > > verticalScrollPosition;
> > > if (selectionUpward)
> > > {
> > > // look up;
> > > for (i = idx - 1; i
> > > >= 0; i--)
> > > {
> > > listItem =
> > > listItems[i][0];
> > > if (!
> > > disabledFunction(listItem.data))
> > > {
> > >
> > > selectedIndex = i - verticalScrollPosition;
> > >
> > > return;
> > > }
> > > }
> > > for (i = idx + 1; i <
> > > rowCount; i++)
> > > {
> > > listItem =
> > > listItems[i][0];
> > > if (!
> > > disabledFunction(listItem.data))
> > > {
> > >
> > > selectedIndex = i - verticalScrollPosition;
> > >
> > > return;
> > > }
> > > }
> > > }
> > > else
> > > {
> > > // look down;
> > > for (i = idx + 1; i <
> > > rowCount; i++)
> > > {
> > > listItem =
> > > listItems[i][0];
> > > if (!
> > > disabledFunction(listItem.data))
> > > {
> > >
> > > selectedIndex = i - verticalScrollPosition;
> > >
> > > return;
> > > }
> > > }
> > > for (i = idx - 1; i
> > > >= 0; i--)
> > > {
> > > listItem =
> > > listItems[i][0];
> > > if (!
> > > disabledFunction(listItem.data))
> > > {
> > >
> > > selectedIndex = i - verticalScrollPosition;
> > >
> > > return;
> > > }
> > > }
> > > }
> > > }
> > > }
> > > }
> > > }
> > > }
> > >
> > > }
> > >
> >
>