Ziul
Ziul

Reputation: 893

Spark spinner trigger click

So i was asked to trigger up/down spinner click with the keyboard, but i cant find where to dispatch the event...

This is what i have tried:

var item:Object=spinner.skin;
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

Any ideas?

Edit:I had to make shortcuts for datagrid row swapping.

if(e.keyCode==Keyboard.NUMPAD_ADD){
    spnOrder.value++;
    spnOrder.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
else if(e.keyCode==Keyboard.NUMPAD_SUBTRACT){
    spnOrder.value--;
    spnOrder.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}

The spinner has a generic handler which swaps rows on a data grid with the resulting value of the spinner, dispatching a click sounded like the cleanest solution to me.

edit2:

Click handler:

private function spnOrder_clickHandler(e:MouseEvent):void{
    var toIndex:int=spnOrder.value;
    var index:int=grid.selectedIndex;
    if(toIndex>-1 && toIndex<list.length && index>-1 && toIndex!=index){
        if(toIndex<index)
            list.addItemAt(list.removeItemAt(index-1),index)
        else
            list.addItemAt(list.removeItemAt(index+1),index);
        grid.setFocus();
        grid.setSelectedIndex(toIndex);
    }
    else{
        grid.setFocus();
        spnOrder.value=index;
    }
}

Spinner:

<s:Spinner 
    id="spnOrder"
    value="{grid.selectedIndex}"
    skinClass="skins.SpinnerInvertedSkin"
    click="spnOrder_clickHandler(event)" />

Upvotes: 0

Views: 118

Answers (1)

JeffryHouser
JeffryHouser

Reputation: 39408

Don't reference the incrementButton / decrementButton on the skin. Do so on the component class.

var item:Object=spinner;
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.incrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
item.decrementButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

The events were probably dispatching properly, but no event listeners were listening on the skin instance; so no changes are made to the underlying component.

Upvotes: 1

Related Questions